Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java =================================================================== diff -u -r29134 -r31441 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java (.../RecyclingRecordManager.java) (revision 29134) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java (.../RecyclingRecordManager.java) (revision 31441) @@ -286,5 +286,14 @@ * @return */ public String getWashLoadingStatusBasketsInfo(); + /** + * 根据扫描的条码加载对应的对象. + * 用于科室回收、快速回收、自定义入筐扫条码使用 + * @param recyclingRecordId 回收记录id + * @param formType 单据类型 + * @param barcode 扫描的条码 + * @return + */ + public JSONObject getBarcodeInfo(String recyclingRecordId, String formType, String barcode); } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r31168 -r31441 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 31168) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 31441) @@ -25,6 +25,7 @@ import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; import net.sf.json.util.CycleDetectionStrategy; +import net.sf.json.util.PropertyFilter; import org.apache.commons.collections.MapUtils; import org.apache.commons.collections4.CollectionUtils; @@ -40,28 +41,35 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.model.OrgUserRelation; +import com.forgon.directory.service.OrgUnitManager; import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedata.becleanitem.service.ClassifiedItemManager; import com.forgon.disinfectsystem.basedata.becleanitem.service.ClassifyBasketManager; import com.forgon.disinfectsystem.basedatamanager.container.service.ContainerManager; import com.forgon.disinfectsystem.basedatamanager.departmentgroup.service.DepartmentGroupManager; +import com.forgon.disinfectsystem.basedatamanager.goodsdepartshareconfig.service.GoodsDepartShareConfigManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; import com.forgon.disinfectsystem.basedatamanager.urgent.service.UrgentLevelManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.datasynchronization.dao.SyncForeignTousseApplicationDao; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.signRecord.SignRecord; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.tousseGroup.TousseGroup; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; +import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.materialerrordamage.MaterialErrorDamageDetail; import com.forgon.disinfectsystem.entity.packing.IDCardInfoForPackingTask; @@ -73,10 +81,12 @@ import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; +import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.entity.videomonitor.RecyclingRecordVideo; import com.forgon.disinfectsystem.entity.videomonitor.VideoRecord; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; import com.forgon.disinfectsystem.exception.RecyclingRecordException; +import com.forgon.disinfectsystem.idcarddefinition.service.IDCardDefinitionManager; import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager; import com.forgon.disinfectsystem.idcardinstance.util.IDCardInstanceUtils; import com.forgon.disinfectsystem.idpredicate.IDOperators; @@ -93,6 +103,7 @@ import com.forgon.disinfectsystem.recyclingrecord.vo.CustomIntoBasket; import com.forgon.disinfectsystem.recyclingrecord.vo.CustomIntoBasketItem; import com.forgon.disinfectsystem.recyclingrecord.vo.DepartRecycleTousse; +import com.forgon.disinfectsystem.recyclingrecord.vo.ErrorDamageDetailVo; import com.forgon.disinfectsystem.recyclingrecord.vo.MaterialErrorDamageDetailVo; import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingBasketItemMaterialVo; import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingBasketItemVo; @@ -118,9 +129,11 @@ import com.forgon.disinfectsystem.washTransition.service.IdCardMaterialErrorDamageManager; import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.service.WashAndDisinfectRecordManager; import com.forgon.exception.SystemException; +import com.forgon.exception.UnfinishedPackingTaskException; import com.forgon.log.enums.ApplicationLogStatusEnum; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; +import com.forgon.security.model.User; import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.system.activity.model.Activity; @@ -134,6 +147,7 @@ import com.forgon.tools.format.ConvertNumber; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.json.JsonPropertyFilter; import com.forgon.tools.string.StringTools; import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.ForgonDateUtils; @@ -207,6 +221,23 @@ private SyncForeignTousseApplicationDao syncForeignTousseApplicationDao; + private OrgUnitManager orgUnitManager; + + private IDCardDefinitionManager idCardDefinitionManager; + + private GoodsDepartShareConfigManager goodsDepartShareConfigManager; + + public void setGoodsDepartShareConfigManager( + GoodsDepartShareConfigManager goodsDepartShareConfigManager) { + this.goodsDepartShareConfigManager = goodsDepartShareConfigManager; + } + public void setIdCardDefinitionManager( + IDCardDefinitionManager idCardDefinitionManager) { + this.idCardDefinitionManager = idCardDefinitionManager; + } + public void setOrgUnitManager(OrgUnitManager orgUnitManager) { + this.orgUnitManager = orgUnitManager; + } public void setSyncForeignTousseApplicationDao( SyncForeignTousseApplicationDao syncForeignTousseApplicationDao) { this.syncForeignTousseApplicationDao = syncForeignTousseApplicationDao; @@ -1613,23 +1644,6 @@ logger.debug("inventoryConfirm finish..."); // throw new RuntimeException("测试"); } - - /** - * 校验点击清点确认按钮时,篮筐中的物品 - * @param recyclingContext - * @param basketItemJson - */ - private void validateRecyclingBasketItemVo(RecyclingContext recyclingContext,List basketItemJson){ - if(recyclingContext.isTally()){ - if(CollectionUtils.isNotEmpty(basketItemJson)){ - for (RecyclingBasketItemVo recyclingBasketItemVo : basketItemJson) { - if(StringUtils.isBlank(recyclingBasketItemVo.getIdCardBarcode())){ - //throw new RuntimeException("普通物品不允许清点入筐!"); - } - } - } - } - } private void validateRecyclingItems(RecyclingContext recyclingContext,JSONArray recyclingItemArray){ if(recyclingContext.isTally()){ for (int i = 0; i < recyclingItemArray.size(); i++) { @@ -5376,36 +5390,6 @@ // return true; // } /** - * - * @param classifyBasket - * @param td - * @return - */ - private boolean canAddThisBasketItem(ClassifyBasket classifyBasket,TousseDefinition td){ - if(td == null|| !td.isForeignOrSplitTousse()){ - //只有外来器械才需要验证,不是外来器械,都可以入同一个篮筐。外来器械跟普通器械也可以入同一个篮筐 - return true; - } - if(classifyBasket == null){ - return true; - } - if(CollectionUtils.isEmpty(classifyBasket.getClassfiedItems())){ - //篮筐里还没有东西,那肯定可以入筐 - return true; - } - List tds = tousseDefinitionManager.getCollection(classifyBasket.getClassfiedItems().stream().filter( - p->p != null).map(p->p.getTousseDefinitionID()).collect(Collectors.toSet())); - for(ClassifiedItem item : classifyBasket.getClassfiedItems()){ - if(!MathTools.valueEquals(item.getTousseDefinitionID(),td.getId())){ - TousseDefinition findtd = IDOperators.find(tds, item.getTousseDefinitionID()); - if(findtd != null && findtd.isForeignOrSplitTousse()){ - return false; - } - } - } - return true; - } - /** * 器械包入筐 * @param td 器械包定义 * @param amount 入筐数量 @@ -5846,48 +5830,6 @@ return washClassifyTypeToBasketsMap; } - private Map> buildTousseDefIdBasketMap(List baskets){ - Map> map = new HashMap>(); - if(CollectionUtils.isNotEmpty(baskets)){ - for(CustomIntoBasket basket : baskets){ - //获取篮筐已经装载的物品 -// ClassifyBasket classifyBasket = classifyBasketManager.getUnWashedBasket(basket.getBarcode()); -// if (classifyBasket != null) { -// if(CollectionUtils.isNotEmpty(classifyBasket.getClassfiedItems())){ -// for(ClassifiedItem ci : classifyBasket.getClassfiedItems()){ -// Set set = map.get(ci.getTousseDefinitionID()); -// if(set == null){ -// set = new HashSet(); -// map.put(ci.getTousseDefinitionID(), set); -// } -// String[] basketBarcodes = StringUtils.split(ci.getBasketGroupBarcodes(), ";"); -// if(ArrayUtils.isNotEmpty(basketBarcodes)){ -// for(String barcode : basketBarcodes){ -// if(StringUtils.isNotBlank(barcode)){ -// set.add(barcode); -// } -// } -// } -// -// } -// } -// } - //页面扫描到篮筐里面的物品 - if(CollectionUtils.isNotEmpty(basket.getScanedGoods())){ - for(CustomIntoBasketItem item : basket.getScanedGoods()){ - Set set = map.get(item.getTousseDefinitionID()); - if(set == null){ - set = new HashSet(); - map.put(item.getTousseDefinitionID(), set); - } - set.add(basket.getBarcode()); - } - } - } - } - return map; - } - // private TousseIntoBasketService buildTousseDefinitionIdBasketMap(List baskets,List tds,Map containers){ // TousseIntoBasketService tousseIntoBasketService = new TousseIntoBasketService(); // if(CollectionUtils.isNotEmpty(baskets)){ @@ -6355,10 +6297,6 @@ return data; } private void buildTousseItemJson(Map> map, - String departCode, String depart, String tousseName, Integer amount){ - buildTousseItemJson(map,departCode,depart,tousseName,amount,false); - } - private void buildTousseItemJson(Map> map, String departCode, String depart, String tousseName, Integer amount,boolean merge) { List list = map.get(departCode); if (list == null) { @@ -7677,4 +7615,512 @@ } return classifyBasketsJson.toString(); } + @Override + public JSONObject getBarcodeInfo(String recyclingRecordId, String formType, String barcode) { + Map map = new HashMap(); + //单据类型 + OrgUnit orgUnit = null; + ClassifyBasket classifyBasket = null; + TousseInstance tousseInstance = null; + User user = null; + List recyclingApplications = null; + //扫描的条码是否为一级供应室条码 + boolean isOneLevelSupply = false; + //根据标识牌确认器械包是否需要保养 + boolean isTousseNeedMaintain = false; + //扫描的条码是否为标识牌条码 + boolean isIDCardInstance = false; + IDCardInstance idCardInstance = null; + String errorMessage = null; + String errorType = null; + Long idCardUseAmount = null; + List details = null; + JSONArray unfinishedPackingTask = null; + Set shareDeparts = null;//共享科室 + boolean isFixedBarcode = false; + JSONObject tousseInstanceOrgUnit = null;//器械包对应的科室,用来回收扫码标识牌或包实例时,自动填入科室。如果包的状态为已使用,则取该包所在的使用记录的录入科室;包的状态为已签收,则取签收科室;包的状态为已发货,则取发货到的科室。 + out : if (StringUtils.isNotBlank(barcode)) { + orgUnit = orgUnitManager.getOrgUnitByBarcode(barcode); + if (orgUnit != null) { + if(orgUnit.getStatus() != null && OrgUnit.STATUS_DISABLED.intValue() == orgUnit.getStatus().intValue()){ + errorMessage = "【" + orgUnit.getName() + "】已经停用,请扫描其它科室条码"; + } else { + SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager + .getSupplyRoomConfigByOrgUnitCoding(orgUnit.getOrgUnitCoding()); + if (supplyRoomConfig != null + && SupplyRoomConfig.SUPPLYROOM_TYPE_FIRST_SUPPLYROOM == supplyRoomConfig + .getSupplyRoomType()) { + isOneLevelSupply = true; + } else { + recyclingApplications = recyclingApplicationManager + .getUnfinishedRecyclingApplicationByDepart( + orgUnit.getName(), null); + } + } + } else { + BarcodeDevice barcodeDevice = barcodeManager + .getBarcodeByBarcode(barcode); + if (barcodeDevice instanceof Container) { + Container container = (Container) barcodeDevice; + //判断该容器是否为清洗筐 + if(container.isCleanBasket()){ + //判断该清洗筐的所属科室是否为当前科室 + if(!StringUtils.equals(container.getDepartCode(), AcegiHelper.getCurrentOrgUnitCode())){ + errorMessage = "该清洗篮筐的科室为"+ container.getDepartName() +",只能扫描本科室的清洗篮筐条码!"; + }else{ + try{ + classifyBasket = getClassifyBasket(container, recyclingRecordId); + if(classifyBasket != null){ + classifyBasket.setContainerStatus(container.getStatus()); + classifyBasket.setWashClassifyType(container.getWashClassifyType()); + } + }catch(UnfinishedPackingTaskException e){ + errorMessage = e.getMessage(); + unfinishedPackingTask = e.getWaitPackingTask(); + }catch(RuntimeException e){ + errorMessage = e.getMessage(); + } + } + }else{ + errorMessage = "您扫描的条码不是清洗篮筐条码!"; + } + + } else if (barcodeDevice instanceof TousseInstance) { + tousseInstance = (TousseInstance) barcodeDevice; + if(tousseInstanceManager.equalsBarcode(barcode)){ + isFixedBarcode = true; + } + TousseDefinition td = tousseInstance.getTousseDefinition(); + if(td == null){ + errorMessage = tousseInstance.getTousseName()+",包定义已不存在!"; + }else if(!isFixedBarcode && Constants.STR_YES.equals(td.getIsDisable())){ + errorMessage = td.getName() + "已经停用,不能进行回收,请用新的包名称进行回收!"; + }else{ + TousseDefinition ancestorTd = null; + if(!isFixedBarcode && td.getId().longValue() != td.getAncestorID().longValue()){ + ancestorTd = tousseDefinitionManager.get(td.getAncestorID()); + } + if(ancestorTd != null && Constants.STR_YES.equals(ancestorTd.getIsDisable())){ + errorMessage = td.getName() + "的祖先包已经停用,不能进行回收,请用新的包名称进行回收!"; + }else{ + if(!isFixedBarcode && !TousseInstance.STATUS_SHIPPED.equals(tousseInstance.getStatus()) && + !TousseInstance.STATUS_USED.equals(tousseInstance.getStatus()) && + !TousseInstance.STATUS_SIGNED.equals(tousseInstance.getStatus()) && + !TousseInstance.STATUS_DISCARD.equals(tousseInstance.getStatus()) && + !TousseInstance.STATUS_STERILED.equals(tousseInstance.getStatus()) && + !TousseInstance.STATUS_REVIEWED.equals(tousseInstance.getStatus()) && + !TousseInstance.STATUS_PACKED.equals(tousseInstance.getStatus()) && + !TousseInstance.STATUS_PRERECYCLED.equals(tousseInstance.getStatus())){//包状态检查 2020-07-08 11:32:00 + errorMessage = String.format("【必须是%s、%s、%s、%s、%s、%s、%s或%s的状态的包,该包当前状态为:%s,%s】", + TousseInstance.STATUS_SHIPPED, + TousseInstance.STATUS_USED, + TousseInstance.STATUS_SIGNED, + TousseInstance.STATUS_PRERECYCLED, + TousseInstance.STATUS_DISCARD, + TousseInstance.STATUS_STERILED, + TousseInstance.STATUS_REVIEWED, + TousseInstance.STATUS_PACKED, + tousseInstance.getStatus(), + tousseInstanceManager.getDateStrByTousseInstanceStatus(tousseInstance)); + }else{ + if(Constants.STR_NO.equals(td.getIsDisableIDCard())){ + errorMessage = "【"+tousseInstance.getTousseName() + "】是有标识牌的物品,只能扫描标识牌条码进行回收!"; + }else if(td.isComboTousse()){ + errorMessage = "不能回收聚合包!"; + }else{ + + if (!isFixedBarcode && + StringUtils.equals(TousseInstance.STATUS_RECYCLED, tousseInstance.getStatus())) { + errorMessage = "器械包已回收!"; + } else { + //验证器械包是否属于当前科室处理 + LoginUserData loginUserData = AcegiHelper.getLoginUser(); + String cssdOrgUnitCode = loginUserData.getOrgUnitCodingFromSupplyRoomConfig(); + String cssdOrgUnitName = loginUserData.getOrgUnitNameCodingFromSupplyRoomConfig(); + map.put("isDisableIDCard", td.getIsDisableIDCard()); + try { + tousseDefinitionManager.validateCssdHandleTousses( + cssdOrgUnitCode, cssdOrgUnitName, + td.getTousseType(), td.getName()); + } catch (Exception e) { + errorMessage = e.getMessage(); + } + + if(StringUtils.isBlank(errorMessage)){ + errorMessage = validateTousseType(formType,td); + } + + if(!tousseInstance.isRecycled()){ + details = build(materialErrorDamageDetailManager.get(tousseInstance)); + } + tousseInstanceOrgUnit = getDepartByTousseInstanceStatus(tousseInstance); + } + } + } + } + } + } else if (barcodeDevice instanceof User) { + user = (User) barcodeDevice; + } else if (barcodeDevice instanceof IDCardInstance) { + idCardInstance = (IDCardInstance) barcodeDevice; + isIDCardInstance = true; + // 是否已经废弃 + try { + if (!idCardInstance.isCanUse(objectDao, true)) { + + } + } catch (Exception e) { + errorMessage = String.format("标识牌%s不可使用,原因(%s) !", barcode,e.getMessage()); + } + + Long idCardDefinitionId = idCardInstance.getIdCardDefinitionID(); + IDCardDefinition idCardDefinition = idCardDefinitionManager.get(idCardDefinitionId); + //判断标识牌对应的器械包定义id是否存在,如果不存在则提示 + if(!DatabaseUtil.isPoIdValid(idCardDefinition.getTousseDefinitionID())){ + errorMessage = "未找到该标识牌所属的器械包定义"; + } + TousseDefinition tousseDefinition = + idCardDefinition.getTousseDefinition(objectDao); + //判断标识牌对应的器械包定义数据是否存在,如果不存在则提示 + if(tousseDefinition == null){ + errorMessage = "未找到该标识牌所属的器械包定义"; + }else if(StringUtils.equals(tousseDefinition.getIsDisable(), Constants.STR_YES)){ + //判断该包定义是否已停用 + errorMessage = "器械包"+ tousseDefinition.getName() +"已停用"; + }else if(StringUtils.equals(tousseDefinition.getIsDisableIDCard(), Constants.STR_YES)){ + //判断该包定义是否已禁用标识牌 + errorMessage = "器械包"+ tousseDefinition.getName() +"已禁用标识牌";; + } + + tousseInstance = IDCardInstanceUtils + .getLastOperatedTousseInstance(objectDao, + idCardInstance); + if (tousseInstance == null) { +// errorMessage = "没有找到和标识牌绑定的器械包!"; + if (idCardDefinition != null) { + errorMessage = checkTousseStatus(idCardInstance.getId()); + if(errorMessage != null){ + errorType = "idCard_statusIllegal"; + break out; + } + tousseInstance = new TousseInstance(); + TousseDefinition td = tousseDefinitionManager.get(idCardDefinition.getTousseDefinitionID()); + tousseInstance.setTousseDefinition(td); + tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); + tousseInstance.setBarcode(barcode); + //tousseInstance.setLocationForDisplay("新器械包标识牌"); + } + } else { + if(TousseInstance.STATUS_DISCARD.equals(tousseInstance.getStatus())){ + errorMessage = checkTousseStatus(idCardInstance.getId()); + if(errorMessage != null){ + errorType = "idCard_statusIllegal"; + break out; + } + } + tousseInstanceOrgUnit = getDepartByTousseInstanceStatus(tousseInstance); + boolean isVerificationTousseStatus = true; + if (StringUtils.isNotBlank(recyclingRecordId)) { + boolean isRecycled = classifiedItemManager.isIDCardRecycled(recyclingRecordId, barcode); + if(isRecycled){ + isVerificationTousseStatus = false; + } + } + if(isVerificationTousseStatus){ + if (tousseInstance.isShipped() + || tousseInstance.isUsed() + || tousseInstance.isDiscarded() + || tousseInstance.isSigned() + || tousseInstance.isPreRecycled() + || TousseInstance.STATUS_RECALLED.equals(tousseInstance.getStatus()) + || TousseInstance.STATUS_WAIT_FOR_RECALL.equals(tousseInstance.getStatus())) { + if(!tousseInstance.isRecycled()){ + details = build(materialErrorDamageDetailManager.get(tousseInstance)); + } + } else { + errorMessage = String.format("器械包必须是%s、%s、%s、%s、%s、%s、%s的状态,该包当前状态为:%s", + TousseInstance.STATUS_SHIPPED, + TousseInstance.STATUS_USED, + TousseInstance.STATUS_SIGNED, + TousseInstance.STATUS_PRERECYCLED, + TousseInstance.STATUS_WAIT_FOR_RECALL, + TousseInstance.STATUS_RECALLED, + TousseInstance.STATUS_DISCARD, + TousseInstanceUtils.getStatusAndTimeByTousseInstanceAndInvoicePlan(tousseInstance, null, null, invoicePlanManager.get(tousseInstance.getInvoicePlanID()))); +// tousseInstance = null; + errorType = "idCard_statusIllegal"; + } + } + } + if(StringUtils.isBlank(errorMessage)){ + errorMessage = validateTousseType(formType,tousseInstance.getTousseDefinition()); + } + idCardUseAmount = idCardInstance.getUseAmount(); + if( tousseInstance != null ) + { + isTousseNeedMaintain = IDCardInstanceUtils.isTousseNeedMaintain(objectDao,idCardInstance); + } + boolean enableIdCardBasketBinding = CssdUtils.getSystemSetConfigByNameBool("enableIdCardBasketBinding"); + if(enableIdCardBasketBinding && idCardDefinition != null){ + //标识牌跟篮筐绑定 + Container c = containerManager.get(idCardDefinition.getContainerId()); + try{ + ClassifyBasket basket = getClassifyBasket(c, recyclingRecordId); + if(basket != null){ + basket.setContainerStatus(c.getStatus()); + map.put("idCardClassifyBasket", basket); + } + }catch(UnfinishedPackingTaskException e){ + errorMessage = e.getMessage(); + unfinishedPackingTask = e.getWaitPackingTask(); + }catch(Exception e){ + errorMessage = e.getMessage(); + } + } + //对于已废弃的包,不检查其位置和所属科室的信息 + if(tousseInstance != null && !TousseInstance.STATUS_DISCARD.equals(tousseInstance.getStatus())){ + String tousseDepart = StringUtils.isBlank(tousseInstance.getLocationForDisplay2())?tousseInstance.getLocationForDisplay():tousseInstance.getLocationForDisplay2(); + if(StringUtils.isNotBlank(tousseDepart)){ + shareDeparts = goodsDepartShareConfigManager.getfindGoodsDepartShareConfigByDepartName(tousseDepart); + } + } + } else { + // 代码逻辑有问题 + // IDCardInstance idCardInstance = ((IDCardInstance) + // barcodeDevice); + // TousseDefinition tousseDefinition = + // tousseDefinitionManager + // .getTousseDefinitionByIDCardInstance(idCardInstance); + // if (tousseDefinition != null) { + // tousseInstance = new TousseInstance(); + // tousseInstance.setTousseDefinition(tousseDefinition); + // tousseInstance + // .setTousseName(tousseDefinition.getName()); + // tousseInstance.setBarcode(barcode); + // tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); + // tousseInstance.setLocationForDisplay("新器械包标识牌"); + // } + } + } + } + JsonConfig config = new JsonConfig(); + PropertyFilter propertyFilter = new JsonPropertyFilter(new String[] { + "orgUserRelationes", "children", "chargeLeaderList", + "currenNodeBelongCompany", "currenNodeAllBelongCompany", + "managerList", "currentOrgUnitNames", + "currentNodeCodesPathIncludeRoot", "barcodeDevice", "invoice", + "recyclingRecord", "sterilizationRecords", + "successSterilizationRecord", "classifyBasket", + "proxyDisinfection", "packingRecord", "foreignProxyItem", + "invoicePlan", "materialInstances", "handler", + "hibernateLazyInitializer", "fieldHandler", + "diposableGoodsItems", "image", "images", "classfiedItems", + "recyclingRecords", "washAndDisinfectRecords", "userAttribute", + "roles", "groups", "orgUserRelations", + "orgUnitsUnDirectManagedByUser", "orgUnitsDirectManagedByUser", + "idCardDefinitions", "recyclingApplications", "parent","inventoryItemOfBaseNums","storageLocationList","materialInstances"}); + config.setJsonPropertyFilter(propertyFilter); + config.setIgnoreJPATransient(true); + map.put("success", true); + map.put("orgUnit", orgUnit); + map.put("basket", classifyBasket); + map.put("containerStatus", classifyBasket == null?"":classifyBasket.getContainerStatus()); + map.put("tousseInstance", tousseInstance); + map.put("user", buildUserJSONObjectForGetBarcodeInfo(user)); + map.put("isOneLevelSupply", isOneLevelSupply);// 是否为一级供应室 + map.put("application", recyclingApplications); + map.put("errorMessage", errorMessage); + map.put("errorType", errorType); + map.put("idCardUseAmount", idCardUseAmount); + map.put("isIDCardInstance", isIDCardInstance); + map.put("shareDeparts", shareDeparts); + map.put("idCardInstance", idCardInstance); + map.put("isTousseNeedMaintain", isTousseNeedMaintain); + map.put("unSupplementMaterials", details); + map.put("unfinishedPackingTask", unfinishedPackingTask); + map.put("isFixedBarcode", isFixedBarcode); + map.put("tousseInstanceOrgUnit", tousseInstanceOrgUnit); + return JSONObject.fromObject(map, config); + } + /** + * 获取ClassifyBasket + * @param container + * @param recyclingRecordId + * @return + */ + private ClassifyBasket getClassifyBasket(Container container,String recyclingRecordId){ + ClassifyBasket classifyBasket = null; + if (container != null && container.isCleanBasket()) { + washAndDisinfectRecordManager.containerCanRecycle(container); + RecyclingRecord recyclingRecord = get(recyclingRecordId); + if (recyclingRecord != null) { + for (ClassifyBasket basket : recyclingRecord.getClassifyBaskets()) { + if (StringUtils.equals(basket.getContainerBarcode(),container.getBarcode())) { + classifyBasket = basket; + break; + } + } + } + if (classifyBasket == null) { + Set barcodes = new HashSet(); + barcodes.add(container.getBarcode()); + List classifyBaskets = classifyBasketManager.getUnWashedAndTousseItemUnEndBasket(barcodes); + if(CollectionUtils.isNotEmpty(classifyBaskets)){ + classifyBasket = classifyBaskets.get(0); + } + } + if (classifyBasket == null) { + boolean autoSetIDCardBarcodeForPacking = CssdUtils.getSystemSetConfigByNameBool("autoSetIDCardBarcodeForPacking"); + if(autoSetIDCardBarcodeForPacking){ + String sql = String.format("po.basketBarcode like '%%%s%%' and po.idCardBarcode is not null", container.getBarcode()); + int count = packingManager.count(sql); + if(count > 0){ + throw new RuntimeException(container.getContainerName() + "内还有标识牌未装配完成,请装配完成后再使用!"); + } + } + classifyBasket = new ClassifyBasket(); + classifyBasket.setContainerBarcode(container + .getBarcode()); + classifyBasket.setContainerName(container + .getContainerName()); + classifyBasket.setWashClassifyType(container.getWashClassifyType()); + } + } + return classifyBasket; + } + /** + * 根据申请单类型验证申请的器械包是否符合规范. + * @param formType + * @param td + * @return + */ + private String validateTousseType(String formType,TousseDefinition td){ + String msg = null; + if(td != null){ + switch (formType) { + case InvoicePlan.TYPE_COMBO_FORM: + case InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM: + case InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION: + if(StringUtils.equals(TousseDefinition.PACKAGE_TYPE_FOREIGN,td.getTousseType())|| + StringUtils.equals(TousseDefinition.PACKAGE_TYPE_CUSTOM, td.getTousseType()) || + StringUtils.equals(TousseDefinition.PACKAGE_TYPE_SPLIT, td.getTousseType()) || + StringUtils.equals(TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY, td.getTousseType())){ + msg = formType + "不能添加" + td.getTousseType(); + } + break; + case InvoicePlan.TYPE_CUSTOM_TOUSSE_APPLIACTION_FORM: + if(!StringUtils.equals(TousseDefinition.PACKAGE_TYPE_CUSTOM,td.getTousseType())){ + msg = formType + "不能添加" + td.getTousseType(); + } + break; + case InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION: + if(!StringUtils.equals(TousseDefinition.PACKAGE_TYPE_FOREIGN,td.getTousseType())){ + msg = formType + "不能添加" + td.getTousseType(); + } + break; + case InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM: + if(!StringUtils.equals(TousseDefinition.PACKAGE_TYPE_DISINFECTION,td.getTousseType())){ + msg = formType + "不能添加" + td.getTousseType(); + } + break; + default: + break; + } + } + return msg; + } + private List build(List details){ + List list = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(details)){ + for(MaterialErrorDamageDetail detail : details){ + if(detail != null && (detail.getStatus() == null || MaterialErrorDamageDetail.STATUS_TWO.intValue() != detail.getStatus().intValue())){ + ErrorDamageDetailVo vo = new ErrorDamageDetailVo(detail); + list.add(vo); + } + } + } + return list; + } + /** + * 如果包的状态为已使用,则取该包所在的使用记录的录入科室;包的状态为已签收,则取签收科室;包的状态为已发货,则取发货到的科室。 + * @param ti + * @return + */ + private JSONObject getDepartByTousseInstanceStatus(TousseInstance ti){ + if(ti == null){ + return null; + } + JSONObject orgUnit = null; + if(TousseInstance.STATUS_USED.equals(ti.getStatus()) && DatabaseUtil.isPoIdValid(ti.getUseRecord_id())){ + UseRecord useRecord = (UseRecord)objectDao.getById(UseRecord.class.getSimpleName(), ti.getUseRecord_id()); + if(useRecord != null){ + orgUnit = new JSONObject(); + orgUnit.put("depart", useRecord.getDepart()); + orgUnit.put("orgUnitCoding", useRecord.getDepartCoding()); + } + }else if(TousseInstance.STATUS_SIGNED.equals(ti.getStatus()) && DatabaseUtil.isPoIdValid(ti.getSignRecordId())){ + SignRecord signRecord = (SignRecord)objectDao.getById(SignRecord.class.getSimpleName(), ti.getSignRecordId()); + if(signRecord != null && StringUtils.isNotBlank(signRecord.getDepartCode())){ + OrgUnit orgUnitOfSign = (OrgUnit) orgUnitManager.getOrgUnitByCode(signRecord.getDepartCode()); + if(orgUnitOfSign != null){ + orgUnit = new JSONObject(); + orgUnit.put("depart", orgUnitOfSign.getName()); + orgUnit.put("orgUnitCoding", orgUnitOfSign.getOrgUnitCoding()); + } + } + }else if(TousseInstance.STATUS_SHIPPED.equals(ti.getStatus())){ + Long invoiceId = DatabaseUtil.isPoIdValid(ti.getInvoice2_id())?ti.getInvoice2_id():ti.getInvoice_id(); + if(DatabaseUtil.isPoIdValid(invoiceId)){ + Invoice invoice = (Invoice)objectDao.getById(Invoice.class.getSimpleName(), invoiceId); + if(invoice != null){ + orgUnit = new JSONObject(); + orgUnit.put("depart", invoice.getDepart()); + orgUnit.put("orgUnitCoding", invoice.getDepartCoding()); + } + } + } + return orgUnit; + } + /** + * 检查标识牌绑定的包是否已经回收了,已经回收但是又没有装配,不允许再扫描 + * @param isIDCardInstanceId + * @return + */ + private String checkTousseStatus(Long isIDCardInstanceId){ + JSONObject statusAndDate = idCardDefinitionManager.getRecyclingTimeOfUnPackingIDCardInstance(isIDCardInstanceId); + String errorMessage = null; + if(statusAndDate != null){ + errorMessage = String.format("器械包必须是%s、%s、%s、%s、%s、%s的状态,该包当前状态为:%s, %s", + TousseInstance.STATUS_SHIPPED, + TousseInstance.STATUS_USED, + TousseInstance.STATUS_SIGNED, + TousseInstance.STATUS_PRERECYCLED, + TousseInstance.STATUS_WAIT_FOR_RECALL, + TousseInstance.STATUS_RECALLED, + statusAndDate.optString("status"), + statusAndDate.optString("dateStr")); + } + return errorMessage; + } + private JSONObject buildUserJSONObjectForGetBarcodeInfo(User user){ + if(user == null){ + return null; + } + JSONObject userObj = new JSONObject(); + userObj.put("fullName", user.getFullName()); + Set sd = user.getOrgUserRelations(); + JSONArray orgUnits = new JSONArray(); + if(sd != null){ + for (OrgUserRelation orgUserRelation : sd) { + String orgUnitCoding = orgUserRelation.getOrgUnit().getOrgUnitCoding(); + String orgUnitName = orgUserRelation.getOrgUnit().getName(); + JSONObject orgUnitObj = new JSONObject(); + orgUnitObj.put("orgUnitName", orgUnitName); + orgUnitObj.put("orgUnitNameCode", orgUnitCoding); + orgUnits.add(orgUnitObj); + } + } + userObj.put("orgUnits", orgUnits); + return userObj; + } } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java =================================================================== diff -u -r30837 -r31441 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 30837) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 31441) @@ -46,19 +46,13 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; -import com.forgon.directory.model.OrgUserRelation; import com.forgon.directory.service.OrgUnitManager; -import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; -import com.forgon.disinfectsystem.basedata.becleanitem.service.ClassifiedItemManager; import com.forgon.disinfectsystem.basedata.becleanitem.service.ClassifyBasketManager; -import com.forgon.disinfectsystem.basedatamanager.container.service.ContainerManager; import com.forgon.disinfectsystem.basedatamanager.departmentgroup.service.DepartmentGroupManager; -import com.forgon.disinfectsystem.basedatamanager.goodsdepartshareconfig.service.GoodsDepartShareConfigManager; import com.forgon.disinfectsystem.basedatamanager.reportoption.GoodsOptionManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseDefinitionUtils; -import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.departmentapplicationtemplate.service.DepartmentAppTemplateManager; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; @@ -68,16 +62,13 @@ import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; -import com.forgon.disinfectsystem.entity.basedatamanager.signRecord.SignRecord; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; -import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; -import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.materialerrordamage.MaterialErrorDamageDetail; import com.forgon.disinfectsystem.entity.recycledepartmentgroup.DepartmentGroup; @@ -89,10 +80,8 @@ import com.forgon.disinfectsystem.entity.urgentgoodswarning.UrgentGoodsWarning; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.goodFilterConfig.service.GoodFilterConfigManager; -import com.forgon.disinfectsystem.idcarddefinition.service.IDCardDefinitionManager; import com.forgon.disinfectsystem.idcardinstance.util.IDCardInstanceUtils; import com.forgon.disinfectsystem.materialerrordamage.service.MaterialErrorDamageDetailManager; -import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; import com.forgon.disinfectsystem.recyclingerror.vo.RecyclingErrorVo; @@ -112,7 +101,6 @@ import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; import com.forgon.disinfectsystem.version.VersionNotMatchException; import com.forgon.disinfectsystem.vo.RecyclingApplicationVo; -import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.service.WashAndDisinfectRecordManager; import com.forgon.exception.SystemException; import com.forgon.exception.UnfinishedPackingTaskException; import com.forgon.exception.service.ExceptionHandler; @@ -171,48 +159,29 @@ private BarcodeManager barcodeManager; - private ClassifiedItemManager classifiedItemManager; - private ClassifyBasketManager classifyBasketManager; private InvoicePlanManager invoicePlanManager; private ObjectDao objectDao; - private IDCardDefinitionManager idCardDefinitionManager; - private DepartmentGroupManager departmentGroupManager; private GoodsOptionManager goodsOptionManager; private DepartmentAppTemplateManager departmentAppTemplateManager; - private PackingManager packingManager; - private MaterialErrorDamageDetailManager materialErrorDamageDetailManager; private TousseInstanceManager tousseInstanceManager; private SqlFunctionsAdapter sqlFunctionsAdapter; - private ContainerManager containerManager; private MaterialInstanceManager materialInstanceManager; private TousseItemManager tousseItemManager; private ExceptionHandler exceptionHandler; - private WashAndDisinfectRecordManager washAndDisinfectRecordManager; private GoodFilterConfigManager goodFilterConfigManagerImpl; - - private GoodsDepartShareConfigManager goodsDepartShareConfigManager; - public void setGoodsDepartShareConfigManager( - GoodsDepartShareConfigManager goodsDepartShareConfigManager) { - this.goodsDepartShareConfigManager = goodsDepartShareConfigManager; - } - public void setWashAndDisinfectRecordManager( - WashAndDisinfectRecordManager washAndDisinfectRecordManager) { - this.washAndDisinfectRecordManager = washAndDisinfectRecordManager; - } - public void setExceptionHandler(ExceptionHandler exceptionHandler) { this.exceptionHandler = exceptionHandler; } @@ -226,10 +195,6 @@ this.materialInstanceManager = materialInstanceManager; } - public void setContainerManager(ContainerManager containerManager) { - this.containerManager = containerManager; - } - public void setSqlFunctionsAdapter(SqlFunctionsAdapter sqlFunctionsAdapter) { this.sqlFunctionsAdapter = sqlFunctionsAdapter; } @@ -243,10 +208,6 @@ this.materialErrorDamageDetailManager = materialErrorDamageDetailManager; } - public void setPackingManager(PackingManager packingManager) { - this.packingManager = packingManager; - } - public void setDepartmentAppTemplateManager( DepartmentAppTemplateManager departmentAppTemplateManager) { this.departmentAppTemplateManager = departmentAppTemplateManager; @@ -293,10 +254,6 @@ this.barcodeManager = barcodeManager; } - public void setClassifiedItemManager(ClassifiedItemManager classifiedItemManager) { - this.classifiedItemManager = classifiedItemManager; - } - public void setClassifyBasketManager(ClassifyBasketManager classifyBasketManager) { this.classifyBasketManager = classifyBasketManager; } @@ -316,11 +273,6 @@ public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { this.dateQueryAdapter = dateQueryAdapter; } - - public void setIdCardDefinitionManager( - IDCardDefinitionManager idCardDefinitionManager) { - this.idCardDefinitionManager = idCardDefinitionManager; - } public void setIds(String ids) { this.ids = ids; @@ -940,518 +892,20 @@ } /** - * 获取ClassifyBasket - * @param container - * @param recyclingRecordId - * @return - */ - private ClassifyBasket getClassifyBasket(Container container,String recyclingRecordId){ - ClassifyBasket classifyBasket = null; - if (container != null && container.isCleanBasket()) { - washAndDisinfectRecordManager.containerCanRecycle(container); - RecyclingRecord recyclingRecord = recyclingRecordManager.get(recyclingRecordId); - if (recyclingRecord != null) { - for (ClassifyBasket basket : recyclingRecord.getClassifyBaskets()) { - if (StringUtils.equals(basket.getContainerBarcode(),container.getBarcode())) { - classifyBasket = basket; - break; - } - } - } - if (classifyBasket == null) { - Set barcodes = new HashSet(); - barcodes.add(container.getBarcode()); - List classifyBaskets = classifyBasketManager.getUnWashedAndTousseItemUnEndBasket(barcodes); - if(CollectionUtils.isNotEmpty(classifyBaskets)){ - classifyBasket = classifyBaskets.get(0); - } - } - if (classifyBasket == null) { - boolean autoSetIDCardBarcodeForPacking = CssdUtils.getSystemSetConfigByNameBool("autoSetIDCardBarcodeForPacking"); - if(autoSetIDCardBarcodeForPacking){ - String sql = String.format("po.basketBarcode like '%%%s%%' and po.idCardBarcode is not null", container.getBarcode()); - int count = packingManager.count(sql); - if(count > 0){ - throw new RuntimeException(container.getContainerName() + "内还有标识牌未装配完成,请装配完成后再使用!"); - } - } - classifyBasket = new ClassifyBasket(); - classifyBasket.setContainerBarcode(container - .getBarcode()); - classifyBasket.setContainerName(container - .getContainerName()); - classifyBasket.setWashClassifyType(container.getWashClassifyType()); - } - } - return classifyBasket; - } - - /** * 根据扫描的条码加载对应的对象. * 用于科室回收、快速回收、自定义入筐扫条码使用 - * @return */ - public String getBarcodeInfo() { - Map map = new HashMap(); - String recyclingRecordId = StrutsParamUtils.getPraramValue("recyclingRecordId", null); - //单据类型 - String formType = StrutsParamUtils.getPraramValue("formType", InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION); - OrgUnit orgUnit = null; - ClassifyBasket classifyBasket = null; - TousseInstance tousseInstance = null; - User user = null; - List recyclingApplications = null; - //扫描的条码是否为一级供应室条码 - boolean isOneLevelSupply = false; - //根据标识牌确认器械包是否需要保养 - boolean isTousseNeedMaintain = false; - //扫描的条码是否为标识牌条码 - boolean isIDCardInstance = false; - IDCardInstance idCardInstance = null; - String errorMessage = null; - String errorType = null; - Long idCardUseAmount = null; - List details = null; - JSONArray unfinishedPackingTask = null; - Set shareDeparts = null;//共享科室 - boolean isFixedBarcode = false; - JSONObject tousseInstanceOrgUnit = null;//器械包对应的科室,用来回收扫码标识牌或包实例时,自动填入科室。如果包的状态为已使用,则取该包所在的使用记录的录入科室;包的状态为已签收,则取签收科室;包的状态为已发货,则取发货到的科室。 - out : if (StringUtils.isNotBlank(barcode)) { - orgUnit = orgUnitManager.getOrgUnitByBarcode(barcode); - if (orgUnit != null) { - if(orgUnit.getStatus() != null && OrgUnit.STATUS_DISABLED.intValue() == orgUnit.getStatus().intValue()){ - errorMessage = "【" + orgUnit.getName() + "】已经停用,请扫描其它科室条码"; - } else { - SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager - .getSupplyRoomConfigByOrgUnitCoding(orgUnit.getOrgUnitCoding()); - if (supplyRoomConfig != null - && SupplyRoomConfig.SUPPLYROOM_TYPE_FIRST_SUPPLYROOM == supplyRoomConfig - .getSupplyRoomType()) { - isOneLevelSupply = true; - } else { - recyclingApplications = recyclingApplicationManager - .getUnfinishedRecyclingApplicationByDepart( - orgUnit.getName(), null); - } - } - } else { - BarcodeDevice barcodeDevice = barcodeManager - .getBarcodeByBarcode(barcode); - if (barcodeDevice instanceof Container) { - Container container = (Container) barcodeDevice; - //判断该容器是否为清洗筐 - if(container.isCleanBasket()){ - //判断该清洗筐的所属科室是否为当前科室 - if(!StringUtils.equals(container.getDepartCode(), AcegiHelper.getCurrentOrgUnitCode())){ - errorMessage = "该清洗篮筐的科室为"+ container.getDepartName() +",只能扫描本科室的清洗篮筐条码!"; - }else{ - try{ - classifyBasket = getClassifyBasket(container, recyclingRecordId); - if(classifyBasket != null){ - classifyBasket.setContainerStatus(container.getStatus()); - classifyBasket.setWashClassifyType(container.getWashClassifyType()); - } - }catch(UnfinishedPackingTaskException e){ - errorMessage = e.getMessage(); - unfinishedPackingTask = e.getWaitPackingTask(); - }catch(RuntimeException e){ - errorMessage = e.getMessage(); - } - } - }else{ - errorMessage = "您扫描的条码不是清洗篮筐条码!"; - } - - } else if (barcodeDevice instanceof TousseInstance) { - tousseInstance = (TousseInstance) barcodeDevice; - if(tousseInstanceManager.equalsBarcode(barcode)){ - isFixedBarcode = true; - } - TousseDefinition td = tousseInstance.getTousseDefinition(); - if(td == null){ - errorMessage = tousseInstance.getTousseName()+",包定义已不存在!"; - }else if(!isFixedBarcode && Constants.STR_YES.equals(td.getIsDisable())){ - errorMessage = td.getName() + "已经停用,不能进行回收,请用新的包名称进行回收!"; - }else{ - TousseDefinition ancestorTd = null; - if(!isFixedBarcode && td.getId().longValue() != td.getAncestorID().longValue()){ - ancestorTd = tousseDefinitionManager.get(td.getAncestorID()); - } - if(ancestorTd != null && Constants.STR_YES.equals(ancestorTd.getIsDisable())){ - errorMessage = td.getName() + "的祖先包已经停用,不能进行回收,请用新的包名称进行回收!"; - }else{ - if(!isFixedBarcode && !TousseInstance.STATUS_SHIPPED.equals(tousseInstance.getStatus()) && - !TousseInstance.STATUS_USED.equals(tousseInstance.getStatus()) && - !TousseInstance.STATUS_SIGNED.equals(tousseInstance.getStatus()) && - !TousseInstance.STATUS_DISCARD.equals(tousseInstance.getStatus()) && - !TousseInstance.STATUS_STERILED.equals(tousseInstance.getStatus()) && - !TousseInstance.STATUS_REVIEWED.equals(tousseInstance.getStatus()) && - !TousseInstance.STATUS_PACKED.equals(tousseInstance.getStatus()) && - !TousseInstance.STATUS_PRERECYCLED.equals(tousseInstance.getStatus())){//包状态检查 2020-07-08 11:32:00 - errorMessage = String.format("【必须是%s、%s、%s、%s、%s、%s、%s或%s的状态的包,该包当前状态为:%s,%s】", - TousseInstance.STATUS_SHIPPED, - TousseInstance.STATUS_USED, - TousseInstance.STATUS_SIGNED, - TousseInstance.STATUS_PRERECYCLED, - TousseInstance.STATUS_DISCARD, - TousseInstance.STATUS_STERILED, - TousseInstance.STATUS_REVIEWED, - TousseInstance.STATUS_PACKED, - tousseInstance.getStatus(), - tousseInstanceManager.getDateStrByTousseInstanceStatus(tousseInstance)); - }else{ - if(Constants.STR_NO.equals(td.getIsDisableIDCard())){ - errorMessage = "【"+tousseInstance.getTousseName() + "】是有标识牌的物品,只能扫描标识牌条码进行回收!"; - }else if(td.isComboTousse()){ - errorMessage = "不能回收聚合包!"; - }else{ - - if (!isFixedBarcode && - StringUtils.equals(TousseInstance.STATUS_RECYCLED, tousseInstance.getStatus())) { - errorMessage = "器械包已回收!"; - } else { - //验证器械包是否属于当前科室处理 - LoginUserData loginUserData = AcegiHelper.getLoginUser(); - String cssdOrgUnitCode = loginUserData.getOrgUnitCodingFromSupplyRoomConfig(); - String cssdOrgUnitName = loginUserData.getOrgUnitNameCodingFromSupplyRoomConfig(); - map.put("isDisableIDCard", td.getIsDisableIDCard()); - try { - tousseDefinitionManager.validateCssdHandleTousses( - cssdOrgUnitCode, cssdOrgUnitName, - td.getTousseType(), td.getName()); - } catch (Exception e) { - errorMessage = e.getMessage(); - } - - if(StringUtils.isBlank(errorMessage)){ - errorMessage = validateTousseType(formType,td); - } - - if(!tousseInstance.isRecycled()){ - details = build(materialErrorDamageDetailManager.get(tousseInstance)); - } - tousseInstanceOrgUnit = getDepartByTousseInstanceStatus(tousseInstance); - } - } - } - } - } - } else if (barcodeDevice instanceof User) { - user = (User) barcodeDevice; - } else if (barcodeDevice instanceof IDCardInstance) { - idCardInstance = (IDCardInstance) barcodeDevice; - isIDCardInstance = true; - // 是否已经废弃 - try { - if (!idCardInstance.isCanUse(objectDao, true)) { - - } - } catch (Exception e) { - errorMessage = String.format("标识牌%s不可使用,原因(%s) !", barcode,e.getMessage()); - } - - Long idCardDefinitionId = idCardInstance.getIdCardDefinitionID(); - IDCardDefinition idCardDefinition = idCardDefinitionManager.get(idCardDefinitionId); - //判断标识牌对应的器械包定义id是否存在,如果不存在则提示 - if(!DatabaseUtil.isPoIdValid(idCardDefinition.getTousseDefinitionID())){ - errorMessage = "未找到该标识牌所属的器械包定义"; - } - TousseDefinition tousseDefinition = - idCardDefinition.getTousseDefinition(objectDao); - //判断标识牌对应的器械包定义数据是否存在,如果不存在则提示 - if(tousseDefinition == null){ - errorMessage = "未找到该标识牌所属的器械包定义"; - }else if(StringUtils.equals(tousseDefinition.getIsDisable(), Constants.STR_YES)){ - //判断该包定义是否已停用 - errorMessage = "器械包"+ tousseDefinition.getName() +"已停用"; - }else if(StringUtils.equals(tousseDefinition.getIsDisableIDCard(), Constants.STR_YES)){ - //判断该包定义是否已禁用标识牌 - errorMessage = "器械包"+ tousseDefinition.getName() +"已禁用标识牌";; - } - - tousseInstance = IDCardInstanceUtils - .getLastOperatedTousseInstance(objectDao, - idCardInstance); - if (tousseInstance == null) { -// errorMessage = "没有找到和标识牌绑定的器械包!"; - if (idCardDefinition != null) { - errorMessage = checkTousseStatus(idCardInstance.getId()); - if(errorMessage != null){ - errorType = "idCard_statusIllegal"; - break out; - } - tousseInstance = new TousseInstance(); - TousseDefinition td = tousseDefinitionManager.get(idCardDefinition.getTousseDefinitionID()); - tousseInstance.setTousseDefinition(td); - tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); - tousseInstance.setBarcode(barcode); - //tousseInstance.setLocationForDisplay("新器械包标识牌"); - } - } else { - if(TousseInstance.STATUS_DISCARD.equals(tousseInstance.getStatus())){ - errorMessage = checkTousseStatus(idCardInstance.getId()); - if(errorMessage != null){ - errorType = "idCard_statusIllegal"; - break out; - } - } - tousseInstanceOrgUnit = getDepartByTousseInstanceStatus(tousseInstance); - boolean isVerificationTousseStatus = true; - if (StringUtils.isNotBlank(recyclingRecordId)) { - boolean isRecycled = classifiedItemManager.isIDCardRecycled(recyclingRecordId, barcode); - if(isRecycled){ - isVerificationTousseStatus = false; - } - } - if(isVerificationTousseStatus){ - if (tousseInstance.isShipped() - || tousseInstance.isUsed() - || tousseInstance.isDiscarded() - || tousseInstance.isSigned() - || tousseInstance.isPreRecycled() - || TousseInstance.STATUS_RECALLED.equals(tousseInstance.getStatus()) - || TousseInstance.STATUS_WAIT_FOR_RECALL.equals(tousseInstance.getStatus())) { - if(!tousseInstance.isRecycled()){ - details = build(materialErrorDamageDetailManager.get(tousseInstance)); - } - } else { - errorMessage = String.format("器械包必须是%s、%s、%s、%s、%s、%s、%s的状态,该包当前状态为:%s", - TousseInstance.STATUS_SHIPPED, - TousseInstance.STATUS_USED, - TousseInstance.STATUS_SIGNED, - TousseInstance.STATUS_PRERECYCLED, - TousseInstance.STATUS_WAIT_FOR_RECALL, - TousseInstance.STATUS_RECALLED, - TousseInstance.STATUS_DISCARD, - TousseInstanceUtils.getStatusAndTimeByTousseInstanceAndInvoicePlan(tousseInstance, null, null, invoicePlanManager.get(tousseInstance.getInvoicePlanID()))); -// tousseInstance = null; - errorType = "idCard_statusIllegal"; - } - } - } - if(StringUtils.isBlank(errorMessage)){ - errorMessage = validateTousseType(formType,tousseInstance.getTousseDefinition()); - } - idCardUseAmount = idCardInstance.getUseAmount(); - if( tousseInstance != null ) - { - isTousseNeedMaintain = IDCardInstanceUtils.isTousseNeedMaintain(objectDao,idCardInstance); - } - boolean enableIdCardBasketBinding = CssdUtils.getSystemSetConfigByNameBool("enableIdCardBasketBinding"); - if(enableIdCardBasketBinding && idCardDefinition != null){ - //标识牌跟篮筐绑定 - Container c = containerManager.get(idCardDefinition.getContainerId()); - try{ - ClassifyBasket basket = getClassifyBasket(c, recyclingRecordId); - if(basket != null){ - basket.setContainerStatus(c.getStatus()); - map.put("idCardClassifyBasket", basket); - } - }catch(UnfinishedPackingTaskException e){ - errorMessage = e.getMessage(); - unfinishedPackingTask = e.getWaitPackingTask(); - }catch(Exception e){ - errorMessage = e.getMessage(); - } - } - //对于已废弃的包,不检查其位置和所属科室的信息 - if(tousseInstance != null && !TousseInstance.STATUS_DISCARD.equals(tousseInstance.getStatus())){ - String tousseDepart = StringUtils.isBlank(tousseInstance.getLocationForDisplay2())?tousseInstance.getLocationForDisplay():tousseInstance.getLocationForDisplay2(); - if(StringUtils.isNotBlank(tousseDepart)){ - shareDeparts = goodsDepartShareConfigManager.getfindGoodsDepartShareConfigByDepartName(tousseDepart); - } - } - } else { - // 代码逻辑有问题 - // IDCardInstance idCardInstance = ((IDCardInstance) - // barcodeDevice); - // TousseDefinition tousseDefinition = - // tousseDefinitionManager - // .getTousseDefinitionByIDCardInstance(idCardInstance); - // if (tousseDefinition != null) { - // tousseInstance = new TousseInstance(); - // tousseInstance.setTousseDefinition(tousseDefinition); - // tousseInstance - // .setTousseName(tousseDefinition.getName()); - // tousseInstance.setBarcode(barcode); - // tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); - // tousseInstance.setLocationForDisplay("新器械包标识牌"); - // } - } - } - } - JsonConfig config = new JsonConfig(); - PropertyFilter propertyFilter = new JsonPropertyFilter(new String[] { - "orgUserRelationes", "children", "chargeLeaderList", - "currenNodeBelongCompany", "currenNodeAllBelongCompany", - "managerList", "currentOrgUnitNames", - "currentNodeCodesPathIncludeRoot", "barcodeDevice", "invoice", - "recyclingRecord", "sterilizationRecords", - "successSterilizationRecord", "classifyBasket", - "proxyDisinfection", "packingRecord", "foreignProxyItem", - "invoicePlan", "materialInstances", "handler", - "hibernateLazyInitializer", "fieldHandler", - "diposableGoodsItems", "image", "images", "classfiedItems", - "recyclingRecords", "washAndDisinfectRecords", "userAttribute", - "roles", "groups", "orgUserRelations", - "orgUnitsUnDirectManagedByUser", "orgUnitsDirectManagedByUser", - "idCardDefinitions", "recyclingApplications", "parent","inventoryItemOfBaseNums","storageLocationList","materialInstances"}); - config.setJsonPropertyFilter(propertyFilter); - config.setIgnoreJPATransient(true); - map.put("success", true); - map.put("orgUnit", orgUnit); - map.put("basket", classifyBasket); - map.put("containerStatus", classifyBasket == null?"":classifyBasket.getContainerStatus()); - map.put("tousseInstance", tousseInstance); - map.put("user", buildUserJSONObjectForGetBarcodeInfo(user)); - map.put("isOneLevelSupply", isOneLevelSupply);// 是否为一级供应室 - map.put("application", recyclingApplications); - map.put("errorMessage", errorMessage); - map.put("errorType", errorType); - map.put("idCardUseAmount", idCardUseAmount); - map.put("isIDCardInstance", isIDCardInstance); - map.put("shareDeparts", shareDeparts); - map.put("idCardInstance", idCardInstance); - map.put("isTousseNeedMaintain", isTousseNeedMaintain); - map.put("unSupplementMaterials", details); - map.put("unfinishedPackingTask", unfinishedPackingTask); - map.put("isFixedBarcode", isFixedBarcode); - map.put("tousseInstanceOrgUnit", tousseInstanceOrgUnit); + public void getBarcodeInfo() { try { - JSONObject jsonObject = JSONObject.fromObject(map, config); - + String recyclingRecordId = StrutsParamUtils.getPraramValue("recyclingRecordId", null); + //单据类型 + String formType = StrutsParamUtils.getPraramValue("formType", InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION); + JSONObject jsonObject = recyclingRecordManager.getBarcodeInfo(recyclingRecordId, formType, barcode); StrutsResponseUtils.output(jsonObject); - } catch (Exception e1) { e1.printStackTrace(); } - - return null; } - /** - * 检查标识牌绑定的包是否已经回收了,已经回收但是又没有装配,不允许再扫描 - * @param isIDCardInstanceId - * @return - */ - private String checkTousseStatus(Long isIDCardInstanceId){ - JSONObject statusAndDate = idCardDefinitionManager.getRecyclingTimeOfUnPackingIDCardInstance(isIDCardInstanceId); - String errorMessage = null; - if(statusAndDate != null){ - errorMessage = String.format("器械包必须是%s、%s、%s、%s、%s、%s的状态,该包当前状态为:%s, %s", - TousseInstance.STATUS_SHIPPED, - TousseInstance.STATUS_USED, - TousseInstance.STATUS_SIGNED, - TousseInstance.STATUS_PRERECYCLED, - TousseInstance.STATUS_WAIT_FOR_RECALL, - TousseInstance.STATUS_RECALLED, - statusAndDate.optString("status"), - statusAndDate.optString("dateStr")); - } - return errorMessage; - } - /** - * 如果包的状态为已使用,则取该包所在的使用记录的录入科室;包的状态为已签收,则取签收科室;包的状态为已发货,则取发货到的科室。 - * @param ti - * @return - */ - private JSONObject getDepartByTousseInstanceStatus(TousseInstance ti){ - if(ti == null){ - return null; - } - JSONObject orgUnit = null; - if(TousseInstance.STATUS_USED.equals(ti.getStatus()) && DatabaseUtil.isPoIdValid(ti.getUseRecord_id())){ - UseRecord useRecord = (UseRecord)objectDao.getById(UseRecord.class.getSimpleName(), ti.getUseRecord_id()); - if(useRecord != null){ - orgUnit = new JSONObject(); - orgUnit.put("depart", useRecord.getDepart()); - orgUnit.put("orgUnitCoding", useRecord.getDepartCoding()); - } - }else if(TousseInstance.STATUS_SIGNED.equals(ti.getStatus()) && DatabaseUtil.isPoIdValid(ti.getSignRecordId())){ - SignRecord signRecord = (SignRecord)objectDao.getById(SignRecord.class.getSimpleName(), ti.getSignRecordId()); - if(signRecord != null && StringUtils.isNotBlank(signRecord.getDepartCode())){ - OrgUnit orgUnitOfSign = (OrgUnit) orgUnitManager.getOrgUnitByCode(signRecord.getDepartCode()); - if(orgUnitOfSign != null){ - orgUnit = new JSONObject(); - orgUnit.put("depart", orgUnitOfSign.getName()); - orgUnit.put("orgUnitCoding", orgUnitOfSign.getOrgUnitCoding()); - } - } - }else if(TousseInstance.STATUS_SHIPPED.equals(ti.getStatus())){ - Long invoiceId = DatabaseUtil.isPoIdValid(ti.getInvoice2_id())?ti.getInvoice2_id():ti.getInvoice_id(); - if(DatabaseUtil.isPoIdValid(invoiceId)){ - Invoice invoice = (Invoice)objectDao.getById(Invoice.class.getSimpleName(), invoiceId); - if(invoice != null){ - orgUnit = new JSONObject(); - orgUnit.put("depart", invoice.getDepart()); - orgUnit.put("orgUnitCoding", invoice.getDepartCoding()); - } - } - } - return orgUnit; - } - /** - * 根据申请单类型验证申请的器械包是否符合规范. - * @param formType - * @param td - * @return - */ - private String validateTousseType(String formType,TousseDefinition td){ - String msg = null; - if(td != null){ - switch (formType) { - case InvoicePlan.TYPE_COMBO_FORM: - case InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM: - case InvoicePlan.TYPE_RECYCLINGCREATE_APPLICATION: - if(StringUtils.equals(TousseDefinition.PACKAGE_TYPE_FOREIGN,td.getTousseType())|| - StringUtils.equals(TousseDefinition.PACKAGE_TYPE_CUSTOM, td.getTousseType()) || - StringUtils.equals(TousseDefinition.PACKAGE_TYPE_SPLIT, td.getTousseType()) || - StringUtils.equals(TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY, td.getTousseType())){ - msg = formType + "不能添加" + td.getTousseType(); - } - break; - case InvoicePlan.TYPE_CUSTOM_TOUSSE_APPLIACTION_FORM: - if(!StringUtils.equals(TousseDefinition.PACKAGE_TYPE_CUSTOM,td.getTousseType())){ - msg = formType + "不能添加" + td.getTousseType(); - } - break; - case InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION: - if(!StringUtils.equals(TousseDefinition.PACKAGE_TYPE_FOREIGN,td.getTousseType())){ - msg = formType + "不能添加" + td.getTousseType(); - } - break; - case InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM: - if(!StringUtils.equals(TousseDefinition.PACKAGE_TYPE_DISINFECTION,td.getTousseType())){ - msg = formType + "不能添加" + td.getTousseType(); - } - break; - default: - break; - } - } - return msg; - } - - private JSONObject buildUserJSONObjectForGetBarcodeInfo(User user){ - if(user == null){ - return null; - } - JSONObject userObj = new JSONObject(); - userObj.put("fullName", user.getFullName()); - Set sd = user.getOrgUserRelations(); - JSONArray orgUnits = new JSONArray(); - if(sd != null){ - for (OrgUserRelation orgUserRelation : sd) { - String orgUnitCoding = orgUserRelation.getOrgUnit().getOrgUnitCoding(); - String orgUnitName = orgUserRelation.getOrgUnit().getName(); - JSONObject orgUnitObj = new JSONObject(); - orgUnitObj.put("orgUnitName", orgUnitName); - orgUnitObj.put("orgUnitNameCode", orgUnitCoding); - orgUnits.add(orgUnitObj); - } - } - userObj.put("orgUnits", orgUnits); - return userObj; - } /** * 获取待回收申请单,供PC端的待回收列表页面调用