feat(all): Winlis生成后的内容,CA签名完成

pull/544/head
dazer007 2025-03-06 20:17:31 +08:00
parent 04fe1d26f0
commit 852b8f7a4f
16 changed files with 310 additions and 329 deletions

View File

@ -2,8 +2,10 @@ package com.neuhis.his.app.controller;
import cn.hutool.core.codec.Base64;
import com.neuhis.his.domain.vo.bjca.BjCaResult;
import com.neuhis.his.domain.vo.bjca.CaResultVo;
import com.neuhis.his.domain.vo.bjca.CaStartVo;
import com.neuhis.his.service.IBjCaService;
import com.neuhis.his.service.winlis.IWinLisService;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -27,14 +29,17 @@ import javax.annotation.Resource;
public class AppBjCaController {
@Resource
private IBjCaService bjCaService;
@Resource
private IWinLisService winLisService;
/**
* startAutoSign[id]
*/
private String autoSignSignDataId = "SD_4c6ec5f6-22e3-4fae-b2aa-681e5beacf1e";
private String autoSignSignDataId = "SD_892d8817-4a96-445c-a5c1-2eb9f334fecc";
@GetMapping("/startAutoSign")
@ApiOperation(value = "步骤A启动自动签名", notes = "步骤1、启动自动签名获取签名二维码让医师使用【协同签名】进行签名")
public AjaxResult bjcaAuto() {
//89003046 自动签未开启或已过期, 如果提示这个需要重新【协同签名】app
autoSignSignDataId = bjCaService.startAutoSign();
return AjaxResult.success(autoSignSignDataId);
}
@ -48,8 +53,16 @@ public class AppBjCaController {
@GetMapping("/createAndGetTssInfo")
@ApiOperation(value = "步骤C产生时间戳", notes = "步骤3、产生时间戳")
public AjaxResult createAndGetTssInfo() {
String caStartVo = bjCaService.createAndGetTssInfo( Base64.encode("aaaaa"));
public AjaxResult createAndGetTssInfo(String signature) {
String caStartVo = bjCaService.createAndGetTssInfo( Base64.encode("aaaaa"), signature);
return AjaxResult.success(caStartVo);
}
@GetMapping("/getWinLisCaInfo")
@ApiOperation(value = "获取Winlis的CA原文", notes = "获取Winlis的CA原文;生成CA信息签名结果、证书、时间戳")
public AjaxResult getWinLisCaInfo() {
//String caOriginText = winLisService.getWinLisCaOriginText("20250228", "WSW_caris200", "9999");
CaResultVo caResultVo = winLisService.generateBjCaInfo("20250228", "WSW_caris200", "9999", autoSignSignDataId);
return AjaxResult.success(caResultVo);
}
}

View File

@ -12,7 +12,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
/**
*
,,,,. las_rol_person
las_rol_person
*
* @author ruoyi
* @date 2025-03-06
@ -57,7 +57,7 @@ public class LasRolPerson extends BaseEntity
/** 手写签名 */
@Excel(name = "手写签名")
private String manuscript;
private byte[] manuscript;
/** (1)来自HIS等外部系统;(0)自行维护人员 */
@Excel(name = "(1)来自HIS等外部系统;(0)自行维护人员")
@ -119,7 +119,7 @@ public class LasRolPerson extends BaseEntity
/** 外语手写签名 */
@Excel(name = "外语手写签名")
private String enmanuscript;
private byte[] enmanuscript;
/** 外语姓名 */
@Excel(name = "外语姓名")

View File

@ -0,0 +1,31 @@
package com.neuhis.his.domain.vo.bjca;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* CAbase64id
*
* @author dazer
* @date 2025/3/6 18:54
**/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class CaResultVo extends CaStartVo {
/**
* base64ORINGIN_TEXT
*/
private String oriData;
/**
* : base64
*/
private String oriDataBase64;
/**
* TIMECIPHERTEXT
*/
private String timeciphertext;
}

View File

@ -17,15 +17,15 @@ import lombok.ToString;
@NoArgsConstructor
public class CaStartVo {
/**
* id,StartAutoSignSD_18eb25f8-3d15-4971-a60c-730c1480d837
* id,StartAutoSignSD_18eb25f8-3d15-4971-a60c-730c1480d837
*/
private String signDataId;
/**
* MEYCIQDvcy6/WHJ+8QS1S1Ja1Q9FBa6gtnboxwndyQpHBBbcaQIhAMeZjymkozFKm1MaD2xq/ L4JhW3gO5XTmGL6SO0MzZw
* PRIVATE_INFO/signatureMEYCIQDvcy6/WHJ+8QS1S1Ja1Q9FBa6gtnboxwndyQpHBBbcaQIhAMeZjymkozFKm1MaD2xq/ L4JhW3gO5XTmGL6SO0MzZw
*/
private String signResult;
/**
* MIIDAzCCAqagAwIBAgISXXXXXXXXXXXu4j9CUZ/w0w==
* CERTMIIDAzCCAqagAwIBAgISXXXXXXXXXXXu4j9CUZ/w0w==
*/
private String signCert;
}

View File

@ -1,12 +1,13 @@
package com.neuhis.his.mapper.winlis;
import com.neuhis.his.domain.entity.winlis.LasRolPerson;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
*
,,,,.Mapper
Mapper
*
* @author ruoyi
* @date 2025-03-06
@ -15,62 +16,15 @@ public interface LasRolPersonMapper
{
/**
*
,,,,.
*
* @param personid
,,,,.
* @return
,,,,.
*/
LasRolPerson selectLasRolPersonByPersonid(String personid);
LasRolPerson selectLasRolPersonByPersonid(@Param(value ="personid") String personid);
/**
*
,,,,.
*
* @param lasRolPerson
,,,,.
* @return
,,,,.
*/
List<LasRolPerson> selectLasRolPersonList(LasRolPerson lasRolPerson);
/**
*
,,,,.
*
* @param lasRolPerson
,,,,.
* @return
*/
int insertLasRolPerson(LasRolPerson lasRolPerson);
/**
*
,,,,.
*
* @param lasRolPerson
,,,,.
* @return
*/
int updateLasRolPerson(LasRolPerson lasRolPerson);
/**
*
,,,,.
*
* @param personid
,,,,.
* @return
*/
int deleteLasRolPersonByPersonid(String personid);
/**
*
,,,,.
*
* @param personids
* @return
*/
int deleteLasRolPersonByPersonids(String[] personids);
}

View File

@ -1,6 +1,7 @@
package com.neuhis.his.mapper.winlis;
import com.neuhis.his.domain.entity.winlis.LasRtResult;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -18,7 +19,7 @@ public interface LasRtResultMapper
* @param testdate
* @return
*/
List<LasRtResult> selectLasRtResultByTestdate(String testdate, String barcode, String machineid);
List<LasRtResult> selectLasRtResultByTestdate(@Param("testdate")String testdate,@Param("machineid") String machineid,@Param("sampleId") String sampleId);
/**
*

View File

@ -1,6 +1,7 @@
package com.neuhis.his.mapper.winlis;
import com.neuhis.his.domain.entity.winlis.LasSapSamplereg;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -20,7 +21,7 @@ public interface LasSapSampleregMapper
* @param testdate
* @return
*/
LasSapSamplereg selectLasSapSampleregByTestdate(String testdate, String barcode, String machineid);
LasSapSamplereg selectLasSapSampleregByTestdate(@Param("testdate")String testdate,@Param("machineid") String machineid,@Param("sampleId") String sampleId);
/**
*

View File

@ -32,5 +32,5 @@ public interface IBjCaService {
*
* @param oriDataBase64 base64
*/
String createAndGetTssInfo(String oriDataBase64);
String createAndGetTssInfo(String oriDataBase64, String signature);
}

View File

@ -76,7 +76,7 @@ public class BjCaServiceImpl implements IBjCaService {
}
@Override
public String createAndGetTssInfo(String oriDataBase64) {
public String createAndGetTssInfo(String oriDataBase64, String signature) {
//region 参数校验
if (StrUtil.isNotEmpty(oriDataBase64) && !Base64.isBase64(oriDataBase64)) {
throw new IllegalArgumentException("原文必须是base64编码");
@ -84,7 +84,8 @@ public class BjCaServiceImpl implements IBjCaService {
//endregion
Map<String, String> params = getBjCaCommonParams();
params.put("oriData", oriDataBase64);//数据原文oriData: 数据原文和自动签名接口里面传的数据原文保持一致就行, 待签数据(必须是 base64编码
params.put("attachCert", "false");//最终产生的时间戳是否带证书 (true/false)
params.put("attachCert", StrUtil.isNotEmpty(signature) ? "true" : "false");//最终产生的时间戳是否带证书 (true/false)
params.put("signature", signature);//最终产生的时间戳是否带证书 (true/false)
BjCaResult<CaCreateAndGetTssInfoVo> result = postBjCa(bjCaConfig.getServerTssInfo(), params, CaCreateAndGetTssInfoVo.class);
return result != null && result.isSuccess() ? result.getData().getTsResp() : "";
}

View File

@ -47,29 +47,32 @@ public class LasSapSampleregServiceImpl implements ILasSapSampleregService
*/
@Override
public LasSapSamplereg selectLasSapSampleregByTestdate(String testdate, String barcode, String machineid)
public LasSapSamplereg selectLasSapSampleregByTestdate(String testdate, String machineid, String sampleId)
{
return lasSapSampleregMapper.selectLasSapSampleregByTestdate(testdate, barcode, machineid);
return lasSapSampleregMapper.selectLasSapSampleregByTestdate(testdate, machineid, sampleId);
}
@Override
public LasSapSampleregVo selectLasSapSampleregVo(String testdate, String barcode, String machineid) {
public LasSapSampleregVo selectLasSapSampleregVo(String testdate, String machineid, String sampleId) {
//region 查询1条码信息 Winlis.las_sap_samplereg
LasSapSampleregVo vo = new LasSapSampleregVo();
LasSapSamplereg entity = lasSapSampleregMapper.selectLasSapSampleregByTestdate(testdate, barcode, machineid);
LasSapSamplereg entity = lasSapSampleregMapper.selectLasSapSampleregByTestdate(testdate, machineid, sampleId);
if (entity == null) {
return null;
}
BeanUtil.copyProperties(entity, vo);
//endregion
//region 查询2检验结果信息 Winlis.LAS_RT_RESULT
List<LasRtResult> rtResults = lasRtResultMapper.selectLasRtResultByTestdate(testdate, barcode, machineid);
List<LasRtResult> rtResults = lasRtResultMapper.selectLasRtResultByTestdate(testdate, machineid, sampleId);
vo.setRtResultList(rtResults);
//endregion
//region 查询3: 检验人员信息 Winlis.las_rol_person
String approverid = entity.getApproverid();
if (!StrUtil.isEmpty(approverid)) {
if (StrUtil.isNotEmpty(approverid)) {
LasRolPerson lasRolPerson = latestRolPersonMapper.selectLasRolPersonByPersonid(approverid);
Opt.of(lasRolPerson).ifPresent(en -> en.setCacardid(en.getCacardid()));
Opt.of(lasRolPerson).ifPresent(en -> vo.setCacardid(en.getCacardid()));
}
//endregion
return vo;

View File

@ -1,7 +1,15 @@
package com.neuhis.his.service.impl.winlis;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.neuhis.his.domain.entity.winlis.LasRtResult;
import com.neuhis.his.domain.vo.bjca.BjCaResult;
import com.neuhis.his.domain.vo.bjca.CaResultVo;
import com.neuhis.his.domain.vo.bjca.CaStartVo;
import com.neuhis.his.domain.vo.winlis.LasSapSampleregVo;
import com.neuhis.his.service.IBjCaService;
import com.neuhis.his.service.winlis.ILasSapSampleregService;
import com.neuhis.his.service.winlis.IWinLisService;
import com.ruoyi.common.annotation.DataSource;
@ -13,6 +21,8 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import static cn.hutool.core.date.DatePattern.NORM_DATETIME_PATTERN;
/**
* Winlis
*
@ -25,178 +35,237 @@ import java.util.List;
public class WinLisServiceImpl implements IWinLisService {
@Autowired
private ILasSapSampleregService lasSapSampleregService;
@Autowired
private IBjCaService bjCaService;
@Override
public String getLisCaOriginText(String testdate, String barcode, String machineid) {
LasSapSampleregVo regVo = lasSapSampleregService.selectLasSapSampleregVo(testdate, barcode, machineid);
if (regVo == null) {
public String getWinLisCaOriginText(String testdate, String machineid, String sampleId) {
LasSapSampleregVo reg = lasSapSampleregService.selectLasSapSampleregVo(testdate, machineid, sampleId);
if (reg == null) {
return "";
}
List<String> items = new ArrayList<>();
for (int i = 0; regVo.getRtResultList() != null && i < regVo.getRtResultList().size(); i++) {
String srcItem = "ITEMID:IL-6" +
",ITEMNAME:白介素6" +
",REPORTVALUE:5" +
",ORGVALUE:" +
",DESCVALUE:" +
",CUTOFF:" +
",ODVALUE:" +
",SCO:" +
",MEMOVALUE:" +
for (int i = 0; reg.getRtResultList() != null && i < reg.getRtResultList().size(); i++) {
LasRtResult rt = reg.getRtResultList().get(i);
String srcItem =
"ITEMID:"+strDef(rt.getItemid() )+
",ITEMNAME:"+strDef(rt.getItemname() )+
",REPORTVALUE:"+strDef(rt.getReportvalue() )+
",ORGVALUE:"+strDef(rt.getOrgvalue() )+
",DESCVALUE:"+strDef(rt.getDescvalue() )+
",CUTOFF:"+strDef(rt.getCutoff() )+
",ODVALUE:"+strDef(rt.getOdvalue() )+
",SCO:"+strDef(rt.getSco() )+
",MEMOVALUE:"+strDef(rt.getMemovalue() )+
",ALERTEXPLAIN:" + //ALERTEXPLAIN 不存在
",ALERTFLAG:5" +
",AUTOCONFIRMINFO:" +
",AUTOCONFIRMSIGN:" +
",BARCODE:1010449586" +
",Calfomula:" +
",CHECKSTATE:" +
",COMMTIME:2025-02-28 14:42:49" +
",ALERTFLAG:"+strDef(rt.getAlertflag() )+
",AUTOCONFIRMINFO:"+strDef(rt.getAutoconfirminfo() )+
",AUTOCONFIRMSIGN:"+strDef(rt.getAutoconfirmsign() )+
",BARCODE:"+strDef(rt.getBarcode() )+
",Calfomula:" +//Calfomula 无字段
",CHECKSTATE:"+strDef(rt.getCheckstate() )+
",COMMTIME:"+DateUtil.format(rt.getCommtime(), DatePattern.NORM_DATETIME_FORMAT)+//2025-02-28 14:42:49
",CONFIRMTIME:" +//CONFIRMTIME 不存在
",DOTNUM:-1" +//DOTNUM 不存在
",ENGNAME:bjs6" +
",EXECSQN:" +//las_sap_samplereg#EXECSQN
",TESTDATE:20250228" +
",MACHINEID:WSW_caris200" +
",HISITEMID:F00000019999" +
",LOINCID:IL-6" +
",SAMPLEID:9999" +
",PRINTSEQ:10000" +
",TESTTIME:2025-02-28 14:42:49" +
",RERUNVALUE:" +
",RESULTLIST:5" +
",VALUESRC:" +
",RERUNFLAG:" +
",RANGEINFO:0--7" +
",UNIT:pg/ml" +
",RESULTFLAG:Normal" +
",PATIENTID:" +
",PATIENTTYPE:其他" +
",SAMPLETYPE:血清" +
",TESTMACHINEID:" +
",RACKCUP:" +
",PRINTROW:1" +
",RANGELIMIT:" +
",METHOD: ";
",ENGNAME:"+strDef(rt.getEngname() )+
",EXECSQN:"+strDef(reg.getExecsqn() )+//las_sap_samplereg#EXECSQN
",TESTDATE:"+strDef(rt.getTestdate() )+
",MACHINEID:"+strDef(rt.getMachineid() )+
",HISITEMID:"+strDef(rt.getHisitemid() )+
",LOINCID:"+strDef(rt.getLoincid() )+
",SAMPLEID:"+strDef(rt.getSampleid() )+
",PRINTSEQ:"+strDef(rt.getPrintseq() )+
",TESTTIME:"+strDef(rt.getItemname() )+//2025-02-28 14:42:49
",RERUNVALUE:"+strDef(rt.getRerunvalue() )+
",RESULTLIST:"+strDef(rt.getResultlist() )+
",VALUESRC:"+strDef(rt.getValuesrc() )+
",RERUNFLAG:"+strDef(rt.getRerunflag() )+
",RANGEINFO:"+strDef(rt.getRangeinfo() )+
",UNIT:"+strDef(rt.getUnit() )+
",RESULTFLAG:"+strDef(rt.getResultflag() )+
",PATIENTID:"+strDef(rt.getPatientid() )+
",PATIENTTYPE:"+strDef(rt.getPatienttype() )+
",SAMPLETYPE:"+strDef(rt.getSampletype() )+
",TESTMACHINEID:"+strDef(rt.getTestmachineid() )+
",RACKCUP:"+strDef(rt.getRackcup() )+
",PRINTROW:"+strDef(rt.getPrintrow() )+
",RANGELIMIT:"+strDef(rt.getRangelimit() )+
",METHOD:"+strDef(rt.getMethod())
;
items.add(srcItem);
}
String srcRegData = "#REG:TESTDATE:20250228" + //reg.testdate
"|MACHINEID:WSW_caris200" +//reg.machineid
"|SAMPLEID:9999" +//reg.sampleid
"|BARCODE:1010449586" +//reg.barcode
"|PATIENTTYPE:其他" +//reg.barcode
"|PATIENTID:" +//reg.PATIENTID
"|PATIENTNAME:田斌" +//reg.PATIENTNAME
"|PATIENTSEX:PATIENTAGE:PATIENTAGEUNIT:" + //PATIENTSEX:女PATIENTAGE:52PATIENTAGEUNIT:岁,
"|DEPTNAME:" +
"|WARDNAME:" +
"|HISITEMIDLIST:F00000019999" +
"|HISITEMNAMELIST:[组套]白细胞介素6" +
"|EXECSQN:F00000019999+1010449586" +
"|ACCEPTERID:003259" +
"|ACCEPTERNAME:郭宇" +
"|ACCEPTTIME:2025-02-28 14:41:13" +
"|APPROVERID:003142" +
"|APPROVERNAME:雷杨犇" +
"|APPROVETIME:2025-02-28 17:29:40" +
"|BARCODEMEMO:" +
"|BARPRTINTTIME:0001-01-01 00:00:00" + //字段单次写错了
"|BIRTHDAY:0001-01-01|" +
"CHECKTIME:2025-02-28 14:41:13" +
"|COMMTIME:0001-01-01 00:00:00" + //COMMTIME 没有字段
"|CONFIRMSTATE:1" +
"|ALERTSTATE:0" +
"|CONFIRMTIMELIMIT:0" + //CONFIRMTIMELIMIT 没有字段
"|DEPTID:" +
"|DIAGNOSIS:" +
"|DIAGNOSISID:" +
"|DOCTORID:" +
"|DOCTORNAME:" +
"|DOCTORTEL:" + //DOCTORTEL 没有字段
"|DOCUMENTID:" +
"|DOCUMENTTIME:0001-01-01 00:00:00" +
"|DOCUMNETNAME:" +//字段单次写错了documentname
String srcRegData = "#REG:TESTDATE:"+ strDef(reg.getTestdate() )+ //reg.testdate 20250227
"|MACHINEID:"+ strDef(reg.getMachineid() )+//reg.machineid, WSW_caris200
"|SAMPLEID:"+ strDef(reg.getMachineid() )+//reg.sampleid 9999
"|BARCODE:"+ strDef(reg.getBarcode() )+//reg.barcode 1010449586
"|PATIENTTYPE:" + strDef(reg.getPatienttype() )+//reg.patienttype 其他
"|PATIENTID:"+ strDef(reg.getPatientid() )+//reg.PATIENTID
"|PATIENTNAME:"+ strDef(reg.getPatientname() )+//reg.PATIENTNAME 田斌
"|PATIENTSEX"+ strDef(reg.getPatientsex())+":PATIENTAGE"+ strDef(reg.getPatientage())+":PATIENTAGEUNIT:"+ strDef(reg.getPatientageunit())+ //PATIENTSEX:女PATIENTAGE:52PATIENTAGEUNIT:岁,
"|DEPTNAME:"+ strDef(reg.getDeptname() )+
"|WARDNAME:"+ strDef(reg.getWardname() )+
"|HISITEMIDLIST:"+ strDef(reg.getHisitemidlist())+ //F00000019999
"|HISITEMNAMELIST:"+ strDef(reg.getHisitemnamelist())+ //[组套]白细胞介素6
"|EXECSQN:"+ strDef(reg.getExecsqn() )+ //F00000019999+1010449586
"|ACCEPTERID:"+ strDef(reg.getAccepterid() )+//003259
"|ACCEPTERNAME:"+ strDef(reg.getAcceptername() )+//郭宇
"|ACCEPTTIME:"+ DateUtil.format(reg.getAccepttime(), DatePattern.NORM_DATETIME_FORMAT)+//2025-02-28 14:41:13
"|APPROVERID:" + strDef(reg.getApproverid())+//003142
"|APPROVERNAME:"+ strDef(reg.getApprovername())+//雷杨犇
"|APPROVETIME:"+DateUtil.format(reg.getApprovetime(), DatePattern.NORM_DATETIME_FORMAT)+//2025-02-28 17:29:40
"|BARCODEMEMO:"+ strDef(reg.getBarcodememo() )+
"|BARPRTINTTIME:"+DateUtil.format(reg.getBarprinttime(), DatePattern.NORM_DATETIME_FORMAT)+ //字段单次写错了 0001-01-01 00:00:00
"|BIRTHDAY:"+DateUtil.format(reg.getBirthday(), DatePattern.NORM_DATE_FORMAT)+//0001-01-01
"|CHECKTIME:"+DateUtil.format(reg.getChecktime(), DatePattern.NORM_DATE_FORMAT)+ //2025-02-28 14:41:13
"|COMMTIME:" + //COMMTIME 没有字段 0001-01-01 00:00:00
"|CONFIRMSTATE:" +strDef(reg.getConfirmstate())+ //1
"|ALERTSTATE:"+ strDef(reg.getAlertstate() )+//0
"|CONFIRMTIMELIMIT:"+ //CONFIRMTIMELIMIT 没有字段 0
"|DEPTID:"+ strDef(reg.getDeptid() )+
"|DIAGNOSIS:"+ strDef(reg.getDiagnosis() )+
"|DIAGNOSISID:"+ strDef(reg.getDiagnosisid() )+
"|DOCTORID:"+ strDef(reg.getDoctorid() )+
"|DOCTORNAME:" + strDef(reg.getDoctorname())+
"|DOCTORTEL:"+ //DOCTORTEL 没有字段
"|DOCUMENTID:"+ strDef(reg.getDocumentid() )+
"|DOCUMENTTIME:"+DateUtil.format(reg.getDocumenttime(), DatePattern.NORM_DATETIME_FORMAT) +//0001-01-01 00:00:00
"|DOCUMNETNAME:"+ strDef(reg.getDocumentname() )+//字段单次写错了documentname
"|EMC:0" +
"|EXECDEPTID:1044" +
"|EXECDEPTNAME:医学检验科" +
"|EXECSQN2:" +
"|GROUPID:02" +
"|EXECDEPTID:"+ strDef(reg.getExecdeptid() )+//1044
"|EXECDEPTNAME:"+ strDef(reg.getExecdeptname() )+//医学检验科
"|EXECSQN2:"+ strDef(reg.getExecsqn2() )+
"|GROUPID:"+ strDef(reg.getGroupid() )+//02
"|GROUPNAME:" +//GROUPNAME 没有字段
"|GROUPTEL:" +//GROUPTEL 没有字段
"|HISITEMPRICE:43" +
"|HOSPITALID:" +
"|LSPTESTFORM:" +
"|INCEPTORID:" +
"|INCEPTORNAME:" +
"|INCEPTTIME:2025-02-28 14:41:13" +
"|HISITEMPRICE:"+ strDef(reg.getHisitemprice() )+//43
"|HOSPITALID:" + strDef(reg.getHospitalid())+
"|LSPTESTFORM:" + strDef(reg.getLsptestform())+
"|INCEPTORID:"+ strDef(reg.getInceptorid() )+
"|INCEPTORNAME:"+DateUtil.format(reg.getIncepttime(), DatePattern.NORM_DATETIME_FORMAT)+
"|INCEPTTIME:"+DateUtil.format(reg.getIncepttime(), DatePattern.NORM_DATETIME_FORMAT) +//2025-02-28 14:41:13
"|MACHINENAME:" +//MACHINENAME 没有字段
"|MEMO:" +
"|MENSTRUALCYCLE:" +
"|MIXCODE:" +
"|NURSEID:" +
"|NURSENAME:" +
"|ORDERTIME:2025-02-28 14:41:13" +
"|PASSPORTNO:" +
"|PATIENTBEDNO:" +
"|PATIENTID2:" +
"|PATIENTID3:" +
"|PATIENTIDENNO:" +
"|PATIENTSEQ:" +
"|PATIENTSITE:" +
"|PATIENTRACE:" +
"|PATIENTTEL:" +
"|PRINTEDTIME:0001-01-01 00:00:00" +
"|PRINTERID:" +
"|PRINTERNAME:" +
"|REPORTTIME:0001-01-01 00:00:00" +
"|RESULTTIME:0001-01-01 00:00:00" +
"|SAMPLEGETID:" +
"|SAMPLEGETNAME:" +
"|SAMPLEPOSITION:" +
"|SAMPLESTATE:" +
"|SENDERID:" +
"|SENDERNAME:" +
"|SENDFORMID:" +
"|SAMPLETIME:0001-01-01 00:00:00" +
"|SENDTIME:0001-01-01 00:00:00" +
"|TESTTYPE:" +
"|MEMO:" +strDef(reg.getMemo())+
"|MENSTRUALCYCLE:" +strDef(reg.getMenstrualcycle())+
"|MIXCODE:"+strDef(reg.getMixcode() )+
"|NURSEID:"+strDef(reg.getNurseid() )+
"|NURSENAME:"+strDef(reg.getNursename() )+
"|ORDERTIME:"+DateUtil.format(reg.getOrdertime(), DatePattern.NORM_DATETIME_FORMAT)+//2025-02-28 14:41:13
"|PASSPORTNO:" +strDef(reg.getPassportno())+
"|PATIENTBEDNO:" +strDef(reg.getPatientbedno())+
"|PATIENTID2:" +strDef(reg.getPatientid2())+
"|PATIENTID3:"+strDef(reg.getPatientid3() )+
"|PATIENTIDENNO:"+strDef(reg.getPatientidenno() )+
"|PATIENTSEQ:" +strDef(reg.getPatientseq())+
"|PATIENTSITE:" +strDef(reg.getPatientsite())+
"|PATIENTRACE:"+strDef(reg.getPatientrace() )+
"|PATIENTTEL:"+strDef(reg.getPatienttel() )+
"|PRINTEDTIME:"+DateUtil.format(reg.getPrintedtime(), DatePattern.NORM_DATETIME_FORMAT)+//0001-01-01 00:00:00
"|PRINTERID:"+strDef(reg.getPatientid() )+
"|PRINTERNAME:"+strDef(reg.getPrintername() )+
"|REPORTTIME:"+DateUtil.format(reg.getReporttime(), DatePattern.NORM_DATETIME_FORMAT) +//0001-01-01 00:00:00
"|RESULTTIME:"+DateUtil.format(reg.getResulttime(), DatePattern.NORM_DATETIME_FORMAT) +//0001-01-01 00:00:00
"|SAMPLEGETID:"+strDef(reg.getSamplegetid()) +
"|SAMPLEGETNAME:"+strDef(reg.getSamplegetname()) +
"|SAMPLEPOSITION:"+strDef(reg.getSampleposition()) +
"|SAMPLESTATE:"+strDef(reg.getSamplestate()) +
"|SENDERID:"+strDef(reg.getSenderid()) +
"|SENDERNAME:"+strDef(reg.getSendername()) +
"|SENDFORMID:"+strDef(reg.getSenderid()) +
"|SAMPLETIME:"+DateUtil.format(reg.getSampletime(), DatePattern.NORM_DATETIME_FORMAT)+//0001-01-01 00:00:00
"|SENDTIME:"+DateUtil.format(reg.getSendtime(), DatePattern.NORM_DATETIME_FORMAT)+//0001-01-01 00:00:00
"|TESTTYPE:" +strDef(reg.getTesttype() )+
"|TESTTYPEEXTEND:" +
"|WARDID:" +
"|TRANSLATIONINFO:" +
"|URINEQTY:" +
"|WARDPHONE:" +//WARDPHONE 没有字段
"|ISGCP:0" +
"|ISHIGHRISK:0" +
"|IsLSPReApproved:0" +//IsLSPReApproved 没有字段
"|ISREJECT:0" +//ISREJECT 没有字段
"|PRINTSTATE:0" +
"|ACTUALITEMCOUNT:1" +
"|AUTOCONFIRMINFO:" +
"|BARCODE2:" +
"|DESCVALUE:" + //DESCVALUE 没有字段
"|EXTRAINFO:怀孕次数|^^^孕周|^^^孕周天|^^^体重|^^^多胞胎|^^^吸烟|^^^胰岛素依赖|^^^人种|^^^" + //有该字段
"|PICTUREPATH:" +
"|PLANITEMCOUNT:1" +
"|RACKCUP:" +
"|STATE:0000000000000000" +
"|STATE2:00000000000100000000000000000000" +
"|TESTEDITEMCOUNT:1" +
"|SAMPLETYPE:血清" +
"|LISMEMO:测试DESCVALUE:" +
"|DESC1:" +
"|WARDID:" +strDef(reg.getWardid() )+
"|TRANSLATIONINFO:" +strDef(reg.getTranslationinfo() )+
"|URINEQTY:" +strDef(reg.getUrineqty() )+
"|WARDPHONE:"+//WARDPHONE 没有字段
"|ISGCP:" +strDef(reg.getIsgcp() )+
"|ISHIGHRISK:"+strDef(reg.getIshighrisk()) +
"|IsLSPReApproved:" +//IsLSPReApproved 没有字段
"|ISREJECT:" +//ISREJECT 没有字段
"|PRINTSTATE:" +strDef(reg.getPrintstate() )+
"|ACTUALITEMCOUNT:"+strDef(reg.getActualitemcount()) +
"|AUTOCONFIRMINFO:"+strDef(reg.getAutoconfirminfo() )+
"|BARCODE2:" +strDef(reg.getBarcode2() )+
"|DESCVALUE:"+ //DESCVALUE 没有字段
"|EXTRAINFO:" +strDef(reg.getExtrainfo() )+ //有该字段 怀孕次数|^^^孕周|^^^孕周天|^^^体重|^^^多胞胎|^^^吸烟|^^^胰岛素依赖|^^^人种|^^^
"|PICTUREPATH:"+
"|PLANITEMCOUNT:"+strDef(reg.getPlanitemcount()) +//1
"|RACKCUP:" +strDef(reg.getRackcup() )+
"|STATE:"+strDef(reg.getState() )+ //0000000000000000
"|STATE2:"+strDef(reg.getState2()) +//00000000000100000000000000000000
"|TESTEDITEMCOUNT:" +strDef(reg.getTesteditemcount() )+//1
"|SAMPLETYPE:" +strDef(reg.getSampletype() )+//血清
"|LISMEMO::" +strDef(reg.getLismemo() )+//测试DESCVALUE
"|DESC1:" +//DESC1
"|DESC2:" +//DESC2 没有字段
"|MorphologyDesc1:" +//MorphologyDesc1 没有字段
"|MorphologyDesc2:" +//MorphologyDesc2 没有字段
"|MorphologyDesc3:" +//MorphologyDesc3 没有字段
"|MorphologyDesc4:" +//MorphologyDesc4 没有字段
//"|#RESULT:ITEMID:IL-6,ITEMNAME:白介素6,REPORTVALUE:5,ORGVALUE:,DESCVALUE:,CUTOFF:,ODVALUE:,SCO:,MEMOVALUE:,ALERTEXPLAIN:,ALERTFLAG:5,AUTOCONFIRMINFO:,AUTOCONFIRMSIGN:,BARCODE:1010449586,Calfomula:,CHECKSTATE:,COMMTIME:2025-02-28 14:42:49,CONFIRMTIME:,DOTNUM:-1,ENGNAME:bjs6,EXECSQN:,TESTDATE:20250228,MACHINEID:WSW_caris200,HISITEMID:F00000019999,LOINCID:IL-6,SAMPLEID:9999,PRINTSEQ:10000,TESTTIME:2025-02-28 14:42:49,RERUNVALUE:,RESULTLIST:5,VALUESRC:,RERUNFLAG:,RANGEINFO:0--7,UNIT:pg/ml,RESULTFLAG:Normal,PATIENTID:,PATIENTTYPE:其他,SAMPLETYPE:血清,TESTMACHINEID:,RACKCUP:,PRINTROW:1,RANGELIMIT:,METHOD:" +
"|#RESULT:" + StrUtil.join("|", items) +
"|#APPROVER:PERSONID:003142" +//approverid
"|PERSONNAME:" + "" +//approvername
"|CACARDID:" + ""; //身份证号码, select t.cacardid from las_rol_person t where t.personid = '003142'
log.info("开始生成代签名原文\n" +
"testdate=" + testdate + "\n"+
"barcode=" + barcode + "\n"+
"machineid" + machineid + "\n"+
"生成原文:" + srcRegData);
"|#RESULT:" + StrUtil.join("|", items)+
"|#APPROVER:PERSONID:"+strDef(reg.getApproverid()) +//approverid
"|PERSONNAME:"+strDef(reg.getApprovername()) +//approvername
"|CACARDID:"+strDef(reg.getCacardid()); //身份证号码, select t.cacardid from las_rol_person t where t.personid = '003142'
log.info("开始生成代签名原文\n" +
"testdate=" + testdate + "\n"+
"machineid" + machineid + "\n"+
"sampleId=" + sampleId + "\n"+
"生成原文:" + srcRegData);
//#REG:TESTDATE:20250228|MACHINEID:WSW_caris200|SAMPLEID:WSW_caris200|BARCODE:1010449586|PATIENTTYPE:其他|PATIENTID:null|PATIENTNAME:田斌|PATIENTSEXnull:PATIENTAGEnull:PATIENTAGEUNIT:null|DEPTNAME:null|WARDNAME:null|HISITEMIDLIST:F00000019999|HISITEMNAMELIST:[组套]白细胞介素6|EXECSQN:F00000019999+1010449586|ACCEPTERID:003259|ACCEPTERNAME:郭宇|ACCEPTTIME:2025-02-28 14:41:13|APPROVERID:null|APPROVERNAME:null|APPROVETIME:null|BARCODEMEMO:null|BARPRTINTTIME:2025-02-28 14:41:13|BIRTHDAY:0001-01-01|CHECKTIME:2025-02-28|COMMTIME:|CONFIRMSTATE:2|ALERTSTATE:null|CONFIRMTIMELIMIT:|DEPTID:null|DIAGNOSIS:null|DIAGNOSISID:null|DOCTORID:null|DOCTORNAME:null|DOCTORTEL:|DOCUMENTID:null|DOCUMENTTIME:null|DOCUMNETNAME:null|EMC:0|EXECDEPTID:1044|EXECDEPTNAME:医学检验科|EXECSQN2:null|GROUPID:02|GROUPNAME:|GROUPTEL:|HISITEMPRICE:43|HOSPITALID:null|LSPTESTFORM:00000000000000000000000000000000|INCEPTORID:null|INCEPTORNAME:Fri Feb 28 14:41:13 CST 2025|INCEPTTIME:2025-02-28 14:41:13|MACHINENAME:|MEMO:null|MENSTRUALCYCLE:null|MIXCODE:null|NURSEID:null|NURSENAME:null|ORDERTIME:2025-02-28 14:41:13|PASSPORTNO:null|PATIENTBEDNO:null|PATIENTID2:null|PATIENTID3:null|PATIENTIDENNO:null|PATIENTSEQ:null|PATIENTSITE:null|PATIENTRACE:null|PATIENTTEL:null|PRINTEDTIME:null|PRINTERID:null|PRINTERNAME:null|REPORTTIME:0001-01-01 00:00:00|RESULTTIME:null|SAMPLEGETID:null|SAMPLEGETNAME:null|SAMPLEPOSITION:null|SAMPLESTATE:null|SENDERID:null|SENDERNAME:null|SENDFORMID:null|SAMPLETIME:0001-01-01 00:00:00|SENDTIME:0001-01-01 00:00:00|TESTTYPE:null|TESTTYPEEXTEND:|WARDID:null|TRANSLATIONINFO:null|URINEQTY:null|WARDPHONE:|ISGCP:0|ISHIGHRISK:0|IsLSPReApproved:|ISREJECT:|PRINTSTATE:0|ACTUALITEMCOUNT:1|AUTOCONFIRMINFO:null|BARCODE2:null|DESCVALUE:|EXTRAINFO:怀孕次数|^^^孕周|^^^孕周天|^^^体重|^^^多胞胎|^^^吸烟|^^^胰岛素依赖|^^^人种|^^^|PICTUREPATH:|PLANITEMCOUNT:1|RACKCUP:null|STATE:0000000000000000|STATE2:00000000000100000000000000000000|TESTEDITEMCOUNT:1|SAMPLETYPE:血清|LISMEMO::测试|DESC1:|DESC2:|MorphologyDesc1:|MorphologyDesc2:|MorphologyDesc3:|MorphologyDesc4:
// |#RESULT:ITEMID:IL-6,ITEMNAME:白介素6,REPORTVALUE:5,ORGVALUE:null,DESCVALUE:null,CUTOFF:null,ODVALUE:null,SCO:null,MEMOVALUE:null,ALERTEXPLAIN:,ALERTFLAG:null,AUTOCONFIRMINFO:null,AUTOCONFIRMSIGN:null,BARCODE:1010449586,Calfomula:,CHECKSTATE:null,COMMTIME:Fri Feb 28 14:42:49 CST 2025,CONFIRMTIME:,DOTNUM:-1,ENGNAME:bjs6,EXECSQN:F00000019999+1010449586,TESTDATE:20250228,MACHINEID:WSW_caris200,HISITEMID:F00000019999,LOINCID:IL-6,SAMPLEID:9999,PRINTSEQ:10000,TESTTIME:白介素6,RERUNVALUE:null,RESULTLIST:5,VALUESRC:null,RERUNFLAG:null,RANGEINFO:0--7,UNIT:pg/ml,RESULTFLAG:null,PATIENTID:null,PATIENTTYPE:其他,SAMPLETYPE:血清,TESTMACHINEID:null,RACKCUP:null,PRINTROW:1,RANGELIMIT:null,METHOD:null
// |#APPROVER:PERSONID:null|PERSONNAME:null|CACARDID:null
return srcRegData;
}
@Override
public CaResultVo generateBjCaInfo(String testdate, String machineid, String sampleId, String autoSignSignDataId) {
//region 1、获取等待签名的原文
String originText = getWinLisCaOriginText(testdate, machineid, sampleId);
if (StrUtil.isEmpty(originText)) {
return null;
}
//endregion
//region 2、北京CA自动签名
BjCaResult<CaStartVo> autoSignRe = bjCaService.autoSign(autoSignSignDataId, Base64.encode(originText));
if (autoSignRe == null || !autoSignRe.isSuccess()) {
return null;
}
//endregion
//region 3、北京CA获取带有证书的时间戳
String signature = autoSignRe.getData().getSignResult();
String timestampWithCert = bjCaService.createAndGetTssInfo(Base64.encode(originText), signature);
if (timestampWithCert == null) {
return null;
}
//endregion
//region 4、返回结果
CaResultVo caResultVo = new CaResultVo();
caResultVo.setOriData(originText);
caResultVo.setOriDataBase64(Base64.encode(originText));
caResultVo.setSignDataId(autoSignSignDataId);//接口1出参需要再手机上面签署
caResultVo.setSignResult(signature);
caResultVo.setSignCert(autoSignRe.getData().getSignCert());
caResultVo.setTimeciphertext(timestampWithCert);
//endregion
return caResultVo;
}
private String strDef(String str) {
if ("null".equalsIgnoreCase(str)) {
return "";
}
return StrUtil.emptyToDefault(str, "");
}
private String strDef(Long str) {
if (str == null) {
return "";
}
return str.toString();
}
}

View File

@ -23,7 +23,7 @@ public interface ILasSapSampleregService
* @return
*/
LasSapSamplereg selectLasSapSampleregByTestdate(String testdate, String barcode, String machineid);
LasSapSamplereg selectLasSapSampleregByTestdate(String testdate, String machineid, String sampleId);
/**
*
@ -31,7 +31,7 @@ public interface ILasSapSampleregService
* @param barcode
* @param machineid
*/
LasSapSampleregVo selectLasSapSampleregVo(String testdate, String barcode, String machineid);
LasSapSampleregVo selectLasSapSampleregVo(String testdate, String machineid, String sampleId);
/**
*

View File

@ -1,5 +1,7 @@
package com.neuhis.his.service.winlis;
import com.neuhis.his.domain.vo.bjca.CaResultVo;
/**
* Winlis
*
@ -8,11 +10,16 @@ package com.neuhis.his.service.winlis;
**/
public interface IWinLisService {
/**
* winlis.las_sap_cadata
* WinlisCAWinlis.las_sap_samplereg+Winlis.LAS_RT_RESULT
* @param testdate
* @param barcode
* @param machineid id
* @param sampleId
* @return ORINGIN_TEXT
*/
String getLisCaOriginText(String testdate, String barcode, String machineid);
String getWinLisCaOriginText(String testdate, String machineid, String sampleId);
/**
* CA
*/
CaResultVo generateBjCaInfo(String testdate, String machineid, String sampleId, String autoSignSignDataId);
}

View File

@ -68,105 +68,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectLasRolPersonByPersonid" parameterType="String" resultMap="LasRolPersonResult">
<include refid="selectLasRolPersonVo"/>
where personid = #{personid}
where personid = #{personid} and rownum = 1
</select>
<insert id="insertLasRolPerson" parameterType="com.neuhis.his.domain.entity.winlis.LasRolPerson" useGeneratedKeys="true" keyProperty="personid">
insert into las_rol_person
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="personname != null">personname,</if>
<if test="loginname != null">loginname,</if>
<if test="loginpass != null">loginpass,</if>
<if test="testerpass != null">testerpass,</if>
<if test="groupid != null">groupid,</if>
<if test="roleid != null">roleid,</if>
<if test="logingroup != null">logingroup,</if>
<if test="manuscript != null">manuscript,</if>
<if test="issourcehis != null">issourcehis,</if>
<if test="isopenca != null">isopenca,</if>
<if test="isenabled != null">isenabled,</if>
<if test="begindate != null">begindate,</if>
<if test="enddate != null">enddate,</if>
<if test="applylimit != null">applylimit,</if>
<if test="persontype != null">persontype,</if>
<if test="cacardid != null">cacardid,</if>
<if test="isreadedftpcon != null">isreadedftpcon,</if>
<if test="pswerrcount != null">pswerrcount,</if>
<if test="islock != null">islock,</if>
<if test="loginboardtime != null">loginboardtime,</if>
<if test="testerboardtime != null">testerboardtime,</if>
<if test="logingrouprole != null">logingrouprole,</if>
<if test="enmanuscript != null">enmanuscript,</if>
<if test="enpersonname != null">enpersonname,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="personname != null">#{personname},</if>
<if test="loginname != null">#{loginname},</if>
<if test="loginpass != null">#{loginpass},</if>
<if test="testerpass != null">#{testerpass},</if>
<if test="groupid != null">#{groupid},</if>
<if test="roleid != null">#{roleid},</if>
<if test="logingroup != null">#{logingroup},</if>
<if test="manuscript != null">#{manuscript},</if>
<if test="issourcehis != null">#{issourcehis},</if>
<if test="isopenca != null">#{isopenca},</if>
<if test="isenabled != null">#{isenabled},</if>
<if test="begindate != null">#{begindate},</if>
<if test="enddate != null">#{enddate},</if>
<if test="applylimit != null">#{applylimit},</if>
<if test="persontype != null">#{persontype},</if>
<if test="cacardid != null">#{cacardid},</if>
<if test="isreadedftpcon != null">#{isreadedftpcon},</if>
<if test="pswerrcount != null">#{pswerrcount},</if>
<if test="islock != null">#{islock},</if>
<if test="loginboardtime != null">#{loginboardtime},</if>
<if test="testerboardtime != null">#{testerboardtime},</if>
<if test="logingrouprole != null">#{logingrouprole},</if>
<if test="enmanuscript != null">#{enmanuscript},</if>
<if test="enpersonname != null">#{enpersonname},</if>
</trim>
</insert>
<update id="updateLasRolPerson" parameterType="com.neuhis.his.domain.entity.winlis.LasRolPerson">
update las_rol_person
<trim prefix="SET" suffixOverrides=",">
<if test="personname != null">personname = #{personname},</if>
<if test="loginname != null">loginname = #{loginname},</if>
<if test="loginpass != null">loginpass = #{loginpass},</if>
<if test="testerpass != null">testerpass = #{testerpass},</if>
<if test="groupid != null">groupid = #{groupid},</if>
<if test="roleid != null">roleid = #{roleid},</if>
<if test="logingroup != null">logingroup = #{logingroup},</if>
<if test="manuscript != null">manuscript = #{manuscript},</if>
<if test="issourcehis != null">issourcehis = #{issourcehis},</if>
<if test="isopenca != null">isopenca = #{isopenca},</if>
<if test="isenabled != null">isenabled = #{isenabled},</if>
<if test="begindate != null">begindate = #{begindate},</if>
<if test="enddate != null">enddate = #{enddate},</if>
<if test="applylimit != null">applylimit = #{applylimit},</if>
<if test="persontype != null">persontype = #{persontype},</if>
<if test="cacardid != null">cacardid = #{cacardid},</if>
<if test="isreadedftpcon != null">isreadedftpcon = #{isreadedftpcon},</if>
<if test="pswerrcount != null">pswerrcount = #{pswerrcount},</if>
<if test="islock != null">islock = #{islock},</if>
<if test="loginboardtime != null">loginboardtime = #{loginboardtime},</if>
<if test="testerboardtime != null">testerboardtime = #{testerboardtime},</if>
<if test="logingrouprole != null">logingrouprole = #{logingrouprole},</if>
<if test="enmanuscript != null">enmanuscript = #{enmanuscript},</if>
<if test="enpersonname != null">enpersonname = #{enpersonname},</if>
</trim>
where personid = #{personid}
</update>
<delete id="deleteLasRolPersonByPersonid" parameterType="String">
delete from las_rol_person where personid = #{personid}
</delete>
<delete id="deleteLasRolPersonByPersonids" parameterType="String">
delete from las_rol_person where personid in
<foreach item="personid" collection="array" open="(" separator="," close=")">
#{personid}
</foreach>
</delete>
</mapper>

View File

@ -93,6 +93,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectLasRtResultByTestdate" parameterType="String" resultMap="LasRtResultResult">
<include refid="selectLasRtResultVo"/>
where testdate = #{testdate} and barcode = #{barcode} and machineid = #{machineid}
where testdate = #{testdate} and machineid = #{machineid} and sampleid = #{sampleId}
</select>
</mapper>

View File

@ -210,6 +210,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectLasSapSampleregByTestdate" parameterType="String" resultMap="LasSapSampleregResult">
<include refid="selectLasSapSampleregVo"/>
where testdate = #{testdate} and barcode = #{barcode} and machineid = #{machineid}
where testdate = #{testdate} and machineid = #{machineid} and sampleid = #{sampleId}
</select>
</mapper>