feat(all): bjca三个接口完成,待调试

pull/544/head
dazer007 2025-03-04 18:57:00 +08:00
parent 52ea25474c
commit 7da0ffc2f7
15 changed files with 409 additions and 15 deletions

View File

@ -3,6 +3,7 @@ package com.neuhis.his.app.controller;
import com.neuhis.his.service.IBjCaService;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@ -25,8 +26,8 @@ public class AppBjCaController {
private IBjCaService bjCaService;
@GetMapping("/startAutoSign")
@ApiOperation(value = "启动自动签名", notes = "启动自动签名")
public AjaxResult bjcaAuto() {
bjCaService.startAutoSign();
return AjaxResult.success("成功");
return AjaxResult.success(bjCaService.startAutoSign());
}
}

View File

@ -0,0 +1,25 @@
package com.neuhis.his.domain.vo.bjca;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.util.ClassUtils;
/**
*
*
* @author dazer
* @date 2025/3/4 15:29
**/
@Getter
@Setter
@NoArgsConstructor
public class BjCaResult<T> {
private Long status;
private String message;
private T data;
public boolean isSuccess() {
return status != null && status == 200;
}
}

View File

@ -0,0 +1,23 @@
package com.neuhis.his.domain.vo.bjca;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
/**
*
*
* @author dazer
* @date 2025/3/4 15:44
**/
@Getter
@Setter
@NoArgsConstructor
public class CaStartAutoSignVo implements Serializable {
/**
* ID
*/
private String signDataId;
}

View File

@ -0,0 +1,4 @@
/**
* CA
*/
package com.neuhis.his.domain.vo.bjca;

View File

@ -0,0 +1,10 @@
package com.neuhis.his.mapper;
import java.util.List;
import java.util.Map;
public interface Db3DataMapper {
//List<VpComPatientinfo> selectList();
List<Map<String,Object>> execQuery(String sql);
//String test();
}

View File

@ -48,6 +48,8 @@ public class OracleSlaveDataAutoPushService {
VpMessageRecordService db1vpMessageRecordService;
@Resource(name = "Db2")
VpMessageRecordService db2vpMessageRecordService;
@Resource(name = "Db3")
VpMessageRecordService db3vpMessageRecordService;
private String url;
@ -136,6 +138,8 @@ public class OracleSlaveDataAutoPushService {
db1vpMessageRecordService.insertOrUpdateByPrimaryKey(vpMessageRecord);
else if ("2".equals(bizApi.getDb()))
db2vpMessageRecordService.insertOrUpdateByPrimaryKey(vpMessageRecord);
else if ("3".equals(bizApi.getDb()))
db3vpMessageRecordService.insertOrUpdateByPrimaryKey(vpMessageRecord);
else
vpMessageRecordService.insertOrUpdateByPrimaryKey(vpMessageRecord);

View File

@ -0,0 +1,14 @@
package com.neuhis.his.service;
import com.neuhis.his.domain.entity.VpComPatientinfo;
import java.util.List;
import java.util.Map;
public interface Db3DataService {
List<VpComPatientinfo> selectList();
List<Map<String,Object>> execQuery(String sql);
}

View File

@ -1,18 +1,21 @@
package com.neuhis.his.service;
/**
* <pre>
* CA
* 1 3.4.3.1 (startAutoSign)
* 2 3.4.3.3 (autoSign)signResultsignCert
* 3 3.4.7.1 (createAndGetTssInfo) oriData?
* </pre>
* @author dazer
* @date 2025/3/3 19:26
**/
public interface IBjCaService {
/**
*
* @return signDataId
*/
void startAutoSign();
String startAutoSign();
/**
*
* @param signDataId startAutoSignsignDataId

View File

@ -1,6 +1,9 @@
package com.neuhis.his.service.impl;
import com.alibaba.fastjson.JSON;
import com.neuhis.his.common.config.BjCaConfig;
import com.neuhis.his.domain.vo.bjca.BjCaResult;
import com.neuhis.his.domain.vo.bjca.CaStartAutoSignVo;
import com.neuhis.his.service.IBjCaService;
import com.neuhis.utils.BjcaUtil;
import lombok.Getter;
@ -31,12 +34,16 @@ public class BjCaServiceImpl implements IBjCaService {
private final String USER_ID = "XXX";
@Override
public void startAutoSign() {
public String startAutoSign() {
Map<String, String> params = getBjCaCommonParams();
params.put("userId", USER_ID);//用户 Id
params.put("timeRegion", " 86400");//自动签名的过期时间,单位为秒(默认最长 86400秒即 24 小时,也可以通过管理端系统重新设置)
params.put("requireQrCode", "N");//是否返回二维码(只能传入 Y、N 两种类型,如果 传 Y会将二维码图片 base64 编码后返回)
postBjCa(bjCaConfig.getServerStartAuthSign(), params);
BjCaResult<CaStartAutoSignVo> result = postBjCa(bjCaConfig.getServerStartAuthSign(), params);
if (result.isSuccess()) {
return result.getData().getSignDataId();
}
return "";
}
@Override
@ -60,19 +67,21 @@ public class BjCaServiceImpl implements IBjCaService {
postBjCa(bjCaConfig.getServerTssInfo(), params);
}
private String postBjCa(String url, Map<String, String> params) {
private <T> BjCaResult<T> postBjCa(String url, Map<String, String> params) {
String requestJson = "";
String result = "";
BjCaResult<T> bjCaResult = new BjCaResult<>();
try {
requestJson = BjcaUtil.RequestUtils.generateRequestJson(params, bjCaConfig.getAppSecret());
result = BjcaUtil.HTTPUtils.post(bjCaConfig.getServerStartAuthSign(), requestJson);
bjCaResult = JSON.parseObject(result, BjCaResult.class);
} catch (Exception e) {
result = "请求CA报错" + e.getMessage();
}
log.info("北京CA开始HTTP请求URL" + url + "\n," +
" 请求入参:" + requestJson + "\n" +
"响应结果" + result);
return result;
return bjCaResult;
}
private Map<String, String> getBjCaCommonParams() {

View File

@ -0,0 +1,35 @@
package com.neuhis.his.service.impl;
import com.neuhis.his.domain.entity.VpComPatientinfo;
import com.neuhis.his.mapper.Db2DataMapper;
import com.neuhis.his.mapper.Db3DataMapper;
import com.neuhis.his.service.Db2DataService;
import com.neuhis.his.service.Db3DataService;
import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
@DataSource(value = DataSourceType.Db3)
public class Db3DataServiceImpl implements Db3DataService {
@Resource
private Db3DataMapper db3DataMapper;
@Override
public List<VpComPatientinfo> selectList(){
//return vpComPatientinfoMapper.selectList();
return new ArrayList<>();
}
@Override
public List<Map<String, Object>> execQuery(String sql) {
return db3DataMapper.execQuery(sql);
}
}

View File

@ -0,0 +1,61 @@
package com.neuhis.his.service.impl;
import com.neuhis.his.domain.entity.VpMessageRecord;
import com.neuhis.his.mapper.VpMessageRecordMapper;
import com.neuhis.his.service.VpMessageRecordService;
import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
// Robin 2024-7-5
@Service("Db3")
@DataSource(value = DataSourceType.Db3)
public class Db3VpMessageRecordServiceImpl implements VpMessageRecordService {
@Autowired
private VpMessageRecordMapper vpMessageRecordMapper;
@Override
public int insert(VpMessageRecord record) {
return vpMessageRecordMapper.insert(record);
}
@Override
public int insertSelective(VpMessageRecord record) {
return vpMessageRecordMapper.insertSelective(record);
}
@Override
public int deleteByPrimaryKey(String msgId) {
return vpMessageRecordMapper.deleteByPrimaryKey(msgId);
}
@Override
public VpMessageRecord selectByPrimaryKey(String msgId) {
return vpMessageRecordMapper.selectByPrimaryKey(msgId);
}
@Override
public int updateByPrimaryKeySelective(VpMessageRecord record) {
return vpMessageRecordMapper.updateByPrimaryKeySelective(record);
}
@Override
public int updateByPrimaryKey(VpMessageRecord record) {
return vpMessageRecordMapper.updateByPrimaryKey(record);
}
@Override
public int insertOrUpdateByPrimaryKey(VpMessageRecord record) {
if(record.isInsert()){
vpMessageRecordMapper.insert(record);
}else{
vpMessageRecordMapper.updateByPrimaryKey(record);
}
return 1;
}
@Override
public int LogsTimerDel(String tableName, String colName, String days) {
return vpMessageRecordMapper.LogsTimerDel( tableName, colName, days);
}
}

View File

@ -0,0 +1,182 @@
package com.neuhis.his.service.impl.winlis;
import com.neuhis.his.service.lis.IWinLisService;
import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType;
import org.apache.commons.compress.utils.Lists;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* Winlis
*
* @author dazer
* @date 2025/3/4 17:38
**/
@Service
@DataSource(value = DataSourceType.Db2)
public class WinLisServiceImpl implements IWinLisService {
@Override
public String getLisCaOriginText(String testdate, String barcode, String machineid) {
String srcData1 = "#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
"|EMC:0" +
"|EXECDEPTID:1044" +
"|EXECDEPTNAME:医学检验科" +
"|EXECSQN2:" +
"|GROUPID:02" +
"|GROUPNAME:" +//GROUPNAME 没有字段
"|GROUPTEL:" +//GROUPTEL 没有字段
"|HISITEMPRICE:43" +
"|HOSPITALID:" +
"|LSPTESTFORM:" +
"|INCEPTORID:" +
"|INCEPTORNAME:" +
"|INCEPTTIME: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:" +
"|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:" +
"|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:" +
"|#APPROVER:PERSONID:003142" +//approverid
"|PERSONNAME:雷杨犇" +//approvername
"|CACARDID:610524199604101228"; //身份证号码, select t.cacardid from las_rol_person t where t.personid = '003142'
String srcData2 = "ITEMID:IL-6" +
",ITEMNAME:白介素6" +
",REPORTVALUE:5" +
",ORGVALUE:" +
",DESCVALUE:" +
",CUTOFF:" +
",ODVALUE:" +
",SCO:" +
",MEMOVALUE:" +
",ALERTEXPLAIN:" + //ALERTEXPLAIN 不存在
",ALERTFLAG:5" +
",AUTOCONFIRMINFO:" +
",AUTOCONFIRMSIGN:" +
",BARCODE:1010449586" +
",Calfomula:" +
",CHECKSTATE:" +
",COMMTIME: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: ";
return "";
}
}

View File

@ -0,0 +1,18 @@
package com.neuhis.his.service.lis;
/**
* Winlis
*
* @author dazer
* @date 2025/3/4 16:22
**/
public interface IWinLisService {
/**
* winlis.las_sap_cadata
* @param testdate
* @param barcode
* @param machineid id
* @return ORINGIN_TEXT
*/
String getLisCaOriginText(String testdate, String barcode, String machineid);
}

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.neuhis.his.mapper.Db3DataMapper">
<select id="execQuery" parameterType="String" resultType="java.util.HashMap">
${sql}
</select>
</mapper>

View File

@ -8,20 +8,17 @@ package com.ruoyi.common.enums;
public enum DataSourceType
{
/**
*
* MySQL,
*/
MASTER,
/**
*
* HIS
*/
SLAVE,
Db1,
Db2,
Db3,
Db4,
Db5,
hitapp
Db1,//如WinLis
Db2,//如Pacs
Db3,//如,手麻
;
}