Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/LaoKenThirdPartyTousseReceiveRecordManagerImpl.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/LaoKenThirdPartyTousseReceiveRecordManagerImpl.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/LaoKenThirdPartyTousseReceiveRecordManagerImpl.java (revision 39447) @@ -0,0 +1,1412 @@ +package com.forgon.disinfectsystem.tousse.toussedefinition.service; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.BeanUtils; + +import com.forgon.Constants; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; +import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.service.OrgUnitManager; +import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager; +import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseDefinitionUtils; +import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; +import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; +import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ThirdPartyTousseInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ThirdPartyTousseReceiveRecord; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; +import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; +import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; +import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; +import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; +import com.forgon.disinfectsystem.tousse.toussedefinition.dto.TousseDefinitionParameterDto; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.MaterialInstanceVo; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseInstanceVo; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseReceiveRecordVo; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.TousseTurnaroundDetailsEvent; +import com.forgon.exception.SystemException; +import com.forgon.log.model.Log; +import com.forgon.log.service.LogManager; +import com.forgon.serialnumber.model.SerialNum; +import com.forgon.serialnumber.service.SerialNumManager; +import com.forgon.systemsetting.model.HttpOption; +import com.forgon.systemsetting.service.HttpOptionManager; +import com.forgon.tools.GB2Alpha; +import com.forgon.tools.GB2WB; +import com.forgon.tools.date.DateTools; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.BasePoManagerImpl; +import com.forgon.tools.util.ConfigUtils; +import com.forgon.tools.util.SqlUtils; + +/** + * 接收老肯医疗器械包的manager + * GZSLWQGSKY-1 + */ +public class LaoKenThirdPartyTousseReceiveRecordManagerImpl extends BasePoManagerImpl implements LaoKenThirdPartyTousseReceiveRecordManager { + + private LogManager appLogManager; + + private MaterialDefinitionManager materialDefinitionManager; + + private HttpOptionManager httpOptionManager; + + private TousseDefinitionManager tousseDefinitionManager; + + private SupplyRoomConfigManager supplyRoomConfigManager; + + private SerialNumManager serialNumManager; + + private OrgUnitManager orgUnitManager; + + private WareHouseManager wareHouseManager; + + private TousseInstanceManager tousseInstanceManager; + + private GoodsStockManager goodsStockManager; + + private ThirdPartyTousseReceiveRecordManager thirdPartyTousseReceiveRecordManager; + + public static final String EVENT_NAME_RECYCLING = "开始清洗时器械确认"; + + public static final String EVENT_NAME_WASH = "清洗"; + + public static final String EVENT_NAME_PACK = "检查组装"; + + public static final String EVENT_NAME_REVIEW = "打包"; + + public static final String EVENT_NAME_STERILIZATION = "灭菌器放行"; + + public void setThirdPartyTousseReceiveRecordManager(ThirdPartyTousseReceiveRecordManager thirdPartyTousseReceiveRecordManager) { + this.thirdPartyTousseReceiveRecordManager = thirdPartyTousseReceiveRecordManager; + } + + public void setGoodsStockManager(GoodsStockManager goodsStockManager) { + this.goodsStockManager = goodsStockManager; + } + + public void setTousseInstanceManager(TousseInstanceManager tousseInstanceManager) { + this.tousseInstanceManager = tousseInstanceManager; + } + + public void setWareHouseManager(WareHouseManager wareHouseManager) { + this.wareHouseManager = wareHouseManager; + } + + public void setOrgUnitManager(OrgUnitManager orgUnitManager) { + this.orgUnitManager = orgUnitManager; + } + + public void setSerialNumManager(SerialNumManager serialNumManager) { + this.serialNumManager = serialNumManager; + } + + public void setSupplyRoomConfigManager( + SupplyRoomConfigManager supplyRoomConfigManager) { + this.supplyRoomConfigManager = supplyRoomConfigManager; + } + + public void setTousseDefinitionManager(TousseDefinitionManager tousseDefinitionManager) { + this.tousseDefinitionManager = tousseDefinitionManager; + } + + public void setAppLogManager(LogManager appLogManager) { + this.appLogManager = appLogManager; + } + + public void setHttpOptionManager(HttpOptionManager httpOptionManager) { + this.httpOptionManager = httpOptionManager; + } + + public void setMaterialDefinitionManager(MaterialDefinitionManager materialDefinitionManager) { + this.materialDefinitionManager = materialDefinitionManager; + } + + @Override + public ThirdPartyTousseReceiveRecord receiveThirdPartyTousse(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo) { + if(thirdPartyTousseReceiveRecordVo == null){ + throw new SystemException("参数不能为空!"); + } + + //创建第三方器械包接收记录 + ThirdPartyTousseReceiveRecord thirdPartyTousseReceiveRecord = thirdPartyTousseReceiveRecordManager.buildThirdPartyTousseReceiveRecord(thirdPartyTousseReceiveRecordVo); + //创建包内材料、材料类别 + Map materialDefinitionMap = buildMaterialDefinition(thirdPartyTousseReceiveRecordVo); + //创建器械包定义 + Map tousseDefinitionMap = buildTousseDefinition(thirdPartyTousseReceiveRecordVo, materialDefinitionMap); + //创建标识牌 + Map> tousseDefinitionIdIdnumberIDCardInstanceMap = buildIDCardDefinition(thirdPartyTousseReceiveRecordVo, tousseDefinitionMap); + //创建器械包实例 + buildTousseInstance(thirdPartyTousseReceiveRecord, thirdPartyTousseReceiveRecordVo, tousseDefinitionMap, tousseDefinitionIdIdnumberIDCardInstanceMap); + + return thirdPartyTousseReceiveRecord; + } + + /** + * 创建器械包实例 + * @param thirdPartyTousseReceiveRecordVo + * @param tousseDefinitionMap + * @param tousseDefinitionIdIdnumberIDCardInstanceMap + */ + private void buildTousseInstance(ThirdPartyTousseReceiveRecord thirdPartyTousseReceiveRecord, ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo, Map tousseDefinitionMap, + Map> tousseDefinitionIdIdnumberIDCardInstanceMap) { + if(thirdPartyTousseReceiveRecordVo == null){ + throw new SystemException("参数不能为空!"); + } + List thirdPartyTousseInstances = thirdPartyTousseReceiveRecordVo.getThirdPartyTousseInstances(); + if(CollectionUtils.isEmpty(thirdPartyTousseInstances)){ + throw new SystemException("参数不能为空!"); + } + + WareHouse wareHouse = wareHouseManager.getWareHouseById(thirdPartyTousseReceiveRecordVo.getWareHouseId()); + OrgUnit orgUnit = orgUnitManager.getByCode(wareHouse.getOrgUnitCode()); + Map barcodeThirdPartyTousseInstanceMap = getBarcodeThirdPartyTousseInstanceMap(thirdPartyTousseReceiveRecord); + Map idIDCardDefinitionMap = getIdIDCardDefinitionMap(tousseDefinitionIdIdnumberIDCardInstanceMap); + List tousseInstanceList = new ArrayList(); + for (ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo : thirdPartyTousseInstances) { + String tousseName = thirdPartyTousseInstanceVo.getTousseName(); + TousseDefinition td = tousseDefinitionMap.get(tousseName); + if(td == null){ + throw new SystemException(String.format("名称为%s的器械包定义不存在!", tousseName)); + } + ThirdPartyTousseInstance thirdPartyTousseInstance = barcodeThirdPartyTousseInstanceMap.get(thirdPartyTousseInstanceVo.getBarcode()); + if(thirdPartyTousseInstance == null){ + throw new SystemException(String.format("%s(%s)的%s接收失败,未找到对应的ThirdPartyTousseInstance", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode())); + } + //创建器械包实例 + TousseInstance tousseInstance = new TousseInstance(); + String barcodeStr = serialNumManager + .getSerialNumberStr(SerialNum.TYPE_BARCODE); + tousseInstance.setBarcode(barcodeStr); + tousseInstance.setType(BarcodeDevice.BARCODE_TYPE_PACKAGE); + tousseInstance.setTousseDefinition(td); + tousseInstance.setMaterialAmount(td.getMaterialAmount()); + tousseInstance.setDisposableGoodAmount(td.getDisposableGoodsAmount()); + tousseInstance.setMaterialSplitAmount(td.getMaterialSplitAmount()); + tousseInstance.setStatisticsAmount(td.getTousseAmount()); + tousseInstance.setTousseName(td.getName()); + + // 设置临床科室编码 + if(DatabaseUtil.isPoIdValid(thirdPartyTousseInstanceVo.getOrgUnitId())){ + OrgUnit depart = orgUnitManager.get(thirdPartyTousseInstanceVo.getOrgUnitId()); + tousseInstance.setDepart(depart.getName()); + tousseInstance.setDepartCoding(depart.getOrgUnitCoding()); + } + tousseInstance.setRemark("该器械包由第三方装配。"); + // 价格及浮动价格 + double price = td.getPrice(); + if(td.isDisinfection()){ + price = tousseDefinitionManager.getDisinfectGoodsTotalPrice(td); + } + double fPrice = supplyRoomConfigManager + .getTousseFluctuationPrice(price); + tousseInstance.setPrice(price); + tousseInstance.setFluctuationPrice(fPrice); + tousseInstance.setDiscountPriceBySelf(); + + + tousseInstance.setType(BarcodeDevice.BARCODE_TYPE_PACKAGE); + tousseInstance.setPackageType(td.getPackageType()); + tousseInstance.setStatus(TousseInstance.STATUS_STERILED); + tousseInstance.setOrgUnitCoding(orgUnit.getOrgUnitCoding()); + tousseInstance.setOrgUnitName(orgUnit.getName()); + tousseInstance.setUnTraceableTousse(Constants.STR_YES.equals(td.getIsTraceable()) ? false : true); + + + //保存闭环流程信息 + setTurnaroundEvent(tousseInstance, thirdPartyTousseInstanceVo); + + tousseInstanceManager.save(tousseInstance); + //绑定标识牌 + if(DatabaseUtil.isPoIdValid(thirdPartyTousseInstanceVo.getInstanceID())){ + IDCardInstance idCardInstance = getIDCardInstance(td.getId(), thirdPartyTousseInstanceVo.getInstanceID(), tousseDefinitionIdIdnumberIDCardInstanceMap); + if(idCardInstance == null){ + throw new SystemException(String.format("名称为%s的器械包定义不存在标识牌编号为%s的标识牌实例!", tousseName, thirdPartyTousseInstanceVo.getInstanceID())); + } + String message = null; + try { + idCardInstance.isCanUse(objectDao, true); + } catch (Exception e) { + message = e.getMessage(); + } + if(StringUtils.isNotBlank(message)){ + throw new SystemException(String.format("%s(%s)接收失败,编号为%s的标识牌无法使用,原因:%s", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), thirdPartyTousseInstanceVo.getInstanceID(), message)); + } + addTousseInstanceToIdCardInstance(tousseInstance, idCardInstance, idIDCardDefinitionMap.get(idCardInstance.getIdCardDefinitionID())); + } + //关联第三方器械包记录 + tousseInstance.setThirdPartyTousseInstanceId(thirdPartyTousseInstance.getId()); + thirdPartyTousseInstance.setTousseInstanceId(tousseInstance.getId()); + tousseInstanceList.add(tousseInstance); + } + // 更新库存 + updateGoodsStock(wareHouse, tousseInstanceList); + } + + /** + * 获取条码及第三方器械包记录的map + * @param thirdPartyTousseReceiveRecord + * @return + */ + private Map getBarcodeThirdPartyTousseInstanceMap(ThirdPartyTousseReceiveRecord thirdPartyTousseReceiveRecord) { + Map barcodeThirdPartyTousseInstanceMap = new HashMap(); + if(thirdPartyTousseReceiveRecord == null){ + throw new RuntimeException("第三方器械包接收记录不能为空!"); + } + List thirdPartyTousseInstances = thirdPartyTousseReceiveRecord.getThirdPartyTousseInstances(); + if(CollectionUtils.isEmpty(thirdPartyTousseInstances)){ + throw new RuntimeException("第三方器械包接收记录关联的第三方器械不能为空!"); + } + for (ThirdPartyTousseInstance thirdPartyTousseInstance : thirdPartyTousseInstances) { + barcodeThirdPartyTousseInstanceMap.put(thirdPartyTousseInstance.getBarcode(), thirdPartyTousseInstance); + } + return barcodeThirdPartyTousseInstanceMap; + } + + /** + * 绑定标识牌 + * @param tousseInstance + * @param idCardInstance + * @param idCardDefinition + */ + private void addTousseInstanceToIdCardInstance(TousseInstance tousseInstance, IDCardInstance idCardInstance, + IDCardDefinition idCardDefinition) { + if(idCardDefinition == null){ + throw new RuntimeException("标识牌定义已被删除!"); + } + if(idCardInstance == null){ + throw new RuntimeException("标识牌已被删除!"); + } + tousseInstance.setIdCardInstanceID(idCardInstance.getId()); + tousseInstance.setIdCardInstanceBarcode(idCardInstance.getBarcode()); + + //查询该标识牌对应的上一个包实例,并将新的包实例的上一个包实例id进行设置 + TousseInstance lastTousseInstance = null; + if(DatabaseUtil.isPoIdValid(idCardInstance.getLastTousseInstanceId())){ + lastTousseInstance = tousseInstanceManager.get(idCardInstance.getLastTousseInstanceId()); + if(lastTousseInstance != null){ + tousseInstance.setLastTousseInstanceId(lastTousseInstance.getId()); + } + } + int autoDiscardCount = TousseDefinitionUtils.getAutoDiscardCount(tousseInstance.getTousseDefinition()); + Long useAmount = idCardInstance.getUseAmount(); + if (useAmount != null){ + /*if(packingTask != null + && (PackingTask.TASK_QUALITY_MONITOR.equals(packingTask.getTaskType()) + || PackingTask.TASK_RETURNGOODS.equals(packingTask.getTaskType()))){ + //质量监测重新装配标识牌使用次数不需要增加 + }else{*/ + useAmount += 1; + //} + } else { + useAmount = 1L; + } + // 此处已做并发控制,可以直接增加次数,不用汇总所有标识牌实例 + idCardInstance.setUseAmount(useAmount); + Long useAmountOfDef = idCardDefinition.getUseAmount(); + if (useAmountOfDef != null){ + /*if(packingTask != null + && (PackingTask.TASK_QUALITY_MONITOR.equals(packingTask.getTaskType()) + || PackingTask.TASK_RETURNGOODS.equals(packingTask.getTaskType()))){ + //质量监测重新装配标识牌使用次数不需要增加 + }else{*/ + useAmountOfDef += 1; + //} + } + else{ + useAmountOfDef = 1L; + } + idCardDefinition.setUseAmount(useAmountOfDef); + tousseInstance.setUseAmount(useAmountOfDef); + // 判断是否超出自动废弃计数 + if(autoDiscardCount > 0){ + if(useAmount >= autoDiscardCount){ + idCardInstance.setStatus(IDCardDefinition.STATUS_DISCARDED); + // 废弃当前的之后新建一个 +// IDCardInstance newIdCardInstance = idCardInstanceManager.newIdCardInstance(idCardDefinition, tousseDefinition, IDCardInstance.STATUS_USING,false, true); + } + } + objectDao.saveOrUpdate(tousseInstance); + // 中大附一新功能,如果状态为可以重新使用,改为使用中 + if(idCardDefinition.isCanReuse()){ + idCardDefinition.setDeleted(IDCardDefinition.INT_STATUS_USING); + } + idCardInstance.safelySetLastTousseInstanceId(tousseInstance.getId()); + idCardDefinition.safelySetLastTousseInstanceId(tousseInstance.getId()); + objectDao.update(idCardInstance); + objectDao.update(idCardDefinition); + } + + /** + * 获取标识牌定义map + * @param tousseDefinitionIdIdnumberIDCardInstanceMap + * @return + */ + @SuppressWarnings("unchecked") + private Map getIdIDCardDefinitionMap( + Map> tousseDefinitionIdIdnumberIDCardInstanceMap) { + Map idIDCardDefinitionMap = new HashMap(); + if(MapUtils.isEmpty(tousseDefinitionIdIdnumberIDCardInstanceMap)){ + return idIDCardDefinitionMap; + } + List idCardDefinitionIdList = new ArrayList(); + for (Entry> entry : tousseDefinitionIdIdnumberIDCardInstanceMap.entrySet()) { + Map IDCardInstanceMap = entry.getValue(); + if(MapUtils.isEmpty(IDCardInstanceMap)){ + continue; + } + for (Entry instanceEntry : IDCardInstanceMap.entrySet()) { + IDCardInstance idCardInstance = instanceEntry.getValue(); + if(idCardInstance != null){ + idCardDefinitionIdList.add(idCardInstance.getIdCardDefinitionID()); + } + } + } + if(CollectionUtils.isEmpty(idCardDefinitionIdList)){ + return idIDCardDefinitionMap; + } + List IDCardDefinitionList = objectDao.findByIds(IDCardDefinition.class.getSimpleName(), idCardDefinitionIdList); + if(CollectionUtils.isEmpty(IDCardDefinitionList)){ + return idIDCardDefinitionMap; + } + for (IDCardDefinition idCardDefinition : IDCardDefinitionList) { + idIDCardDefinitionMap.put(idCardDefinition.getId(), idCardDefinition); + } + return idIDCardDefinitionMap; + } + + /** + * 更新库存 + * @param wareHouse + * @param tousseList + */ + private void updateGoodsStock(WareHouse wareHouse, List tousseList) { + if(wareHouse == null){ + throw new RuntimeException("该科室仓库未定义!"); + } + + if(CollectionUtils.isEmpty(tousseList)){ + throw new RuntimeException("没有需要更新库存的器械包实例!"); + } + + Collection tiIds = new ArrayList(); + Collection tiList = new ArrayList(); + if(CollectionUtils.isNotEmpty(tousseList)){ + for (TousseInstance ti : tousseList) { + if(TousseInstance.STATUS_DISINFECTED.equals(ti.getStatus()) + || TousseInstance.STATUS_STERILED.equals(ti.getStatus())){ + tiList.add(ti); + tiIds.add(ti.getId()); + ti.setWareHouseId(wareHouse.getId()); + ti.setWareHouseName(wareHouse.getName()); + } + } + } + if(tiList != null && tiList.size() > 0){ + //tousseInstanceManager.batchSetToWarehouse(wareHouse, tiIds); + List goodsStock = new ArrayList<>(); + goodsStockManager.addToList(goodsStock, tiList, wareHouse); + try { + goodsStockManager.saveOrUpdateGoodsStock(goodsStock, GoodsStockManager.MODE_INSTOCK); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + } + } + + /** + * 保存闭环流程信息 + * @param tousseInstance + * @param events + */ + private void setTurnaroundEvent(TousseInstance tousseInstance, ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo) { + + List events = thirdPartyTousseInstanceVo.getEvents(); + if(CollectionUtils.isEmpty(events)){ + throw new SystemException("流程事件列表不能为空!"); + } + for (TousseTurnaroundDetailsEvent event : events) { + if(StringUtils.equals(event.getEventName(), EVENT_NAME_RECYCLING)){ + tousseInstance.setRecyclingUser(event.getEventOperator()); + tousseInstance.setRecyclingTime(event.getDate()); + }else if(StringUtils.equals(event.getEventName(), EVENT_NAME_WASH)){ + tousseInstance.setWashOperator(event.getEventOperator()); + tousseInstance.setWashStartTime(event.getDate()); + tousseInstance.setDisinfectIdentification(event.getMachine()); + }else if(StringUtils.equals(event.getEventName(), EVENT_NAME_PACK)){ + String date = event.getDate(); + if(StringUtils.isBlank(date)){ + throw new SystemException(String.format("%s(%s)的%s操作时间为空", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), event.getEventName())); + } + date = date.replace("/", "-"); + Date operationTime = DateTools.coverStrToDate(date, DateTools.COMMON_DATE_HM); + if(operationTime == null){ + throw new SystemException(String.format("%s(%s)的%s操作时间%s格式异常", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), event.getEventName(), event.getDate())); + } + tousseInstance.setOperationTime(operationTime); + tousseInstance.setOperator(event.getEventOperator()); + }else if(StringUtils.equals(event.getEventName(), EVENT_NAME_REVIEW)){ + String date = event.getDate(); + if(StringUtils.isBlank(date)){ + throw new SystemException(String.format("%s(%s)的%s操作时间为空", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), event.getEventName())); + } + date = date.replace("/", "-"); + Date reviewTime = DateTools.coverStrToDate(date, DateTools.COMMON_DATE_HM); + if(reviewTime == null){ + throw new SystemException(String.format("%s(%s)的%s操作时间%s格式异常", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), event.getEventName(), event.getDate())); + } + tousseInstance.setReviewTime(reviewTime); + tousseInstance.setReviewer(event.getEventOperator()); + }else if(StringUtils.equals(event.getEventName(), EVENT_NAME_STERILIZATION)){ + String date = event.getDate(); + if(StringUtils.isBlank(date)){ + throw new SystemException(String.format("%s(%s)的%s操作时间为空", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), event.getEventName())); + } + date = date.replace("/", "-"); + Date sterileStartTimeObj = DateTools.coverStrToDate(date, DateTools.COMMON_DATE_HM); + if(sterileStartTimeObj == null){ + throw new SystemException(String.format("%s(%s)的%s操作时间%s格式异常", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), event.getEventName(), event.getDate())); + } + tousseInstance.setSterilizerName(event.getMachine()); + tousseInstance.setSterilizationUser(event.getEventOperator()); + tousseInstance.setSterileStartTime(DateTools.getFormatDateStr(sterileStartTimeObj, DateTools.COMMON_DATE_HMS)); + } + } + } + + /** + * 根据器械包定义id及标识牌编号 + * @param tousseDefinition + * @param instanceID + * @param tousseDefinitionIdIdnumberIDCardInstanceMap + * @return + */ + private IDCardInstance getIDCardInstance(Long tousseDefinitionId, String instanceID, + Map> tousseDefinitionIdIdnumberIDCardInstanceMap) { + Map idCardInstanceMap = tousseDefinitionIdIdnumberIDCardInstanceMap.get(tousseDefinitionId); + if(MapUtils.isEmpty(idCardInstanceMap)){ + return null; + } + return idCardInstanceMap.get(instanceID); + } + + /** + * 创建标识牌: + * 根据器械包定义id及标识牌编号匹配查询标识牌,无匹配的标识牌则创建标识牌 + * @param thirdPartyTousseReceiveRecordVo + * @param tousseDefinitionMap + */ + private Map> buildIDCardDefinition(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo, Map tousseDefinitionMap) { + if(thirdPartyTousseReceiveRecordVo == null){ + throw new SystemException("参数不能为空!"); + } + List thirdPartyTousseInstances = thirdPartyTousseReceiveRecordVo.getThirdPartyTousseInstances(); + if(CollectionUtils.isEmpty(thirdPartyTousseInstances)){ + throw new SystemException("参数不能为空!"); + } + //根据器械包定义id及编号,查询已经保存的标识牌:器械包定义id-标识牌编号-标识牌实例的map + Map> tousseDefinitionIdIdNumberIDCardInstanceMap = getTousseDefinitionIdIdNumberIDCardInstanceMap(thirdPartyTousseInstances, tousseDefinitionMap); + //创建标识牌实例 + Map> addIDCardDefinitionIdNumberMap = new HashMap>(); + for (ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo : thirdPartyTousseInstances) { + String tousseName = thirdPartyTousseInstanceVo.getTousseName(); + TousseDefinition tousseDefinition = tousseDefinitionMap.get(tousseName); + if(tousseDefinition == null){ + throw new SystemException(String.format("名称为%s的器械包定义不存在!", tousseName)); + } + String instanceID = thirdPartyTousseInstanceVo.getInstanceID(); + if(StringUtils.isBlank(instanceID)){ + continue; + } + Map idNumberIDCardInstanceMap = tousseDefinitionIdIdNumberIDCardInstanceMap.get(tousseDefinition.getId()); + if(MapUtils.isEmpty(idNumberIDCardInstanceMap)){ + //需要创建新标识牌的标识牌编号 + List idNumberList = addIDCardDefinitionIdNumberMap.get(tousseDefinition.getId()); + if(idNumberList == null){ + idNumberList = new ArrayList(); + } + idNumberList.add(instanceID); + addIDCardDefinitionIdNumberMap.put(tousseDefinition.getName(), idNumberList); + continue; + } + boolean exitIDCardInstance = false; + for (Entry entry : idNumberIDCardInstanceMap.entrySet()) { + if(StringUtils.equals(entry.getKey(), instanceID)){ + exitIDCardInstance = true; + break; + } + } + if(exitIDCardInstance){ + continue; + } + //需要创建新标识牌的标识牌编号 + List idNumberList = addIDCardDefinitionIdNumberMap.get(tousseDefinition.getId()); + if(idNumberList == null){ + idNumberList = new ArrayList(); + } + idNumberList.add(instanceID); + addIDCardDefinitionIdNumberMap.put(tousseDefinition.getName(), idNumberList); + } + + //添加标识牌 + addIDCardDefinition(tousseDefinitionIdIdNumberIDCardInstanceMap, addIDCardDefinitionIdNumberMap, tousseDefinitionMap); + + return tousseDefinitionIdIdNumberIDCardInstanceMap; + } + + /** + * 添加标识牌 + * @param addIDCardDefinitionIdNumberMap + * @param tousseDefinitionMap + */ + private void addIDCardDefinition(Map> tousseDefinitionIdIdNumberIDCardInstanceMap, + Map> addIDCardDefinitionIdNumberMap, + Map tousseDefinitionMap) { + for (Entry> entry : addIDCardDefinitionIdNumberMap.entrySet()) { + String tousseDefinitionName = entry.getKey(); + List idNumberList = entry.getValue(); + if(StringUtils.isBlank(tousseDefinitionName) + || CollectionUtils.isEmpty(idNumberList)){ + continue; + } + TousseDefinition tousseDefinition = tousseDefinitionMap.get(tousseDefinitionName); + if(tousseDefinition == null){ + throw new SystemException(String.format("名称为%s的器械包定义不存在!", tousseDefinitionName)); + } + + for (String idNumber : idNumberList) { + IDCardDefinition idCardDefinition = new IDCardDefinition(); + idCardDefinition.setTousseDefinitionID(tousseDefinition.getId()); + idCardDefinition.setIdNumber(idNumber); + objectDao.save(idCardDefinition); + + newAndSaveContainer(idCardDefinition); + + IDCardInstance idCardInstance = new IDCardInstance(); + String barcode = serialNumManager + .getSerialNumberStr(SerialNum.TYPE_BARCODE); + idCardInstance.setBarcode(barcode); + idCardInstance.setStatus(IDCardInstance.STATUS_USING); + idCardInstance.setIdCardDefinitionID(idCardDefinition.getId()); + idCardInstance.setTousseName(tousseDefinition.getName()); + objectDao.save(idCardInstance); + idCardDefinition.setCurIdCardInstanceBarcode(idCardInstance.getBarcode()); + objectDao.update(idCardDefinition); + + //新生成的标识牌实例保存到map中 + Map idNumberIDCardInstanceMap = tousseDefinitionIdIdNumberIDCardInstanceMap.get(tousseDefinition.getId()); + if(idNumberIDCardInstanceMap == null){ + idNumberIDCardInstanceMap = new HashMap(); + } + idNumberIDCardInstanceMap.put(idNumber, idCardInstance); + tousseDefinitionIdIdNumberIDCardInstanceMap.put(tousseDefinition.getId(), idNumberIDCardInstanceMap); + } + } + } + + /** + * 创建篮筐 + * @param idCardDefinition + */ + public void newAndSaveContainer(IDCardDefinition idCardDefinition) { + if(idCardDefinition.getContainerId() != null){ + return; + } + Container container = newContainer(idCardDefinition); + //发现有些项目的标识牌定义对应的器械包定义为空,所以不会有对应的清洗篮筐 + if(container != null){ + objectDao.save(container); + idCardDefinition.setContainerBarcode(container.getBarcode()); + idCardDefinition.setContainerId(container.getId()); + objectDao.saveOrUpdate(idCardDefinition); + } + } + + /** + * 创建篮筐 + * @param idCardDefinition + * @return + */ + public Container newContainer(IDCardDefinition idCardDefinition) { + Container container = null; + TousseDefinition tousseDefinition = idCardDefinition.getTousseDefinition(objectDao); + if(tousseDefinition != null){ + container = new Container(); + container.setType(BarcodeDevice.BARCODE_TYPE_CONTAINER); + // 设置条码 + String barcode = container.getBarcode(); + if (StringUtils.isBlank(container.getBarcode())) { + barcode = serialNumManager + .getSerialNumberStr(SerialNum.TYPE_BARCODE); + container.setBarcode(barcode); + } + container.setIdCardDefinitionId(idCardDefinition.getId()); + container.setPurpose(Container.CONTAINER_PURPOSE_CLEAN_BASKET); + container.setContainerType(Container.CONTAINERTYPE_BASKET); + String tousseName = tousseDefinition.getName(); + container.setContainerName(String.format("%s(标识牌%s)", tousseName,idCardDefinition.getId())); + SupplyRoomConfig supplyRoom = supplyRoomConfigManager + .getFirstSupplyRoomConfig(); + // 篮筐的科室优先设置为器械包定义的“优先处理科室”(NYSY-26 凡是二级供应室的器械只能显示在二级供应室的清洗消毒功能列表中,不能显示在一级供应室的清洗消毒功能列表里面) + String handlerDepartCode = tousseDefinition.getHandlerDepartCode(); + String where = " from " + SupplyRoomConfig.class.getSimpleName() + " po where po.orgUnitCoding = '" + handlerDepartCode + "' and po.supplyRoomType in (" + SupplyRoomConfig.SUPPLYROOM_TYPE_FIRST_SUPPLYROOM + ", " + + SupplyRoomConfig.SUPPLYROOM_TYPE_SECOND_SUPPLYROOM + ")"; + @SuppressWarnings("unchecked") + List list = objectDao.findByHql(where, 0, 1); + if(CollectionUtils.isNotEmpty(list)){ + supplyRoom = list.get(0); + } + if (supplyRoom != null) { + container.setDepartCode(supplyRoom.getOrgUnitCoding()); + container.setDepartName(supplyRoom.getOrgUnitName()); + } + } + return container; + } + + /** + * 查询器械包定义id-标识牌编号-标识牌实例的map + * @param thirdPartyTousseInstances + * @param tousseDefinitionMap + * @return + */ + @SuppressWarnings("unchecked") + private Map> getTousseDefinitionIdIdNumberIDCardInstanceMap( + List thirdPartyTousseInstances, Map tousseDefinitionMap) { + Map> tousseDefinitionIdIdnumberIDCardInstanceMap = new HashMap>(); + //器械包定义id + List tousseDefinitionIdList = new ArrayList(); + //标识牌编号 + List idNumberList = new ArrayList(); + for (ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo : thirdPartyTousseInstances) { + String instanceID = thirdPartyTousseInstanceVo.getInstanceID(); + String tousseName = thirdPartyTousseInstanceVo.getTousseName(); + if(StringUtils.isBlank(instanceID)){ + continue; + } + TousseDefinition tousseDefinition = tousseDefinitionMap.get(tousseName); + if(tousseDefinition == null){ + throw new SystemException(String.format("名称为%s的器械包定义不存在!", tousseName)); + } + idNumberList.add(instanceID); + tousseDefinitionIdList.add(tousseDefinition.getId()); + } + if(CollectionUtils.isEmpty(idNumberList)){ + //无标识牌 + return tousseDefinitionIdIdnumberIDCardInstanceMap; + } + StringBuffer hql = new StringBuffer(); + hql.append("select po from "); + hql.append(IDCardDefinition.class.getSimpleName()); + hql.append(" po where "); + hql.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseDefinitionID", tousseDefinitionIdList)); + hql.append(" and "); + hql.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("idNumber", idNumberList)); + + List IDCardDefinitionList = objectDao.findByHql(hql.toString()); + if(CollectionUtils.isEmpty(IDCardDefinitionList)){ + return tousseDefinitionIdIdnumberIDCardInstanceMap; + } + + //获取当前标识牌条码的标识牌实例 + Map barcodeIDCardInstanceMap = getCurIdCardInstanceBarcodeIDCardInstanceMap(IDCardDefinitionList); + + for (IDCardDefinition idCardDefinition : IDCardDefinitionList) { + Long tousseDefinitionID = idCardDefinition.getTousseDefinitionID(); + String idNumber = idCardDefinition.getIdNumber(); + Map IDCardInstanceMap = tousseDefinitionIdIdnumberIDCardInstanceMap.get(tousseDefinitionID); + if(IDCardInstanceMap == null){ + IDCardInstanceMap = new HashMap(); + } + IDCardInstanceMap.put(idNumber, barcodeIDCardInstanceMap.get(idCardDefinition.getCurIdCardInstanceBarcode())); + tousseDefinitionIdIdnumberIDCardInstanceMap.put(tousseDefinitionID, IDCardInstanceMap); + } + return tousseDefinitionIdIdnumberIDCardInstanceMap; + } + + /** + * 获取标识牌定义当前标识牌条码的标识牌实例 + * @param iDCardDefinitionList + * @return + */ + @SuppressWarnings("unchecked") + private Map getCurIdCardInstanceBarcodeIDCardInstanceMap(List iDCardDefinitionList) { + Map barcodeIDCardInstanceMap = new HashMap(); + if(CollectionUtils.isEmpty(iDCardDefinitionList)){ + return barcodeIDCardInstanceMap; + } + List barcodeList = new ArrayList(); + for (IDCardDefinition IDCardDefinition : iDCardDefinitionList) { + String curIdCardInstanceBarcode = IDCardDefinition.getCurIdCardInstanceBarcode(); + if(StringUtils.isNotBlank(curIdCardInstanceBarcode)){ + barcodeList.add(curIdCardInstanceBarcode); + } + } + if(CollectionUtils.isEmpty(barcodeList)){ + throw new SystemException("标识牌当前条码为空!"); + } + StringBuffer hql = new StringBuffer(); + hql.append("select po from "); + hql.append(BarcodeDevice.class.getSimpleName()); + hql.append(" po where "); + hql.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("barcode", barcodeList)); + List barcodeDeviceList = objectDao.findByHql(hql.toString()); + if(CollectionUtils.isNotEmpty(barcodeDeviceList)){ + for (BarcodeDevice barcodeDevice : barcodeDeviceList) { + if(barcodeDevice instanceof IDCardInstance){ + IDCardInstance idCardInstance = (IDCardInstance) barcodeDevice; + barcodeIDCardInstanceMap.put(idCardInstance.getBarcode(), idCardInstance); + } + } + } + return barcodeIDCardInstanceMap; + } + + /** + * 创建器械包定义: + * 先根据第三方定义id关联查询; + * 再根据名称关联查询,如果存在同名的器械包,则修改“是否外来器械包”、“禁用标识牌”; + * 如果不存在同名的器械包,则新建器械包定义; + * @param thirdPartyTousseReceiveRecordVo + * @param materialDefinitionMap + */ + private Map buildTousseDefinition(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo, Map materialDefinitionMap) { + if(thirdPartyTousseReceiveRecordVo == null){ + throw new SystemException("参数不能为空!"); + } + List thirdPartyTousseInstances = thirdPartyTousseReceiveRecordVo.getThirdPartyTousseInstances(); + if(CollectionUtils.isEmpty(thirdPartyTousseInstances)){ + throw new SystemException("待接收的第三方器械包不能为空!"); + } + if(MapUtils.isEmpty(materialDefinitionMap)){ + throw new SystemException("材料map不能为空!"); + } + + //先根据第三方定义id关联查询器械包定义 + Map thirdPartyDefinitionIdTousseDefinitionMap = getThirdPartyDefinitionIdTousseDefinitionMap(thirdPartyTousseInstances); + + //再根据名称关联查询器械包定义 + Map nameTousseDefinitionMap = getNameTousseDefinitionMap(thirdPartyTousseInstances, thirdPartyDefinitionIdTousseDefinitionMap); + + //新建器械包定义的日志 + List saveLogs = new ArrayList(); + //List updateLogs = new ArrayList(); + Map tousseDefinitionMap = new HashMap(); + for (ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo : thirdPartyTousseInstances) { + String tousseName = thirdPartyTousseInstanceVo.getTousseName(); + TousseDefinition tousseDefinition = getDBTousseDefinition(thirdPartyTousseInstanceVo, thirdPartyDefinitionIdTousseDefinitionMap, nameTousseDefinitionMap); + if(tousseDefinition == null){ + //新建器械包定义 + tousseDefinition = newLaoKenTousseDefinition(thirdPartyTousseInstanceVo, materialDefinitionMap); + String saveLog = String.format("第三方器械包接收后创建包定义,包名称为“%s”,消毒包ID为“%s”。", tousseName, thirdPartyTousseInstanceVo.getItemDefinitionID()); + saveLogs.add(saveLog); + }else{ + //StringBuffer modifyContent = new StringBuffer(""); + //修改前的器械包定义 + TousseDefinition updateTd = new TousseDefinition(); + BeanUtils.copyProperties(tousseDefinition, updateTd, "id"); + //修改器械包定义名称 + if(!StringUtils.equals(tousseName, tousseDefinition.getName())){ + updateTd.setName(tousseName); + //modifyContent.append("字段:器械包名称,原值:").append(origineTd.getName()).append(",新值:").append(tousseDefinition.getName()).append("。"); + } + //修改“是否外来器械包”、“禁用标识牌”; + String isForeignTousse = getIsForeignTousse(thirdPartyTousseInstanceVo); + if(!StringUtils.equals(isForeignTousse, tousseDefinition.getIsForeignTousse())){ + updateTd.setIsForeignTousse(isForeignTousse); + //modifyContent.append("字段:是否为:外来器械包当普通器械包,原值:").append(origineTd.getIsForeignTousse()).append(",新值:").append(isForeignTousse).append("。"); + } + //修改“禁用标识牌”; + String isDisableIDCard = getIsDisableIDCard(thirdPartyTousseInstanceVo); + if(!StringUtils.equals(isDisableIDCard, tousseDefinition.getIsDisableIDCard())){ + updateTd.setIsDisableIDCard(isDisableIDCard); + //modifyContent.append("字段:是否禁用标识牌,原值:").append(origineTd.getIsDisableIDCard()).append(",新值:").append(isDisableIDCard).append("。"); + } + //修改材料明细 + TousseDefinitionParameterDto tdParameterDto = buildTousseDefinitionParameterDto(thirdPartyTousseInstanceVo, materialDefinitionMap); + tousseDefinitionManager.saveOrUpdateTousseDefinition(tousseDefinition, updateTd, tdParameterDto); + /*if(StringUtils.isNotBlank(modifyContent.toString())){ + updateLogs.add(modifyContent.toString()); + }*/ + } + tousseDefinition.setThirdPartyDefinitionId(thirdPartyTousseInstanceVo.getItemDefinitionID()); + tousseDefinitionMap.put(tousseName, tousseDefinition); + } + appLogManager.batchSaveLog(AcegiHelper.getLoginUser(), Log.MODEL_TOUSSEDEFINITION, Log.TYPE_ADD, saveLogs); + //appLogManager.batchSaveLog(AcegiHelper.getLoginUser(), Log.MODEL_TOUSSEDEFINITION, Log.TYPE_UPDATE, updateLogs); + return tousseDefinitionMap; + } + + /** + * 先根据第三方定义id关联查询; + * 再根据名称关联查询; + * @param thirdPartyTousseInstanceVo + * @param thirdPartyDefinitionIdTousseDefinitionMap + * @param nameTousseDefinitionMap + * @return + */ + private TousseDefinition getDBTousseDefinition(ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo, + Map thirdPartyDefinitionIdTousseDefinitionMap, + Map nameTousseDefinitionMap) { + if(thirdPartyTousseInstanceVo == null){ + return null; + } + TousseDefinition tousseDefinition = null; + if(MapUtils.isNotEmpty(thirdPartyDefinitionIdTousseDefinitionMap)){ + tousseDefinition = thirdPartyDefinitionIdTousseDefinitionMap.get(thirdPartyTousseInstanceVo.getItemDefinitionID()); + } + if(tousseDefinition == null && MapUtils.isNotEmpty(nameTousseDefinitionMap)){ + tousseDefinition = nameTousseDefinitionMap.get(thirdPartyTousseInstanceVo.getTousseName()); + } + return tousseDefinition; + } + + /** + * 根据器械包名称关联查询器械包定义 + * @param thirdPartyTousseInstances + * @param thirdPartyDefinitionIdTousseDefinitionMap + * @return + */ + @SuppressWarnings("unchecked") + private Map getNameTousseDefinitionMap(List thirdPartyTousseInstances, + Map thirdPartyDefinitionIdTousseDefinitionMap) { + Map nameTousseDefinitionMap = new HashMap(); + List tousseNameList = new ArrayList(); + for (ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo : thirdPartyTousseInstances) { + Long itemDefinitionID = thirdPartyTousseInstanceVo.getItemDefinitionID(); + if(!DatabaseUtil.isPoIdValid(itemDefinitionID)){ + throw new SystemException("消毒包的包定义ID不能为空!"); + } + if(thirdPartyDefinitionIdTousseDefinitionMap.get(itemDefinitionID) != null){ + continue; + } + String tousseName = thirdPartyTousseInstanceVo.getTousseName(); + if(StringUtils.isBlank(tousseName)){ + throw new SystemException("消毒包的包名称不能为空!"); + } + if(!tousseNameList.contains(tousseName)){ + tousseNameList.add(tousseName); + } + } + + if(CollectionUtils.isEmpty(tousseNameList)){ + return nameTousseDefinitionMap; + } + + StringBuffer hql = new StringBuffer(); + hql.append("select po from "); + hql.append(TousseDefinition.class.getSimpleName()); + hql.append(" po where "); + hql.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("po.name", tousseNameList)); + //hql.append(" and po.type = '"); + //hql.append(TousseDefinition.PACKAGE_TYPE_INSIDE); + //hql.append("' "); + hql.append(" and po.forDisplay = 1 "); + List tousseDefinitionList = objectDao.findByHql(hql.toString()); + if(CollectionUtils.isNotEmpty(tousseDefinitionList)){ + for (TousseDefinition tousseDefinition : tousseDefinitionList) { + if(!tousseDefinition.isInsideTousse()){ + throw new SystemException(String.format("已经存在名称为%s的同名%s", tousseDefinition.getName(), tousseDefinition.getTousseType())); + } + nameTousseDefinitionMap.put(tousseDefinition.getName(), tousseDefinition); + } + } + + return nameTousseDefinitionMap; + } + + + /** + * 根据第三方器械包定义id查询器械包定义 + * @param thirdPartyTousseInstances + * @return + */ + @SuppressWarnings("unchecked") + private Map getThirdPartyDefinitionIdTousseDefinitionMap(List thirdPartyTousseInstances) { + Map thirdPartyDefinitionIdTousseDefinitionMap = new HashMap(); + if(CollectionUtils.isEmpty(thirdPartyTousseInstances)){ + return thirdPartyDefinitionIdTousseDefinitionMap; + } + List thirdPartyDefinitionIdList = new ArrayList(); + for (ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo : thirdPartyTousseInstances) { + Long itemDefinitonId = thirdPartyTousseInstanceVo.getItemDefinitionID(); + if(!DatabaseUtil.isPoIdValid(itemDefinitonId)){ + throw new SystemException("消毒包的包定义ID不能为空!"); + } + if(!thirdPartyDefinitionIdList.contains(itemDefinitonId)){ + thirdPartyDefinitionIdList.add(itemDefinitonId); + } + } + + StringBuffer hql = new StringBuffer(); + hql.append("select po from "); + hql.append(TousseDefinition.class.getSimpleName()); + hql.append(" po where "); + hql.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.thirdPartyDefinitionId", thirdPartyDefinitionIdList)); + //hql.append(" and po.type = '"); + //hql.append(TousseDefinition.PACKAGE_TYPE_INSIDE); + //hql.append("' "); + hql.append(" and po.forDisplay = 1 "); + List tousseDefinitionList = objectDao.findByHql(hql.toString()); + if(CollectionUtils.isNotEmpty(tousseDefinitionList)){ + for (TousseDefinition tousseDefinition : tousseDefinitionList) { + if(!tousseDefinition.isInsideTousse()){ + throw new SystemException(String.format("也存在名称为%s的%s", tousseDefinition.getName(), tousseDefinition.getTousseType())); + } + thirdPartyDefinitionIdTousseDefinitionMap.put(tousseDefinition.getThirdPartyDefinitionId(), tousseDefinition); + } + } + + return thirdPartyDefinitionIdTousseDefinitionMap; + } + + /** + * 禁用标识牌:通过接口字段“InstanceID”来判断,若传的参数值为空,则设置此字段的值为“是”,否则设置为“否”; + * @param thirdPartyTousseInstanceVo + * @return + */ + private String getIsDisableIDCard(ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo) { + return DatabaseUtil.isPoIdValid(thirdPartyTousseInstanceVo.getInstanceID()) ? Constants.STR_NO : Constants.STR_YES; + } + + /** + * 是否为:外来器械包当普通器械包:通过接口字段“ItemBaseTypeId”来判断,若传的参数值是9,则设置此字段的值为“是”,否则统一设置为“否”; + * @param thirdPartyTousseInstanceVo + * @return + */ + private String getIsForeignTousse(ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo) { + Long itemBaseTypeId = thirdPartyTousseInstanceVo.getItemBaseTypeId(); + if(!DatabaseUtil.isPoIdValid(itemBaseTypeId)){ + throw new SystemException("ItemBaseTypeId不能为空!"); + } + if(itemBaseTypeId.equals(9l)){ + return Constants.STR_YES; + } + return Constants.STR_NO; + } + + /** + * 新建老肯的器械包定义 + * @param thirdPartyTousseInstanceVo + * @param materialDefinitionMap + * @return + */ + private TousseDefinition newLaoKenTousseDefinition(ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo, Map materialDefinitionMap) { + TousseDefinition tousseDefinition = new TousseDefinition(); + tousseDefinition.setName(thirdPartyTousseInstanceVo.getTousseName()); + tousseDefinition.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + //设置器械包定义的默认值 + setLaoKenTousseDefinitionDefalutValue(tousseDefinition); + //“是否外来器械包” + String isForeignTousse = getIsForeignTousse(thirdPartyTousseInstanceVo); + if(!StringUtils.equals(isForeignTousse, tousseDefinition.getIsForeignTousse())){ + tousseDefinition.setIsForeignTousse(isForeignTousse); + } + //“禁用标识牌”; + String isDisableIDCard = getIsDisableIDCard(thirdPartyTousseInstanceVo); + if(!StringUtils.equals(isDisableIDCard, tousseDefinition.getIsDisableIDCard())){ + tousseDefinition.setIsDisableIDCard(isDisableIDCard); + } + TousseDefinitionParameterDto tdParameterDto = buildTousseDefinitionParameterDto(thirdPartyTousseInstanceVo, materialDefinitionMap); + tousseDefinitionManager.saveOrUpdateTousseDefinition(null, tousseDefinition, tdParameterDto); + return tousseDefinition; + } + + /** + * 设置器械包定义的默认值 + * @param tousseDefinition + */ + private void setLaoKenTousseDefinitionDefalutValue(TousseDefinition tousseDefinition) { + if(tousseDefinition == null){ + return; + } + + //默认包装类型 + List packageTypeList = httpOptionManager.getHttpOptionTextById(HttpOption.SYSTEMSETTING_PACKAGING_TYPE); + if(CollectionUtils.isEmpty(packageTypeList)){ + throw new SystemException("包装类型设置不存在"); + } + String defaultPackageType = packageTypeList.get(0); + //默认包大小 + String defaultPackageSize = ConfigUtils.getConfigProperty("defaultPackageSize"); + if(StringUtils.isBlank(defaultPackageSize)){ + defaultPackageSize = TousseDefinition.PACKAGE_SIZE_BIG; + } + tousseDefinition.setSterilingMethod("无"); + tousseDefinition.setIsApplyEntireTousse(tousseDefinition.isDisinfection() ? Constants.STR_NO : Constants.STR_YES); + tousseDefinition.setIsCleanedEntirely(Constants.STR_YES); + //设置默认处理科室为一级供应室 + setLaoKenTousseDefinitionHandlerDepart(tousseDefinition); + String defaultTaskGroup = "无"; + tousseDefinition.setTaskGroup(defaultTaskGroup); + tousseDefinition.setPackageType(defaultPackageType); + tousseDefinition.setAllowModifyPackageType(Constants.STR_YES); + tousseDefinition.setWorkLoadStatisticalMethod(TousseDefinition.WORKLOAD_STATISTICAL_METHOD_PACK); + Double costPrice = tousseDefinition.calculateCostPrice(); + tousseDefinition.setCostPrice(costPrice); + tousseDefinition.setPrice(0.0); + tousseDefinition.setProxyDisinfectionPrice(0.0); + tousseDefinition.setPackageSize(defaultPackageSize); + String defaultSterilingMethod = null; + tousseDefinition.setSterilingMethod(defaultSterilingMethod); + tousseDefinition.setBarcodePaperType("小标签"); + tousseDefinition.setIsRecycling(Constants.STR_YES); + if(tousseDefinition.isDressing() || tousseDefinition.isForeignProxyTousse()){ + tousseDefinition.setIsRecycling(Constants.STR_NO); + } + tousseDefinition.setIsPacking(Constants.STR_YES); + tousseDefinition.setIsPrint(Constants.STR_YES); + tousseDefinition.setIsPrintOnDirectPacking(Constants.STR_NO); + tousseDefinition.setLimitInvoiceDepart(Constants.STR_NO); + tousseDefinition.setPrintAmount(1); + tousseDefinition.setIsTraceable(Constants.STR_YES); + tousseDefinition.setIsReview(Constants.STR_YES); + tousseDefinition.setStatisticsReviewWorkload(Constants.STR_YES); + tousseDefinition.setIsSterile(Constants.STR_YES); + if(tousseDefinition.isDisinfection()){ + tousseDefinition.setIsSterile(Constants.STR_NO); + } + tousseDefinition.setIsInvoice(Constants.STR_YES); + tousseDefinition.setHideAuxiliaryInvoice(Constants.STR_NO); + tousseDefinition.setScanAmount(10); + tousseDefinition.setIsCustomPacking(Constants.STR_YES); + tousseDefinition.setIsDisableIDCard(Constants.STR_YES); + tousseDefinition.setIdCardPaperType("中标签"); + tousseDefinition.setAutoDiscardCount(0); + tousseDefinition.setIsDisable(Constants.STR_NO); + tousseDefinition.setIsConvertApplyGoods(Constants.STR_YES); + tousseDefinition.setIsPriorConvertApplyGoods(Constants.STR_NO); + tousseDefinition.setIsPrintOrg(Constants.STR_NO); + tousseDefinition.setPrintOrgSource("无"); + tousseDefinition.setIsPrintMaterialForPacking(Constants.STR_NO); + tousseDefinition.setAutoOutStockForPacking(Constants.STR_NO); + tousseDefinition.setMoreBoxPacked(Constants.STR_NO); + //tousseDefinition.setIsForeignTousse(Constants.STR_NO); + tousseDefinition.setHidePackingTask(Constants.STR_NO); + tousseDefinition.setHideRecycling(Constants.STR_NO); + tousseDefinition.setNoGenerateTousse(Constants.STR_NO); + tousseDefinition.setWarningType(TousseDefinition.WARNING_TYPE_ALLWARN); + tousseDefinition.setIsCommonTousse(0); + tousseDefinition.setRegistUseRecordAfterSigned(Constants.STR_NO); + tousseDefinition.setPrintBOMwhenPrintLabel(Constants.STR_NO); + } + + /** + * 设置一级供应室 + * @param tousseDefinition + */ + private void setLaoKenTousseDefinitionHandlerDepart(TousseDefinition tousseDefinition) { + SupplyRoomConfig firstSupplyRoomConfig = supplyRoomConfigManager.getFirstSupplyRoomConfig(); + if(firstSupplyRoomConfig == null){ + throw new SystemException("一级供应室不能为空!"); + } + tousseDefinition.setHandlerDepartCode(firstSupplyRoomConfig.getOrgUnitCoding()); + tousseDefinition.setHandlerDepartName(firstSupplyRoomConfig.getOrgUnitName()); + } + + /** + * 器械包包内材料明细 + * @param thirdPartyTousseInstanceVo + * @param materialDefinitionMap + * @return + */ + private TousseDefinitionParameterDto buildTousseDefinitionParameterDto(ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo, + Map materialDefinitionMap) { + List materialInstanceVos = thirdPartyTousseInstanceVo.getMaterialInstanceVos(); + if(CollectionUtils.isEmpty(materialInstanceVos)){ + throw new SystemException("包内材料明细不能为空!"); + } + JSONArray materialArray = new JSONArray(); + for (MaterialInstanceVo materialInstanceVo : materialInstanceVos) { + String itemName = materialInstanceVo.getItemName(); + MaterialDefinition md = materialDefinitionMap.get(itemName); + if(md == null){ + throw new RuntimeException(String.format("不存在名称为%s的材料定义!", itemName)); + } + JSONObject json = new JSONObject(); + json.put("name", md.getShowName()); + json.put("tousseType", "器械"); + json.put("count", materialInstanceVo.getQty()); + json.put("sequence", materialInstanceVo.getOrderIndex()); + materialArray.add(json); + } + TousseDefinitionParameterDto dto = new TousseDefinitionParameterDto(); + dto.setMaterialDefinitionConfigResult(materialArray.toString()); + return dto; + } + + /** + * 创建包内材料、材料类别 + * 根据材料名称关联查询材料定义: + * 如果存在同名且规格为空的材料定义,就判断是否需要修改是否为植入物、材料定义的类别,并记录材料定义的修改记录; + * 如果不存同名且规格为空的材料定义,就创建新的材料定义,并记录材料定义的创建记录; + * @param thirdPartyTousseReceiveRecordVo + */ + private Map buildMaterialDefinition(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo) { + if(thirdPartyTousseReceiveRecordVo == null){ + throw new SystemException("参数不能为空!"); + } + List thirdPartyTousseInstances = thirdPartyTousseReceiveRecordVo.getThirdPartyTousseInstances(); + if(CollectionUtils.isEmpty(thirdPartyTousseInstances)){ + throw new SystemException("待接收的第三方器械包不能为空!"); + } + //材料类型名称 + List typeNameList = new ArrayList(); + //先根据材料定义第三方定义id匹配查询,匹配不到再根据材料名称匹配查询 + List thirdPartyDefinitionIdList = new ArrayList(); + for (ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo : thirdPartyTousseInstances) { + List materialInstanceVos = thirdPartyTousseInstanceVo.getMaterialInstanceVos(); + if(CollectionUtils.isEmpty(materialInstanceVos)){ + throw new SystemException("器械的包内材料不能为空!"); + } + for (MaterialInstanceVo materialInstanceVo : materialInstanceVos) { + //内材料定义id + if(!DatabaseUtil.isPoIdValid(materialInstanceVo.getItemDefinitionId())){ + throw new SystemException("器械的包内材料定义id无效!"); + } + if(thirdPartyDefinitionIdList.contains(materialInstanceVo.getItemDefinitionId())){ + throw new SystemException("器械的包内材料存在相同id的材料!"); + } + thirdPartyDefinitionIdList.add(materialInstanceVo.getItemDefinitionId()); + //材料类型 + if(StringUtils.isNotBlank(materialInstanceVo.getItemTypeName()) + && !typeNameList.contains(materialInstanceVo.getItemTypeName())){ + typeNameList.add(materialInstanceVo.getItemTypeName()); + } + } + } + //材料类型 + saveMaterialTypeHttpOption(typeNameList); + + //先根据材料定义id关联查询 + Map thirdPartyDefinitionIdMaterialDefinitionMap = getThirdPartyDefinitionIdMaterialDefinitionMap(thirdPartyDefinitionIdList); + + //只查询规格为空的材料定义 + Map nameMaterialDefinitionMap = getNameMaterialDefinitionMap(thirdPartyTousseInstances, thirdPartyDefinitionIdMaterialDefinitionMap); + + //新建材料定义的日志 + List saveLogs = new ArrayList(); + //修改材料定义的日志 + List updateLogs = new ArrayList(); + for (ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo : thirdPartyTousseInstances) { + List materialInstanceVos = thirdPartyTousseInstanceVo.getMaterialInstanceVos(); + for (MaterialInstanceVo materialInstanceVo : materialInstanceVos) { + MaterialDefinition materialDefinition = getDBMaterialDefinition(materialInstanceVo, thirdPartyDefinitionIdMaterialDefinitionMap, nameMaterialDefinitionMap); + String goodsName = materialInstanceVo.getItemName(); + String isImplant = getIsImplant(materialInstanceVo.getItemTypeId()); + if(materialDefinition == null){ + materialDefinition = new MaterialDefinition(); + materialDefinition.setName(goodsName); + materialDefinition.setSpecification(null); + materialDefinition.setSpelling(GB2Alpha.string2Alpha(goodsName)); + materialDefinition.setWbCode(GB2WB.getWBCode(goodsName)); + materialDefinition.setType(materialInstanceVo.getItemTypeName()); + materialDefinition.setIsTraceble(Constants.STR_YES); + materialDefinition.setIsMonthCheck(Constants.STR_NO); + materialDefinition.setGoodsType(MaterialDefinition.TYPE_MATERIALGOODS); + materialDefinition.setIsForeignMaterial(Constants.STR_NO); + materialDefinition.setIsImplant(Constants.STR_NO); + materialDefinition.setDisable(Constants.STR_NO); + materialDefinition.setIsStatisticWorkLoad(Constants.STR_YES); + materialDefinition.setIsPrintToLabel(Constants.STR_YES); + materialDefinition.setChineseMedicineInstr(Constants.STR_NO); + materialDefinition.setDetachable(Constants.STR_NO); + //新建材料定义的日志 + String saveLog = String.format("第三方器械包接收后创建材料定义,名称为“%s”,组件器械ID为“%s”。", goodsName, materialInstanceVo.getItemDefinitionId()); + saveLogs.add(saveLog); + }else{ + //修改材料定义的日志 + StringBuffer modifyContent = new StringBuffer(""); + //名称 + if(!StringUtils.equals(goodsName, materialDefinition.getName())){ + materialDefinition.setName(goodsName); + modifyContent.append("name属性修改前=").append(materialDefinition.getName()).append(",修改后=").append(goodsName).append(";"); + } + //是否植入物 + if(!StringUtils.equals(isImplant, materialDefinition.getIsImplant())){ + modifyContent.append("isImplant属性修改前=").append(materialDefinition.getIsImplant()).append(",修改后=").append(isImplant).append(";"); + materialDefinition.setIsImplant(isImplant); + } + //类型 + if(!StringUtils.equals(materialInstanceVo.getItemTypeName(), materialDefinition.getType())){ + modifyContent.append("type属性修改前=").append(materialDefinition.getType()).append(",修改后=").append(materialInstanceVo.getItemTypeName()).append(";"); + materialDefinition.setType(materialInstanceVo.getItemTypeName()); + } + if(StringUtils.isNotBlank(modifyContent.toString())){ + updateLogs.add(modifyContent.toString()); + } + } + materialDefinition.setThirdPartyDefinitionId(materialInstanceVo.getItemDefinitionId()); + materialDefinitionManager.save(materialDefinition); + nameMaterialDefinitionMap.put(materialDefinition.getName(), materialDefinition); + } + } + appLogManager.batchSaveLog(AcegiHelper.getLoginUser(), Log.MODEL_MATERIALDEFINITION, Log.TYPE_ADD, saveLogs); + appLogManager.batchSaveLog(AcegiHelper.getLoginUser(), Log.MODEL_MATERIALDEFINITION, Log.TYPE_UPDATE, updateLogs); + return nameMaterialDefinitionMap; + } + + /** + * 先根据第三方材料定义id匹配,匹配不到再根据材料名称匹配 + * @param thirdPartyDefinitionIdMaterialDefinitionMap + * @param nameMaterialDefinitionMap + * @return + */ + private MaterialDefinition getDBMaterialDefinition(MaterialInstanceVo materialInstanceVo, Map thirdPartyDefinitionIdMaterialDefinitionMap, + Map nameMaterialDefinitionMap) { + MaterialDefinition dbMaterialDefinition = null; + if(MapUtils.isNotEmpty(thirdPartyDefinitionIdMaterialDefinitionMap)){ + dbMaterialDefinition = thirdPartyDefinitionIdMaterialDefinitionMap.get(materialInstanceVo.getItemDefinitionId()); + } + if(dbMaterialDefinition == null && MapUtils.isNotEmpty(nameMaterialDefinitionMap)){ + dbMaterialDefinition = nameMaterialDefinitionMap.get(materialInstanceVo.getItemName()); + } + return dbMaterialDefinition; + } + + /** + * 根据名称查询材料定义 + * @param thirdPartyTousseInstances + * @param thirdPartyDefinitionIdMaterialDefinitionMap + * @return + */ + private Map getNameMaterialDefinitionMap(List thirdPartyTousseInstances, + Map thirdPartyDefinitionIdMaterialDefinitionMap) { + Map nameMaterialDefinitionMap = new HashMap(); + if(CollectionUtils.isEmpty(thirdPartyTousseInstances)){ + return nameMaterialDefinitionMap; + } + List materialNameList = new ArrayList(); + for (ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo : thirdPartyTousseInstances) { + List materialInstanceVos = thirdPartyTousseInstanceVo.getMaterialInstanceVos(); + if(CollectionUtils.isEmpty(materialInstanceVos)){ + throw new SystemException("器械的包内材料不能为空!"); + } + for (MaterialInstanceVo materialInstanceVo : materialInstanceVos) { + Long itemDefinitionID = materialInstanceVo.getItemDefinitionId(); + if(thirdPartyDefinitionIdMaterialDefinitionMap != null && thirdPartyDefinitionIdMaterialDefinitionMap.containsKey(itemDefinitionID)){ + continue; + } + //材料名称 + if(StringUtils.isBlank(materialInstanceVo.getItemName())){ + throw new SystemException("材料名称不能为空!"); + } + if(materialNameList.contains(materialInstanceVo.getItemName())){ + throw new SystemException("器械的包内材料存在同名材料!"); + } + materialNameList.add(materialInstanceVo.getItemName()); + } + } + + if(CollectionUtils.isEmpty(materialNameList)){ + return nameMaterialDefinitionMap; + } + + List materialDefinitionList = materialDefinitionManager.getCollection("name", materialNameList); + if(CollectionUtils.isNotEmpty(materialDefinitionList)){ + for (MaterialDefinition materialDefinition : materialDefinitionList) { + if(StringUtils.isBlank(materialDefinition.getSpecification())){ + nameMaterialDefinitionMap.put(materialDefinition.getName(), materialDefinition); + } + } + } + + return nameMaterialDefinitionMap; + } + + /** + * 根据第三方材料定义id查询材料定义 + * @param thirdPartyDefinitionIdList + * @return + */ + @SuppressWarnings("unchecked") + private Map getThirdPartyDefinitionIdMaterialDefinitionMap(List thirdPartyDefinitionIdList) { + Map thirdPartyDefinitionIdMaterialDefinitionMap = new HashMap(); + if(CollectionUtils.isEmpty(thirdPartyDefinitionIdList)){ + return thirdPartyDefinitionIdMaterialDefinitionMap; + } + StringBuffer hql = new StringBuffer(); + hql.append("select po from "); + hql.append(MaterialDefinition.class.getSimpleName()); + hql.append(" po where "); + hql.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.thirdPartyDefinitionId", thirdPartyDefinitionIdList)); + List materialDefinitionList = objectDao.findByHql(hql.toString()); + if(CollectionUtils.isNotEmpty(materialDefinitionList)){ + for (MaterialDefinition materialDefinition : materialDefinitionList) { + thirdPartyDefinitionIdMaterialDefinitionMap.put(materialDefinition.getThirdPartyDefinitionId(), materialDefinition); + } + } + return thirdPartyDefinitionIdMaterialDefinitionMap; + } + + /** + * 保存材料类型 + * @param typeNameList + */ + private void saveMaterialTypeHttpOption(List typeNameList) { + if(CollectionUtils.isEmpty(typeNameList)){ + return; + } + List httpOptionList = httpOptionManager.getHttpOptionListById(HttpOption.SYSTEMSETTING_MATERIALTYPE); + int maxSequence = 0; + for (HttpOption httpOption : httpOptionList) { + if(maxSequence < httpOption.getSequence()){ + maxSequence = httpOption.getSequence(); + } + } + httpOptionList.get(0).getSequence(); + for (String typeName : typeNameList) { + boolean existType = false; + for (HttpOption httpOption : httpOptionList) { + if(StringUtils.equals(typeName, httpOption.getOptionText())){ + existType = true; + break; + } + } + if(!existType){ + HttpOption httpOption = new HttpOption(); + httpOption.setOptionListId(HttpOption.SYSTEMSETTING_MATERIALTYPE); + httpOption.setOptionText(typeName); + httpOption.setOptionValue(typeName); + httpOption.setSequence(maxSequence); + objectDao.saveOrUpdate(httpOption); + } + } + } + + /** + * 是否植入物:通过接口字段“ItemTypeId”来判断,若传的参数值是107、141、9001,则设置此字段的值为“是”,否则统一设置为“否”; + * @param itemTypeId + * @return + */ + private String getIsImplant(Long itemTypeId) { + if(itemTypeId == null){ + return Constants.STR_NO; + } + if(itemTypeId.equals(107) + || itemTypeId.equals(141) + || itemTypeId.equals(9001)){ + return Constants.STR_YES; + } + return Constants.STR_NO; + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseInstanceVo.java =================================================================== diff -u -r39271 -r39447 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseInstanceVo.java (.../ThirdPartyTousseInstanceVo.java) (revision 39271) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseInstanceVo.java (.../ThirdPartyTousseInstanceVo.java) (revision 39447) @@ -1,5 +1,8 @@ package com.forgon.disinfectsystem.tousse.toussedefinition.vo; +import java.util.ArrayList; +import java.util.List; + /** * 第三方器械包实例vo * @@ -72,6 +75,34 @@ * 物品接收后发货 */ private String invoiceAfterReceive; + + /** + * 包类型编码 + * 判断是否为外来器械包;值为9表示外来器械包;包定义是否外来器械包设置为是(GZSLWQGSKY-1) + */ + private Long itemBaseTypeId; + + /** + * 消毒包的包定义ID + * (GZSLWQGSKY-1) + */ + private Long itemDefinitionID; + + /** + * 消毒包的实体ID + * 对应追溯系统的标识牌编号(GZSLWQGSKY-1) + */ + private String instanceID; + + /** + * 器械包包内材料(广州市荔湾区骨伤科医院(GZSLWQGSKY-1)需要创建包内材料) + */ + private List materialInstanceVos = new ArrayList(); + + /** + * 灭菌的流程事件列表(GZSLWQGSKY-1) + */ + private List events = new ArrayList(); public Long getId() { return id; @@ -184,5 +215,45 @@ public void setInvoiceAfterReceive(String invoiceAfterReceive) { this.invoiceAfterReceive = invoiceAfterReceive; } - + + public Long getItemBaseTypeId() { + return itemBaseTypeId; + } + + public void setItemBaseTypeId(Long itemBaseTypeId) { + this.itemBaseTypeId = itemBaseTypeId; + } + + public Long getItemDefinitionID() { + return itemDefinitionID; + } + + public void setItemDefinitionID(Long itemDefinitionID) { + this.itemDefinitionID = itemDefinitionID; + } + + public String getInstanceID() { + return instanceID; + } + + public void setInstanceID(String instanceID) { + this.instanceID = instanceID; + } + + public List getMaterialInstanceVos() { + return materialInstanceVos; + } + + public void setMaterialInstanceVos(List materialInstanceVos) { + this.materialInstanceVos = materialInstanceVos; + } + + public List getEvents() { + return events; + } + + public void setEvents(List events) { + this.events = events; + } + } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/MaterialInstanceVo.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/MaterialInstanceVo.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/MaterialInstanceVo.java (revision 39447) @@ -0,0 +1,86 @@ +package com.forgon.disinfectsystem.tousse.toussedefinition.vo; + +/** + * 材料明细vo + */ +public class MaterialInstanceVo { + + /** + * 组件器械的ID + */ + private Long itemDefinitionId; + + /** + * 组件器械名称 + */ + private String itemName; + + /** + * 组件器械类型ID + */ + private Long itemTypeId; + + /** + * 组件器械类型名称 + */ + private String itemTypeName; + + /** + * 序号 + */ + private Integer orderIndex; + + /** + * 组件器械数量 + */ + private Integer qty; + + public Long getItemDefinitionId() { + return itemDefinitionId; + } + + public void setItemDefinitionId(Long itemDefinitionId) { + this.itemDefinitionId = itemDefinitionId; + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public Long getItemTypeId() { + return itemTypeId; + } + + public void setItemTypeId(Long itemTypeId) { + this.itemTypeId = itemTypeId; + } + + public String getItemTypeName() { + return itemTypeName; + } + + public void setItemTypeName(String itemTypeName) { + this.itemTypeName = itemTypeName; + } + + public Integer getOrderIndex() { + return orderIndex; + } + + public void setOrderIndex(Integer orderIndex) { + this.orderIndex = orderIndex; + } + + public Integer getQty() { + return qty; + } + + public void setQty(Integer qty) { + this.qty = qty; + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManager.java =================================================================== diff -u -r39271 -r39447 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManager.java (.../ThirdPartyTousseReceiveRecordManager.java) (revision 39271) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManager.java (.../ThirdPartyTousseReceiveRecordManager.java) (revision 39447) @@ -67,5 +67,19 @@ * @param vo */ public void validateThirdPartyTousse(ThirdPartyTousseInstanceVo vo); + + /** + * 创建第三方器械包接收记录 + * @param thirdPartyTousseReceiveRecordVo + * @return + */ + public ThirdPartyTousseReceiveRecord buildThirdPartyTousseReceiveRecord(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo); + /** + * 根据第三方器械包条码获取老肯医疗消毒包的消毒信息 + * @param barcode + * @return + */ + public ThirdPartyTousseInstanceVo getLaoKenTurnaroundInformation(String barcode); + } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/TousseTurnaroundDetailsEvent.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/TousseTurnaroundDetailsEvent.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/TousseTurnaroundDetailsEvent.java (revision 39447) @@ -0,0 +1,99 @@ +package com.forgon.disinfectsystem.tousse.toussedefinition.vo; + +/** + * 流程事件列表对象 + */ +public class TousseTurnaroundDetailsEvent { + + /** + * 流程事件的名称 + */ + private String eventName; + + /** + * 操作人员 + */ + private String eventOperator; + + /** + * 操作的机器 + */ + private String machine; + + /** + * 机器的批次号 + */ + private String machineBatch; + + /** + * 操作序号:由小到大,由先到后 + */ + private Integer seq; + + /** + * 操作站点 + */ + private String station; + + /** + * 流程事件的操作时间 + */ + private String date; + + public String getEventName() { + return eventName; + } + + public void setEventName(String eventName) { + this.eventName = eventName; + } + + public String getEventOperator() { + return eventOperator; + } + + public void setEventOperator(String eventOperator) { + this.eventOperator = eventOperator; + } + + public String getMachine() { + return machine; + } + + public void setMachine(String machine) { + this.machine = machine; + } + + public String getMachineBatch() { + return machineBatch; + } + + public void setMachineBatch(String machineBatch) { + this.machineBatch = machineBatch; + } + + public Integer getSeq() { + return seq; + } + + public void setSeq(Integer seq) { + this.seq = seq; + } + + public String getStation() { + return station; + } + + public void setStation(String station) { + this.station = station; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManagerImpl.java =================================================================== diff -u -r39271 -r39447 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManagerImpl.java (.../ThirdPartyTousseReceiveRecordManagerImpl.java) (revision 39271) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManagerImpl.java (.../ThirdPartyTousseReceiveRecordManagerImpl.java) (revision 39447) @@ -44,8 +44,10 @@ import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.MaterialInstanceVo; import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseInstanceVo; import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseReceiveRecordVo; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.TousseTurnaroundDetailsEvent; import com.forgon.entity.PageEntity; import com.forgon.exception.SystemException; import com.forgon.security.model.User; @@ -119,10 +121,6 @@ public ThirdPartyTousseReceiveRecord receiveThirdPartyTousse(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo) { //创建第三方器械包接收记录 ThirdPartyTousseReceiveRecord thirdPartyTousseReceiveRecord = buildThirdPartyTousseReceiveRecord(thirdPartyTousseReceiveRecordVo); - //校验第三方器械包接收记录 - validateThirdPartyTousseReceiveRecord(thirdPartyTousseReceiveRecord); - //保存第三方器械包接收记录 - this.save(thirdPartyTousseReceiveRecord); //生成追溯系统的器械包实例 Map thirdPartyForeignTousseBarcodeTousseDefinitionMap = getThirdPartyForeignTousseBarcodeTousseDefinitionMap(thirdPartyTousseReceiveRecordVo); buildTousseInstance(thirdPartyTousseReceiveRecord, thirdPartyForeignTousseBarcodeTousseDefinitionMap); @@ -733,7 +731,7 @@ * @param thirdPartyTousseReceiveRecordVo * @return */ - private ThirdPartyTousseReceiveRecord buildThirdPartyTousseReceiveRecord(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo) { + public ThirdPartyTousseReceiveRecord buildThirdPartyTousseReceiveRecord(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo) { if(thirdPartyTousseReceiveRecordVo == null){ throw new SystemException("参数异常!"); } @@ -770,6 +768,7 @@ }else{ thirdPartyTousseReceiveRecord.setVerifierId(AcegiHelper.getLoginUser().getUserId()); } + thirdPartyTousseReceiveRecord.setDataSource(thirdPartyTousseReceiveRecordVo.getDataSource()); List dbThirdPartyTousseInstanceList = thirdPartyTousseReceiveRecord.getThirdPartyTousseInstances(); List thirdPartyTousseInstanceVos = thirdPartyTousseReceiveRecordVo.getThirdPartyTousseInstances(); @@ -802,20 +801,45 @@ throw new SystemException(String.format("%s接收失败,存在重复的申请科室“%s”。", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getOrgUnitName())); } thirdPartyTousseInstance.setOrgUnitId(orgUnitList.get(0).getId()); + thirdPartyTousseInstanceVo.setOrgUnitId(orgUnitList.get(0).getId()); } thirdPartyTousseInstance.setReviewer(thirdPartyTousseInstanceVo.getReviewer()); if(StringUtils.isNotBlank(thirdPartyTousseInstanceVo.getSterileTime())){ - thirdPartyTousseInstance.setSterileTime(DateTools.coverStrToDate(thirdPartyTousseInstanceVo.getSterileTime(), DateTools.COMMON_DATE_HMS)); - if(thirdPartyTousseInstance.getSterileTime() == null){ - throw new SystemException(String.format("%s(%s)接收失败,灭菌时间格式异常。", thirdPartyTousseInstanceVo.getOrgUnitName(), thirdPartyTousseInstanceVo.getBarcode())); + if(StringUtils.equals(thirdPartyTousseReceiveRecord.getDataSource(), ThirdPartyTousseReceiveRecord.DATASOURCE_DONGSHENG)){ + thirdPartyTousseInstance.setSterileTime(DateTools.coverStrToDate(thirdPartyTousseInstanceVo.getSterileTime(), DateTools.COMMON_DATE_HMS)); + if(thirdPartyTousseInstance.getSterileTime() == null){ + throw new SystemException(String.format("%s(%s)接收失败,灭菌时间%s格式异常。", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), thirdPartyTousseInstanceVo.getSterileTime())); + } + }else if(StringUtils.equals(thirdPartyTousseReceiveRecord.getDataSource(), ThirdPartyTousseReceiveRecord.DATASOURCE_LAOKEN)){ + String sterileTimeStr = thirdPartyTousseInstanceVo.getSterileTime(); + sterileTimeStr = sterileTimeStr.replace("/", "-"); + Date sterileTime = DateTools.coverStrToDate(sterileTimeStr, DateTools.COMMON_DATE_HM); + if(sterileTime == null){ + throw new SystemException(String.format("%s(%s)接收失败,灭菌时间%s格式异常。", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), thirdPartyTousseInstanceVo.getSterileTime())); + } + thirdPartyTousseInstance.setSterileTime(sterileTime); + }else{ + throw new SystemException(String.format("%s(%s)接收失败,dataSource异常。", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode())); } } //thirdPartyTousseInstance.setTousseInstanceId(tousseInstanceId); thirdPartyTousseInstance.setTousseName(thirdPartyTousseInstanceVo.getTousseName()); if(StringUtils.isNotBlank(thirdPartyTousseInstanceVo.getValidUntil())){ - thirdPartyTousseInstance.setValidUntil(DateTools.coverStrToDate(thirdPartyTousseInstanceVo.getValidUntil(), DateTools.COMMON_DATE_ONLY)); - if(thirdPartyTousseInstance.getValidUntil() == null){ - throw new SystemException(String.format("%s(%s)接收失败,失效日期格式异常。", thirdPartyTousseInstanceVo.getOrgUnitName(), thirdPartyTousseInstanceVo.getBarcode())); + if(StringUtils.equals(thirdPartyTousseReceiveRecord.getDataSource(), ThirdPartyTousseReceiveRecord.DATASOURCE_DONGSHENG)){ + thirdPartyTousseInstance.setValidUntil(DateTools.coverStrToDate(thirdPartyTousseInstanceVo.getValidUntil(), DateTools.COMMON_DATE_ONLY)); + if(thirdPartyTousseInstance.getValidUntil() == null){ + throw new SystemException(String.format("%s(%s)接收失败,失效日期%s格式异常。", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), thirdPartyTousseInstanceVo.getValidUntil())); + } + }else if(StringUtils.equals(thirdPartyTousseReceiveRecord.getDataSource(), ThirdPartyTousseReceiveRecord.DATASOURCE_LAOKEN)){ + String validUntilStr = thirdPartyTousseInstanceVo.getValidUntil(); + validUntilStr = validUntilStr.replace("/", "-"); + Date validUntil = DateTools.coverStrToDate(validUntilStr, DateTools.COMMON_DATE_HM); + thirdPartyTousseInstance.setValidUntil(validUntil); + if(thirdPartyTousseInstance.getValidUntil() == null){ + throw new SystemException(String.format("%s(%s)接收失败,失效日期%s格式异常。", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode(), thirdPartyTousseInstanceVo.getValidUntil())); + } + }else{ + throw new SystemException(String.format("%s(%s)接收失败,dataSource异常。", thirdPartyTousseInstanceVo.getTousseName(), thirdPartyTousseInstanceVo.getBarcode())); } } //申请单id,目前就外来器械包需要关联申请单 @@ -824,6 +848,10 @@ } thirdPartyTousseReceiveRecord.getThirdPartyTousseInstances().addAll(thirdPartyTousseInstances); } + //校验第三方器械包接收记录 + validateThirdPartyTousseReceiveRecord(thirdPartyTousseReceiveRecord); + //保存第三方器械包接收记录 + this.save(thirdPartyTousseReceiveRecord); return thirdPartyTousseReceiveRecord; } @@ -1642,4 +1670,70 @@ } } + @Override + public ThirdPartyTousseInstanceVo getLaoKenTurnaroundInformation(String barcode) { + if(StringUtils.isEmpty(barcode)){ + throw new SystemException("第三方器械包条码不能为空!"); + } + String url = "http://183.6.74.119:8911/ExternalPort/ExternalPortServices.svc/GetTurnaroundInformation/"; + url = url + barcode + "/1"; + String responce = CssdUtils.sendGetRequest(url, null, com.forgon.tools.Constants.CHARSET_UTF8); + ThirdPartyTousseInstanceVo vo = buildThirdPartyTousseInstanceVo(responce); + validateThirdPartyTousse(vo); + return vo; + } + + private ThirdPartyTousseInstanceVo buildThirdPartyTousseInstanceVo(String responce) { + if(StringUtils.isBlank(responce)){ + throw new SystemException("消毒信息接口返回参数为空!"); + } + ThirdPartyTousseInstanceVo vo = new ThirdPartyTousseInstanceVo(); + JSONObject json = JSONObject.fromObject(responce); + vo.setTousseName(json.optString("ItemName")); + vo.setItemDefinitionID(json.optLong("ItemDefinitionID")); + vo.setItemBaseTypeId(json.optLong("ItemBaseTypeId")); + vo.setBarcode(json.optString("TurnaroundID")); + vo.setSterileTime(json.optString("SterilizeDate")); + vo.setValidUntil(json.optString("ValidUseBeforeDate")); + vo.setOrgUnitName(json.optString("DeliverPoint")); + vo.setInstanceID(json.optString("InstanceID")); + + List materialInstanceVos = new ArrayList(); + JSONArray components = json.optJSONArray("Components"); + if(components != null && components.size() > 0){ + for (Object object : components) { + JSONObject jsonObj = (JSONObject) object; + MaterialInstanceVo materialInstanceVo = new MaterialInstanceVo(); + materialInstanceVo.setItemDefinitionId(jsonObj.optLong("ItemDefinitionId")); + materialInstanceVo.setItemName(jsonObj.optString("ItemName")); + materialInstanceVo.setItemTypeId(jsonObj.optLong("ItemTypeId")); + materialInstanceVo.setItemTypeName(jsonObj.optString("ItemTypeName")); + materialInstanceVo.setOrderIndex(jsonObj.optInt("OrderIndex")); + materialInstanceVo.setQty(jsonObj.optInt("Qty")); + materialInstanceVos.add(materialInstanceVo); + } + } + vo.setMaterialInstanceVos(materialInstanceVos); + + List events = new ArrayList(); + JSONArray eventsJsonArray = json.optJSONArray("Events"); + if(eventsJsonArray != null && eventsJsonArray.size() > 0){ + for (Object object : eventsJsonArray) { + JSONObject jsonObj = (JSONObject) object; + TousseTurnaroundDetailsEvent event = new TousseTurnaroundDetailsEvent(); + event.setDate(jsonObj.optString("Date")); + event.setEventName(jsonObj.optString("EventName")); + event.setEventOperator(jsonObj.optString("EventOperator")); + event.setMachine(jsonObj.optString("Machine")); + event.setMachineBatch(jsonObj.optString("MachineBatch")); + event.setSeq(jsonObj.optInt("SEQ")); + event.setStation(jsonObj.optString("Station")); + events.add(event); + } + } + vo.setEvents(events ); + + return vo; + } + } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r39302 -r39447 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 39302) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 39447) @@ -157,6 +157,7 @@ import com.forgon.disinfectsystem.recyclingapplication.vo.ExpressInvoiceApplicationGoodsVo; import com.forgon.disinfectsystem.recyclingapplication.vo.OperationReservationInvoiceGoodsDetail; import com.forgon.disinfectsystem.tousse.instrumentinstance.service.InstrumentInstanceManager; +import com.forgon.disinfectsystem.tousse.toussedefinition.service.LaoKenThirdPartyTousseReceiveRecordManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.ThirdPartyTousseReceiveRecordManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceAdditionalInfoManagerImpl; @@ -300,6 +301,9 @@ @Autowired protected ThirdPartyTousseReceiveRecordManager thirdPartyTousseReceiveRecordManager; + @Autowired + protected LaoKenThirdPartyTousseReceiveRecordManager laoKenThirdPartyTousseReceiveRecordManager; + private UserManager userManager; public void setUserManager(UserManager userManager) { @@ -17352,7 +17356,13 @@ @Override public void receiveAndInvoiceThirdPartyTousse(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo) { //接收第三方器械包 - ThirdPartyTousseReceiveRecord thirdPartyTousseReceiveRecord = thirdPartyTousseReceiveRecordManager.receiveThirdPartyTousse(thirdPartyTousseReceiveRecordVo); + boolean enabledCreateNewDefinitionOnReceiving = ConfigUtils.getSystemSetConfigByNameBool("enabledCreateNewDefinitionOnReceiving"); + ThirdPartyTousseReceiveRecord thirdPartyTousseReceiveRecord = null; + if(enabledCreateNewDefinitionOnReceiving && StringUtils.equals(thirdPartyTousseReceiveRecordVo.getDataSource(), ThirdPartyTousseReceiveRecord.DATASOURCE_LAOKEN)){ + thirdPartyTousseReceiveRecord = laoKenThirdPartyTousseReceiveRecordManager.receiveThirdPartyTousse(thirdPartyTousseReceiveRecordVo); + }else{ + thirdPartyTousseReceiveRecord = thirdPartyTousseReceiveRecordManager.receiveThirdPartyTousse(thirdPartyTousseReceiveRecordVo); + } //第三方器械包发货 invoiceThirdPartyTousse(thirdPartyTousseReceiveRecordVo, thirdPartyTousseReceiveRecord); } Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r39365 -r39447 --- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 39365) +++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 39447) @@ -3158,6 +3158,17 @@ class="com.forgon.disinfectsystem.tousse.toussedefinition.service.ThirdPartyTousseReceiveRecordManagerImpl"> + + + + + + + + + Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/ThirdPartyTousseReceiveRecord.java =================================================================== diff -u -r39271 -r39447 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/ThirdPartyTousseReceiveRecord.java (.../ThirdPartyTousseReceiveRecord.java) (revision 39271) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/ThirdPartyTousseReceiveRecord.java (.../ThirdPartyTousseReceiveRecord.java) (revision 39447) @@ -4,6 +4,7 @@ import java.util.Date; import java.util.List; +import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; @@ -30,6 +31,16 @@ public class ThirdPartyTousseReceiveRecord { /** + * 东昇系统推送的包定义dataSource=东昇 + */ + public static final String DATASOURCE_DONGSHENG = "东昇"; + + /** + * 老肯医疗推送的包定义dataSource=老肯 + */ + public static final String DATASOURCE_LAOKEN = "老肯"; + + /** * 第三方器械包接收记录id */ private Long id; @@ -77,6 +88,11 @@ private String remark; /** + * 数据来源 + */ + private String dataSource = DATASOURCE_DONGSHENG; + + /** * 接收的第三方器械包 */ private List thirdPartyTousseInstances = new ArrayList(); @@ -155,6 +171,15 @@ this.remark = remark; } + public String getDataSource() { + return dataSource; + } + + @Column(columnDefinition=" varchar(255) default '" + DATASOURCE_DONGSHENG + "' not null ") + public void setDataSource(String dataSource) { + this.dataSource = dataSource; + } + @OneToMany(fetch = FetchType.LAZY) @Cascade(value = { CascadeType.ALL }) @JoinColumn(name = "receiveRecord_id") Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/LaoKenThirdPartyTousseReceiveRecordManager.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/LaoKenThirdPartyTousseReceiveRecordManager.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/LaoKenThirdPartyTousseReceiveRecordManager.java (revision 39447) @@ -0,0 +1,19 @@ +package com.forgon.disinfectsystem.tousse.toussedefinition.service; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ThirdPartyTousseReceiveRecord; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseReceiveRecordVo; +import com.forgon.tools.hibernate.BasePoManager; + +/** + * 接收老肯医疗器械包的manager + * GZSLWQGSKY-1 + */ +public interface LaoKenThirdPartyTousseReceiveRecordManager extends BasePoManager { + + /** + * 接收第三方器械包实例 + * @param thirdPartyTousseReceiveRecordVo + */ + public ThirdPartyTousseReceiveRecord receiveThirdPartyTousse(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo); + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/controller/ThirdPartyTousseReceiveRecordController.java =================================================================== diff -u -r39004 -r39447 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/controller/ThirdPartyTousseReceiveRecordController.java (.../ThirdPartyTousseReceiveRecordController.java) (revision 39004) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/controller/ThirdPartyTousseReceiveRecordController.java (.../ThirdPartyTousseReceiveRecordController.java) (revision 39447) @@ -1,5 +1,6 @@ package com.forgon.disinfectsystem.tousse.toussedefinition.controller; +import java.util.ArrayList; import java.util.List; import org.apache.commons.collections4.CollectionUtils; @@ -12,13 +13,20 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ThirdPartyTousseReceiveRecord; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.tousse.toussedefinition.service.LaoKenThirdPartyTousseReceiveRecordManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.ThirdPartyTousseReceiveRecordManager; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.MaterialInstanceVo; import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseInstanceVo; import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseReceiveRecordVo; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.TousseTurnaroundDetailsEvent; import com.forgon.entity.PageEntity; import com.forgon.exception.SystemException; +import com.forgon.tools.Constants; import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.util.ConfigUtils; /** * 接收第三方器械包实例的接口GYSDERMYY-24 @@ -29,6 +37,9 @@ @Autowired private ThirdPartyTousseReceiveRecordManager thirdPartyTousseReceiveRecordManager; + + @Autowired + private LaoKenThirdPartyTousseReceiveRecordManager laoKenThirdPartyTousseReceiveRecordManager; /** * 接收第三方器械包实例 @@ -38,7 +49,13 @@ public String receiveThirdPartyTousse(@RequestBody ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo){ JSONObject result = JSONUtil.buildJsonObject(true, "保存成功"); try { - thirdPartyTousseReceiveRecordManager.receiveThirdPartyTousse(thirdPartyTousseReceiveRecordVo); + boolean enabledCreateNewDefinitionOnReceiving = ConfigUtils.getSystemSetConfigByNameBool("enabledCreateNewDefinitionOnReceiving"); + String dataSource = thirdPartyTousseReceiveRecordVo.getDataSource(); + if(enabledCreateNewDefinitionOnReceiving && StringUtils.equals(dataSource, ThirdPartyTousseReceiveRecord.DATASOURCE_LAOKEN)){ + laoKenThirdPartyTousseReceiveRecordManager.receiveThirdPartyTousse(thirdPartyTousseReceiveRecordVo); + }else{ + thirdPartyTousseReceiveRecordManager.receiveThirdPartyTousse(thirdPartyTousseReceiveRecordVo); + } } catch (SystemException e) { e.printStackTrace(); result = JSONUtil.buildJsonObject(false, e.getMessage()); @@ -127,5 +144,24 @@ } return result.toString(); } + + /** + * 调用老肯医疗的消毒信息接口 + * @return + */ + @RequestMapping("/getLaoKenTurnaroundInformation") + public String getLaoKenTurnaroundInformation(String barcode){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + ThirdPartyTousseInstanceVo vo = thirdPartyTousseReceiveRecordManager.getLaoKenTurnaroundInformation(barcode); + if(vo != null){ + result = JSONUtil.buildJsonObject(true, JSONObject.fromObject(vo)); + } + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } + return result.toString(); + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/materialdefinition/MaterialDefinition.java =================================================================== diff -u -r39254 -r39447 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/materialdefinition/MaterialDefinition.java (.../MaterialDefinition.java) (revision 39254) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/materialdefinition/MaterialDefinition.java (.../MaterialDefinition.java) (revision 39447) @@ -241,6 +241,12 @@ * IDGZSZYY-45 */ private Long chineseMedicineInstrTypeId; + + /** + * 第三方材料定义ID + * GZSLWQGSKY-1 + */ + private Long thirdPartyDefinitionId; public static Map ColumnNameAndPoPropertyNameMap = new LinkedHashMap(13); @@ -764,5 +770,13 @@ this.chineseMedicineInstrTypeId = chineseMedicineInstrTypeId; } + public Long getThirdPartyDefinitionId() { + return thirdPartyDefinitionId; + } + public void setThirdPartyDefinitionId(Long thirdPartyDefinitionId) { + this.thirdPartyDefinitionId = thirdPartyDefinitionId; + } + + } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseReceiveRecordVo.java =================================================================== diff -u -r39271 -r39447 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseReceiveRecordVo.java (.../ThirdPartyTousseReceiveRecordVo.java) (revision 39271) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseReceiveRecordVo.java (.../ThirdPartyTousseReceiveRecordVo.java) (revision 39447) @@ -85,6 +85,11 @@ private String remark; /** + * 来源 + */ + private String dataSource; + + /** * 接收的第三方器械包 */ private List thirdPartyTousseInstances = new ArrayList(); @@ -209,6 +214,14 @@ this.remark = remark; } + public String getDataSource() { + return dataSource; + } + + public void setDataSource(String dataSource) { + this.dataSource = dataSource; + } + public List getThirdPartyTousseInstances() { return thirdPartyTousseInstances; }