Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r16900 -r16905 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16900) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16905) @@ -2874,7 +2874,7 @@ tousseDefinition, tousseType, tousseName, foreignTousseApplication, packingDate, foreignTprice, fluctuationPrice, tousseAmount, orgUnitCoding, orgUnitName, - isUnTraceableTousse, barcodeStr ,tousseWeight, currentPackingTask,idToWashRecordMap,idToRecyclingRecordMap,washJson,null); + isUnTraceableTousse, barcodeStr ,tousseWeight, currentPackingTask,idToWashRecordMap,idToRecyclingRecordMap,washJson,null,null); tousseInstanceManager.saveOrUpdate(tousseInstance); @@ -2969,8 +2969,8 @@ int workloadAmount = tousseDefinitionManager.getWorkloadAmount(tousseDefinition); tousseDefinition.setTousseAmount(workloadAmount); - - tousseDefinitionManager.saveOrUpdate(tousseDefinition); + //解决 A different object with the same identifier value was already associated with the session + objectDao.merge(tousseDefinition); } public String packingTousse_TRANS_REQUIRED(String params,HttpSession session) throws Exception { @@ -3441,8 +3441,8 @@ String urgentAmountStr = JSONUtil.optString(paramsObj, "urgentAmount", null); String tousseWeight = JSONUtil.optString(paramsObj, "tousseWeight", null); Long comboTousseInstanceId = JSONUtil.optLong(paramsObj, "comboTousseInstanceId", null); + String comboTousseInstanceStatus = JSONUtil.optString(paramsObj, "comboTousseInstanceStatus", null); - String packageTypeAbbreviation = TousseInstanceUtils.getPackageTypeAbbreviation(objectDao, packageType); String msg = "保存成功"; @@ -3787,7 +3787,7 @@ td, tousseType,tousseName,foreignTousseApplication,packingDate, packingAmountForThisTask, toussePrice, fluctuationPrice,tousseAmount, orgUnitCoding,orgUnitName,basketBarcode, !isTraceable, confirmContinue,tousseInstances,withoutReviewingAndSterilingTousseInstanceList, - idToWashRecordMap, idToRecyclingRecordMap,urgentAmountJson,taskGroup,tousseWeight,comboTousseInstanceId); + idToWashRecordMap, idToRecyclingRecordMap,urgentAmountJson,taskGroup,tousseWeight,comboTousseInstanceId,comboTousseInstanceStatus); needPackingAmount -= currentPackingTask.getUnPackAmount(); @@ -4209,7 +4209,7 @@ Integer currentPackAmount, double toussePrice,double fluctuationPrice, Integer tousseAmount,String orgUnitCoding, String orgUnitName, String basketBarcode,boolean unTraceableTousse, String confirmContinue,List tousseInstances, List withoutReviewingAndSterilingTousseInstanceList,Map idToWashRecordMap, - Map idToRecyclingRecordMap,JSONObject urgentAmountJson,String taskGroup,String tousseWeight,Long comboTousseInstanceId) { + Map idToRecyclingRecordMap,JSONObject urgentAmountJson,String taskGroup,String tousseWeight,Long comboTousseInstanceId,String comboTousseInstanceStatus) { JSONObject obj = new JSONObject(); long t1 = System.currentTimeMillis(); @@ -4293,7 +4293,7 @@ washBasket, sterilizerName, sterileFrequency, sterileStartTime, validUntil, warningUntil, packingRecordId, tousseDefinition, tousseType, tousseName,foreignTousseApplication, packingDate, toussePrice, fluctuationPrice, tousseAmount, orgUnitCoding, orgUnitName,unTraceableTousse, barcodeStr, tousseWeight, - prePackingTask,idToWashRecordMap,idToRecyclingRecordMap,washJson,comboTousseInstanceId); + prePackingTask,idToWashRecordMap,idToRecyclingRecordMap,washJson,comboTousseInstanceId,comboTousseInstanceStatus); //加急数量处理 if(urgentAmountJson != null){ @@ -4567,18 +4567,19 @@ private TousseInstance createTousseInstance(String operator, String operatorCode, String reviewer, String reviewerCode, String sterileUserName, String sterileUserCode, String packageType, - String sterilingType, String stock,String washBasket, + String sterilingType, String stock, String washBasket, String sterilizerName, String sterileFrequency, Date sterileStartTime, Date validUntil, Date warningUntil, - Long packingRecordId, TousseDefinition td, - String tousseType, String tousseName, + Long packingRecordId, TousseDefinition td, String tousseType, + String tousseName, ForeignTousseApplication foreignTousseApplication, Date packingDate, double toussePrice, double fluctuationPrice, Integer tousseAmount, String orgUnitCoding, String orgUnitName, boolean unTraceableTousse, String barcodeStr, String tousseWeight, PackingTask currentPackingTask, Map idToWashRecordMap, - Map idToRecyclingRecordMap,JSONObject washJson,Long comboTousseInstanceId) { + Map idToRecyclingRecordMap, + JSONObject washJson, Long comboTousseInstanceId,String comboTousseStatus) { TousseInstance tousseInstance = new TousseInstance(); tousseInstance.setBarcode(barcodeStr); @@ -4587,19 +4588,27 @@ tousseInstance.setSterilizationUser(sterileUserName); tousseInstance.setSterilizationUserCode(sterileUserCode); tousseInstance.setTousseDefinition(td); - // 对于不需要审核的器械包,修改其状态 - if (TousseDefinition.STR_NO.equals(td.getIsReview())) { - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td - .getTousseType())) { - tousseInstance.setStatus(TousseInstance.STATUS_DISINFECTED); - if (TousseDefinition.STR_YES.equals(td.getIsSterile())) { + //聚合包状态要保持一致 + if(DatabaseUtil.isPoIdValid(comboTousseInstanceId)){ + if(StringUtils.isBlank(comboTousseStatus)){ + throw new RuntimeException("聚合包状态错误!"); + } + tousseInstance.setStatus(comboTousseStatus); + }else{ + // 对于不需要审核的器械包,修改其状态 + if (TousseDefinition.STR_NO.equals(td.getIsReview())) { + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td + .getTousseType())) { + tousseInstance.setStatus(TousseInstance.STATUS_DISINFECTED); + if (TousseDefinition.STR_YES.equals(td.getIsSterile())) { + tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); + } + } else { tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); } } else { - tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); + tousseInstance.setStatus(TousseInstance.STATUS_PACKED); } - } else { - tousseInstance.setStatus(TousseInstance.STATUS_PACKED); } tousseInstance.setTousseName(td.getName()); @@ -5680,13 +5689,14 @@ throw new RuntimeException("灭菌日期不能为空!"); } JSONArray comboTousseJsonArray = JSONArray.fromObject(comboTousseData); - //验证数据 - comboTousseDataValidate(comboTousseJsonArray,sterileDate); //装配聚合包、装配记录 JSONArray jsonArray = new JSONArray(); SupplyRoomConfig systemConfig = supplyRoomConfigManager.getSystemParamsObj(); for (int i = 0; i < comboTousseJsonArray.size(); i++) { JSONObject comboTousseJson = comboTousseJsonArray.optJSONObject(i); + //验证数据 + comboTousseDataValidate(comboTousseJson,sterileDate); + Long comboTousseId = comboTousseJson.optLong("id"); TousseDefinition comboTousseTD = tousseDefinitionManager .getTousseDefinitionById(comboTousseId); @@ -5700,13 +5710,20 @@ paramsObj.put("taskIds", tousseJson.optString("taskIds")); paramsObj.put("packAmount", tousseJson.optInt("packAmount")); paramsObj.put("comboTousseInstanceId", comboTousseInstance.getId()); - paramsObj.put("packageType", tousseJson.optString("packageType")); + paramsObj.put("comboTousseInstanceStatus", comboTousseInstance.getStatus()); + //包装类型跟聚合包一致 + paramsObj.put("packageType", comboTousseJson.optString("packageType")); packingTousse_internal(paramsObj.toString(), session); + + tousseInstanceAmountValidata(comboTousseInstance,tousseJson.optLong("id"), tousseJson.optInt("packAmount")); } //页面返回值处理 JSONObject result = buildReturnResult(comboTousseInstance,systemConfig,comboTousseJson); jsonArray.add(result); } + //日志记录 + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_PACKING, + Log.TYPE_ADD, params); JSONObject printJson = new JSONObject(); printJson.put("success", true); @@ -5715,6 +5732,23 @@ return printJson.toString(); } + /** + * 验证生成的普通器械包实例跟页面上填写的数量是否一致 + * @param comboTousseInstance + * @param tousseJson + */ + private void tousseInstanceAmountValidata( + TousseInstance comboTousseInstance,Long id, int customAmount) { + int count = objectDao.countObjectBySql( + TousseInstance.class.getSimpleName(), + "where po.comboTousseInstanceId = " + + comboTousseInstance.getId() + + " and po.tousseDefinition.id = " + id); + if (count != customAmount) { + throw new RuntimeException("装配数据异常,装配失败!"); + } + } + /** * 构造页面返回值 @@ -5794,62 +5828,57 @@ * @param comboTousseJsonArray * @return */ - private void comboTousseDataValidate(JSONArray comboTousseJsonArray,Long produceDate){ - if(comboTousseJsonArray != null){ - String handlerDepartCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); - for(int i = 0 ; i < comboTousseJsonArray.size() ; i++){ - JSONObject tousseItem = comboTousseJsonArray.optJSONObject(i); - String id = tousseItem.optString("id"); - String comboTousseName = tousseItem.optString("tousseName"); - String packageType = tousseItem.optString("packageType"); - if(StringUtils.isBlank(packageType)){ - throw new RuntimeException(comboTousseName + ",未设置包装类型!"); - } - //聚合包属于哪个临床科室 - TousseDefinition comboTousseTD = tousseDefinitionManager.getTousseDefinitionById(id); - if (comboTousseTD == null) { - throw new RuntimeException(comboTousseName + "定义已不存在!"); - } - String departCoding = comboTousseTD.getHandlerDepartCode(); - if(StringUtils.isBlank(departCoding)){ - throw new RuntimeException(comboTousseName + ",包定义未设置所属科室!"); - } - //验证失效期 - validateExpirationDate(produceDate, packageType,tousseItem); - //聚合包内普通器械包校验 - JSONArray includeTousseJsonArray = tousseItem.optJSONArray("includeTousseJsonArray"); - if(includeTousseJsonArray == null || includeTousseJsonArray.size() == 0){ - throw new RuntimeException(comboTousseName + "内物品不能为空!"); - } - for(int j = 0 ; j < includeTousseJsonArray.size() ; j++){ - JSONObject tousseJson = includeTousseJsonArray.optJSONObject(j); - Long tousseDefinitionId = tousseJson.optLong("id"); - String tousseName = tousseJson.optString("tousseName"); - Integer packingAmount = tousseJson.optInt("amount"); - Integer amount = tousseJson.optInt("amount"); - if(amount > 0){ - List taskList = findPackingTaskBySQL(tousseDefinitionId, handlerDepartCode, departCoding); - String ids = ""; - if(taskList != null){ - for (PackingTask packingTask : taskList) { - if(amount <= 0){ - break; - } - if(StringUtils.isNotBlank(ids)){ - ids += ";"; - } - ids += packingTask.getId(); - amount -= packingTask.getUnPackAmount(); - } + private void comboTousseDataValidate(JSONObject tousseItem,Long produceDate){ + String handlerDepartCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); + String id = tousseItem.optString("id"); + String comboTousseName = tousseItem.optString("tousseName"); + String packageType = tousseItem.optString("packageType"); + if(StringUtils.isBlank(packageType)){ + throw new RuntimeException(comboTousseName + ",未设置包装类型!"); + } + //聚合包属于哪个临床科室 + TousseDefinition comboTousseTD = tousseDefinitionManager.getTousseDefinitionById(id); + if (comboTousseTD == null) { + throw new RuntimeException(comboTousseName + "定义已不存在!"); + } + String departCoding = comboTousseTD.getHandlerDepartCode(); + if(StringUtils.isBlank(departCoding)){ + throw new RuntimeException(comboTousseName + ",包定义未设置所属科室!"); + } + //验证失效期 + validateExpirationDate(produceDate, packageType,tousseItem); + //聚合包内普通器械包校验 + JSONArray includeTousseJsonArray = tousseItem.optJSONArray("includeTousseJsonArray"); + if(includeTousseJsonArray == null || includeTousseJsonArray.size() == 0){ + throw new RuntimeException(comboTousseName + "内物品不能为空!"); + } + for(int j = 0 ; j < includeTousseJsonArray.size() ; j++){ + JSONObject tousseJson = includeTousseJsonArray.optJSONObject(j); + Long tousseDefinitionId = tousseJson.optLong("id"); + String tousseName = tousseJson.optString("tousseName"); + Integer packingAmount = tousseJson.optInt("amount"); + Integer amount = tousseJson.optInt("amount"); + if(amount > 0){ + List taskList = findPackingTaskBySQL(tousseDefinitionId, handlerDepartCode, departCoding); + String ids = ""; + if(taskList != null){ + for (PackingTask packingTask : taskList) { + if(amount <= 0){ + break; } - if(taskList == null || amount > 0){ - throw new RuntimeException(tousseName + "当前可装配数量小于" + packingAmount + ",装配失败!"); + if(StringUtils.isNotBlank(ids)){ + ids += ";"; } - //关联上装配任务id - tousseJson.put("taskIds", ids); - tousseJson.put("packAmount", packingAmount); + ids += packingTask.getId(); + amount -= packingTask.getUnPackAmount(); } } + if(taskList == null || amount > 0){ + throw new RuntimeException(tousseName + "当前可装配数量小于" + packingAmount + ",装配失败!"); + } + //关联上装配任务id + tousseJson.put("taskIds", ids); + tousseJson.put("packAmount", packingAmount); } } } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/ComboToussePackingTests.java =================================================================== diff -u -r16876 -r16905 --- ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/ComboToussePackingTests.java (.../ComboToussePackingTests.java) (revision 16876) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/ComboToussePackingTests.java (.../ComboToussePackingTests.java) (revision 16905) @@ -255,32 +255,8 @@ initData(); initPackingTask2(); - String ids = ""; - String operator = "cssduser1"; - String operatorCode = "002107"; - String reviewer = "cssduser2"; - String reviewerCode = "fw130"; - String packageType = "棉布"; - String sterilingType = "P1器械"; - String packAmountStr = "8"; - String taskGroup = "术科组"; - String sterilizer = "1号灭菌炉"; - String frequency = "3"; HttpSession session = null; - JSONObject params = new JSONObject(); - params.put("taskIds", ids); - params.put("operator", operator); - params.put("operatorCode", operatorCode); - params.put("reviewer", reviewer); - params.put("reviewerCode", reviewerCode); - params.put("packageType", packageType); - params.put("sterilingType", sterilingType); - params.put("sterileDate", String.valueOf(System.currentTimeMillis())); - params.put("packAmount", packAmountStr); - params.put("taskGroup", taskGroup); - params.put("sterilizer", sterilizer); - params.put("frequency", frequency); - params.put("confirmContinue", "true"); + JSONObject params = buildParams(); TousseDefinition ctDefinition = tousseDefinitionManager.getTousseDefinitionByName("Test聚合包"); JSONArray data = new JSONArray(); @@ -347,32 +323,8 @@ initData(); initPackingTask3(); - String ids = ""; - String operator = "cssduser1"; - String operatorCode = "002107"; - String reviewer = "cssduser2"; - String reviewerCode = "fw130"; - String packageType = "棉布"; - String sterilingType = "P1器械"; - String packAmountStr = "8"; - String taskGroup = "术科组"; - String sterilizer = "1号灭菌炉"; - String frequency = "3"; HttpSession session = null; - JSONObject params = new JSONObject(); - params.put("taskIds", ids); - params.put("operator", operator); - params.put("operatorCode", operatorCode); - params.put("reviewer", reviewer); - params.put("reviewerCode", reviewerCode); - params.put("packageType", packageType); - params.put("sterilingType", sterilingType); - params.put("sterileDate", String.valueOf(System.currentTimeMillis())); - params.put("packAmount", packAmountStr); - params.put("taskGroup", taskGroup); - params.put("sterilizer", sterilizer); - params.put("frequency", frequency); - params.put("confirmContinue", "true"); + JSONObject params = buildParams(); TousseDefinition ctDefinition = tousseDefinitionManager.getTousseDefinitionByName("Test聚合包"); JSONArray data = new JSONArray(); @@ -663,7 +615,275 @@ assertEquals("Test穿刺包", tName); assertEquals(8, materialJson.optInt("count")); } + } + private List initPackingTask5(){ + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + Long taskId = createPackingTask(td_开胸包,1); + Long taskId2 = createPackingTask(td_开胸包,2); + Long taskId3 = createPackingTask(td_开胸包,1); + Long taskId4 = createPackingTask(td_开胸包,1); + List list = new ArrayList(); + list.add(taskId); + list.add(taskId2); + list.add(taskId3); + list.add(taskId4); + return list; } + /** + *测试多装配任务,多个聚合包装配 + *Test开胸包 4个装配任务,数量分别是 1、2、1、1 + *装配4个聚合包 ,数量分别是2,1,1,1 + *不做session.merge(tousseDefinition)处理会报错 + *A different object with the same identifier value was already associated with the session + */ + @Test + public void testPackingComboTousse5() { + + initData(); + List idsArray = initPackingTask5(); + HttpSession session = null; + + JSONObject params = buildParams(); + + TousseDefinition ctDefinition1 = tousseDefinitionManager.getTousseDefinitionByName("Test聚合包"); + JSONArray data = new JSONArray(); + JSONObject comboTousse1 = new JSONObject(); + comboTousse1.put("id", ctDefinition1.getId()); + comboTousse1.put("tousseName", ctDefinition1.getName()); + comboTousse1.put("packageType", "棉布"); + comboTousse1.put("departCoding", Constants.ORG_UNIT_CODE_NEIKE); + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + JSONArray comboTousseJsonArray1 = new JSONArray(); + JSONObject tousseJson1 = new JSONObject(); + tousseJson1.put("id", td_开胸包.getId()); + tousseJson1.put("tousseName", td_开胸包.getName()); + tousseJson1.put("amount", 2); + comboTousseJsonArray1.add(tousseJson1); + comboTousse1.put("includeTousseJsonArray", comboTousseJsonArray1); + + JSONObject comboTousse2 = new JSONObject(); + comboTousse2.put("id", ctDefinition1.getId()); + comboTousse2.put("tousseName", ctDefinition1.getName()); + comboTousse2.put("packageType", "棉布"); + comboTousse2.put("departCoding", Constants.ORG_UNIT_CODE_NEIKE); + JSONArray comboTousseJsonArray2 = new JSONArray(); + JSONObject tousseJson2 = new JSONObject(); + tousseJson2.put("id", td_开胸包.getId()); + tousseJson2.put("tousseName", td_开胸包.getName()); + tousseJson2.put("amount", 1); + comboTousseJsonArray2.add(tousseJson2); + comboTousse2.put("includeTousseJsonArray", comboTousseJsonArray2); + + JSONObject comboTousse3 = new JSONObject(); + comboTousse3.put("id", ctDefinition1.getId()); + comboTousse3.put("tousseName", ctDefinition1.getName()); + comboTousse3.put("packageType", "棉布"); + comboTousse3.put("departCoding", Constants.ORG_UNIT_CODE_NEIKE); + JSONArray comboTousseJsonArray3 = new JSONArray(); + JSONObject tousseJson3 = new JSONObject(); + tousseJson3.put("id", td_开胸包.getId()); + tousseJson3.put("tousseName", td_开胸包.getName()); + tousseJson3.put("amount", 1); + comboTousseJsonArray3.add(tousseJson3); + comboTousse3.put("includeTousseJsonArray", comboTousseJsonArray3); + + JSONObject comboTousse4 = new JSONObject(); + comboTousse4.put("id", ctDefinition1.getId()); + comboTousse4.put("tousseName", ctDefinition1.getName()); + comboTousse4.put("packageType", "棉布"); + comboTousse4.put("departCoding", Constants.ORG_UNIT_CODE_NEIKE); + JSONArray comboTousseJsonArray4 = new JSONArray(); + JSONObject tousseJson4 = new JSONObject(); + tousseJson4.put("id", td_开胸包.getId()); + tousseJson4.put("tousseName", td_开胸包.getName()); + tousseJson4.put("amount", 1); + comboTousseJsonArray4.add(tousseJson4); + comboTousse4.put("includeTousseJsonArray", comboTousseJsonArray4); + + data.add(comboTousse1); + data.add(comboTousse2); + data.add(comboTousse3); + data.add(comboTousse4); + params.put("comboTousseJsonArray", data); + + String result = packingTableManagerTX.packingComboTousse(params.toString(), session); + assertNotNull(result); + JSONObject resultJson = JSONObject.fromObject(result); + assertEquals(true,resultJson.optBoolean("success")); + assertEquals(1, td_开胸包.getTousseAmount().intValue()); + + String sql = String.format("where po.id in(%s)", StringUtils.join(idsArray, ",")); + @SuppressWarnings("unchecked") + List taskList = objectDao.findBySql(PackingTask.class.getSimpleName(), sql); + assertEquals(0, taskList.size()); + } + + + private JSONObject buildParams() { + String ids = ""; + String operator = "cssduser1"; + String operatorCode = "002107"; + String reviewer = "cssduser2"; + String reviewerCode = "fw130"; + String packageType = "棉布"; + String sterilingType = "P1器械"; + String packAmountStr = "8"; + String taskGroup = "术科组"; + String sterilizer = "1号灭菌炉"; + String frequency = "3"; + JSONObject params = new JSONObject(); + params.put("taskIds", ids); + params.put("operator", operator); + params.put("operatorCode", operatorCode); + params.put("reviewer", reviewer); + params.put("reviewerCode", reviewerCode); + params.put("packageType", packageType); + params.put("sterilingType", sterilingType); + params.put("sterileDate", String.valueOf(System.currentTimeMillis())); + params.put("packAmount", packAmountStr); + params.put("taskGroup", taskGroup); + params.put("sterilizer", sterilizer); + params.put("frequency", frequency); + params.put("confirmContinue", "true"); + return params; + } + + + private List initPackingTask6(){ + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseDefinition td_开颅包 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包"); + Long taskId = createPackingTask(td_开胸包,10); + Long taskId2 = createPackingTask(td_开颅包,11); + List list = new ArrayList(); + list.add(taskId); + list.add(taskId2); + return list; + } + + /** + * Test聚合包 一次装配4个 + * 包实例和装配任务是正常 + */ + @Test + public void testPackingComboTousse6() { + + initData(); + List idsArray = initPackingTask6(); + HttpSession session = null; + + JSONObject params = buildParams(); + + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseDefinition Test开颅包 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包"); + TousseDefinition ctDefinition1 = tousseDefinitionManager.getTousseDefinitionByName("Test聚合包"); + JSONArray data = new JSONArray(); + + JSONObject comboTousse1 = new JSONObject(); + comboTousse1.put("id", ctDefinition1.getId()); + comboTousse1.put("tousseName", ctDefinition1.getName()); + comboTousse1.put("packageType", "棉布"); + comboTousse1.put("departCoding", Constants.ORG_UNIT_CODE_NEIKE); + JSONArray comboTousseJsonArray1 = new JSONArray(); + JSONObject tousseJson1 = new JSONObject(); + tousseJson1.put("id", td_开胸包.getId()); + tousseJson1.put("tousseName", td_开胸包.getName()); + tousseJson1.put("amount", 1); + JSONObject tousseJson11 = new JSONObject(); + tousseJson11.put("id", Test开颅包.getId()); + tousseJson11.put("tousseName", Test开颅包.getName()); + tousseJson11.put("amount", 1); + comboTousseJsonArray1.add(tousseJson1); + comboTousseJsonArray1.add(tousseJson11); + comboTousse1.put("includeTousseJsonArray", comboTousseJsonArray1); + + JSONObject comboTousse2 = new JSONObject(); + comboTousse2.put("id", ctDefinition1.getId()); + comboTousse2.put("tousseName", ctDefinition1.getName()); + comboTousse2.put("packageType", "棉布"); + comboTousse2.put("departCoding", Constants.ORG_UNIT_CODE_NEIKE); + JSONArray comboTousseJsonArray2 = new JSONArray(); + JSONObject tousseJson2 = new JSONObject(); + tousseJson2.put("id", td_开胸包.getId()); + tousseJson2.put("tousseName", td_开胸包.getName()); + tousseJson2.put("amount", 2); + JSONObject tousseJson22 = new JSONObject(); + tousseJson22.put("id", Test开颅包.getId()); + tousseJson22.put("tousseName", Test开颅包.getName()); + tousseJson22.put("amount", 2); + comboTousseJsonArray2.add(tousseJson2); + comboTousseJsonArray2.add(tousseJson22); + comboTousse2.put("includeTousseJsonArray", comboTousseJsonArray2); + + JSONObject comboTousse3 = new JSONObject(); + comboTousse3.put("id", ctDefinition1.getId()); + comboTousse3.put("tousseName", ctDefinition1.getName()); + comboTousse3.put("packageType", "棉布"); + comboTousse3.put("departCoding", Constants.ORG_UNIT_CODE_NEIKE); + JSONArray comboTousseJsonArray3 = new JSONArray(); + JSONObject tousseJson3 = new JSONObject(); + tousseJson3.put("id", td_开胸包.getId()); + tousseJson3.put("tousseName", td_开胸包.getName()); + tousseJson3.put("amount", 3); + JSONObject tousseJson33 = new JSONObject(); + tousseJson33.put("id", Test开颅包.getId()); + tousseJson33.put("tousseName", Test开颅包.getName()); + tousseJson33.put("amount", 3); + comboTousseJsonArray3.add(tousseJson3); + comboTousseJsonArray3.add(tousseJson33); + comboTousse3.put("includeTousseJsonArray", comboTousseJsonArray3); + + JSONObject comboTousse4 = new JSONObject(); + comboTousse4.put("id", ctDefinition1.getId()); + comboTousse4.put("tousseName", ctDefinition1.getName()); + comboTousse4.put("packageType", "棉布"); + comboTousse4.put("departCoding", Constants.ORG_UNIT_CODE_NEIKE); + JSONArray comboTousseJsonArray4 = new JSONArray(); + JSONObject tousseJson4 = new JSONObject(); + tousseJson4.put("id", td_开胸包.getId()); + tousseJson4.put("tousseName", td_开胸包.getName()); + tousseJson4.put("amount", 4); + JSONObject tousseJson44 = new JSONObject(); + tousseJson44.put("id", Test开颅包.getId()); + tousseJson44.put("tousseName", Test开颅包.getName()); + tousseJson44.put("amount", 4); + comboTousseJsonArray4.add(tousseJson4); + comboTousseJsonArray4.add(tousseJson44); + comboTousse4.put("includeTousseJsonArray", comboTousseJsonArray4); + + data.add(comboTousse1); + data.add(comboTousse2); + data.add(comboTousse3); + data.add(comboTousse4); + params.put("comboTousseJsonArray", data); + + String result = packingTableManagerTX.packingComboTousse(params.toString(), session); + assertNotNull(result); + JSONObject resultJson = JSONObject.fromObject(result); + assertEquals(true,resultJson.optBoolean("success")); + + String sql = String.format("where po.id in(%s)", StringUtils.join(idsArray, ",")); + @SuppressWarnings("unchecked") + List taskList = objectDao.findBySql(PackingTask.class.getSimpleName(), sql); + assertEquals(1, taskList.size()); + //Test开颅包还有一个未装配 + PackingTask task = taskList.get(0); + assertEquals(1, task.getUnPackAmount().intValue()); + assertEquals(Test开颅包.getId(), task.getTousseDefinition().getId()); + //4个聚合包实例 + String comboTousseSql = "where po.comboTousseDefinitionId = " + ctDefinition1.getId(); + List tousseList = objectDao.findBySql(TousseInstance.class.getSimpleName(), comboTousseSql); + assertNotNull(tousseList); + assertEquals(4, tousseList.size()); + //20个普通器械包实例 + List tousseIds = new ArrayList(); + for (TousseInstance ti : tousseList) { + tousseIds.add(ti.getId()); + } + String tousseSql = "where po.comboTousseInstanceId in(" + StringUtils.join(tousseIds, ",") + ")"; + int count = objectDao.countObjectBySql(TousseInstance.class.getSimpleName(), tousseSql); + assertEquals(count, 20); + } + }