Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/WebServiceClientHelper.java
===================================================================
diff -u
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/WebServiceClientHelper.java (revision 0)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/WebServiceClientHelper.java (revision 28956)
@@ -0,0 +1,30 @@
+package com.forgon.disinfectsystem.inventorymanagement.dao.gdszyy;
+
+import net.sf.json.JSON;
+import org.apache.log4j.Logger;
+public class WebServiceClientHelper {
+
+ private final static Logger logger = Logger.getLogger(WebServiceClientHelper.class);
+
+ /**
+ * 批次号为空的默认批次号
+ */
+ public final static String EMPTY_BATCHNO = "空批次";
+
+ public static final String OPSYSTEM = null;
+
+ public static final String OPTYPE_WRITEBACK = null;
+
+ public static final int CODE_STATE_SUCCESS = 0;
+
+ /**
+ * 调用入库接口所传的xml参数
+ */
+ public static String inStorageDataXml;
+
+ public static JSON writeBackData(String opsystem2, String optypeWriteback, String xmlParam) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/InventoryStockWebServiceImpl.java
===================================================================
diff -u
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/InventoryStockWebServiceImpl.java (revision 0)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/InventoryStockWebServiceImpl.java (revision 28956)
@@ -0,0 +1,317 @@
+package com.forgon.disinfectsystem.inventorymanagement.dao.gdszyy;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.jws.WebService;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import net.sf.json.xml.XMLSerializer;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.forgon.directory.acegi.tools.AcegiHelper;
+import com.forgon.directory.model.OrgUnit;
+import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager;
+import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods;
+import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry;
+import com.forgon.disinfectsystem.inventorymanagement.dao.InventoryDao;
+import com.forgon.disinfectsystem.inventorymanagement.model.Inventory;
+import com.forgon.disinfectsystem.inventorymanagement.model.StorageEntry;
+import com.forgon.disinfectsystem.inventorymanagement.service.InventoryManager;
+import com.forgon.log.model.Log;
+import com.forgon.log.service.LogManager;
+import com.forgon.tools.db.DatabaseUtil;
+import com.forgon.tools.hibernate.ObjectDao;
+import com.google.gson.JsonObject;
+
+/**
+ * 入库单同步接口
+ * @author ZhouPeiMian
+ * @since 2020-09-01
+ */
+@WebService(endpointInterface = "com.forgon.disinfectsystem.inventorymanagement.dao.gdszyy.InventoryStockWebService", serviceName = "/inventoryStockWebService")
+public class InventoryStockWebServiceImpl implements InventoryStockWebService {
+
+ @Autowired(required=false)
+ private InventoryDao inventoryDao;
+
+ @Autowired(required=false)
+ private InventoryManager inventoryManager;
+
+ @Autowired(required=false)
+ private LogManager appLogManager;
+
+ @Autowired
+ private ObjectDao objectDao;
+
+ @Autowired
+ private DiposableGoodsManager diposableGoodsManager;
+
+ /**
+ * 日志信息
+ */
+ private Logger logger = Logger.getLogger(InventoryStockWebServiceImpl.class);
+
+ /**
+ * 限制接口只能用于单线程调用,必须等第一次接口调用完成后,下一次接口调用才能生效
+ */
+ private boolean running = false;
+ /**
+ * 入库数据
+ * @param dataXml
+ * xml格式如下:
+
+
+
+
+
+
+
+
+ * @return
+ */
+ public String receiveInStorageData(String dataXml){
+ logger.debug("receiveInStorageData method invoking...dataXml="+dataXml);
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "物资推送入库,dataXml="+dataXml);
+ String xmlResult = "";
+ running = false;
+ if(running == true){
+ xmlResult += " 1 "+"接口正在运行处理中,请稍候再调用!"+" ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult);
+ return xmlResult;
+ }
+ running = true;
+ try{
+ //判断一次性物品是否存在(追溯系统要求必须先有一次性物品,再同步入库)
+ String result = isExistDisposableGoods(dataXml);
+ //记住调用的参数
+ //WebServiceClientHelper.inStorageDataXml = dataXml;
+ JsonObject jsonObjectResult = new JsonObject();
+ Collection storageEntrys = new ArrayList();
+ String entryType = GodownEntry.TYPE_IN;
+ //
+ String dataJson = inStorageXml2Json(dataXml);
+ //判断是否入库或退库
+ entryType = judgeEntryType(dataXml);
+ if(StringUtils.isNotBlank(result)){
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+result);
+ return result;
+ }
+ if(StringUtils.equals(GodownEntry.TYPE_IN, entryType)){
+ //检测待同步的入库单的数据是否正确并生成同步入库单信息
+ jsonObjectResult = inventoryManager.prepareSyncInEntry(dataJson, storageEntrys);
+ }
+ else if(StringUtils.equals(GodownEntry.TYPE_OUT, entryType)){
+ //检测待同步的退库单的数据是否正确并生成同步退库单信息
+ jsonObjectResult = inventoryManager.prepareSyncOutEntry(dataJson, storageEntrys);
+ }else{
+ xmlResult += " 1 物质发生的数量需要全部为正整数或全部为负整数 ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult);
+ return xmlResult;
+ }
+ //
+ if (jsonObjectResult.get("success").getAsBoolean()) {
+ if(CollectionUtils.isNotEmpty(storageEntrys)){
+ //设置供应室编码
+ for(StorageEntry entry : storageEntrys){
+ Long receiveDepartmentID = entry.getReceiveDepartmentID();
+ //根据his目标部门id对应idFromHisSync获取追溯系统的供应室编号idFromHisSync
+ if(DatabaseUtil.isPoIdValid(receiveDepartmentID)){
+ OrgUnit orgUnit = (OrgUnit) objectDao.getByProperty(OrgUnit.class.getSimpleName(), "idFromHisSync", receiveDepartmentID);
+ if(orgUnit!=null){
+ entry.setOrgUnitCoding(orgUnit.getOrgUnitCoding());
+ }
+ }
+ }
+ //同步入库单/退库单
+ inventoryManager.syncStorageEntry_TRANS_REQUIRED(storageEntrys, "OES", entryType);
+ xmlResult += " 0 ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult);
+ }else{
+ xmlResult += " 1 未找到对应的入/退库单 ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult);
+ }
+ }else{
+ xmlResult += " 1 " + jsonObjectResult.get("error") + " ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult);
+ }
+ return xmlResult;
+ }catch (Exception e) {
+ e.printStackTrace();
+ xmlResult += " 1 服务器出错!"+e.getMessage()+" ";
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVENTORYSYCN, Log.TYPE_ADD, "接口返回给物资系统,result="+xmlResult + ",error=" + e);
+ return xmlResult;
+ }finally{
+ running = false;
+ }
+ }
+
+ private String inStorageXml2Json(String dataXml) {
+ JSONObject jsonObject = new JSONObject();
+ if(StringUtils.isNotBlank(dataXml)){
+ JSONObject json = (JSONObject)new XMLSerializer().read(dataXml);
+
+ //单号数据集
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(json.optString("SerialNo"));
+ jsonObject.put("entrySerialNumbers", jsonArray);
+
+ //物资数据
+ Object entryItemJsonObject = json.opt("TRANSFERSET");
+ JSONArray transfersetJsonArray = null;
+ if(entryItemJsonObject instanceof JSONArray){
+ transfersetJsonArray = (JSONArray)entryItemJsonObject;
+ }else{
+ transfersetJsonArray = new JSONArray();
+ transfersetJsonArray.add(entryItemJsonObject);
+ }
+
+ JSONObject itemTypeMap = new JSONObject();
+ JSONObject itemExpDateMap = new JSONObject();
+ JSONObject itemCategoryMap = new JSONObject();
+ for(int i = 0;i < transfersetJsonArray.size();i++){
+ JSONObject transfersetJsonObject = transfersetJsonArray.optJSONObject(i);
+ String sourceId = transfersetJsonObject.optString("SOURCEID");
+ itemTypeMap.put(sourceId, DisposableGoods.TYPE_NAME);
+ itemExpDateMap.put(sourceId, transfersetJsonObject.opt("ExpiredDate"));
+ Inventory inventory = inventoryDao.getInventory(sourceId);
+ if(inventory != null){
+ itemCategoryMap.put(sourceId, inventory.getCategory());//获得物质类别
+ }
+ }
+ jsonObject.put("itemTypeMap", itemTypeMap);
+ jsonObject.put("itemExpDateMap", itemExpDateMap);
+ jsonObject.put("itemCategoryMap", itemCategoryMap);
+ }
+ return jsonObject.toString();
+ }
+
+
+ /**
+ * 判断单类型
+ * @param dataXml
+ * @return
+ */
+ private String judgeEntryType(String dataXml){
+ String entryType = null;
+ if(StringUtils.isNotBlank(dataXml)){
+ //
+ XMLSerializer xmlSerializer = new XMLSerializer();
+ JSONObject json = (JSONObject)xmlSerializer.read(dataXml);
+ Object entryItemJsonObject = json.opt("TRANSFERSET");
+ //
+ JSONArray transfersetJsonArray = null;
+ if(entryItemJsonObject instanceof JSONArray){
+ transfersetJsonArray = (JSONArray)entryItemJsonObject;
+ }else{
+ transfersetJsonArray = new JSONArray();
+ transfersetJsonArray.add(entryItemJsonObject);
+ }
+ //
+ int inItemAmount = 0;
+ int outItemAmount = 0;
+ if(transfersetJsonArray != null && transfersetJsonArray.size()>0){
+ for (int i = 0; i < transfersetJsonArray.size(); i++) {
+ JSONObject itemJson = transfersetJsonArray.optJSONObject(i);
+ int amount = itemJson.optInt("QUANTITY");
+ if(amount > 0){
+ inItemAmount ++;
+ }
+ if(amount < 0){
+ outItemAmount ++;
+ }
+ }
+ }
+ if(inItemAmount == transfersetJsonArray.size()){
+ entryType = GodownEntry.TYPE_IN;
+ }else if(outItemAmount == transfersetJsonArray.size()){
+ entryType = GodownEntry.TYPE_OUT;
+ }
+ }
+ return entryType;
+ }
+
+ /**
+ * 检验参数中的一次性物品是否都存在
+ * @param dataXml
+ * @return 物品不存在则返回提示信息,否则返回空字符串
+ */
+ private String isExistDisposableGoods(String dataXml) {
+ String xmlResult = "";
+ if(StringUtils.isNotBlank(dataXml)){
+ //
+ XMLSerializer xmlSerializer = new XMLSerializer();
+ JSONObject json = (JSONObject)xmlSerializer.read(dataXml);
+ Object entryItemJsonObject = json.opt("TRANSFERSET");
+ //
+ JSONArray transfersetJsonArray = null;
+ if(entryItemJsonObject instanceof JSONArray){
+ transfersetJsonArray = (JSONArray)entryItemJsonObject;
+ }else{
+ transfersetJsonArray = new JSONArray();
+ transfersetJsonArray.add(entryItemJsonObject);
+ }
+
+ if(transfersetJsonArray != null && transfersetJsonArray.size()>0){
+ for (int i = 0; i < transfersetJsonArray.size(); i++) {
+ JSONObject itemJson = transfersetJsonArray.optJSONObject(i);
+ String inventorySerialNumber = itemJson.optString("SOURCEID");
+ String name = itemJson.optString("NAME");
+ String specification = itemJson.optString("Specification");
+ String unit = itemJson.optString("Unit");
+ Double amount = itemJson.optDouble("QUANTITY", 0.0);
+ if(StringUtils.isBlank(name) || StringUtils.isBlank(specification)){
+ xmlResult += " 1 一次性物品名称和规格不能为空! ";
+ return xmlResult;
+ }
+ // 先按物资编码查找一次性物品定义
+ DisposableGoods disposableGoods = null;
+ if(StringUtils.isNotBlank(inventorySerialNumber)){
+ disposableGoods = diposableGoodsManager.getDisposableGoodsByInventorySerialNumber(inventorySerialNumber);
+ }
+ if(disposableGoods == null){
+ // 再按名称和规格查找
+ disposableGoods = diposableGoodsManager.get(name, specification);
+ }
+ if(disposableGoods == null){
+ xmlResult += " 1 一次性物品" + name + "[" + specification + "]" + " 不存在! ";
+ return xmlResult;
+ }
+ // 一次性物品名称和参数名称不一致
+ if(!StringUtils.equals(name, disposableGoods.getName())){
+ xmlResult += " 1 物资编码为【" + inventorySerialNumber + "】的一次性物品名称为【" + disposableGoods.getName() + "】! ";
+ return xmlResult;
+ }
+ // 一次性物品规格和参数规格不一致
+ if(!StringUtils.equals(specification, disposableGoods.getSpecification())){
+ xmlResult += " 1 物资编码为【" + inventorySerialNumber + "】的一次性物品【" + disposableGoods.getName() + "】规格为【" + disposableGoods.getSpecification() + "】! ";
+ return xmlResult;
+ }
+ // 一次性物品单位判断
+ Integer transferScale = 1;
+ if(!StringUtils.equals(unit, disposableGoods.getUnit())){
+ if(!StringUtils.equals(unit, disposableGoods.getMiddlePackageUnit())){
+ String message = "OES系统的物品【" + name + "】【" + specification + "】的单位为【" + unit + "】,供应室CSSD系统的单位为【" + disposableGoods.getUnit()
+ + "】,申领单位为【" + disposableGoods.getMiddlePackageUnit() + "】,OES系统的单位与供应室系统的单位和申领单位都不相同,无法进行数量转换,请处理好单位对应关系后再进行推送。";
+ xmlResult += " 1 " + message + " ";
+ return xmlResult;
+ }else{
+ transferScale = disposableGoods.getTransferScale();
+ }
+ }
+ amount = amount * transferScale;
+ itemJson.put("QUANTITY", Integer.valueOf(amount.intValue()).toString());
+ }
+ json.put("TRANSFERSET", transfersetJsonArray);
+ WebServiceClientHelper.inStorageDataXml = json.toString();
+ }
+ }
+ return xmlResult;
+ }
+
+}
Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/InventoryStockWebService.java
===================================================================
diff -u
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/InventoryStockWebService.java (revision 0)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/InventoryStockWebService.java (revision 28956)
@@ -0,0 +1,21 @@
+package com.forgon.disinfectsystem.inventorymanagement.dao.gdszyy;
+
+import javax.jws.WebService;
+
+/**
+ * 入库单同步接口
+ * @author ZhouPeiMian
+ * @since 2020-09-01
+ */
+@WebService
+public interface InventoryStockWebService {
+
+ /**
+ * 入库单同步接口
+ * @param loginName
+ * @param password
+ * @param dataXml
+ * @return
+ */
+ public String receiveInStorageData(String dataXml);
+}
Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/InventoryDao.java
===================================================================
diff -u
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/InventoryDao.java (revision 0)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/dao/gdszyy/InventoryDao.java (revision 28956)
@@ -0,0 +1,28 @@
+package com.forgon.disinfectsystem.inventorymanagement.dao.gdszyy;
+
+import com.forgon.disinfectsystem.inventorymanagement.model.Inventory;
+
+/**
+ * 物品dao接口
+ * @author zhouPeiMian
+ * @since 2020-09-07
+ *
+ */
+public interface InventoryDao extends com.forgon.disinfectsystem.inventorymanagement.dao.InventoryDao{
+
+ /**
+ * 入库方法
+ * @param dataXml 入库数据,xml格式,详见xml
+ * @return xml结果,如
+ */
+ public String inStorage(String dataXml);
+
+ /**
+ * his调用接口时请求参数xml格式数据转成json格式
+ * @param dataXml 入库数据,xml格式,详见xml
+ * @return json结果,如{\"entrySerialNumbers\":[\"03-20160380007\"],\"itemTypeMap\":{\"1104102051\":\"器械材料\",\"1104102052\":\"器械材料\",\"1104102053\":\"器械材料\"},\"itemCategoryMap\":{},\"itemExpDateMap\":{\"1104102051\":\"2017-03-17\",\"1104102052\":\"2017-03-16\",\"1104102053\":\"2017-03-16\"}}
+ */
+ public String inStorageXml2Json(String dataXml);
+
+ public Inventory getInventory();
+}
Index: ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/webservice-cxf.xml
===================================================================
diff -u -r28952 -r28956
--- ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/webservice-cxf.xml (.../webservice-cxf.xml) (revision 28952)
+++ ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/webservice-cxf.xml (.../webservice-cxf.xml) (revision 28956)
@@ -11,7 +11,7 @@
-
+
+ * 4
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * @return json结果,如{\"entrySerialNumbers\":[\"03-20160380007\"],\"itemTypeMap\":{\"1104102051\":\"器械材料\",\"1104102052\":\"器械材料\",\"1104102053\":\"器械材料\"},\"itemCategoryMap\":{},\"itemExpDateMap\":{\"1104102051\":\"2017-03-17\",\"1104102052\":\"2017-03-16\",\"1104102053\":\"2017-03-16\"}}
+ * {
+ "entrySerialNumbers":["03-20160380007"],
+ "itemTypeMap":{"1104102051":"器械材料","1104102052":"器械材料","1104102053":"器械材料"},
+ "itemCategoryMap":{},
+ "itemExpDateMap":{"1104102051":"2017-03-17","1104102052":"2017-03-16","1104102053":"2017-03-16"}
+ }
+ */
+ @Override
+ public String inStorageXml2Json(String dataXml){
+ JSONObject jsonObject = new JSONObject();
+ if(StringUtils.isNotBlank(dataXml)){
+ JSONObject json = (JSONObject)new XMLSerializer().read(dataXml);
+
+ //单号数据集
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(json.optString("SerialNo"));
+ jsonObject.put("entrySerialNumbers", jsonArray);
+
+ //物资数据
+ Object entryItemJsonObject = json.opt("TRANSFERSET");
+ JSONArray transfersetJsonArray = null;
+ if(entryItemJsonObject instanceof JSONArray){
+ transfersetJsonArray = (JSONArray)entryItemJsonObject;
+ }else{
+ transfersetJsonArray = new JSONArray();
+ transfersetJsonArray.add(entryItemJsonObject);
+ }
+
+ /*//TRANSFERSET的下级元素有可能只有一个
+ JSONArray sourceIdJsonArray = new JSONArray();
+ JSONArray batchIdJsonArray = new JSONArray();
+ JSONArray quantityJsonArray = new JSONArray();
+ JSONArray expiredDateJsonArray = new JSONArray();
+
+ Object sourceIdObject = entryItemJsonObject.opt("SOURCEID");
+ Object batchIdObject = entryItemJsonObject.opt("BATCHID");
+ Object quantityObject = entryItemJsonObject.opt("QUANTITY");
+ Object expiredDateObject = entryItemJsonObject.opt("ExpiredDate");
+
+ if(sourceIdObject instanceof String){
+ sourceIdJsonArray.add(sourceIdObject);
+ } else if(sourceIdObject instanceof JSONArray){
+ sourceIdJsonArray = (JSONArray)sourceIdObject;
+ }
+
+ if(batchIdObject instanceof String){
+ batchIdJsonArray.add(batchIdObject);
+ } else if(batchIdObject instanceof JSONArray){
+ batchIdJsonArray = (JSONArray)batchIdObject;
+ }
+
+ if(quantityObject instanceof String){
+ quantityJsonArray.add(quantityObject);
+ } else if(quantityObject instanceof JSONArray){
+ quantityJsonArray = (JSONArray)quantityObject;
+ }
+
+ if(expiredDateObject instanceof String){
+ expiredDateJsonArray.add(expiredDateObject);
+ } else if(expiredDateObject instanceof JSONArray){
+ expiredDateJsonArray = (JSONArray)expiredDateObject;
+ }*/
+
+ JSONObject itemTypeMap = new JSONObject();
+ JSONObject itemExpDateMap = new JSONObject();
+ JSONObject itemCategoryMap = new JSONObject();
+ for(int i = 0;i < transfersetJsonArray.size();i++){
+ JSONObject transfersetJsonObject = transfersetJsonArray.optJSONObject(i);
+ String sourceId = transfersetJsonObject.optString("SOURCEID");
+ itemTypeMap.put(sourceId, DisposableGoods.TYPE_NAME);
+ itemExpDateMap.put(sourceId, transfersetJsonObject.opt("ExpiredDate"));
+ Inventory inventory = getInventory(sourceId);
+ itemCategoryMap.put(sourceId, inventory.getCategory());//获得物质类别
+ }
+ jsonObject.put("itemTypeMap", itemTypeMap);
+ jsonObject.put("itemExpDateMap", itemExpDateMap);
+ jsonObject.put("itemCategoryMap", itemCategoryMap);
+ }
+ return jsonObject.toString();
+ }
+
+ @Override
+ public StorageEntry findInEntryBySerialNumber(String entrySerialNumber) {
+ StorageEntry entry = null;
+ //对调用入库接口传入的xml进行解析
+ /*
+
+
+
+
+ */
+ if(StringUtils.isNotBlank(WebServiceClientHelper.inStorageDataXml)){
+ JSONObject entryJson = JSONObject.fromObject(WebServiceClientHelper.inStorageDataXml);
+ entry = new StorageEntry();
+ entry.setRemark("同步入库单");
+ entry.setSerialNumber(entryJson.optString("SerialNo"));
+ entry.setTime(new java.sql.Date(System.currentTimeMillis()));
+ entry.setReceiveDepartmentID(entryJson.optLong("ReceiveDepartmentID"));//his目标部门id
+ }
+ return entry;
+ }
+
+ @Override
+ public StorageEntry findOutEntryBySerialNumber(String entrySerialNumber) {
+ StorageEntry entry = null;
+ //对调用入库接口传入的xml进行解析
+ /*
+
+
+
+
+ */
+ if(StringUtils.isNotBlank(WebServiceClientHelper.inStorageDataXml)){
+ JSONObject entryJson = JSONObject.fromObject(WebServiceClientHelper.inStorageDataXml);
+ entry = new StorageEntry();
+ entry.setRemark("同步退库单");
+ entry.setSerialNumber(entryJson.optString("SerialNo"));
+ entry.setTime(new java.sql.Date(System.currentTimeMillis()));
+ entry.setReceiveDepartmentID(entryJson.optLong("ReceiveDepartmentID"));//his目标部门id
+ }
+ return entry;
+ }
+
+ @Override
+ public StorageEntry[] findInEntryByTime(Date startDate, Date endDate) {
+ return null;
+ }
+
+ @Override
+ public StorageEntry[] findOutEntryByTime(Date startDate, Date endDate) {
+ return null;
+ }
+
+ @Override
+ public StorageEntryItem[] findInEntryItem(String entrySerialNumber) {
+ StorageEntryItem[] entryItemArray = null;
+ //对调用入库接口传入的xml进行解析
+ /*
+
+
+
+
+ */
+ if(StringUtils.isNotBlank(WebServiceClientHelper.inStorageDataXml)){
+ JSONObject json = JSONObject.fromObject(WebServiceClientHelper.inStorageDataXml);
+ Object entryItemJsonObject = json.opt("TRANSFERSET");
+
+ /*JSONArray sourceIdJsonArray = new JSONArray();
+ JSONArray batchIdJsonArray = new JSONArray();
+ JSONArray quantityJsonArray = new JSONArray();
+ JSONArray expiredDateJsonArray = new JSONArray();
+ JSONArray productNoJsonArray = new JSONArray();
+ JSONArray preferentialPriceJsonArray = new JSONArray();
+
+ Object sourceIdObject = entryItemJsonObject.opt("SOURCEID");
+ Object batchIdObject = entryItemJsonObject.opt("BATCHID");
+ Object quantityObject = entryItemJsonObject.opt("QUANTITY");
+ Object expiredDateObject = entryItemJsonObject.opt("ExpiredDate");
+ Object productNoObject = entryItemJsonObject.opt("ProductNo");
+ Object preferentialPriceObject = entryItemJsonObject.opt("PreferentialPrice");
+
+ if(sourceIdObject instanceof String){
+ sourceIdJsonArray.add(sourceIdObject);
+ }else if(sourceIdObject instanceof JSONArray){
+ sourceIdJsonArray = (JSONArray)sourceIdObject;
+ }
+
+ if(batchIdObject instanceof String){
+ batchIdJsonArray.add(batchIdObject);
+ }else if(batchIdObject instanceof JSONArray){
+ batchIdJsonArray = (JSONArray)batchIdObject;
+ }
+
+ if(quantityObject instanceof String){
+ quantityJsonArray.add(quantityObject);
+ }else if(quantityObject instanceof JSONArray){
+ quantityJsonArray = (JSONArray)quantityObject;
+ }
+
+ if(expiredDateObject instanceof String){
+ expiredDateJsonArray.add(expiredDateObject);
+ }else if(expiredDateObject instanceof JSONArray){
+ expiredDateJsonArray = (JSONArray)expiredDateObject;
+ }
+
+ if(productNoObject instanceof String){
+ productNoJsonArray.add(productNoObject);
+ }else if(productNoObject instanceof JSONArray){
+ productNoJsonArray = (JSONArray)productNoObject;
+ }
+
+ if(preferentialPriceObject instanceof String){
+ preferentialPriceJsonArray.add(preferentialPriceObject);
+ }else if(preferentialPriceObject instanceof JSONArray){
+ preferentialPriceJsonArray = (JSONArray)preferentialPriceObject;
+ }*/
+
+ JSONArray transfersetJsonArray = null;
+ if(entryItemJsonObject instanceof JSONArray){
+ transfersetJsonArray = (JSONArray)entryItemJsonObject;
+ }else{
+ transfersetJsonArray = new JSONArray();
+ transfersetJsonArray.add(entryItemJsonObject);
+ }
+
+ if(transfersetJsonArray != null && transfersetJsonArray.size() > 0){
+ List entryItemList = new ArrayList();
+ for(int i = 0;i < transfersetJsonArray.size();i++){
+ JSONObject transfersetJsonObject = transfersetJsonArray.optJSONObject(i);
+ /*String sourceId = sourceIdJsonArray.optString(i);
+ Long batchId = batchIdJsonArray.optLong(i);
+ Inventory inventory = getInventory(sourceId);
+ if(inventory == null){
+
+ }
+ Object batchNumber = productNoJsonArray.opt(i);
+ Object expDate = expiredDateJsonArray.opt(i);
+ Object amount = quantityJsonArray.opt(i);
+ Object unitPrice = preferentialPriceJsonArray.opt(i);*/
+
+ String sourceId = transfersetJsonObject.optString("SOURCEID");
+ //根据物质id获得材料(物资)信息
+ Inventory inventory = getInventory(sourceId);
+ if(inventory == null){
+
+ }
+ Long batchId = transfersetJsonObject.optLong("BATCHID");
+ //批次号
+ Object batchNumber = transfersetJsonObject.opt("ProductNo");
+ Object expDate = transfersetJsonObject.opt("ExpiredDate");
+ Object amount = transfersetJsonObject.opt("QUANTITY");
+ Object unitPrice = transfersetJsonObject.opt("PreferentialPrice");
+
+ //生产日期(灭菌日期)
+ Object productDateTime = transfersetJsonObject.opt("ProductDateTime");
+
+ //生产厂家
+ Object ManufacturerName = transfersetJsonObject.opt("ManufacturerName");
+ //供应商
+ Object ProviderName = transfersetJsonObject.opt("ProviderName");
+
+ StorageEntryItem entryItem = new StorageEntryItem();
+ entryItem.setBatchNumber(batchNumber instanceof String ? ((String)batchNumber).trim() : null);
+ //如果批次号为空,则默认为系统定义的空批次
+ if(StringUtils.isEmpty(entryItem.getBatchNumber())){
+ entryItem.setBatchNumber(WebServiceClientHelper.EMPTY_BATCHNO);
+ }
+ try {
+ entryItem.setExpDate(expDate instanceof String ? new java.sql.Date(new SimpleDateFormat("yyyy-MM-dd").parse((String)expDate).getTime()) : null);
+ //生产日期对应灭菌批号
+ entryItem.setSterileBatchNumber(productDateTime instanceof String ? (String)productDateTime : null);
+ } catch (ParseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ entryItem.setAmount(amount instanceof String ? Long.valueOf((String)amount) : null);
+ entryItem.setUnitPrice((unitPrice instanceof String ? Double.valueOf((String)unitPrice) : null));
+ entryItem.setManufacturer(ManufacturerName instanceof String ? (String)ManufacturerName : null);
+ entryItem.setSupplierName(ProviderName instanceof String ? (String)ProviderName : null);
+ entryItem.setInventorySerialNumber(sourceId);
+ entryItem.setInventory(inventory);
+ entryItem.setSourceId(Long.parseLong(sourceId));
+ entryItem.setBatchIdFromHisSync(batchId);
+ entryItemList.add(entryItem);
+ }
+ entryItemArray = new StorageEntryItem[transfersetJsonArray.size()];
+ entryItemList.toArray(entryItemArray);
+ }
+ }
+ return entryItemArray;
+ }
+
+ @Override
+ public StorageEntryItem[] findOutEntryItem(String entrySerialNumber) {
+ return findInEntryItem(entrySerialNumber);
+ }
+
+ @Override
+ public Inventory getInventory() {
+ return null;
+ }
+
+ @Override
+ public Inventory getInventory(String inventorySerialNumber) {
+ if(StringUtils.isNotBlank(WebServiceClientHelper.inStorageDataXml)){
+ JSONObject json = JSONObject.fromObject(WebServiceClientHelper.inStorageDataXml);
+ Object entryItemJsonObject = json.opt("TRANSFERSET");
+ JSONArray transfersetJsonArray = null;
+ if(entryItemJsonObject instanceof JSONArray){
+ transfersetJsonArray = (JSONArray)entryItemJsonObject;
+ }else{
+ transfersetJsonArray = new JSONArray();
+ transfersetJsonArray.add(entryItemJsonObject);
+ }
+ for(int i=0;i storeCodeList,
+ List exchStoreCodeList) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public StorageEntry[] findOutEntryByTimeAndTwoStoreCodeList(Date startDate,
+ Date endDate, List storeCodeList,
+ List exchStoreCodeList) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public StorageEntry[] findReturnEntryByTimeAndTwoStoreCodeList(
+ Date startDate, Date endDate, List storeCodeList,
+ List exchStoreCodeList) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Inventory[] findInventory(String name, String specification) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public StorageEntry[] findInEntryByTimeAndBillBarcode(Date startDate,
+ Date endDate, String billBarCode) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManagerImpl.java
===================================================================
diff -u -r27379 -r28956
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManagerImpl.java (.../InventoryManagerImpl.java) (revision 27379)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/inventorymanagement/service/InventoryManagerImpl.java (.../InventoryManagerImpl.java) (revision 28956)
@@ -29,6 +29,7 @@
import com.forgon.Constants;
import com.forgon.directory.acegi.tools.AcegiHelper;
import com.forgon.directory.model.OrgUnit;
+import com.forgon.directory.service.OrgUnitManager;
import com.forgon.directory.vo.LoginUserData;
import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager;
import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager;
@@ -45,6 +46,7 @@
import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry;
import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem;
import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition;
+import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig;
import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse;
import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock;
import com.forgon.disinfectsystem.entity.materialmanager.MaterialEntry;
@@ -111,6 +113,9 @@
@Autowired(required=false)
private InvoicePlanDao invoicePlanDao;
+
+ @Autowired
+ private OrgUnitManager orgUnitManager;
/**
* 日志信息
@@ -757,7 +762,8 @@
//根据单号判断该入库单是否在系统中已经存在,如果已经存在则给予提示
boolean includeDiposable = false;//是否包含一次性物品
boolean includeMaterial = false;//是否包含材料
- WareHouse wareHouse = wareHouseManager.getDefaultWareHouseByUnitCode(AcegiHelper.getCurrentOrgUnitCode());
+ String currentOrgUnitCode = AcegiHelper.getCurrentOrgUnitCode();
+ WareHouse wareHouse = wareHouseManager.getDefaultWareHouseByUnitCode(currentOrgUnitCode);
if(wareHouse == null){
//根据his目标部门id对应idFromHisSync获取追溯系统的供应室编号idFromHisSync(暂时只针对广东省医)
if(DatabaseUtil.isPoIdValid(outEntry.getReceiveDepartmentID())){
@@ -770,6 +776,14 @@
}
}
}
+ if(wareHouse == null && StringUtils.isBlank(currentOrgUnitCode)){
+ // 广东省中医院,入库单同步退库时无法获取当前登录科室仓库,默认取一级供应室仓库
+ List orgUnitList = orgUnitManager.findOrgUnitBySupplyRoomType(SupplyRoomConfig.SUPPLYROOM_TYPE_FIRST_SUPPLYROOM);
+ if(CollectionUtils.isNotEmpty(orgUnitList)){
+ currentOrgUnitCode = orgUnitList.get(0).getOrgUnitCoding();
+ }
+ wareHouse = wareHouseManager.getDefaultWareHouseByUnitCode(currentOrgUnitCode);
+ }
if(wareHouse == null){
throw new DataCheckException(String.format("退库单【%s】获取不到仓库!",outEntrySerialNumber));
}
Fisheye: Tag 28956 refers to a dead (removed) revision in file `ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/Inventory/service/InventoryStockWebServiceImpl.java'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag 28956 refers to a dead (removed) revision in file `ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/Inventory/service/InventoryStockWebService.java'.
Fisheye: No comparison available. Pass `N' to diff?