Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/PrintData.java =================================================================== diff -u --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/PrintData.java (revision 0) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/PrintData.java (revision 40439) @@ -0,0 +1,74 @@ +package com.forgon.disinfectsystem.packing.vo; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +/** + * 包实例打印数据 + */ +public class PrintData { + /** + * 包定义信息 + */ + public JSONObject tdJson; + /** + * 包实例条码 + */ + public JSONArray barcodeArray = new JSONArray(); + /** + * 虚拟篮筐条码 + */ + public JSONArray virtualBasketSeqNumArray = new JSONArray(); + /** + * 包装类型的简称 + */ + public String packageTypeAbbreviation = ""; + /** + * 失效日期 + */ + public String validUntilDateToPrint = ""; + /** + * 灭菌日期 + */ + public String sterileDateToPrint = ""; + /** + * 固定条码 + */ + public String fixedBarcode = ""; + /** + * 消毒物品材料信息 + */ + public JSONArray disinfectItemArray; + /** + * 待查询补充 + */ + public boolean markTousse = false; + /** + * 外来器械申请单id + */ + public long foreignTousseApp_id = 0; + /** + * 供应商名称 + */ + public String supplierName = ""; + /** + * 工具数量 + */ + public Integer toolAmount = 0; + /** + * 植入物数量 + */ + public Integer implantAmount = 0; + /** + * 标识牌使用次数 + */ + public Long idCardDefinitionUseAmount = 0L; + /** + * 标识牌编号 + */ + public String idCardDefinitionIdNumber = ""; + /** + * 标识牌描述 + */ + public String idCardDefinitionDescription = ""; +} Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/AdditionalPrintData.java =================================================================== diff -u --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/AdditionalPrintData.java (revision 0) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/AdditionalPrintData.java (revision 40439) @@ -0,0 +1,33 @@ +package com.forgon.disinfectsystem.packing.vo; + +import com.forgon.disinfectsystem.entity.basedatamanager.expirationdateinfo.ExpirationDateInfo; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import java.util.Map; + +/** + * 包实例打印的额外数据类 + */ +public class AdditionalPrintData { + /** + * 包装类型对应的ExpirationDateInfo + */ + public Map expirationDateInfoMap; + /** + * 包定义对应的固定条码 + */ + public Map tdIdToFixBarcodeMap; + /** + * 消毒物品对应的材料 + */ + public Map disinfectItemArrayMap; + /** + * 外来器械包的工具数量和植入物数量 + */ + public Map toolAndImplantAmountMap; + /** + * 标识牌相关信息 + */ + public Map idCardInstanceInfoMap; +} Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/PreCollectPrintData.java =================================================================== diff -u --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/PreCollectPrintData.java (revision 0) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/PreCollectPrintData.java (revision 40439) @@ -0,0 +1,30 @@ +package com.forgon.disinfectsystem.packing.vo; + +import java.util.HashSet; +import java.util.Set; + +/** + * 包实例打印预收集数据类 + */ +public class PreCollectPrintData { + /** + * 包装类型 + */ + public Set packageTypes = new HashSet<>(); + /** + * 不追溯的祖先包定义id + */ + public Set isNotTraceables = new HashSet<>(); + /** + * 消毒物品包定义id + */ + public Set tdIdsOfDisinfection = new HashSet<>(); + /** + * 外来器械包定义id + */ + public Set tdIdsOfForeignTousse = new HashSet<>(); + /** + * 标识牌实例id + */ + public Set idCardInstanceIDs = new HashSet<>(); +} Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r40357 -r40439 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 40357) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 40439) @@ -41,6 +41,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +import com.forgon.disinfectsystem.packing.vo.*; import net.sf.json.JSONArray; import net.sf.json.JSONException; import net.sf.json.JSONObject; @@ -149,17 +150,6 @@ import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager; import com.forgon.disinfectsystem.packing.helper.DataHelperForPacking; import com.forgon.disinfectsystem.packing.helper.StringHelperForPacking; -import com.forgon.disinfectsystem.packing.vo.ForeignTousseSplitMaterialVo; -import com.forgon.disinfectsystem.packing.vo.ForeignTousseSplitVo; -import com.forgon.disinfectsystem.packing.vo.PackingPara; -import com.forgon.disinfectsystem.packing.vo.PackingTaskForDisplay; -import com.forgon.disinfectsystem.packing.vo.PackingTaskPara; -import com.forgon.disinfectsystem.packing.vo.PackingTaskVoForContainer; -import com.forgon.disinfectsystem.packing.vo.ReviewerVo; -import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskInfoVo; -import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskItemVo; -import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskVo; -import com.forgon.disinfectsystem.packing.vo.PackingRecordVo; import com.forgon.disinfectsystem.packingrecordclassifybasket.service.PackingRecordClassifyBasketManager; import com.forgon.disinfectsystem.stockmanage.cssdstock.service.TousseStockManager; import com.forgon.disinfectsystem.stockmanage.departmentstock.service.DepartmentStockManager; @@ -8009,6 +7999,7 @@ "frequency", "");// 灭菌的炉次 String remark = JSONUtil.optString(modificationInfoObj, "remark", "");// 备注 + boolean print = modificationInfoObj.optBoolean("print", false); boolean modifyValidDate = false; if (StringUtils.isBlank(tousseInstanceIDs)) { @@ -8199,6 +8190,9 @@ if(modifyContent.length() > 0){ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_PACKING, Log.TYPE_UPDATE, "装配修改信息:[" + modifyContent.substring(0, modifyContent.length() - 1) + ".]"); } + if(CollectionUtils.isNotEmpty(tousseInstances) && print){ + return JSONUtil.buildJsonObject(true, getTousseinstanceJSONArrayForPrint( tousseInstances, "装配记录修改器械包")).toString(); + } return "success"; } @@ -12175,4 +12169,213 @@ } return 0; } + @Override + public JSONArray getTousseinstanceJSONArrayForPrint(List tousseInstances, String printCause) { + JSONArray toussesArray = new JSONArray(); + if (CollectionUtils.isEmpty(tousseInstances)) { + return toussesArray; + } + + // 初始化各种集合和映射 + Map tdJsonMap = new HashMap<>(); + Map packageTypeMap = httpOptionManager.getHttpOptionTextToValueMapByListIdId(HttpOption.SYSTEMSETTING_PACKAGING_TYPE); + SupplyRoomConfig supplyRoomConfigParams = supplyRoomConfigManager.getSystemParamsObj(); + boolean isPrintUserName = supplyRoomConfigParams.isPrintUserFullName(); + + // 预收集数据 + PreCollectPrintData preCollectData = preCollectData(tousseInstances); + + // 获取额外数据 + AdditionalPrintData additionalData = fetchAdditionalData(preCollectData); + + // 处理每个实例 + for (TousseInstance tousseInstance : tousseInstances) { + TousseDefinition td = tousseInstance.getTousseDefinition(); + + // 准备打印数据 + PrintData printData = preparePrintData(tousseInstance, td, additionalData, packageTypeMap, tdJsonMap); + + // 创建打印对象 + JSONObject printObj = createPrintObject(tousseInstance, td, printData, printCause, isPrintUserName); + + toussesArray.add(printObj); + } + + return toussesArray; + } + // 预收集数据方法 + private PreCollectPrintData preCollectData(List tousseInstances) { + PreCollectPrintData data = new PreCollectPrintData(); + + for (TousseInstance tousseInstance : tousseInstances) { + TousseDefinition td = tousseInstance.getTousseDefinition(); + + if (TousseDefinition.STR_NO.equals(td.getIsTraceable()) && !data.isNotTraceables.contains(td.getAncestorID())) { + data.isNotTraceables.add(td.getAncestorID()); + } + + if (StringUtils.isNotBlank(tousseInstance.getPackageType())) { + data.packageTypes.add(tousseInstance.getPackageType()); + } + + if (td.isDisinfection()) { + data.tdIdsOfDisinfection.add(td.getId()); + } else if (td.isForeignTousse() || td.isSplit()) { + data.tdIdsOfForeignTousse.add(td.getId()); + } + + if (DatabaseUtil.isPoIdValid(tousseInstance.getIdCardInstanceID())) { + data.idCardInstanceIDs.add(tousseInstance.getIdCardInstanceID()); + } + } + + return data; + } + + // 获取额外数据方法 + private AdditionalPrintData fetchAdditionalData(PreCollectPrintData preCollectData) { + AdditionalPrintData data = new AdditionalPrintData(); + + data.expirationDateInfoMap = getExpirationDateInfoMap(preCollectData.packageTypes); + data.disinfectItemArrayMap = tousseDefinitionManager.getMaterialsOfDisinfectionGoods(preCollectData.tdIdsOfDisinfection); + data.toolAndImplantAmountMap = tousseDefinitionManager.getToolAndImplantAmountMap(preCollectData.tdIdsOfForeignTousse); + data.idCardInstanceInfoMap = getIdCardInstanceInfoMap(preCollectData.idCardInstanceIDs); + + if (!preCollectData.isNotTraceables.isEmpty()) { + data.tdIdToFixBarcodeMap = tousseDefinitionManager.getTousseDefinitionFixedBarcodeMap(preCollectData.isNotTraceables); + } + + return data; + } + + // 准备打印数据方法 + private PrintData preparePrintData(TousseInstance tousseInstance, TousseDefinition td, AdditionalPrintData additionalData, Map packageTypeMap, Map tdJsonMap) { + PrintData data = new PrintData(); + + // 设置基础数据 + data.barcodeArray.add(tousseInstance.getBarcode()); + if(StringUtils.isNotBlank(tousseInstance.getVirtualBasketSeqNum())){ + data.virtualBasketSeqNumArray.add(tousseInstance.getVirtualBasketSeqNum()); + } + // 包类型 + data.packageTypeAbbreviation = packageTypeMap.getOrDefault(tousseInstance.getPackageType(), ""); + + // 有效期数据 + Date sterileDate = TousseInstanceUtils.safelyGetSterileStartDate(tousseInstance); + if (sterileDate != null) { + JSONObject expirationObj = expirationDateInfoManager.getExpirationDate( + sterileDate, tousseInstance.getPackageType(), additionalData.expirationDateInfoMap); + if (expirationObj.optBoolean("isDefined")) { + data.validUntilDateToPrint = expirationObj.optString("expirationDate"); + data.sterileDateToPrint = expirationObj.optString("sterileDate"); + data.markTousse = expirationObj.optBoolean("markTousse"); + } + } + + // 固定条码 + if (!TousseDefinition.STR_NO.equals(td.getIsTraceable())) { + Long ancestorId = td.getAncestorID(); + if (DatabaseUtil.isPoIdValid(ancestorId)) { + if (additionalData.tdIdToFixBarcodeMap != null && additionalData.tdIdToFixBarcodeMap.containsKey(ancestorId)) { + data.fixedBarcode = additionalData.tdIdToFixBarcodeMap.get(ancestorId); + } else { + data.fixedBarcode = tousseInstanceManager.getOrCreateTousseDefinitionFixedBarcode(ancestorId); + } + + if (StringUtils.isBlank(data.fixedBarcode)) { + String tousseDefinitionName = CssdUtils.filterDisinfectGoodsName(tousseInstance.getTousseName()); + data.fixedBarcode = tousseInstanceManager.getTousseDefinitionFixedBarcode(tousseDefinitionName); + } + } else { + String tousseDefinitionName = CssdUtils.filterDisinfectGoodsName(tousseInstance.getTousseName()); + data.fixedBarcode = tousseInstanceManager.getTousseDefinitionFixedBarcode(tousseDefinitionName); + } + } + + // 消毒物品数据 + if (td.isDisinfection()) { + data.disinfectItemArray = additionalData.disinfectItemArrayMap.getOrDefault(td.getId(), new JSONArray()); + } + //如果配置为需要打印材料时 + if(TousseDefinition.STR_YES.equals(td.getIsPrint()) && TousseDefinition.STR_YES.equals(td.getIsPrintMaterialForPacking())){ + if(tdJsonMap.containsKey(td.getId())){ + data.tdJson = tdJsonMap.get(td.getId()); + }else{ + data.tdJson = getTousseDefinitionJson(td); + tdJsonMap.put(td.getId(), data.tdJson); + } + } + // 外来器械数据 + if (td.isForeignTousse() || td.isSplit()) { + data.foreignTousseApp_id = tousseInstance.getForeignTousseApp_id().longValue(); + data.supplierName = td.getSupplierName(); + } + + // 工具和植入物数量 + JSONObject toolAndImplantAmount = additionalData.toolAndImplantAmountMap.get(td.getId()); + if (toolAndImplantAmount != null) { + data.toolAmount = toolAndImplantAmount.optInt("toolAmount"); + data.implantAmount = toolAndImplantAmount.optInt("implantAmount"); + } + + // 标识牌信息 + if (additionalData.idCardInstanceInfoMap.containsKey(tousseInstance.getIdCardInstanceID())) { + JSONObject obj = additionalData.idCardInstanceInfoMap.get(tousseInstance.getIdCardInstanceID()); + data.idCardDefinitionUseAmount = obj.optLong("useAmount"); + data.idCardDefinitionIdNumber = obj.optString("idNumber"); + data.idCardDefinitionDescription = obj.optString("description"); + + } + + return data; + } + + // 创建打印对象方法 + private JSONObject createPrintObject(TousseInstance tousseInstance, TousseDefinition td, + PrintData printData, String printCause, boolean isPrintUserName) { + String tousseName = StringUtils.isBlank(tousseInstance.getTousseNameAlias()) + ? tousseInstance.getTousseName() + : tousseInstance.getTousseNameAlias(); + + JSONObject obj = CssdUtils.getTousseObjForPrint(tousseName, + printData.tdJson + ,tousseInstance + ,printData.barcodeArray + , printData.virtualBasketSeqNumArray + , td.getTousseType() + , tousseInstance.getPackageType() + , printData.packageTypeAbbreviation + , tousseInstance.getSterilingType(), + tousseInstance.getSterilizerName() + , tousseInstance.getSterileFrequency(), + isPrintUserName + , tousseInstance.getOperator(), + tousseInstance.getOperatorCode() + , tousseInstance.getReviewer(), + tousseInstance.getReviewerCode() + ,tousseInstance.getSterilizationUser() + ,tousseInstance.getSterilizationUserCode() + , printData.validUntilDateToPrint, + printData.sterileDateToPrint,printData.markTousse + , tousseInstance.getOperationTime(), + td.isDisinfection(), + false,//isDisinfectionGoodsPrintExpirationDate + !TousseDefinition.STR_NO.equals(td.getIsPrint()), !TousseDefinition.STR_NO.equals(td.getIsReview()), + !TousseDefinition.STR_NO.equals(td.getIsTraceable()),td.getIsBigPackage() + , printData.fixedBarcode, printData.disinfectItemArray, + printData.foreignTousseApp_id, printData.supplierName, + printData.toolAmount, + printData.implantAmount,TousseInstanceUtils.getTousseInstanceDepartForPrint(tousseInstance) , td.getPrintOrgSource(), + printData.idCardDefinitionUseAmount,printData.idCardDefinitionIdNumber, + printData.idCardDefinitionDescription,objectDao,td.getBarcodePaperType() + ,tousseInstance.getWashOperator(),tousseInstance.getWashOperatorCode(), + tousseInstance.getWeight(),tousseInstance.getRemark(),td.getPrintAmountForPrint(objectDao) + ,BooleanUtils.toBooleanDefaultIfNull(tousseInstance.getHaveUnSupplementMaterials(), false) + ,tousseInstance.getIsUrgentTousse() + ,tousseInstance.getTousseInstancesAmountBelongToThisComboTousse(objectDao));// TODO 需要确认审核后打印,是否也支持打印多份 + obj.put("tousseDefinitionId", td.getId()); + obj.put("logPrintTousse", true); + obj.put("printCause", printCause); + return obj; + } } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r40302 -r40439 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 40302) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 40439) @@ -469,5 +469,13 @@ String packerNumber, String tousseName, String orgUnitName, String startDate, String endDate, String tousseBarcode, String taskGroups, String tousseTypes, String tousseGroups); + + /** + * 获取打印信息 + * @param tousseInstances 包实例 + * @param printCause 打印原因 + * @return + */ + public JSONArray getTousseinstanceJSONArrayForPrint(List tousseInstances, String printCause); }