Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseReceiveRecordVo.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseReceiveRecordVo.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseReceiveRecordVo.java (revision 38957) @@ -0,0 +1,153 @@ +package com.forgon.disinfectsystem.tousse.toussedefinition.vo; + +import java.util.ArrayList; +import java.util.List; + +/** + * 第三方器械包实例接收记录vo + * + */ +public class ThirdPartyTousseReceiveRecordVo { + + private Long id; + + /** + * 流水号 + */ + private String serialNumber; + + /** + * 送货员 + */ + private String sender; + + /** + * 接收员 + */ + private Long receiverId; + + /** + * 接收员 + */ + private String receiver; + + /** + * 接收时间 + */ + private String receiveTime; + + /** + * 仓库ID + */ + private Long wareHouseId; + + /** + * 仓库名称 + */ + private String wareHouseName; + + /** + * 接口的器械包总数量 + */ + private Integer tousseAmount; + + /** + * 备注 + */ + private String remark; + + /** + * 接收的第三方器械包 + */ + private List thirdPartyTousseInstances = new ArrayList(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSerialNumber() { + return serialNumber; + } + + public void setSerialNumber(String serialNumber) { + this.serialNumber = serialNumber; + } + + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public Long getReceiverId() { + return receiverId; + } + + public void setReceiverId(Long receiverId) { + this.receiverId = receiverId; + } + + public String getReceiver() { + return receiver; + } + + public void setReceiver(String receiver) { + this.receiver = receiver; + } + + public String getReceiveTime() { + return receiveTime; + } + + public void setReceiveTime(String receiveTime) { + this.receiveTime = receiveTime; + } + + public Long getWareHouseId() { + return wareHouseId; + } + + public void setWareHouseId(Long wareHouseId) { + this.wareHouseId = wareHouseId; + } + + public String getWareHouseName() { + return wareHouseName; + } + + public void setWareHouseName(String wareHouseName) { + this.wareHouseName = wareHouseName; + } + + public Integer getTousseAmount() { + return tousseAmount; + } + + public void setTousseAmount(Integer tousseAmount) { + this.tousseAmount = tousseAmount; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public List getThirdPartyTousseInstances() { + return thirdPartyTousseInstances; + } + + public void setThirdPartyTousseInstances( + List thirdPartyTousseInstances) { + this.thirdPartyTousseInstances = thirdPartyTousseInstances; + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManager.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManager.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManager.java (revision 38957) @@ -0,0 +1,36 @@ +package com.forgon.disinfectsystem.tousse.toussedefinition.service; + +import java.util.List; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ThirdPartyTousseReceiveRecord; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseReceiveRecordVo; +import com.forgon.entity.PageEntity; +import com.forgon.tools.hibernate.BasePoManager; + +/** + * 接收第三方器械包实例的接口 + */ +public interface ThirdPartyTousseReceiveRecordManager extends BasePoManager { + + /** + * 接收第三方器械包实例 + * @param thirdPartyTousseReceiveRecordVo + */ + public void receiveThirdPartyTousse(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo); + + /** + * 分页展示第三方器械包接收记录 + * @param page + */ + public void loadThirdPartyTousseReceiveRecord(PageEntity page); + + /** + * 根据条码查询器械包 + * @param barcode + * @param isThirdPartyTousse 是否第三方器械包(是/否) + * @return + */ + public List loadTousseInstanceByBarcode(String barcode, String isThirdPartyTousse); + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManagerImpl.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManagerImpl.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/ThirdPartyTousseReceiveRecordManagerImpl.java (revision 38957) @@ -0,0 +1,844 @@ +package com.forgon.disinfectsystem.tousse.toussedefinition.service; + +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections.CollectionUtils; +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.barcode.service.BarcodeManager; +import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager; +import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.expirationdateinfo.ExpirationDateInfo; +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.tousse.toussedefinition.vo.ThirdPartyTousseInstanceVo; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseReceiveRecordVo; +import com.forgon.entity.PageEntity; +import com.forgon.exception.SystemException; +import com.forgon.security.model.User; +import com.forgon.security.service.UserManager; +import com.forgon.serialnumber.model.SerialNum; +import com.forgon.serialnumber.service.SerialNumManager; +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; + +public class ThirdPartyTousseReceiveRecordManagerImpl extends BasePoManagerImpl + implements ThirdPartyTousseReceiveRecordManager { + + private WareHouseManager wareHouseManager; + + private SupplyRoomConfigManager supplyRoomConfigManager; + + private UserManager userManager; + + private OrgUnitManager orgUnitManager; + + private SerialNumManager serialNumManager; + + private TousseDefinitionManager tousseDefinitionManager; + + private TousseInstanceManager tousseInstanceManager; + + private GoodsStockManager goodsStockManager; + + private BarcodeManager barcodeManager; + + public void setBarcodeManager(BarcodeManager barcodeManager) { + this.barcodeManager = barcodeManager; + } + + public void setGoodsStockManager(GoodsStockManager goodsStockManager) { + this.goodsStockManager = goodsStockManager; + } + + public void setTousseInstanceManager(TousseInstanceManager tousseInstanceManager) { + this.tousseInstanceManager = tousseInstanceManager; + } + + public void setTousseDefinitionManager(TousseDefinitionManager tousseDefinitionManager) { + this.tousseDefinitionManager = tousseDefinitionManager; + } + + public void setSerialNumManager(SerialNumManager serialNumManager) { + this.serialNumManager = serialNumManager; + } + + public void setOrgUnitManager(OrgUnitManager orgUnitManager) { + this.orgUnitManager = orgUnitManager; + } + + public void setUserManager(UserManager userManager) { + this.userManager = userManager; + } + + public void setSupplyRoomConfigManager(SupplyRoomConfigManager supplyRoomConfigManager) { + this.supplyRoomConfigManager = supplyRoomConfigManager; + } + + public void setWareHouseManager(WareHouseManager wareHouseManager) { + this.wareHouseManager = wareHouseManager; + } + + @Override + public void receiveThirdPartyTousse(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo) { + //创建第三方器械包接收记录 + ThirdPartyTousseReceiveRecord thirdPartyTousseReceiveRecord = buildThirdPartyTousseReceiveRecord(thirdPartyTousseReceiveRecordVo); + //校验第三方器械包接收记录 + validateThirdPartyTousseReceiveRecord(thirdPartyTousseReceiveRecord); + //保存第三方器械包接收记录 + this.save(thirdPartyTousseReceiveRecord); + //生成追溯系统的器械包实例 + buildTousseInstance(thirdPartyTousseReceiveRecord); + } + + /** + * 保存器械包实例 + * @param thirdPartyTousseReceiveRecord + */ + private void buildTousseInstance(ThirdPartyTousseReceiveRecord thirdPartyTousseReceiveRecord) { + List thirdPartyTousseInstances = thirdPartyTousseReceiveRecord.getThirdPartyTousseInstances(); + if(CollectionUtils.isEmpty(thirdPartyTousseInstances)){ + return; + } + WareHouse wareHouse = wareHouseManager.getWareHouseById(thirdPartyTousseReceiveRecord.getWareHouseId()); + OrgUnit orgUnit = orgUnitManager.getByCode(wareHouse.getOrgUnitCode()); + List tousseInstanceList = new ArrayList(); + for (ThirdPartyTousseInstance thirdPartyTousseInstance : thirdPartyTousseInstances) { + if(DatabaseUtil.isPoIdValid(thirdPartyTousseInstance.getTousseInstanceId())){ + continue; + } + TousseDefinition td = getTousseDefinition(thirdPartyTousseInstance); + + TousseInstance tousseInstance = new TousseInstance(); + //tousseInstance.setPackingRecord_id(packingRecord.getId()); + 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()); + tousseInstance.setOperator(thirdPartyTousseInstance.getOperator()); + //tousseInstance.setOperatorCode(operatorCode); + //tousseInstance.setWrapper(wrapper); + //tousseInstance.setWrapperCode(wrapperCode); + //tousseInstance.setInspector(inspector); + //tousseInstance.setInspectorCode(inspectorCode); + //tousseInstance.setReviewerCode(reviewerCode); + tousseInstance.setReviewer(thirdPartyTousseInstance.getReviewer()); + //tousseInstance.setSterilizationUserCode(sterileCode); + //tousseInstance.setSterilizationUser(sterileName); + + // 设置临床科室编码 + if(DatabaseUtil.isPoIdValid(thirdPartyTousseInstance.getOrgUnitId())){ + OrgUnit depart = orgUnitManager.get(thirdPartyTousseInstance.getOrgUnitId()); + tousseInstance.setDepart(depart.getName()); + tousseInstance.setDepartCoding(depart.getOrgUnitCoding()); + } + // 将装配时间作为默认的灭菌开始时间 + if(thirdPartyTousseInstance.getSterileTime() != null){ + tousseInstance.setSterileStartTime(DateTools.getFormatDateStr(thirdPartyTousseInstance.getSterileTime(), DateTools.COMMON_DATE_HMS)); + tousseInstance.setSterileEndTime(tousseInstance.getSterileStartTime()); + } + if(thirdPartyTousseInstance.getSterileTime() != null){ + tousseInstance.setOperationTime(thirdPartyTousseInstance.getSterileTime()); + }else{ + tousseInstance.setOperationTime(new Date()); + } + 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.setSterilingType(sterilingType); + //tousseInstanceManager.setTousseSterilingMode(tousseInstance , sterilingTypeToSterilingModeMap); + //tousseInstance.setSterilizerName(sterilizer); + //tousseInstance.setSterileFrequency(frequency); + + /*if (TousseDefinition.STR_NO.equals(td.getIsReview())) { + // 不审核器械包修改状态 + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td + .getTousseType())) { + if(TousseDefinition.STR_YES.equals(td.getIsSterile())){ + tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); + }else{ + tousseInstance.setStatus(TousseInstance.STATUS_DISINFECTED); + } + } else { + tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); + } + //tousseInstance.setReviewTime(currentDate); + } else { + tousseInstance.setStatus(TousseInstance.STATUS_PACKED); + }*/ + //修改器械包实例状态“已灭菌”或者“已消毒” + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td.getTousseType())) { + if(TousseDefinition.STR_YES.equals(td.getIsSterile())){ + tousseInstance.setStatus(TousseInstance.STATUS_STERILED); + }else{ + tousseInstance.setStatus(TousseInstance.STATUS_DISINFECTED); + } + } else { + tousseInstance.setStatus(TousseInstance.STATUS_STERILED); + } + + tousseInstance.setValidUntil(thirdPartyTousseInstance.getValidUntil()); + //根据失效时间计算对应的预警期,包装类型根据器械包定义中的类型来作为依据判断预警周期 + setWarningUntilByValidUntil(tousseInstance); + tousseInstance.setOrgUnitCoding(orgUnit.getOrgUnitCoding()); + tousseInstance.setOrgUnitName(orgUnit.getName()); + tousseInstance.setUnTraceableTousse(Constants.STR_YES.equals(td.getIsTraceable()) ? false : true); + if(tousseInstance.getTousseDefinition().isForeignTousse() && !DatabaseUtil.isPoIdValid(thirdPartyTousseInstance.getInvoicePlanId())){ + throw new SystemException("外来器械包不需要接收入库,请直接在对应的外来器械申请单进行接收操作。"); + } + tousseInstance.setInvoicePlanID(thirdPartyTousseInstance.getInvoicePlanId()); + tousseInstance.setThirdPartyTousseInstanceId(thirdPartyTousseInstance.getId()); + tousseInstanceManager.save(tousseInstance); + thirdPartyTousseInstance.setTousseInstanceId(tousseInstance.getId()); + tousseInstanceList.add(tousseInstance); + } + // 更新库存 + updateGoodsStock(wareHouse, tousseInstanceList); + } + + /** + * 根据根据失效时间计算对应的预警期,包装类型根据器械包定义中的类型来作为依据判断预警周期; + * @param tousseInstance + * @return + */ + @SuppressWarnings("unchecked") + private void setWarningUntilByValidUntil(TousseInstance ti) { + List eds = objectDao.findAllObjects(ExpirationDateInfo.class.getSimpleName()); + Map edsMap = new HashMap(); + if(eds != null && eds.size() > 0){ + for (ExpirationDateInfo expirationDateInfo : eds) { + edsMap.put(expirationDateInfo.getPackageType(), expirationDateInfo); + } + } + TousseDefinition td = ti.getTousseDefinition(); + if(StringUtils.isNotBlank(td.getPackageType()) && edsMap.containsKey(td.getPackageType())){ + ExpirationDateInfo ed = edsMap.get(td.getPackageType()); + if(ed != null){ + Integer validDate = ed.getValidDate(); + Integer warningDate = ed.getWarningDate(); + Date validUntil = ti.getValidUntil(); + if(validUntil != null && validDate != null && warningDate != null){ + Integer duration = validDate - warningDate; + Date warningUntil = DateTools.addDate(validUntil, -duration); + ti.setWarningUntil(warningUntil); + } + } + } + } + + /** + * 根据名称查询器械包定义 + * @param thirdPartyTousseInstance + * @return + */ + private TousseDefinition getTousseDefinition(ThirdPartyTousseInstance thirdPartyTousseInstance) { + TousseDefinition ancestorTD = tousseDefinitionManager.getTousseDefinitionByNameForDisplay(thirdPartyTousseInstance.getTousseName()); + if(ancestorTD == null){ + throw new SystemException(String.format("“%s”不存在,请重新确认后再接收。", thirdPartyTousseInstance.getTousseName())); + } + //检查是否支持的器械包类型 + validateTousseType(ancestorTD); + if(ancestorTD.isDisinfection()){ + JSONArray materialArry = tousseDefinitionManager.buildMaterialInstances(ancestorTD); + return tousseDefinitionManager.newDisinfectGoodsDefinitionWithoutInvoicePlanId(ancestorTD, materialArry, true); + } + if(ancestorTD.isForeignTousse()){ + TousseDefinition tousseDefinition = new TousseDefinition(); + BeanUtils.copyProperties(ancestorTD, tousseDefinition, "id","materialInstances","diposableGoodsItems"); + tousseDefinition.setForDisplay(false); + tousseDefinition = newForeignTousseDefinition(ancestorTD); + return tousseDefinition; + } + return ancestorTD; + } + + /** + * 创建外来器械包定义 + * @param ancestorTD + * @return + */ + private TousseDefinition newForeignTousseDefinition(TousseDefinition ancestorTD) { + SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); + String cleanedEntirely = ""; + String barcodePaperType = ""; + if(config != null){ + cleanedEntirely = config.getForeignTousseCleanedEntirely(); + barcodePaperType = config.getBarcodePaperType(); + } + if(StringUtils.isBlank(cleanedEntirely)){ + cleanedEntirely = TousseDefinition.STR_YES; + } + TousseDefinition tousseDefinition = new TousseDefinition(); + tousseDefinition.setName(ancestorTD.getName()); + //tousseDefinition.setInvoicePlanID(appid); + tousseDefinition.setForDisplay(false); + tousseDefinition.setWorkLoadStatisticalMethod(TousseDefinition.WORKLOAD_STATISTICAL_METHOD_PACK); + tousseDefinition.setSupplierName(ancestorTD.getSupplierName()); + tousseDefinition.setTemporaryPurchase(ancestorTD.getTemporaryPurchase()); + tousseDefinition.setTousseType(TousseDefinition.PACKAGE_TYPE_FOREIGN); + //外来器械包默认处理科室及任务组 + JSONObject foreignTousseHandleDepartAndTaskGroupJsonobject = config.getOneForeignTousseHandleDepartAndTaskGroupByDepartCode(AcegiHelper.getCurrentOrgUnitCode()); + if(foreignTousseHandleDepartAndTaskGroupJsonobject != null){ + tousseDefinition.setHandlerDepartCode(foreignTousseHandleDepartAndTaskGroupJsonobject.optString("departCode")); + tousseDefinition.setHandlerDepartName(foreignTousseHandleDepartAndTaskGroupJsonobject.optString("departName")); + tousseDefinition.setTaskGroup(foreignTousseHandleDepartAndTaskGroupJsonobject.optString("taskGroup")); + } + tousseDefinition.setIsCleanedEntirely(cleanedEntirely); + tousseDefinition.setIsReview(config.getForeignTousseNeedReview()); + + tousseDefinition.setPackageSize(ancestorTD.getPackageSize()); //包大小 + tousseDefinition.setForeignToussePrintAmount(ancestorTD.getForeignToussePrintAmount()); //打印数量 + + + if(config != null){ + tousseDefinition.setPrintAmount(config.getFtPrintAmount()); + tousseDefinition.setPrintOrgSource(config.getFtPrintOrgSource()); + tousseDefinition.setPrintAmountSource(config.getFtPrintAmountSource()); + } + tousseDefinition.setSplitNumber(ancestorTD.getSplitNumber()); //拆包数量 + + JSONArray materialInfo = buildMaterialInfo(ancestorTD); + tousseDefinitionManager.saveTousseDefinition(tousseDefinition, materialInfo.toString(), tousseDefinition.getAncestorID(), TousseDefinition.UPDATE_MATERIAL_DISPOSABLE_MODE_BOTH, null); + + //if(forDisplay){ + //tousseDefinition.setPackageType(config.getFtDefaultPackageType()); + //tousseDefinition.setSterilingMethod(config.getFtDefaultSterilingMethod()); + //} + + //tousseDefinition.setMaterialInstances(foreignMaterialDefinitions); + //tousseDefinition.setIncludeImplant(includeImplantFlag); + //tousseDefinition.setMaterialAmount(materialAmount); + //tousseDefinition.setMaterialSplitAmount(materialSplitAmount); + //tousseDefinition.setDiposableGoodsItems(diposableGoodsInstances); + //tousseDefinition.setDisposableGoodsAmount(disposableGoodsAmount); + + tousseDefinition.setRiskLevel(ancestorTD == null ? null : ancestorTD.getRiskLevel()); + tousseDefinition.setPrice(ancestorTD.getPrice()); + tousseDefinition.setWeight(ancestorTD.getWeight()); + tousseDefinition.setDiscountPrice(tousseDefinition.getPrice()); + + tousseDefinition.setAncestorID(ancestorTD.getId()); + tousseDefinition.setBarcodePaperType(ancestorTD.getBarcodePaperType()); + tousseDefinition.setPrintAmount(ancestorTD.getPrintAmount()); //现在申请外来器械包支持修改了,以修改的为准 + tousseDefinition.setPrintAmountSource(ancestorTD.getPrintAmountSource()); + tousseDefinition.setNote(ancestorTD.getNote()); + String defaultPackageType = ancestorTD.getPackageType(); + if(StringUtils.isBlank(defaultPackageType)){ + defaultPackageType = config.getFtDefaultPackageType(); + } + tousseDefinition.setPackageType(defaultPackageType); + String defaultSterilingMethod = ancestorTD.getSterilingMethod(); + if(StringUtils.isBlank(defaultSterilingMethod)){ + defaultSterilingMethod = config.getFtDefaultSterilingMethod(); + } + tousseDefinition.setSterilingMethod(defaultSterilingMethod); + //默认拿祖先标签类型,如果空就拿科室供应室标签类型 + if(StringUtils.isNotBlank(ancestorTD.getBarcodePaperType())){ + barcodePaperType = ancestorTD.getBarcodePaperType(); + } + tousseDefinition.setBarcodePaperType(barcodePaperType); + + + if(!tousseDefinition.isForeignOrSplitTousse()){ + tousseDefinition.setPrintOrgSource(ancestorTD.getPrintOrgSource()); + } + //启用按照申请材料数量计算外来器械包积分XKYY-219 + boolean enableForeignToussePointsNumberOfApplicationMaterials = + ConfigUtils.getSystemSetConfigByNameBool("enableForeignToussePointsNumberOfApplicationMaterials"); + if(enableForeignToussePointsNumberOfApplicationMaterials){ + double point = tousseDefinition.calculatePointsByMaterials(); + tousseDefinition.setIntegral(point); + }else{ + tousseDefinition.setIntegral(ancestorTD.getIntegral()); + } + + return tousseDefinition; + } + + + /** + * 创建包内材料的参数 + * @param ancestorTD + * @return + */ + private JSONArray buildMaterialInfo(TousseDefinition ancestorTD) { + JSONArray materialInfo = new JSONArray(); + JSONArray materialArry = tousseDefinitionManager.buildMaterialInstances(ancestorTD); + if(materialArry != null && materialArry.size() > 0){ + materialInfo.addAll(materialArry); + } + JSONArray disposableGoodsArray = buildDisposableGoods(ancestorTD); + if(disposableGoodsArray != null && disposableGoodsArray.size() > 0){ + materialInfo.addAll(disposableGoodsArray); + } + return materialInfo; + } + + /** + * 创建包内一次性物品材料参数 + * @param ancestorTD + * @return + */ + private JSONArray buildDisposableGoods(TousseDefinition ancestorTD) { + JSONArray materialInfo = new JSONArray(); + List diposableGoodsItems = ancestorTD.getDiposableGoodsItems(); + if(CollectionUtils.isEmpty(diposableGoodsItems)){ + return materialInfo; + } + for (DiposableGoodsInstance di : diposableGoodsItems) { + JSONObject obj = new JSONObject(); + obj.put("name",CssdUtils.getDiposableGoodsName(di.getDiposableGoods())); + obj.put("count", di.getAmount()); + obj.put("tousseType", di.getType()); + materialInfo.add(obj); + } + return materialInfo; + } + + /** + * 更新库存 + * @param wareHouse + * @param tousseList + */ + private void updateGoodsStock(WareHouse wareHouse, List tousseList) { + if(wareHouse == null){ + throw new RuntimeException("该科室仓库未定义!"); + } + Collection tiIds = new ArrayList(); + Collection tiList = new ArrayList(); + if(CollectionUtils.isNotEmpty(tousseList)){ + for (TousseInstance arg0 : tousseList) { + if(TousseInstance.STATUS_DISINFECTED.equals(arg0.getStatus()) + || TousseInstance.STATUS_STERILED.equals(arg0.getStatus())){ + tiList.add(arg0); + tiIds.add(arg0.getId()); + } + } + } + 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 tousseDefinition + */ + private void validateTousseType(TousseDefinition tousseDefinition) { + List tousseTypeList = new ArrayList(); + tousseTypeList.add(TousseDefinition.PACKAGE_TYPE_INSIDE); + tousseTypeList.add(TousseDefinition.PACKAGE_TYPE_DRESSING); + tousseTypeList.add(TousseDefinition.PACKAGE_TYPE_DISINFECTION); + tousseTypeList.add(TousseDefinition.PACKAGE_TYPE_FOREIGN); + if(!tousseTypeList.contains(tousseDefinition.getTousseType())){ + throw new SystemException(String.format("“%s”无法被接收。", tousseDefinition.getTousseType())); + } + } + + /** + * 校验第三方器械包接收记录 + * @param thirdPartyTousseReceiveRecord + */ + private void validateThirdPartyTousseReceiveRecord(ThirdPartyTousseReceiveRecord thirdPartyTousseReceiveRecord) { + if(thirdPartyTousseReceiveRecord.getReceiveTime() == null){ + throw new SystemException("接收时间不能为空!"); + } + if(StringUtils.isBlank(thirdPartyTousseReceiveRecord.getSerialNumber())){ + throw new SystemException("流水号不能为空!"); + } + if(!DatabaseUtil.isPoIdValid(thirdPartyTousseReceiveRecord.getWareHouseId())){ + throw new SystemException("仓库ID无效!"); + } + WareHouse wareHouse = wareHouseManager.getWareHouseById(thirdPartyTousseReceiveRecord.getWareHouseId()); + if(wareHouse == null){ + throw new SystemException("仓库ID无效!"); + } + if(!supplyRoomConfigManager.isFirstSupplyRoomOrgUnit(wareHouse.getOrgUnitCode())){ + throw new SystemException("当前仅限一级供应室可以接收第三方器械包。"); + } + if(DatabaseUtil.isPoIdValid(thirdPartyTousseReceiveRecord.getReceiverId())){ + if(userManager.get(thirdPartyTousseReceiveRecord.getReceiverId()) == null){ + throw new SystemException("接收员ID无效!"); + } + } + List thirdPartyTousseInstances = thirdPartyTousseReceiveRecord.getThirdPartyTousseInstances(); + if(CollectionUtils.isEmpty(thirdPartyTousseInstances)){ + throw new SystemException("接收物品列表不允许为空!"); + } + //校验第三方器械包 + //查询第三方器械包条码对应的id map + Map barcodeIdMap = getThirdPartyTousseInstanceBarcodeIdMap(thirdPartyTousseInstances); + //第三方器械包申请科室map + Map idOrgUnitMap = getThirdPartyTousseInstanceOrgUnitMap(thirdPartyTousseInstances); + List barcodes = new ArrayList(); + for (ThirdPartyTousseInstance thirdPartyTousseInstance : thirdPartyTousseInstances) { + validateThirdPartyTousseInstance(thirdPartyTousseInstance, idOrgUnitMap); + String barcode = thirdPartyTousseInstance.getBarcode(); + if(barcodes.contains(barcode)){ + throw new SystemException("物品条码不能重复!"); + } + barcodes.add(thirdPartyTousseInstance.getBarcode()); + } + for (ThirdPartyTousseInstance thirdPartyTousseInstance : thirdPartyTousseInstances) { + Long id = barcodeIdMap.get(thirdPartyTousseInstance.getBarcode()); + if(!DatabaseUtil.isPoIdValid(id)){ + //新条码 + continue; + } + if(DatabaseUtil.isPoIdValid(thirdPartyTousseInstance.getId()) && thirdPartyTousseInstance.getId().equals(id)){ + continue; + } + throw new SystemException(String.format("物品条码%s已经被接收!", thirdPartyTousseInstance.getBarcode())); + } + } + + /** + * 第三方器械包申请科室map + * @param thirdPartyTousseInstances + * @return + */ + private Map getThirdPartyTousseInstanceOrgUnitMap(List thirdPartyTousseInstances) { + Map orgUnitMap = new HashMap(); + List orgUnitIdList = new ArrayList(); + for (ThirdPartyTousseInstance thirdPartyTousseInstance : thirdPartyTousseInstances) { + if(DatabaseUtil.isPoIdValid(thirdPartyTousseInstance.getOrgUnitId()) + && !orgUnitIdList.contains(thirdPartyTousseInstance.getOrgUnitId())){ + orgUnitIdList.add(thirdPartyTousseInstance.getOrgUnitId()); + } + } + List list = orgUnitManager.getCollection(orgUnitIdList); + if(CollectionUtils.isEmpty(list)){ + return orgUnitMap; + } + for (OrgUnit orgUnit : list) { + orgUnitMap.put(orgUnit.getId(), orgUnit); + } + return orgUnitMap; + } + + /** + * 查询条码关联的接收器械包记录id + * @param thirdPartyTousseInstances + * @return + */ + private Map getThirdPartyTousseInstanceBarcodeIdMap(List thirdPartyTousseInstances) { + List barcodes = new ArrayList(); + for (ThirdPartyTousseInstance thirdPartyTousseInstance : thirdPartyTousseInstances) { + String barcode = thirdPartyTousseInstance.getBarcode(); + if(barcodes.contains(barcode)){ + throw new SystemException("物品条码不能重复!"); + } + barcodes.add(thirdPartyTousseInstance.getBarcode()); + } + return getBarcodeIdMap(barcodes); + } + + + /** + * 查询条码关联的接收记录 + * @param barcodes + * @return + */ + private Map getBarcodeIdMap(List barcodes) { + Map barcodeIdMap = new HashMap(); + if(CollectionUtils.isEmpty(barcodes)){ + return barcodeIdMap; + } + StringBuffer sql = new StringBuffer(); + sql.append("select id, barcode from ") + .append(ThirdPartyTousseInstance.class.getSimpleName()) + .append(" where ") + .append(SqlUtils.getStringFieldInLargeCollectionsPredicate("barcode", barcodes)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql.toString()); + while(rs.next()){ + Long id = rs.getLong("id"); + String barcode = rs.getString("barcode"); + if(id != null){ + barcodeIdMap.put(barcode, id); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return barcodeIdMap; + } + + /** + * 校验第三方器械包 + * @param thirdPartyTousseInstance + */ + private void validateThirdPartyTousseInstance(ThirdPartyTousseInstance thirdPartyTousseInstance, Map orgUnitMap) { + if(StringUtils.isBlank(thirdPartyTousseInstance.getBarcode())){ + throw new SystemException("物品的条码不能为空!"); + } + if(StringUtils.isBlank(thirdPartyTousseInstance.getTousseName())){ + throw new SystemException("物品的名称不能为空!"); + } + if(DatabaseUtil.isPoIdValid(thirdPartyTousseInstance.getOrgUnitId())){ + if(orgUnitMap.get(thirdPartyTousseInstance.getOrgUnitId()) == null){ + throw new SystemException("申请科室ID无效!"); + } + } + } + + /** + * 创建第三方器械包接收记录 + * @param thirdPartyTousseReceiveRecordVo + * @return + */ + private ThirdPartyTousseReceiveRecord buildThirdPartyTousseReceiveRecord(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo) { + if(thirdPartyTousseReceiveRecordVo == null){ + throw new SystemException("参数异常!"); + } + ThirdPartyTousseReceiveRecord thirdPartyTousseReceiveRecord = null; + if(DatabaseUtil.isPoIdValid(thirdPartyTousseReceiveRecordVo.getId())){ + thirdPartyTousseReceiveRecord = this.get(thirdPartyTousseReceiveRecordVo.getId()); + throw new SystemException("记录不存在或者已被删除!"); + } + if(thirdPartyTousseReceiveRecord == null){ + thirdPartyTousseReceiveRecord = new ThirdPartyTousseReceiveRecord(); + thirdPartyTousseReceiveRecord.setSerialNumber(serialNumManager.getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); + thirdPartyTousseReceiveRecord.setReceiveTime(new Date()); + thirdPartyTousseReceiveRecord.setWareHouseId(thirdPartyTousseReceiveRecordVo.getWareHouseId()); + } + thirdPartyTousseReceiveRecord.setReceiverId(thirdPartyTousseReceiveRecordVo.getReceiverId()); + thirdPartyTousseReceiveRecord.setRemark(thirdPartyTousseReceiveRecordVo.getRemark()); + thirdPartyTousseReceiveRecord.setSender(thirdPartyTousseReceiveRecordVo.getSender()); + + List dbThirdPartyTousseInstanceList = thirdPartyTousseReceiveRecord.getThirdPartyTousseInstances(); + List thirdPartyTousseInstanceVos = thirdPartyTousseReceiveRecordVo.getThirdPartyTousseInstances(); + if(CollectionUtils.isNotEmpty(thirdPartyTousseInstanceVos)){ + Map> nameOrgUnitMap = getOrgUnitMap(thirdPartyTousseInstanceVos); + List thirdPartyTousseInstances = new ArrayList(); + for (ThirdPartyTousseInstanceVo thirdPartyTousseInstanceVo : thirdPartyTousseInstanceVos) { + ThirdPartyTousseInstance thirdPartyTousseInstance = null; + for (ThirdPartyTousseInstance dbThirdPartyTousseInstance : dbThirdPartyTousseInstanceList) { + if(StringUtils.equals(dbThirdPartyTousseInstance.getBarcode(), thirdPartyTousseInstanceVo.getBarcode())){ + //已经接收过的物品不允许修改 + thirdPartyTousseInstance = dbThirdPartyTousseInstance; + break; + } + } + if(thirdPartyTousseInstance != null){ + //已经接收过的物品不支持修改,也不允许修改 + continue; + } + thirdPartyTousseInstance = new ThirdPartyTousseInstance(); + thirdPartyTousseInstance.setBarcode(thirdPartyTousseInstanceVo.getBarcode()); + thirdPartyTousseInstance.setOperator(thirdPartyTousseInstanceVo.getOperator()); + thirdPartyTousseInstance.setOrgUnitId(thirdPartyTousseInstanceVo.getOrgUnitId()); + if(!DatabaseUtil.isPoIdValid(thirdPartyTousseInstanceVo.getOrgUnitId()) && StringUtils.isNotBlank(thirdPartyTousseInstanceVo.getOrgUnitName())){ + List orgUnitList = nameOrgUnitMap.get(thirdPartyTousseInstanceVo.getOrgUnitName()); + if(CollectionUtils.isEmpty(orgUnitList)){ + throw new SystemException(String.format("申请科室%s不存在!", thirdPartyTousseInstanceVo.getOrgUnitName())); + } + if(orgUnitList.size() > 1){ + throw new SystemException(String.format("器械包名称接收失败,存在重复的申请科室“%s”。", thirdPartyTousseInstanceVo.getOrgUnitName())); + } + thirdPartyTousseInstance.setOrgUnitId(orgUnitList.get(0).getId()); + } + thirdPartyTousseInstance.setReviewer(thirdPartyTousseInstanceVo.getReviewer()); + if(StringUtils.isNotBlank(thirdPartyTousseInstanceVo.getSterileTime())){ + thirdPartyTousseInstance.setSterileTime(DateTools.coverStrToDate(thirdPartyTousseInstanceVo.getSterileTime(), DateTools.COMMON_DATE_HMS)); + } + //thirdPartyTousseInstance.setTousseInstanceId(tousseInstanceId); + thirdPartyTousseInstance.setTousseName(thirdPartyTousseInstanceVo.getTousseName()); + if(StringUtils.isNotBlank(thirdPartyTousseInstanceVo.getValidUntil())){ + thirdPartyTousseInstance.setValidUntil(DateTools.coverStrToDate(thirdPartyTousseInstanceVo.getValidUntil(), DateTools.COMMON_DATE_ONLY)); + } + //申请单id,目前就外来器械包需要关联申请单 + thirdPartyTousseInstance.setInvoicePlanId(thirdPartyTousseInstanceVo.getInvoicePlanId()); + thirdPartyTousseInstances.add(thirdPartyTousseInstance); + } + thirdPartyTousseReceiveRecord.getThirdPartyTousseInstances().addAll(thirdPartyTousseInstances); + } + return thirdPartyTousseReceiveRecord; + } + + /** + * 根据科室名称查询接收物品的申请科室 + * @param thirdPartyTousseInstanceVos + * @return + */ + private Map> getOrgUnitMap(List thirdPartyTousseInstanceVos) { + Map> orgUnitMap = new HashMap>(); + if(CollectionUtils.isEmpty(thirdPartyTousseInstanceVos)){ + return orgUnitMap; + } + List orgUnitNameList = new ArrayList(); + for (ThirdPartyTousseInstanceVo vo : thirdPartyTousseInstanceVos) { + if(!DatabaseUtil.isPoIdValid(vo.getOrgUnitId()) && StringUtils.isNotBlank(vo.getOrgUnitName()) + && !orgUnitNameList.contains(vo.getOrgUnitName())){ + orgUnitNameList.add(vo.getOrgUnitName()); + } + } + if(CollectionUtils.isEmpty(orgUnitNameList)){ + return orgUnitMap; + } + List orgUnitList = orgUnitManager.getCollection("name", orgUnitNameList); + if(CollectionUtils.isEmpty(orgUnitList)){ + return orgUnitMap; + } + for (OrgUnit orgUnit : orgUnitList) { + List tempOrgUnitList = orgUnitMap.get(orgUnit.getName()); + if(tempOrgUnitList == null){ + tempOrgUnitList = new ArrayList(); + } + tempOrgUnitList.add(orgUnit); + orgUnitMap.put(orgUnit.getName(), tempOrgUnitList); + } + return orgUnitMap; + } + + + @Override + @SuppressWarnings("unchecked") + public void loadThirdPartyTousseReceiveRecord(PageEntity page) { + int firstIndex = 0; + int maxResults = 0; + if(page != null){ + firstIndex = page.getStart(); + maxResults = page.getLimit(); + } + if(firstIndex <= 0){ + firstIndex = 0; + } + if(maxResults <= 0){ + maxResults = 20; + } + int count = objectDao.countObject(ThirdPartyTousseReceiveRecord.class.getSimpleName()); + if(count == 0){ + return; + } + List records = objectDao.findAllObjects(ThirdPartyTousseReceiveRecord.class.getSimpleName(), firstIndex, maxResults, "receiveTime desc "); + List voList = new ArrayList(); + Map receiverMap = getReceiverMap(records); + for (ThirdPartyTousseReceiveRecord record : records) { + ThirdPartyTousseReceiveRecordVo vo = new ThirdPartyTousseReceiveRecordVo(); + vo.setId(record.getId()); + vo.setSerialNumber(record.getSerialNumber()); + if(record.getReceiveTime() != null){ + vo.setReceiveTime(DateTools.getFormatDateStr(record.getReceiveTime(), DateTools.COMMON_DATE_HM)); + } + vo.setReceiver(receiverMap.get(record.getReceiverId())); + vo.setSender(record.getSender()); + vo.setRemark(record.getRemark()); + if(CollectionUtils.isNotEmpty(record.getThirdPartyTousseInstances())){ + vo.setTousseAmount(record.getThirdPartyTousseInstances().size()); + } + voList.add(vo); + } + page.setCount(count); + page.setList(voList); + } + + /** + * 查询接收员名称 + * @param records + * @return + */ + private Map getReceiverMap(List records) { + Map receiverMap = new HashMap(); + if(CollectionUtils.isEmpty(records)){ + return receiverMap; + } + List receiverIdList = new ArrayList(); + for (ThirdPartyTousseReceiveRecord record : records) { + receiverIdList.add(record.getReceiverId()); + } + List userList = userManager.getCollection(receiverIdList); + if(CollectionUtils.isNotEmpty(userList)){ + for (User user : userList) { + receiverMap.put(user.getId(), user.getFullName()); + } + } + return receiverMap; + } + + @SuppressWarnings({ "unchecked", "deprecation" }) + @Override + public List loadTousseInstanceByBarcode(String barcode, String isThirdPartyTousse) { + if(StringUtils.isBlank(barcode)){ + throw new RuntimeException("条码不能为空!"); + } + List tousseInstanceList = new ArrayList(); + if(StringUtils.equals(isThirdPartyTousse, Constants.STR_YES)){ + BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode); + if(barcodeDevice != null && barcodeDevice instanceof TousseInstance){ + tousseInstanceList.add((TousseInstance)barcodeDevice); + } + } + List thirdPartyTousseInstanceList = (List) objectDao.findByProperty(ThirdPartyTousseInstance.class.getSimpleName(), "barcode", barcode); + if(CollectionUtils.isNotEmpty(thirdPartyTousseInstanceList)){ + Collection ids = new HashSet(); + for (ThirdPartyTousseInstance thirdPartyTousseInstance : thirdPartyTousseInstanceList) { + ids.add(thirdPartyTousseInstance.getTousseInstanceId()); + } + if(CollectionUtils.isNotEmpty(ids)){ + List tiList = tousseInstanceManager.getCollection(ids); + if(CollectionUtils.isNotEmpty(tiList)){ + tousseInstanceList.addAll(tiList); + } + } + } + return tousseInstanceList; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/ThirdPartyTousseInstance.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/ThirdPartyTousseInstance.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/ThirdPartyTousseInstance.java (revision 38957) @@ -0,0 +1,157 @@ +package com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition; + +import java.util.Date; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * 接收的第三方器械包GYSDERMYY-24 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +@Table(indexes = {@Index(columnList = "tousseInstanceId", name = "thr_tis_ti_id_index"), + @Index(columnList = "barcode", name = "thr_tis_barcode_index")}) +public class ThirdPartyTousseInstance { + + private Long id; + + /** + * 条码 + */ + private String barcode; + + /** + * 物品名称 + */ + private String tousseName; + + /** + * 灭菌日期 + */ + private Date sterileTime; + + /** + * 失效日期 + */ + private Date validUntil; + + /** + * 申请科室ID + */ + private Long orgUnitId; + + /** + * 配包人 + */ + private String operator; + + /** + * 审核员 + */ + private String reviewer; + + /** + * 第三方器械包关联器械包实例 + */ + private Long tousseInstanceId; + + /** + * 申请单id + */ + private Long invoicePlanId; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getBarcode() { + return barcode; + } + + public void setBarcode(String barcode) { + this.barcode = barcode; + } + + public String getTousseName() { + return tousseName; + } + + public void setTousseName(String tousseName) { + this.tousseName = tousseName; + } + + public Date getSterileTime() { + return sterileTime; + } + + public void setSterileTime(Date sterileTime) { + this.sterileTime = sterileTime; + } + + public Date getValidUntil() { + return validUntil; + } + + public void setValidUntil(Date validUntil) { + this.validUntil = validUntil; + } + + public Long getOrgUnitId() { + return orgUnitId; + } + + public void setOrgUnitId(Long orgUnitId) { + this.orgUnitId = orgUnitId; + } + + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + public String getReviewer() { + return reviewer; + } + + public void setReviewer(String reviewer) { + this.reviewer = reviewer; + } + + public Long getTousseInstanceId() { + return tousseInstanceId; + } + + public void setTousseInstanceId(Long tousseInstanceId) { + this.tousseInstanceId = tousseInstanceId; + } + + public Long getInvoicePlanId() { + return invoicePlanId; + } + + public void setInvoicePlanId(Long invoicePlanId) { + this.invoicePlanId = invoicePlanId; + } + +} Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r38750 -r38957 --- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 38750) +++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 38957) @@ -3143,4 +3143,15 @@ class="com.forgon.disinfectsystem.useRecord.urgentreservation.service.UseRecordUrgentReservationManagerImpl"> + + + + + + + + + \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/ThirdPartyTousseReceiveRecord.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/ThirdPartyTousseReceiveRecord.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/ThirdPartyTousseReceiveRecord.java (revision 38957) @@ -0,0 +1,138 @@ +package com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.OrderBy; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.CascadeType; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * “第三方器械包接收记录”GYSDERMYY-24 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class ThirdPartyTousseReceiveRecord { + + private Long id; + + /** + * 流水号 + */ + private String serialNumber; + + /** + * 送货员 + */ + private String sender; + + /** + * 接收员 + */ + private Long receiverId; + + /** + * 接收时间 + */ + private Date receiveTime; + + /** + * 仓库ID + */ + private Long wareHouseId; + + /** + * 备注 + */ + private String remark; + + /** + * 接收的第三方器械包 + */ + private List thirdPartyTousseInstances = new ArrayList(); + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSerialNumber() { + return serialNumber; + } + + public void setSerialNumber(String serialNumber) { + this.serialNumber = serialNumber; + } + + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public Long getReceiverId() { + return receiverId; + } + + public void setReceiverId(Long receiverId) { + this.receiverId = receiverId; + } + + public Date getReceiveTime() { + return receiveTime; + } + + public void setReceiveTime(Date receiveTime) { + this.receiveTime = receiveTime; + } + + public Long getWareHouseId() { + return wareHouseId; + } + + public void setWareHouseId(Long wareHouseId) { + this.wareHouseId = wareHouseId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @OneToMany(fetch = FetchType.LAZY) + @Cascade(value = { CascadeType.ALL }) + @JoinColumn(name = "receiveRecord_id") + public List getThirdPartyTousseInstances() { + return thirdPartyTousseInstances; + } + + public void setThirdPartyTousseInstances( + List thirdPartyTousseInstances) { + this.thirdPartyTousseInstances = thirdPartyTousseInstances; + } +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java =================================================================== diff -u -r38588 -r38957 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java (.../TousseInstance.java) (revision 38588) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java (.../TousseInstance.java) (revision 38957) @@ -111,6 +111,7 @@ ,@Index(columnList = "settleAccountsDepartCode", name = "tis_settleAccoDeptCode_index") ,@Index(columnList = "lendBorrowRecord_id", name = "tis_lborrow_id_index") ,@Index(columnList = "returnBorrowRecord_id", name = "tis_rborrow_id_index") +,@Index(columnList = "thirdPartyTousseInstanceId", name = "tis_thr_tis_id_index") //效果包含但不限于加速加急灭菌装载模块加急待装载物品,当时gzykdxfskqyy数据库从10s查询变为0s,删除此索引慎重 ,@Index(columnList = "comboTousseInstanceId,reviewBasket_id,status,orgUnitCoding,proxyDisinfection_id,tousseDefinition_id", name = "tis_crsopt_index") //加速灭菌的发货数量查询和不灭菌的发货数量查询 @@ -857,6 +858,11 @@ */ private String videoAndPictureRecording = ""; + /** + * 第三方器械包id(GYSDERMYY-24) + */ + private Long thirdPartyTousseInstanceId; + public static final String[] filterProperties = { "handler", "hibernateLazyInitializer", "fieldHandler", "materialInstances", "storageLocationList", "sterilizationRecords", "isUploadImage", "isUploadVideo", "images", @@ -3216,6 +3222,14 @@ this.lastStorageLocationId = lastStorageLocationId; } + public Long getThirdPartyTousseInstanceId() { + return thirdPartyTousseInstanceId; + } + + public void setThirdPartyTousseInstanceId(Long thirdPartyTousseInstanceId) { + this.thirdPartyTousseInstanceId = thirdPartyTousseInstanceId; + } + /** * 关联查询科室名称及仓库名称 * @param objectDao Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseInstanceVo.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseInstanceVo.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/vo/ThirdPartyTousseInstanceVo.java (revision 38957) @@ -0,0 +1,149 @@ +package com.forgon.disinfectsystem.tousse.toussedefinition.vo; + +/** + * 第三方器械包实例vo + * + */ +public class ThirdPartyTousseInstanceVo { + + private Long id; + + /** + * 条码 + */ + private String barcode; + + /** + * 物品名称 + */ + private String tousseName; + + /** + * 灭菌日期 + */ + private String sterileTime; + + /** + * 失效日期 + */ + private String validUntil; + + /** + * 申请科室ID + */ + private Long orgUnitId; + + /** + * 申请科室名称 + */ + private String orgUnitName; + + /** + * 配包人 + */ + private String operator; + + /** + * 审核员 + */ + private String reviewer; + + /** + * 第三方器械包关联器械包实例 + */ + private Long tousseInstanceId; + + /** + * 申请单id, + */ + private Long invoicePlanId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getBarcode() { + return barcode; + } + + public void setBarcode(String barcode) { + this.barcode = barcode; + } + + public String getTousseName() { + return tousseName; + } + + public void setTousseName(String tousseName) { + this.tousseName = tousseName; + } + + public String getSterileTime() { + return sterileTime; + } + + public void setSterileTime(String sterileTime) { + this.sterileTime = sterileTime; + } + + public String getValidUntil() { + return validUntil; + } + + public void setValidUntil(String validUntil) { + this.validUntil = validUntil; + } + + public Long getOrgUnitId() { + return orgUnitId; + } + + public void setOrgUnitId(Long orgUnitId) { + this.orgUnitId = orgUnitId; + } + + public String getOrgUnitName() { + return orgUnitName; + } + + public void setOrgUnitName(String orgUnitName) { + this.orgUnitName = orgUnitName; + } + + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + public String getReviewer() { + return reviewer; + } + + public void setReviewer(String reviewer) { + this.reviewer = reviewer; + } + + public Long getTousseInstanceId() { + return tousseInstanceId; + } + + public void setTousseInstanceId(Long tousseInstanceId) { + this.tousseInstanceId = tousseInstanceId; + } + + public Long getInvoicePlanId() { + return invoicePlanId; + } + + public void setInvoicePlanId(Long invoicePlanId) { + this.invoicePlanId = invoicePlanId; + } + +} Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java =================================================================== diff -u -r38623 -r38957 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java (.../TousseInstanceTableManager.java) (revision 38623) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/TousseInstanceTableManager.java (.../TousseInstanceTableManager.java) (revision 38957) @@ -49,6 +49,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ImageVideoObjectIdTable; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ThirdPartyTousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; @@ -249,40 +250,87 @@ String barcodeSearch = sqlWhereParamMap.get("barcodeSearch"); //条码集合(用户启用多次扫描模式并且不是第一次扫描条码时才有值,此时要按照此条码集合查询) String barcodes = sqlWhereParamMap.get("barcodes"); + //是否启用第三方器械包管理功能GYSDERMYY-24 + boolean enbaleThirdPartyTousseManagementFunction = ConfigUtils.getSystemSetConfigByNameBool("enbaleThirdPartyTousseManagementFunction"); if(StringUtils.isNotBlank(barcodeSearch) && !StringUtils.equals("null", barcodeSearch)){ - //根据条码获取BarcodeDevice - BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcodeSearch); - //1、若无此条码 2、用户没启用多次扫描模式,或者是启用了而且是第一次扫描 - //同时满足1和2两个条件则直接返回 - if(barcodeDevice == null && StringUtils.isBlank(barcodes)) { - Map map = new HashMap(); - map.put("totalResults", 0); - map.put("list", Arrays.asList()); - map.put("selectSqlWhereCondition", ""); - String json = gridManager.converJsonString(0, Arrays.asList(), "",TousseInstance.filterProperties); - return json; - } - //若是标识牌的条码 - if(barcodeDevice != null && BarcodeDevice.BARCODE_TYPE_TOUSSEINSTANCESETCODE.equals(barcodeDevice.getType())){ - //集合码过滤 - sqlBuilder.append(" and po.id in(select barcodeDeviceId from "); - sqlBuilder.append(SetCode_Barcode.class.getSimpleName()); - sqlBuilder.append(" where setCodeId =(select id from "); - sqlBuilder.append(BarcodeDevice.class.getSimpleName()); - sqlBuilder.append(" bd where bd.barcode='"); - sqlBuilder.append(barcodeDevice.getBarcode()); - sqlBuilder.append("' and bd.type='"); - sqlBuilder.append(BarcodeDevice.BARCODE_TYPE_TOUSSEINSTANCESETCODE); - sqlBuilder.append("'))"); - }else if (barcodeDevice instanceof IDCardInstance) { - sqlBuilder.append(" AND po.idCardInstanceID=" + barcodeDevice.getId()); - } else { - if (StringUtils.isNotBlank(barcodes)) { - String[] barcodeArray = barcodes.split(";"); - List barcodeList = Arrays.asList(barcodeArray); - sqlBuilder.append(" AND" + SqlBuilder.build_IN_Statement("po.barcode",SqlBuilder.IN, barcodeList)); + //前端如果是扫码了第三方器械包二维码录入条码,则isThirdPartyTousse=是,只查询第三方编码对应的器械包GYSDERMYY-24 + String isThirdPartyTousse = sqlWhereParamMap.get("isThirdPartyTousse"); + if(StringUtils.equals(isThirdPartyTousse, TousseDefinition.STR_YES)){ + ThirdPartyTousseInstance thirdPartyTousseInstance = (ThirdPartyTousseInstance) objectDao.getByProperty( + ThirdPartyTousseInstance.class.getSimpleName(), "barcode", barcodeSearch); + if(thirdPartyTousseInstance == null){ + Map map = new HashMap(); + map.put("totalResults", 0); + map.put("list", Arrays.asList()); + map.put("selectSqlWhereCondition", ""); + String json = gridManager.converJsonString(0, Arrays.asList(), "",TousseInstance.filterProperties); + return json; + } + sqlBuilder.append(" and po.id = " + thirdPartyTousseInstance.getTousseInstanceId() + " "); + }else{ + //根据条码获取BarcodeDevice + BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcodeSearch); + ThirdPartyTousseInstance thirdPartyTousseInstance = null; + if(enbaleThirdPartyTousseManagementFunction){ + thirdPartyTousseInstance = (ThirdPartyTousseInstance) objectDao.getByProperty( + ThirdPartyTousseInstance.class.getSimpleName(), "barcode", barcodeSearch); + } + //1、若无此条码 2、用户没启用多次扫描模式,或者是启用了而且是第一次扫描 + //同时满足1和2两个条件则直接返回 + if(barcodeDevice == null && thirdPartyTousseInstance == null && StringUtils.isBlank(barcodes)) { + Map map = new HashMap(); + map.put("totalResults", 0); + map.put("list", Arrays.asList()); + map.put("selectSqlWhereCondition", ""); + String json = gridManager.converJsonString(0, Arrays.asList(), "",TousseInstance.filterProperties); + return json; + } + if(barcodeDevice != null && BarcodeDevice.BARCODE_TYPE_TOUSSEINSTANCESETCODE.equals(barcodeDevice.getType())){ + //集合码过滤 + sqlBuilder.append(" and (po.id in(select barcodeDeviceId from "); + sqlBuilder.append(SetCode_Barcode.class.getSimpleName()); + sqlBuilder.append(" where setCodeId =(select id from "); + sqlBuilder.append(BarcodeDevice.class.getSimpleName()); + sqlBuilder.append(" bd where bd.barcode='"); + sqlBuilder.append(barcodeDevice.getBarcode()); + sqlBuilder.append("' and bd.type='"); + sqlBuilder.append(BarcodeDevice.BARCODE_TYPE_TOUSSEINSTANCESETCODE); + sqlBuilder.append("'))"); + if(thirdPartyTousseInstance != null){ + //第三方器械包条码和集合码重复了 + sqlBuilder.append(" or po.id = "); + sqlBuilder.append(thirdPartyTousseInstance.getTousseInstanceId()); + } + sqlBuilder.append(")"); + }else if (barcodeDevice instanceof IDCardInstance) { + //若是标识牌的条码 + sqlBuilder.append(" AND (po.idCardInstanceID=" + barcodeDevice.getId()); + if(thirdPartyTousseInstance != null){ + ////第三方器械包条码和标识牌的条码重复了 + sqlBuilder.append(" or po.id = "); + sqlBuilder.append(thirdPartyTousseInstance.getTousseInstanceId()); + } + sqlBuilder.append(")"); } else { - sqlBuilder.append(String.format(" AND po.barcode = '%s' ",barcodeSearch)); + if (StringUtils.isNotBlank(barcodes)) { + String[] barcodeArray = barcodes.split(";"); + List barcodeList = Arrays.asList(barcodeArray); + sqlBuilder.append(" AND (" + SqlBuilder.build_IN_Statement("po.barcode",SqlBuilder.IN, barcodeList)); + if(enbaleThirdPartyTousseManagementFunction){ + sqlBuilder.append(" or po.id in (select tousseInstanceId from "); + sqlBuilder.append(ThirdPartyTousseInstance.class.getSimpleName()); + sqlBuilder.append(" where " + SqlBuilder.build_IN_Statement("barcode",SqlBuilder.IN, barcodeList)); + sqlBuilder.append(")"); + } + sqlBuilder.append(")"); + } else { + sqlBuilder.append(String.format(" AND (po.barcode = '%s' ",barcodeSearch)); + if(thirdPartyTousseInstance != null){ + sqlBuilder.append(" or po.id = "); + sqlBuilder.append(thirdPartyTousseInstance.getTousseInstanceId()); + } + sqlBuilder.append(")"); + } } } } @@ -356,7 +404,12 @@ } //如果要根据灭菌时间来筛选,首先必须是已经有灭菌记录的(数据库中存在有灭菌开始时间但是没有灭菌结束时间和灭菌单的记录) if(StringUtils.isNotBlank(sterilizationStart) || StringUtils.isNotBlank(sterilizationEnd)){ - sqlBuilder.append(" AND po.sterilizationRecord_id is not null"); + sqlBuilder.append(" AND (po.sterilizationRecord_id is not null"); + if(enbaleThirdPartyTousseManagementFunction){ + //第三方器械包没有创建灭菌记录 + sqlBuilder.append(" or thirdPartyTousseInstanceId is not null"); + } + sqlBuilder.append(")"); } //灭菌交接开始时间 String sterilizationTransitionStart = sqlWhereParamMap.get("sterilizationTransitionStart"); @@ -751,18 +804,12 @@ Set useRecordIDs = new HashSet();//使用记录id Set unPackTousseDefinitionIds = new HashSet();//不装配的包定义id Set unPackTousseRecyclingRecordIds = new HashSet();//不装配的包实例的回收记录id - Set tiIds = null; + Set tiIds = new HashSet(); Set orgUnitCodes = new HashSet(); - boolean enableTousseNumberCollectionCodeFunction = CssdUtils.getSystemSetConfigByNameBool("enableTousseNumberCollectionCodeFunction", false); - if(enableTousseNumberCollectionCodeFunction){ - tiIds = new HashSet(); - } //ZJYY-86 器械包信息模块的信息列表表格新增扩展列【加急级别】和【影像记录】 boolean includeVideoAndPictureRecording = expandColoumnsConfigIncludeFieldName("expandColoumnsConfigOfTousseInfoList", "videoAndPictureRecording"); for (TousseInstance ti : list) { - if(enableTousseNumberCollectionCodeFunction){ - tiIds.add(ti.getId()); - } + tiIds.add(ti.getId()); if(DatabaseUtil.isPoIdValid(ti.getInvoicePlanID())){ invoicePlanIds.add(ti.getInvoicePlanID()); } @@ -894,8 +941,8 @@ if (jsonArray == null || jsonArray.size() == 0) { return json; } - //获取包实例对应的集合码 - Map setCodeMap = dataHelperForPacking.getTousseInstanceSetCodeMap(tiIds); + //获取包实例对应的集合码,需要开启enableTousseNumberCollectionCodeFunction配置项 + Map setCodeMap = getTousseInstanceSetCodeMap(tiIds); //设置装配时的器械监察员(售后-东莞市中医院ASSDGSZYY-61) Map map = new HashMap(); if (CollectionUtils.isNotEmpty(packingRecordIds)) { @@ -962,6 +1009,8 @@ } //科室编码和科室名称的map Map orgCodeNameMap = orgUnitManager.getOrgUnitCodeAndNameMapByOrgUnitCodes(orgUnitCodes); + //查询第三方条码,需要开启enbaleThirdPartyTousseManagementFunction配置项 + Map thirdPartyTousseBarcodeMap = getThirdPartyTousseBarcodeMap(tiIds); boolean idAndNamesFlag = false; if(MapUtils.isNotEmpty(idAndNames)){ idAndNamesFlag = true; @@ -1063,11 +1112,69 @@ obj.put("settleAccountsDepart", StringUtils.defaultString(settleAccountsDepart)); obj.put("settleAccountsDepart2", StringUtils.defaultString(settleAccountsDepart2)); obj.put("depart", StringUtils.defaultString(depart)); + //第三方条码thirdPartyBarcode + if(thirdPartyTousseBarcodeMap != null){ + obj.put("thirdPartyTousseBarcode", thirdPartyTousseBarcodeMap.get(id)); + } + } return jsonObject.toString(); } /** + * 获取包实例对应的集合码 + * @param tiIds + * @return + */ + private Map getTousseInstanceSetCodeMap(Set tiIds) { + Map setCodeMap = new HashMap(); + boolean enableTousseNumberCollectionCodeFunction = CssdUtils.getSystemSetConfigByNameBool("enableTousseNumberCollectionCodeFunction", false); + if(enableTousseNumberCollectionCodeFunction){ + setCodeMap = dataHelperForPacking.getTousseInstanceSetCodeMap(tiIds); + } + return setCodeMap; + } + + /** + * 查询器械包实例的第三方编码 + * @param tiIds + * @return + */ + private Map getThirdPartyTousseBarcodeMap(Set tiIds) { + Map thirdPartyTousseBarcodeMap = new HashMap(); + if(CollectionUtils.isEmpty(tiIds)){ + return thirdPartyTousseBarcodeMap; + } + + boolean enableThirdPartyBarcodes = expandColoumnsConfigIncludeFieldName("expandColoumnsConfigOfTousseInfoList", "thirdPartyBarcodes"); + if(!enableThirdPartyBarcodes){ + return thirdPartyTousseBarcodeMap; + } + + StringBuffer sql = new StringBuffer(); + sql.append("select po.tousseInstanceId, po.barcode from "); + sql.append(ThirdPartyTousseInstance.class.getSimpleName()); + sql.append(" po where "); + sql.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseInstanceId", tiIds)); + + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql.toString()); + while(rs.next()){ + Long tousseInstanceId = rs.getLong("tousseInstanceId"); + String barcode = rs.getString("barcode"); + thirdPartyTousseBarcodeMap.put(tousseInstanceId, barcode); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return thirdPartyTousseBarcodeMap; + } + + /** * 不装配的器械包 * @param unPackTousseRecyclingRecordIds * @return Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/controller/ThirdPartyTousseReceiveRecordController.java =================================================================== diff -u --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/controller/ThirdPartyTousseReceiveRecordController.java (revision 0) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/controller/ThirdPartyTousseReceiveRecordController.java (revision 38957) @@ -0,0 +1,95 @@ +package com.forgon.disinfectsystem.tousse.toussedefinition.controller; + +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import net.sf.json.JSONObject; + +import com.alibaba.fastjson.JSONArray; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.tousse.toussedefinition.service.ThirdPartyTousseReceiveRecordManager; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseReceiveRecordVo; +import com.forgon.entity.PageEntity; +import com.forgon.exception.SystemException; +import com.forgon.tools.json.JSONUtil; + +/** + * 接收第三方器械包实例的接口GYSDERMYY-24 + */ +@RestController +@RequestMapping(value = "/disinfectSystem/baseData/thirdPartyTousseReceiveRecordController", produces = "application/json;charset=UTF-8") +public class ThirdPartyTousseReceiveRecordController { + + @Autowired + private ThirdPartyTousseReceiveRecordManager thirdPartyTousseReceiveRecordManager; + + /** + * 接收第三方器械包实例 + * @return + */ + @RequestMapping("/receiveThirdPartyTousse") + public String receiveThirdPartyTousse(@RequestBody ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo){ + JSONObject result = JSONUtil.buildJsonObject(true, "保存成功"); + try { + thirdPartyTousseReceiveRecordManager.receiveThirdPartyTousse(thirdPartyTousseReceiveRecordVo); + } catch (SystemException e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "保存失败:" + e.getMessage()); + } + return result.toString(); + } + + /** + * 分页展示第三方器械包接收记录 + * @return + */ + @RequestMapping("/loadThirdPartyTousseReceiveRecord") + public String loadThirdPartyTousseReceiveRecord(PageEntity page){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + thirdPartyTousseReceiveRecordManager.loadThirdPartyTousseReceiveRecord(page); + result = JSONUtil.buildJsonObject(true, JSONObject.fromObject(page)); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "查询失败:" + e.getMessage()); + } + return result.toString(); + } + + /** + * 根据条码查询器械包实例信息 + * @return + */ + @RequestMapping("/loadTousseInstanceByBarcode") + public String loadTousseInstanceByBarcode(String barcode, String isThirdPartyTousse){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + List tousseInstanceList = thirdPartyTousseReceiveRecordManager.loadTousseInstanceByBarcode(barcode, isThirdPartyTousse); + JSONArray data = new JSONArray(); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + for (TousseInstance ti : tousseInstanceList) { + JSONObject tiObj = new JSONObject(); + tiObj.put("tousseName", ti.getTousseName()); + tiObj.put("barcode", ti.getBarcode()); + tiObj.put("thirdPartyBarcode", StringUtils.equals(ti.getBarcode(), barcode) ? "" : barcode); + data.add(tiObj); + } + } + result.put("data", data); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "查询失败:" + e.getMessage()); + } + return result.toString(); + } + +}