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?