Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/materialerrordamage/service/MaterialErrorDamageDetailManagerImpl.java =================================================================== diff -u -r19828 -r20777 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/materialerrordamage/service/MaterialErrorDamageDetailManagerImpl.java (.../MaterialErrorDamageDetailManagerImpl.java) (revision 19828) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/materialerrordamage/service/MaterialErrorDamageDetailManagerImpl.java (.../MaterialErrorDamageDetailManagerImpl.java) (revision 20777) @@ -41,6 +41,7 @@ import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; +import com.forgon.exception.SystemException; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.tools.MyCollectionUtils; @@ -189,7 +190,7 @@ //不补充可以装配的时候,不能讲丢失、报损数量改大,因为在回收的时候已经按包定义材料数量拆分过了 if(dfValue > 0){ if(CssdUtils.getSystemSetConfigByNameBool("allowPackingWhenUnSupplementMaterial")){ - throw new RuntimeException(detail.getMaterialName() + "不能改大数量!"); + throw new SystemException(detail.getMaterialName() + "不能改大数量!"); } } @@ -400,7 +401,7 @@ public void materialSupplement(String packingTaskId,String type, JSONArray itemArray, String washBasketBarcode) throws Exception { if(itemArray == null){ - throw new RuntimeException("补充物品为空!"); + throw new SystemException("补充物品为空!"); } PackingTask packingTask = packingManager.get(packingTaskId); @@ -421,129 +422,125 @@ newGoodsStock(materialDefinitionId, additionalAmount, stockList, defaultWarehouse); } if (CollectionUtils.isNotEmpty(stockList)) { - try { - //修改材料库存 - List goodsStockList = goodsStockManager.saveOrUpdateGoodsStock(stockList, - GoodsStockManager.MODE_OUTSTOCK); - if(CollectionUtils.isNotEmpty(goodsStockList)){ - //关联清洗篮筐 - ClassifyBasket classifyBasket = classifyBasketManager.getClassifyBasket(washBasketBarcode); - for (GoodsStock goodsStock : goodsStockList) { - Long md_id = goodsStock.getMaterialDefinitionId(); - Integer stockAmount = goodsStock.getAmount();//某个价格补充的数量 - Double price = goodsStock.getPrice(); - if(md_id == null){ - throw new RuntimeException("材料库存的材料id为空,补充失败!"); + //修改材料库存 + List goodsStockList = goodsStockManager.saveOrUpdateGoodsStock(stockList, + GoodsStockManager.MODE_OUTSTOCK); + if(CollectionUtils.isNotEmpty(goodsStockList)){ + //关联清洗篮筐 + ClassifyBasket classifyBasket = classifyBasketManager.getClassifyBasket(washBasketBarcode); + for (GoodsStock goodsStock : goodsStockList) { + Long md_id = goodsStock.getMaterialDefinitionId(); + Integer stockAmount = goodsStock.getAmount();//某个价格补充的数量 + Double price = goodsStock.getPrice(); + if(md_id == null){ + throw new SystemException("材料库存的材料id为空,补充失败!"); + } + if(stockAmount == null){ + throw new SystemException("材料库存的数量为空,补充失败!"); + } + if(price == null){ + throw new SystemException("材料库存的价格为空,补充失败!"); + } + for (int i = 0; i < itemArray.size(); i++) { + if(stockAmount <= 0){ + break; } - if(stockAmount == null){ - throw new RuntimeException("材料库存的数量为空,补充失败!"); + JSONObject obj = itemArray.optJSONObject(i); + String mName = obj.optString("materialName"); + if (MaterialInstance.MATERIAL_NAME_IDCARD.equals(mName)) { + continue; } - if(price == null){ - throw new RuntimeException("材料库存的价格为空,补充失败!"); - } - for (int i = 0; i < itemArray.size(); i++) { - if(stockAmount <= 0){ - break; - } - JSONObject obj = itemArray.optJSONObject(i); - String mName = obj.optString("materialName"); - if (MaterialInstance.MATERIAL_NAME_IDCARD.equals(mName)) { + long materialDefinitionId = obj.optLong("materialDefinitionId"); + if(materialDefinitionId == md_id){ + long id = obj.optLong("id"); + int amount = obj.optInt("amount");//总共需要补充的数量 + int additionalAmount = obj.optInt("additionalAmount");//已补充数量 + //已补充 + if(amount <= additionalAmount){ continue; } - long materialDefinitionId = obj.optLong("materialDefinitionId"); - if(materialDefinitionId == md_id){ - long id = obj.optLong("id"); - int amount = obj.optInt("amount");//总共需要补充的数量 - int additionalAmount = obj.optInt("additionalAmount");//已补充数量 - //已补充 - if(amount <= additionalAmount){ - continue; - } - - int waitAdditionalAmount = (amount - additionalAmount);//待补充数量 - int currentAdditionalAmount = 0; - if(stockAmount < waitAdditionalAmount){ - currentAdditionalAmount = stockAmount; - }else{ - currentAdditionalAmount = waitAdditionalAmount; - } - - SupplementMaterialDetail detail = new SupplementMaterialDetail(); - detail.setAmount(currentAdditionalAmount); - detail.setPrice(price); - detail.setSourceId(id); - detail.setType(PackingTask.TYPE_LOST - .equals(type) ? SupplementMaterialDetail.TYPE_ERROR - : SupplementMaterialDetail.TYPE_DAMAGE); - objectDao.saveOrUpdate(detail); - - JSONObject priceJSON = RecyclingErrorAndDamageUtil.getMaterialPrice(id,detail.getType(),objectDao); - - MaterialErrorDamageDetail materialDetail = getMaterialErrorDamageItem(id); - - if(materialDetail == null){ - throw new RuntimeException("id=" + id + "的丢失项已不存在!"); - } - if(materialDetail.getAmount() == null || materialDetail.getAdditionalAmount() == null){ - throw new RuntimeException("id=" + id + "的丢失项数量为空!"); - } - if(materialDetail.getAmount() <= materialDetail.getAdditionalAmount()){ - throw new RuntimeException("id=" + id + "的丢失项已补充!"); - } - String materialType = obj.optString("materialType"); - String departType = obj.optString("departType"); - materialDetail.setAdditionalAmount(materialDetail.getAdditionalAmount() + currentAdditionalAmount); - materialDetail.setWarehouseId(defaultWarehouse.getId()); - materialDetail.setWarehouseName(defaultWarehouse.getName()); - materialDetail.setDamageErrorDepartType(departType); - materialDetail.setDamageErrorMaterialType(materialType); - materialDetail.setAdditionalTime(additionalTime); - materialDetail.setMaterialCost(priceJSON.optDouble("averagePrice")); - materialDetail.setSettlementPrice(priceJSON.optDouble("settlementPrice")); - - beCleanItemManager.addMaterialToWashBasket( - classifyBasket,materialDetail.getMaterialDefinitionId(), mName, - additionalAmount); - materialDetail.setClassifyBasket(classifyBasket); - objectDao.saveOrUpdate(materialDetail); - obj.put("additionalAmount", additionalAmount + currentAdditionalAmount); - stockAmount -= currentAdditionalAmount; + + int waitAdditionalAmount = (amount - additionalAmount);//待补充数量 + int currentAdditionalAmount = 0; + if(stockAmount < waitAdditionalAmount){ + currentAdditionalAmount = stockAmount; + }else{ + currentAdditionalAmount = waitAdditionalAmount; } + + SupplementMaterialDetail detail = new SupplementMaterialDetail(); + detail.setAmount(currentAdditionalAmount); + detail.setPrice(price); + detail.setSourceId(id); + detail.setType(PackingTask.TYPE_LOST + .equals(type) ? SupplementMaterialDetail.TYPE_ERROR + : SupplementMaterialDetail.TYPE_DAMAGE); + objectDao.saveOrUpdate(detail); + + JSONObject priceJSON = RecyclingErrorAndDamageUtil.getMaterialPrice(id,detail.getType(),objectDao); + + MaterialErrorDamageDetail materialDetail = getMaterialErrorDamageItem(id); + + if(materialDetail == null){ + throw new SystemException("id=" + id + "的丢失项已不存在!"); + } + if(materialDetail.getAmount() == null || materialDetail.getAdditionalAmount() == null){ + throw new SystemException("id=" + id + "的丢失项数量为空!"); + } + if(materialDetail.getAmount() <= materialDetail.getAdditionalAmount()){ + throw new SystemException("id=" + id + "的丢失项已补充!"); + } + String materialType = obj.optString("materialType"); + String departType = obj.optString("departType"); + materialDetail.setAdditionalAmount(materialDetail.getAdditionalAmount() + currentAdditionalAmount); + materialDetail.setWarehouseId(defaultWarehouse.getId()); + materialDetail.setWarehouseName(defaultWarehouse.getName()); + materialDetail.setDamageErrorDepartType(departType); + materialDetail.setDamageErrorMaterialType(materialType); + materialDetail.setAdditionalTime(additionalTime); + materialDetail.setMaterialCost(priceJSON.optDouble("averagePrice")); + materialDetail.setSettlementPrice(priceJSON.optDouble("settlementPrice")); + + beCleanItemManager.addMaterialToWashBasket( + classifyBasket,materialDetail.getMaterialDefinitionId(), mName, + additionalAmount); + materialDetail.setClassifyBasket(classifyBasket); + objectDao.saveOrUpdate(materialDetail); + obj.put("additionalAmount", additionalAmount + currentAdditionalAmount); + stockAmount -= currentAdditionalAmount; } } - if(classifyBasket != null){ - classifyBasketManager.save(classifyBasket); - } } - // 检查材料是否都补充完 - if(packingTask != null){ - if(PackingTask.TYPE_LOST.equals(type)){ - List errors = packingTask.findRecyclingErrors(objectDao); - if(errors != null){ - for (MaterialErrorDamageDetail error : errors) { - if (!error.getAmount().equals(error.getAdditionalAmount())) { - throw new RuntimeException(String.format("%s还未补充完!", - error.getMaterialName())); - } - if (error.isIDCard()) { - continue; - } + if(classifyBasket != null){ + classifyBasketManager.save(classifyBasket); + } + } + // 检查材料是否都补充完 + if(packingTask != null){ + if(PackingTask.TYPE_LOST.equals(type)){ + List errors = packingTask.findRecyclingErrors(objectDao); + if(errors != null){ + for (MaterialErrorDamageDetail error : errors) { + if (!error.getAmount().equals(error.getAdditionalAmount())) { + throw new SystemException(String.format("%s还未补充完!", + error.getMaterialName())); } + if (error.isIDCard()) { + continue; + } } - }else{ - List damages = packingTask.findRecyclingDamages(objectDao); - if(damages != null){ - for (MaterialErrorDamageDetail damage : damages) { - if (!damage.getAmount().equals(damage.getAdditionalAmount())) { - throw new RuntimeException(String.format("%s还未补充完!", - damage.getMaterialName())); - } + } + }else{ + List damages = packingTask.findRecyclingDamages(objectDao); + if(damages != null){ + for (MaterialErrorDamageDetail damage : damages) { + if (!damage.getAmount().equals(damage.getAdditionalAmount())) { + throw new SystemException(String.format("%s还未补充完!", + damage.getMaterialName())); } } } } - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); } } if(packingTask != null){ Index: ssts-web/src/main/webapp/disinfectsystem/recyclingdamagerecord/damageMaterialAdditionalForm.js =================================================================== diff -u -r18491 -r20777 --- ssts-web/src/main/webapp/disinfectsystem/recyclingdamagerecord/damageMaterialAdditionalForm.js (.../damageMaterialAdditionalForm.js) (revision 18491) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingdamagerecord/damageMaterialAdditionalForm.js (.../damageMaterialAdditionalForm.js) (revision 20777) @@ -345,7 +345,7 @@ params : params, success : function(response, options) { var result = Ext.decode(response.responseText); - showResult(result.msg); + showResult(result.message); if(result.success){ additionalMaterialCallback(result.success,type,packingTaskId); @@ -358,7 +358,7 @@ }, failure : function(response, options) { var result = Ext.decode(response.responseText); - showResult(result.msg); + showResult(result.message); } }); } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/materialerrordamage/action/MaterialErrorDamageAction.java =================================================================== diff -u -r19154 -r20777 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/materialerrordamage/action/MaterialErrorDamageAction.java (.../MaterialErrorDamageAction.java) (revision 19154) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/materialerrordamage/action/MaterialErrorDamageAction.java (.../MaterialErrorDamageAction.java) (revision 20777) @@ -28,6 +28,7 @@ import com.forgon.disinfectsystem.materialerrordamage.service.MaterialErrorDamageDetailManager; import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; +import com.forgon.exception.service.ExceptionHandler; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.json.JSONUtil; @@ -47,6 +48,12 @@ private PackingManager packingManager; + private ExceptionHandler exceptionHandler; + + public void setExceptionHandler(ExceptionHandler exceptionHandler) { + this.exceptionHandler = exceptionHandler; + } + public void setPackingManager(PackingManager packingManager) { this.packingManager = packingManager; } @@ -278,16 +285,10 @@ materialErrorDamageDetailManager.materialSupplement(packingTaskId, type, suppleArray,washBasketBarcode); } } catch (Exception e) { - msg = e.getMessage(); + msg = exceptionHandler.handleException(e); success = false; } - HttpServletResponse response = StrutsParamUtils.getResponse(); - try { - response.setCharacterEncoding("utf-8"); - response.getWriter().print("{success:"+success+",msg:'"+msg+"'}"); - } catch (Exception e) { - e.printStackTrace(); - } + StrutsResponseUtils.output(success, msg); } } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/erroranddamage/RecyclingErrorAndDamageTests.java =================================================================== diff -u -r19154 -r20777 --- ssts-web/src/test/java/test/forgon/disinfectsystem/erroranddamage/RecyclingErrorAndDamageTests.java (.../RecyclingErrorAndDamageTests.java) (revision 19154) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/erroranddamage/RecyclingErrorAndDamageTests.java (.../RecyclingErrorAndDamageTests.java) (revision 20777) @@ -2,6 +2,7 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; import java.util.Date; import java.util.List; @@ -29,6 +30,7 @@ import com.forgon.disinfectsystem.materialerrordamage.service.MaterialErrorDamageDetailManager; import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.disinfectsystem.recyclingrecord.service.RecyclingRecordManager; +import com.forgon.exception.SystemException; /** * @author WangYi @@ -150,18 +152,29 @@ MaterialErrorDamageDetail error_镊子 = errors.get(0); assertEquals(error_镊子.getAmount().intValue(), 2); assertEquals(error_镊子.getAdditionalAmount().intValue(), 0); - - //将回收数量由2改成3 - materialErrorDamageDetailManager.save(error_镊子.getId(), 3); - - RecyclingRecord record2= recyclingRecordManager.get(record.getId()); - assertEquals(record2.getStatus(), tousseMaterialsLostMustConfirm?RecyclingRecord.STATUS_UNCONFIRMED:RecyclingRecord.STATUS_CONFIRMED); - - PackingTask packingTask1 = packingManager.get(task_开胸包.getId()); - assertEquals(packingTask1.getStatus(), tousseMaterialsLostMustConfirm?PackingTask.STATUS_AWAIT_VERIFYING:PackingTask.STATUS_AWAIT_PACKING); - assertEquals(error_镊子.getAmount().intValue(), 3); - assertEquals(error_镊子.getAdditionalAmount().intValue(), 0); - + Exception exception = null; + try{ + //将回收数量由2改成3 + materialErrorDamageDetailManager.save(error_镊子.getId(), 3); + + RecyclingRecord record2= recyclingRecordManager.get(record.getId()); + assertEquals(record2.getStatus(), tousseMaterialsLostMustConfirm?RecyclingRecord.STATUS_UNCONFIRMED:RecyclingRecord.STATUS_CONFIRMED); + + PackingTask packingTask1 = packingManager.get(task_开胸包.getId()); + assertEquals(packingTask1.getStatus(), tousseMaterialsLostMustConfirm?PackingTask.STATUS_AWAIT_VERIFYING:PackingTask.STATUS_AWAIT_PACKING); + assertEquals(error_镊子.getAmount().intValue(), 3); + assertEquals(error_镊子.getAdditionalAmount().intValue(), 0); + }catch(SystemException e){ + exception = e; + } + if(CssdUtils.getSystemSetConfigByNameBool("allowPackingWhenUnSupplementMaterial")){ + //不补充也能装配的时候,不能将丢失、报损数量改大 + assertNotNull(exception); + assertEquals(exception.getMessage(), error_镊子.getMaterialName() + "不能改大数量!"); + }else{ + assertNull(exception); + } + //将回收数量由3改成0 materialErrorDamageDetailManager.save(error_镊子.getId(), 0); RecyclingRecord record3= recyclingRecordManager.get(record.getId()); @@ -175,9 +188,10 @@ /** * 场景2:回收后、已补充、未装配修改修改回收误差 * 回收状态、装配状态、库存是否正常 + * @throws Exception */ @Test - public void testRecyclingError2(){ + public void testRecyclingError2() throws Exception{ initCSSDData(); RecyclingRecord record = buildRecyclingRecord(); boolean tousseMaterialsLostMustConfirm = CssdUtils.getSystemSetConfigByNameBool("tousseMaterialsLostMustConfirm",true); @@ -214,24 +228,31 @@ GoodsStock stock_镊子 = buildGoodsStock(md_镊子, 5, 3.8); - String exceptionMsg = ""; - try { - materialErrorDamageDetailManager.materialSupplement("" + task_开胸包.getId(), PackingTask.TYPE_LOST, array, ""); - } catch (Exception e) { - exceptionMsg = e.getMessage(); + materialErrorDamageDetailManager.materialSupplement("" + task_开胸包.getId(), PackingTask.TYPE_LOST, array, ""); + Exception exception = null; + try{ + //将回收数量由2改成3 + materialErrorDamageDetailManager.save(error_镊子.getId(), 3); + + assertEquals(stock_镊子.getAmount().intValue(), 3); + + RecyclingRecord record2= recyclingRecordManager.get(record.getId()); + assertEquals(record2.getStatus(), RecyclingRecord.STATUS_CONFIRMED); + PackingTask packingTask1 = packingManager.get(task_开胸包.getId()); + assertEquals(packingTask1.getStatus(), PackingTask.STATUS_AWAIT_PACKING); + assertEquals(error_镊子.getAmount().intValue(), 3); + assertEquals(error_镊子.getAdditionalAmount().intValue(), 2); + }catch(SystemException e){ + exception = e; } - //将回收数量由2改成3 - materialErrorDamageDetailManager.save(error_镊子.getId(), 3); + if(CssdUtils.getSystemSetConfigByNameBool("allowPackingWhenUnSupplementMaterial")){ + //不补充也能装配的时候,不能将丢失、报损数量改大 + assertNotNull(exception); + assertEquals(exception.getMessage(), error_镊子.getMaterialName() + "不能改大数量!"); + }else{ + assertNull(exception); + } - assertEquals(stock_镊子.getAmount().intValue(), 3); - - RecyclingRecord record2= recyclingRecordManager.get(record.getId()); - assertEquals(record2.getStatus(), RecyclingRecord.STATUS_CONFIRMED); - PackingTask packingTask1 = packingManager.get(task_开胸包.getId()); - assertEquals(packingTask1.getStatus(), PackingTask.STATUS_AWAIT_PACKING); - assertEquals(error_镊子.getAmount().intValue(), 3); - assertEquals(error_镊子.getAdditionalAmount().intValue(), 2); - //将回收数量由3改成0 materialErrorDamageDetailManager.save(error_镊子.getId(), 0); @@ -254,9 +275,10 @@ /** * 场景3:回收后、已补充、已装配修改修改回收误差 * 回收状态、装配状态、库存是否正常 + * @throws Exception */ @Test - public void testRecyclingError3(){ + public void testRecyclingError3() throws Exception{ initCSSDData(); RecyclingRecord record = buildRecyclingRecord(); boolean tousseMaterialsLostMustConfirm = CssdUtils.getSystemSetConfigByNameBool("tousseMaterialsLostMustConfirm",true); @@ -291,24 +313,33 @@ obj.put("materialDefinitionId", md_镊子.getId()); array.add(obj); GoodsStock stock_镊子 = buildGoodsStock(md_镊子, 5, 3.8); - String exceptionMsg = ""; - try { - materialErrorDamageDetailManager.materialSupplement("" + task_开胸包.getId(), PackingTask.TYPE_LOST, array, ""); - } catch (Exception e) { - exceptionMsg = e.getMessage(); - } + + materialErrorDamageDetailManager.materialSupplement("" + task_开胸包.getId(), PackingTask.TYPE_LOST, array, ""); + //装配 packingManager.delete(task_开胸包, ""); - //将回收数量由2改成3 - materialErrorDamageDetailManager.save(error_镊子.getId(), 3); + Exception exception = null; + try{ + //将回收数量由2改成3 + materialErrorDamageDetailManager.save(error_镊子.getId(), 3); + + assertEquals(stock_镊子.getAmount().intValue(), 3); + + RecyclingRecord record2= recyclingRecordManager.get(record.getId()); + assertEquals(record2.getStatus(), RecyclingRecord.STATUS_CONFIRMED); + assertEquals(error_镊子.getAmount().intValue(), 3); + assertEquals(error_镊子.getAdditionalAmount().intValue(), 2); + }catch(SystemException e){ + exception = e; + } + if(CssdUtils.getSystemSetConfigByNameBool("allowPackingWhenUnSupplementMaterial")){ + //不补充也能装配的时候,不能将丢失、报损数量改大 + assertNotNull(exception); + assertEquals(exception.getMessage(), error_镊子.getMaterialName() + "不能改大数量!"); + }else{ + assertNull(exception); + } - assertEquals(stock_镊子.getAmount().intValue(), 3); - - RecyclingRecord record2= recyclingRecordManager.get(record.getId()); - assertEquals(record2.getStatus(), RecyclingRecord.STATUS_CONFIRMED); - assertEquals(error_镊子.getAmount().intValue(), 3); - assertEquals(error_镊子.getAdditionalAmount().intValue(), 2); - //将回收数量由3改成0 materialErrorDamageDetailManager.save(error_镊子.getId(), 0); @@ -360,15 +391,27 @@ assertEquals(error_镊子.getAmount().intValue(), 2); assertEquals(error_镊子.getAdditionalAmount().intValue(), 0); - //将回收数量由2改成3 - materialErrorDamageDetailManager.save(error_镊子.getId(), 3); + Exception exception = null; + try{ + //将回收数量由2改成3 + materialErrorDamageDetailManager.save(error_镊子.getId(), 3); + }catch(SystemException e){ + exception = e; + } + if(CssdUtils.getSystemSetConfigByNameBool("allowPackingWhenUnSupplementMaterial")){ + //不补充也能装配的时候,不能将丢失、报损数量改大 + assertNotNull(exception); + assertEquals(exception.getMessage(), error_镊子.getMaterialName() + "不能改大数量!"); + }else{ + assertNull(exception); + } //补充器械 JSONArray array = new JSONArray(); JSONObject obj = new JSONObject(); obj.put("id", error_镊子.getId()); obj.put("materialName", CssdUtils.getMaterialName(md_镊子)); - obj.put("amount", 2); + obj.put("amount", exception == null?2:1);//exception不为null,那数量就是2,补充1个,否则 就是3个,补充2个,就都是未补充完 obj.put("materialDefinitionId", md_镊子.getId()); array.add(obj); @@ -378,6 +421,7 @@ try { materialErrorDamageDetailManager.materialSupplement("" + task_开胸包.getId(), PackingTask.TYPE_LOST, array, ""); } catch (Exception e) { + e.printStackTrace(); exceptionMsg = e.getMessage(); }