Index: ssts-web/src/main/webapp/disinfectsystem/config/xkyy/spring/HIS.xml
===================================================================
diff -u -r31166 -r37072
--- ssts-web/src/main/webapp/disinfectsystem/config/xkyy/spring/HIS.xml (.../HIS.xml) (revision 31166)
+++ ssts-web/src/main/webapp/disinfectsystem/config/xkyy/spring/HIS.xml (.../HIS.xml) (revision 37072)
@@ -95,4 +95,7 @@
+
+
+
\ No newline at end of file
Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java
===================================================================
diff -u -r37049 -r37072
--- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 37049)
+++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 37072)
@@ -66,6 +66,7 @@
import com.forgon.disinfectsystem.basedatamanager.urgent.service.UrgentLevelManager;
import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager;
import com.forgon.disinfectsystem.common.CssdUtils;
+import com.forgon.disinfectsystem.datasynchronization.dao.TousseInstancePushDao;
import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager;
import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager;
import com.forgon.disinfectsystem.diposablegoods.service.DisposableGoodsBatchManager;
@@ -254,6 +255,10 @@
private InstrumentInstanceManager instrumentInstanceManager;
@Autowired
private TousseInstanceAdditionalInfoManagerImpl tousseInstanceAdditionalInfoManagerImpl;
+
+ @Autowired(required = false)
+ protected TousseInstancePushDao tousseInstancePushDao;
+
public void setUrgentLevelManager(UrgentLevelManager urgentLevelManager) {
this.urgentLevelManager = urgentLevelManager;
}
@@ -3343,6 +3348,10 @@
SubmitInvoiceContext submitInvoiceContext = submitInvoiceForCustom(params);
//添加标识牌实例的器械实例发货数据SSTS-584(自定义发货的包,包内的器械实例的已使用次数没有增加的问题)
addIdCardInstanceInstrumentInstanceInvoiceData(submitInvoiceContext);
+ //在追溯系统中进行发货保存操作时,使用SDK的API将发货的器械包信息推送至集成平台的MQ队列。XKYY-244
+ new Thread(() -> {
+ pushTousseInstanceAfterInvoice(submitInvoiceContext);
+ }).start();
return submitInvoiceContext;
}
//校验是否符合科研项目发货条件(该业务方法仅用于广东省中医院,前提是有开启科室研目配置项.中山眼科中心的科室项目接口的配置不同,不适用于此业务)
@@ -3459,10 +3468,43 @@
}
//添加标识牌实例的器械实例发货数据
addIdCardInstanceInstrumentInstanceInvoiceData(submitInvoiceContext);
+
+ //在追溯系统中进行发货保存操作时,使用SDK的API将发货的器械包信息推送至集成平台的MQ队列。XKYY-244
+ new Thread(() -> {
+ pushTousseInstanceAfterInvoice(submitInvoiceContext);
+ }).start();
+
return submitInvoiceContext;
}
/**
+ * 在追溯系统中进行发货保存操作时,使用SDK的API将发货的器械包信息推送至集成平台的MQ队列。XKYY-244
+ * @param submitInvoiceContext
+ */
+ private void pushTousseInstanceAfterInvoice(SubmitInvoiceContext submitInvoiceContext) {
+ if(tousseInstancePushDao == null
+ || submitInvoiceContext == null){
+ return;
+ }
+ Map> updateStockInfoMap = submitInvoiceContext.getUpdateStockInfo();
+ if(MapUtils.isEmpty(updateStockInfoMap)){
+ return;
+ }
+ Collection tousseInstanceColl = new ArrayList();
+ for (Entry> entry : updateStockInfoMap.entrySet()) {
+ Collection value = entry.getValue();
+ if(CollectionUtils.isEmpty(value)){
+ continue;
+ }
+ tousseInstanceColl.addAll(value);
+ }
+ if(CollectionUtils.isEmpty(tousseInstanceColl)){
+ return;
+ }
+ tousseInstancePushDao.pushTousseInstanceAfterInvoice(tousseInstanceColl);
+ }
+
+ /**
* 插入表数据的id字段名(sqlserver数据库的id列为自增长所以不需要指定id列,oracle数据库需要指定id列)
* @return
*/
Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/TousseInstancePushDao.java
===================================================================
diff -u -r36834 -r37072
--- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/TousseInstancePushDao.java (.../TousseInstancePushDao.java) (revision 36834)
+++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/TousseInstancePushDao.java (.../TousseInstancePushDao.java) (revision 37072)
@@ -14,5 +14,13 @@
* @param tousseInstances
*/
public void pushTousseInstance(Collection tousseInstances);
+
+ /**
+ * 发货保存操作时,使用SDK的API将发货的器械包信息推送至集成平台的MQ队列XKYY-244
+ * @param tousseInstances
+ */
+ public default void pushTousseInstanceAfterInvoice(Collection tousseInstances) {
+
+ }
}
Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/xkyy/TousseInstancePushDaoImpl.java
===================================================================
diff -u
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/xkyy/TousseInstancePushDaoImpl.java (revision 0)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/xkyy/TousseInstancePushDaoImpl.java (revision 37072)
@@ -0,0 +1,147 @@
+package com.forgon.disinfectsystem.datasynchronization.dao.xkyy;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.util.Collection;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+
+import com.ewell.sdk.business.EwellServiceTool;
+import com.forgon.disinfectsystem.datasynchronization.dao.TousseInstancePushDao;
+import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance;
+import com.forgon.tools.date.DateTools;
+
+public class TousseInstancePushDaoImpl implements TousseInstancePushDao {
+
+ /**
+ * 队列管理名称
+ */
+ public static String QUEUE_MANAGER_NAME = "QMGR.P17";
+
+ /**
+ * 数据通道
+ */
+ public static String FID = "PS30004";
+
+ Logger logger = Logger.getLogger(TousseInstancePushDaoImpl.class);
+
+ @Override
+ public void pushTousseInstanceAfterInvoice(Collection tousseInstances) {
+ if(CollectionUtils.isEmpty(tousseInstances)){
+ return;
+ }
+ EwellServiceTool ewellServiceTool = null;
+ try {
+ //创建连接对象
+ ewellServiceTool = new EwellServiceTool();
+ //定义请求体
+ String msgbody = buildMsgBody(tousseInstances);
+ logger.debug("发货的器械包信息推送接口请求参数:" + msgbody);
+ //放入消息
+ String messageId = ewellServiceTool.composePutMsg(QUEUE_MANAGER_NAME, FID, msgbody);
+ logger.debug("发货的器械包信息推送接口返回参数:" + messageId);
+ } catch (Exception e) {
+ e.printStackTrace();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ e.printStackTrace(new PrintStream(baos));
+ String exception = baos.toString();
+ logger.debug("发货的器械包信息推送接口调用失败:" + exception);
+ e.printStackTrace();
+ } finally{
+ if(ewellServiceTool != null){
+ try {
+ ewellServiceTool.disconnect();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ }
+
+ /**
+ * 构建请求信息
+ *
+ *
+ * XGXT
+ * 123456
+ * PS30004
+ * PS30004S09001
+ * 1
+ *
+ *
+ * PS30004
+ * PS30004S09001
+ * S17
+ * S00
+ * GH01
+ * -1
+ *
+ * 2023-02-22 15:43:20
+ *
+ *
+ *
+ * BAR_CODE
+ * PACKAGE_NAME
+ * STERILIZE_DATE
+ * TODAY_USE_TIMES
+ * EXP_DATE
+ * PACKAGE_OPERATOR
+ * NOTE
+ *
+ *
+ *
+ * @param tousseInstances
+ * @return
+ */
+ private String buildMsgBody(Collection tousseInstances) {
+ if(CollectionUtils.isEmpty(tousseInstances)){
+ return null;
+ }
+ String nowDateTime = DateTools.getCurrentDayByFormat(DateTools.COMMON_DATE_HMS);
+ StringBuffer msgBody = new StringBuffer();
+ msgBody.append("");
+ msgBody.append("");
+ msgBody.append("XGXT");
+ msgBody.append("123456");
+ msgBody.append("" + FID + "");
+ msgBody.append("PS30004S09001");
+ msgBody.append("1");
+ msgBody.append("");
+ msgBody.append("");
+ msgBody.append("" + FID + "");
+ msgBody.append("PS30004S09001");
+ msgBody.append("S17");
+ msgBody.append("S00");
+ msgBody.append("GH01");
+ msgBody.append("-1");
+ //
+ msgBody.append("" + nowDateTime + "");
+ msgBody.append("");
+ msgBody.append("");
+ int index = 1;
+ for (TousseInstance tousseInstance : tousseInstances) {
+ msgBody.append("");
+ msgBody.append("" + tousseInstance.getBarcode() + "");
+ msgBody.append("" + tousseInstance.getTousseName() + "");
+ msgBody.append("" + StringUtils.defaultString(tousseInstance.getSterileStartDate()) + "");
+ msgBody.append("" + StringUtils.defaultString(tousseInstance.getSterileFrequency()) + "");
+ msgBody.append("" + StringUtils.defaultString(tousseInstance.getValidUntilStr()) + "");
+ msgBody.append("" + StringUtils.defaultString(tousseInstance.getOperator()) + "");
+ msgBody.append("");
+ msgBody.append("");
+ index++;
+ }
+ msgBody.append("");
+ msgBody.append("");
+ return msgBody.toString();
+ }
+
+ @Override
+ public void pushTousseInstance(Collection tousseInstances) {
+ return;
+ }
+
+}
Index: ssts-web/src/main/webapp/disinfectsystem/config/xkyy/interfaces/mqConfig/SDKConfig.properties
===================================================================
diff -u
--- ssts-web/src/main/webapp/disinfectsystem/config/xkyy/interfaces/mqConfig/SDKConfig.properties (revision 0)
+++ ssts-web/src/main/webapp/disinfectsystem/config/xkyy/interfaces/mqConfig/SDKConfig.properties (revision 37072)
@@ -0,0 +1,75 @@
+#查询推送的服务地址
+server.ip=http://192.168.111.44:8360
+#推送的服务地址
+push.server.ip=http://192.168.111.44:8380
+#订阅的服务地址
+websocket.ip=http://192.168.111.44:8350
+#页端的服务地址
+web.ip=http://192.168.111.44:8370
+
+
+
+websocket.endpoint=endpointWisely
+
+#集群容错:FAIL_OVER FAIL_FAST
+cluster.type=FAIL_FAST
+cluster.retry=3
+
+
+#*****客户端配置******
+sys.code=S17
+client.key=478bb94423f547cb8fc5c707c9711f36
+#客户端IP
+sys.ipaddr=192.168.100.81
+
+
+#v4.0.2.5 新增
+#*****apollo配置******
+apollo.bootstrap.enabled=false
+app.id=sdk
+#apollo环境变量key
+env.key=env
+env=dev
+apollo.cluster=default
+apollo.namespace=application
+apollo.meta=http://192.168.10.11:8080
+local.meta=http://192.168.10.11:8080
+dev.meta=http://192.168.10.11:8080
+fat.meta=http://192.168.10.11:8080
+uat.meta=http://192.168.10.11:8080
+lpt.meta=http://192.168.10.11:8080
+pro.meta=http://192.168.10.11:8080
+tools.meta=http://192.168.10.11:8080
+
+
+
+#v4.0.2.6 新增
+#ACK回执线程池配置
+#核心线程数
+ack.core.pool.size=50
+#最大线程数
+ack.max.pool.size=1000
+#任务队列大小
+ack.pool.queue.size=30
+#批量获取最大值
+ack.batch.max.size=1000
+#批量获取最小值
+ack.batch.min.size=100
+#批量获取初始值
+ack.batch.initial.size=500
+#批量获取值动态增幅
+ack.batch.increase.size=100
+#批量获取单条等待
+ack.poll.delay.time=3
+#ACK批量发送数
+ack.batch.send.size=100
+
+
+#4.0.3.1 新增
+#失败消息存储路径
+fail.msg.file.path=E:\\errorMsg
+#单个文件大小 单位kb
+fail.msg.file.size=10240
+#清除失败消息间隔 单位小时
+fail.msg.clear.inteval=3
+
Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java
===================================================================
diff -u -r36327 -r37072
--- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 36327)
+++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 37072)
@@ -681,7 +681,7 @@
List comboTousseInstanceList = idToComboTousseInstanceMap.values().stream().collect(Collectors.toList());
validateUniqueTousseInstanceAndSort(comboTousseInstanceList, barcodeToSendAmountMap, params, warningTousseWhetherDelivery, validUtilTodayCanInvoice, currentDateTime);
List comboTousseWrapperInvoiceList = invoiceWrapperComboTousse(idToComboTousseInstanceMap, invoicePlanId, departCoding, applyDate,appFormType, invoiceGroupByConfig,
- invoiceOrigin, tousseDeliverOccasion,params,currentDateTime);
+ invoiceOrigin, tousseDeliverOccasion,params,currentDateTime, context);
if(CollectionUtils.isNotEmpty(comboTousseWrapperInvoiceList)){
invoiceList.addAll(comboTousseWrapperInvoiceList);
}
@@ -734,6 +734,10 @@
throw new RuntimeException("test调试:" + comboTousseInvoiceDebugInfo);
}
context.setInvoiceList(invoiceList);
+ //在追溯系统中进行发货保存操作时,使用SDK的API将发货的器械包信息推送至集成平台的MQ队列。XKYY-244
+ new Thread(() -> {
+ pushTousseInstanceAfterInvoice(context);
+ }).start();
return context;
}
/*
@@ -1085,7 +1089,7 @@
currentDateTime,params,orgUnit,targetWarehouse,
idToDisposableGoodsMap,idToDisposableGoodsBatchMap,
invoiceOrigin,tousseDeliverOccasion, tousseInstanceIdToIsRoutineMap,
- disposableGoodsStorageAdjustVoTotalList);
+ disposableGoodsStorageAdjustVoTotalList, context);
invoiceList.addAll(invoiceExcludeComboTousseList);
/*
@@ -1103,8 +1107,28 @@
context.setInvoiceList(invoiceList);
//添加标识牌实例的器械实例发货数据
addIdCardInstanceInstrumentInstanceInvoiceData(context);
+ //在追溯系统中进行发货保存操作时,使用SDK的API将发货的器械包信息推送至集成平台的MQ队列XKYY-244
+ new Thread(() -> {
+ pushTousseInstanceAfterInvoice(context);
+ }).start();
return context;
}
+
+ /**
+ * 在追溯系统中进行发货保存操作时,使用SDK的API将发货的器械包信息推送至集成平台的MQ队列。XKYY-244
+ * @param submitInvoiceContext
+ */
+ private void pushTousseInstanceAfterInvoice(SubmitInvoiceContext submitInvoiceContext) {
+ if(tousseInstancePushDao == null
+ || submitInvoiceContext == null){
+ return;
+ }
+ Collection tousseInstanceColl = submitInvoiceContext.getTousseInstancesToUpdate();
+ if(CollectionUtils.isEmpty(tousseInstanceColl)){
+ return;
+ }
+ tousseInstancePushDao.pushTousseInstanceAfterInvoice(tousseInstanceColl);
+ }
/**
* 根据聚合包实例提取出该聚合包对应的子包实例
@@ -4887,7 +4911,7 @@
Date currentDateTime , JSONObject params,OrgUnit orgUnit,WareHouse targetWarehouse,
Map idToDisposableGoodsMap,Map idToDisposableGoodsBatchMap,
String invoiceOrigin,String tousseDeliverOccasion,Map tousseInstanceIdToIsRoutineMap,
- List disposableGoodsStorageAdjustVoTotalList){
+ List disposableGoodsStorageAdjustVoTotalList, SubmitInvoiceContext context){
List invoiceList = new ArrayList();
//插入表数据的id字段名及值(sqlserver数据库的id列为自增长所以赋空值,即不需要指定id列,oracle数据库需要指定id列,且值为序列的值)
String idColumnName = "";
@@ -4922,7 +4946,7 @@
idColumnName,idColumnValue,currentDateTime,params,orgUnit,targetWarehouse,
invoiceOrigin, tousseDeliverOccasion,
idToDisposableGoodsMap, idToDisposableGoodsBatchMap,idToInvoiceMap, tousseInstanceIdToIsRoutineMap,
- disposableGoodsStorageAdjustVoTotalList);
+ disposableGoodsStorageAdjustVoTotalList,context);
/*invoicePlanList.stream().forEach(invoicePlan -> {
List