Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/common/CssdUtils.java =================================================================== diff -u -r21050 -r21304 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/common/CssdUtils.java (.../CssdUtils.java) (revision 21050) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/common/CssdUtils.java (.../CssdUtils.java) (revision 21304) @@ -38,6 +38,7 @@ import com.fasterxml.jackson.core.JsonParser.Feature; import com.fasterxml.jackson.databind.ObjectMapper; import com.forgon.directory.model.BarcodeDevice; +import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; @@ -1169,7 +1170,7 @@ * @return */ public static JSONObject getTousseObjForPrint(String tousseName, - JSONObject tdJson, JSONArray barcodeArray, + JSONObject tdJson,TousseInstance tousseInstance, JSONArray barcodeArray, JSONArray virtualSeqNumArray, String tousseType, String packageType, String packageTypeAbbreviation, String sterilingType, String sterilizerName, @@ -1248,6 +1249,9 @@ if(barcodeArray != null && barcodeArray.size()>0){ obj.put("barcode", barcodeArray.getString(0)); // 条码集合 } + if(tousseInstance.getHaveUnSupplementMaterials()){ + TousseInstanceUtils.setReduceAndDamageDescription(objectDao, tousseInstance, obj); + } return obj; } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java =================================================================== diff -u -r21092 -r21304 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java (.../TousseInstance.java) (revision 21092) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java (.../TousseInstance.java) (revision 21304) @@ -1783,6 +1783,18 @@ } return objectDao.findBySql(TousseMaterialErrorDamage.class.getSimpleName(), condition); } + @SuppressWarnings("unchecked") + @Transient + public List getMaterialErrorDamageDetailList(ObjectDao objectDao , String type) { + String condition = " where tousseInstanceId = " + id; + + if(TousseMaterialErrorDamage.TYPE_CODE_ERROR.equals(type)){ + condition += " and type='"+ MaterialErrorDamageDetail.TYPE_ERROR +"'"; + }else if(TousseMaterialErrorDamage.TYPE_CODE_DAMAGE.equals(type)){ + condition += " and type='"+ MaterialErrorDamageDetail.TYPE_DAMAGE +"'"; + } + return objectDao.findBySql(MaterialErrorDamageDetail.class.getSimpleName(), condition); + } /** * 查询出包实例的丢失报损数据并转换为json字符串 Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r21086 -r21304 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 21086) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 21304) @@ -820,7 +820,7 @@ Long idCardDefinitionUseAmount = getIDCardDefinitionUseAmount(tousseInstance.getIdCardInstanceID()); JSONObject toolAndImplantAmount = tousseDefinitionManager.getToolAndImplantAmount(td); JSONObject obj = CssdUtils.getTousseObjForPrint( - td.getName(), tdJson, subBarcodeArray, subVirtualSeqNumArray, tousseType, + td.getName(), tdJson,tousseInstance, subBarcodeArray, subVirtualSeqNumArray, tousseType, packageType,packageTypeAbbreviation, sterilingType, sterilizerName, sterileFrequency, isPrintUserName, @@ -1013,6 +1013,9 @@ obj.put("department", department); } obj.put("includedTousseAmount", tousseInstance.getTousseInstancesAmountBelongToThisComboTousse(objectDao)); + if(tousseInstance.getHaveUnSupplementMaterials()){ + TousseInstanceUtils.setReduceAndDamageDescription(objectDao, tousseInstance, obj); + } } @Override @@ -2263,7 +2266,7 @@ if(packageTypeAbbreviation == null){ packageTypeAbbreviation = ""; } - JSONObject obj = CssdUtils.getTousseObjForPrint(tousseName,tdJson, + JSONObject obj = CssdUtils.getTousseObjForPrint(tousseName,tdJson,tousseInstance, barcodeArray, virtualBasketSeqNumArray, td.getTousseType(), packageType, packageTypeAbbreviation,sterilingType, tousseInstance.getSterilizerName(), tousseInstance.getSterileFrequency(), isPrintUserName, tousseInstance.getOperator(), @@ -2638,7 +2641,7 @@ */ private void packingSplitPackages(String operator, String operatorCode,String wrapper, String reviewer, String reviewerCode,String sterileUserName,String sterileUserCode, String sterilingType,String sterilizer, String frequency, - JSONArray splitPackages,TousseDefinition td, PackingRecord packingRecord,String taskGroup, + JSONArray splitPackages,List splitsTousseList,TousseDefinition td, PackingRecord packingRecord,String taskGroup, String washBasket,ForeignTousseApplication foreignTousseApplication,String orgUnitCoding, String orgUnitName, Date packingDate,String tousseWeight,String remark, PackingTask currentPackingTask,Map idToWashRecordMap, Map idToRecyclingRecordMap,Date sterileStartTime) { @@ -2712,7 +2715,7 @@ tousseInstanceManager.saveOrUpdate(tousseInstance); - + splitsTousseList.add(tousseInstance); JSONObject tdJson = new JSONObject(); //如果配置为需要打印材料时 if(TousseDefinition.STR_YES.equals(td.getIsPrint()) && TousseDefinition.STR_YES.equals(td.getIsPrintMaterialForPacking())){ @@ -3665,6 +3668,7 @@ } JSONArray splits = new JSONArray(); + List splitsTousseList = null; //logger.debug("Thread " + Thread.currentThread().getName() + " leftAmount = " + leftAmount); @@ -3713,6 +3717,7 @@ if(currentPackAmount == 0){ throw new RuntimeException("外来器械拆包数量不能为0"); } + splitsTousseList = new ArrayList(splits.size()); PackingRecord packingRecord = createPackingRecord( inspector, operator, wrapper, orgUnitCoding, orgUnitName,taskGroup, sterilizerName, sterileFrequency, td, packingDate, currentPackAmount, currentPackingTask , null); @@ -3722,7 +3727,7 @@ packingSplitPackages(operator, operatorCode,wrapper, reviewer, reviewerCode,sterileUserName, sterileUserCode, sterilingType, sterilizerName, sterileFrequency, - splits, td,packingRecord,taskGroup, washBasket,foreignTousseApplication, orgUnitCoding,orgUnitName, + splits, splitsTousseList, td,packingRecord,taskGroup, washBasket,foreignTousseApplication, orgUnitCoding,orgUnitName, packingDate,tousseWeight,remark, currentPackingTask,idToWashRecordMap,idToRecyclingRecordMap,sterileStartTime); currentPackingTaskAsList.add(currentPackingTask); } else { @@ -3819,7 +3824,7 @@ for (int j = 0 ; j < splits.size() ; j++){ JSONObject tousse = (JSONObject)splits.get(j); - + TousseInstance tousseInstance = splitsTousseList.get(j); JSONArray arr = new JSONArray(); arr.add(tousse.optString("barcode")); @@ -3832,6 +3837,7 @@ JSONObject obj = CssdUtils.getTousseObjForPrint( tousse.optString("tousseName"), tousse.optJSONObject("tousseDefinition"), + tousseInstance, arr, arrSeqNum, TousseDefinition.PACKAGE_TYPE_SPLIT, tousse.optString("packingType"), @@ -3897,7 +3903,7 @@ // String department = String.valueOf(departmentArray.get(i)); JSONObject obj = CssdUtils.getTousseObjForPrint( - td.getName(), tdJson, subBarcodeArray, subVirtualSeqNumArray, tousseType, + td.getName(), tdJson,tousse, subBarcodeArray, subVirtualSeqNumArray, tousseType, packageType,packageTypeAbbreviation, sterilingType, sterilizerName, sterileFrequency, isPrintUserName, @@ -6099,7 +6105,7 @@ if(printAmount == null){ printAmount = 1; } - return CssdUtils.getTousseObjForPrint(td.getName(), tdJson, + return CssdUtils.getTousseObjForPrint(td.getName(), tdJson,ti, subBarcodeArray, null, td.getTousseType(), td.getPackageType(), packageTypeAbbreviation, td.getSterilingMethod(), ti.getSterilizerName(), ti.getSterileFrequency(), Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java =================================================================== diff -u -r20280 -r21304 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java (.../TousseInstanceUtils.java) (revision 20280) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java (.../TousseInstanceUtils.java) (revision 21304) @@ -9,8 +9,11 @@ import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import net.sf.json.JSONObject; @@ -22,6 +25,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; +import com.forgon.disinfectsystem.entity.materialerrordamage.MaterialErrorDamageDetail; import com.forgon.systemsetting.model.HttpOption; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; @@ -433,4 +437,54 @@ } return tousseFixedBarcode; } + + public static void setReduceAndDamageDescription(ObjectDao objectDao, + TousseInstance tousseInstance, JSONObject obj) { + String reduce = ""; + String damage = ""; + if (tousseInstance == null) { + return; + } + List reduceList = new LinkedList(); + List damageList = new LinkedList(); + Map reduceToAmountMap = new HashMap(); + Map damageToAmountMap = new HashMap(); + List list = tousseInstance + .getMaterialErrorDamageDetailList(objectDao, null); + if (list != null) { + for (MaterialErrorDamageDetail materialErrorDamageDetail : list) { + String name = materialErrorDamageDetail.getMaterialName(); + int unSupplementAmont = materialErrorDamageDetail + .safelyGetUnSupplementAmont(); + Map map = null; + if (materialErrorDamageDetail.isErrortypeReduce()) { + map = reduceToAmountMap; + } else if (materialErrorDamageDetail.isDamage()) { + map = damageToAmountMap; + } else { + continue; + } + Long amount = map.get(name); + if (amount == null) { + amount = 0L; + } + amount += unSupplementAmont; + map.put(name, amount); + } + } + if (!reduceToAmountMap.isEmpty()) { + for (Map.Entry e : reduceToAmountMap.entrySet()) { + reduceList.add(e.getKey() + "x" + e.getValue()); + } + reduce = StringUtils.join(reduceList, ","); + } + if (!damageToAmountMap.isEmpty()) { + for (Map.Entry e : damageToAmountMap.entrySet()) { + damageList.add(e.getKey() + "x" + e.getValue()); + } + damage = StringUtils.join(damageList, ","); + } + obj.put("reduceDescription", reduce); + obj.put("damageDescription", damage); + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/materialerrordamage/MaterialErrorDamageDetail.java =================================================================== diff -u -r18578 -r21304 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/materialerrordamage/MaterialErrorDamageDetail.java (.../MaterialErrorDamageDetail.java) (revision 18578) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/materialerrordamage/MaterialErrorDamageDetail.java (.../MaterialErrorDamageDetail.java) (revision 21304) @@ -271,6 +271,13 @@ public void setAmount(Integer amount) { this.amount = amount; } + + public int safelyGetUnSupplementAmont(){ + if (amount == null || additionalAmount == null) { + return 0; + } + return amount - additionalAmount; + } public String getType() { return type; @@ -477,6 +484,14 @@ } return false; } + + @Transient + public boolean isDamage() { + if (MaterialErrorDamageDetail.TYPE_DAMAGE.equals(type)) { + return true; + } + return false; + } @Transient public boolean isErrortypeAdd() {