Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java =================================================================== diff -u -r19903 -r20027 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java (.../TousseDefinition.java) (revision 19903) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java (.../TousseDefinition.java) (revision 20027) @@ -1,5 +1,6 @@ package com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition; +import java.math.BigDecimal; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; @@ -34,7 +35,9 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.forgon.Constants; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.basedatamanager.imagefilemanager.ImageFile; +import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.videomanager.VideoFile; import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; @@ -1164,7 +1167,9 @@ this.materialsMD5 = materialsMD5; } - // 暂时按照材料名字和数量来生成,不用材料的id + /** + * 暂时按照材料名字和数量来生成,不用材料的id + */ public void generateMaterialsMD5() { materialsMD5 = ""; if (materialInstances == null) { @@ -1215,6 +1220,44 @@ } } + /** + * 计算消毒物的价格(注:如果材料类型为器械以“材料的消毒价格”为准,如果是一次性物品则以“一次性物品的参考价”为准). + * @return + */ + public Double calculateDisinfectionPrice() { + Double totalPrice = 0.0D; + if (isDisinfection()) { + //1、计算器械材料总价 + List materialInstances = getMaterialInstances(); + for (MaterialInstance materialInstance : materialInstances) { + MaterialDefinition materialDefinition = materialInstance.getMaterialDefinition(); + if (materialDefinition != null) { + Integer count = materialInstance.getCount(); + Double disinfectionPrice = materialDefinition.getDisinfectionPrice(); + if (count != null && disinfectionPrice != null) { + totalPrice = new BigDecimal(totalPrice.toString()).add( + new BigDecimal(count).multiply(new BigDecimal(disinfectionPrice.toString()))).doubleValue(); + } + } + } + + //2、计算一次性物品材料总价 + List diposableGoodsItems2 = getDiposableGoodsItems(); + for (DiposableGoodsInstance diposableGoodsInstance : diposableGoodsItems2) { + DisposableGoods diposableGoods = diposableGoodsInstance.getDiposableGoods(); + if (diposableGoods != null) { + Integer amount = diposableGoodsInstance.getAmount(); + Double referencePrice = diposableGoods.getReferencePrice(); + if (amount != null && referencePrice != null) { + totalPrice = new BigDecimal(totalPrice.toString()).add( + new BigDecimal(amount).multiply(new BigDecimal(referencePrice.toString()))).doubleValue(); + } + } + } + } + return totalPrice; + } + public String getAutoOutStockForPacking() { return autoOutStockForPacking; } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r20018 -r20027 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 20018) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 20027) @@ -467,34 +467,30 @@ } materialInstances.add(materialInstance); - // 给器械包添加价格如果是消毒物品则加上消毒价格 - Double materialPrice = 0.0; - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION - .equals(tousseType) + //消毒物品申请单保存的每一个消毒物品的价格 = 此消毒物品里面的材料的总价(注:如果材料类型为器械以“材料的消毒价格”为准,如果是一次性物品则以“一次性物品的参考价”为准) + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType) && materialDefinition.getDisinfectionPrice() != null) { - materialPrice = materialDefinition - .getDisinfectionPrice(); + Double materialPrice = materialDefinition.getDisinfectionPrice(); + price = new BigDecimal(price.toString()).add( + new BigDecimal(count).multiply(new BigDecimal( + materialPrice.toString()))).doubleValue(); } - price = new BigDecimal(price.toString()).add( - new BigDecimal(count).multiply(new BigDecimal( - materialPrice.toString()))).doubleValue(); } else if ("一次性物品".equals(type)) { DiposableGoodsInstance diposableGoodsInstance = new DiposableGoodsInstance(); - DisposableGoods disposableGoods = diposableGoodsManager - .get(goodsName, specification); + DisposableGoods disposableGoods = diposableGoodsManager.get(goodsName, specification); diposableGoodsInstance.setDiposableGoods(disposableGoods); diposableGoodsInstance.setAmount(Integer.valueOf(count)); diposableGoodsInstance.setSequence(sequence); diposableGoodsInstance.setTousse(td); diposableGoodsInstances.add(diposableGoodsInstance); - Double referencePrice = 0.0; + //消毒物品申请单保存的每一个消毒物品的价格 = 此消毒物品里面的材料的总价(注:如果材料类型为器械以“材料的消毒价格”为准,如果是一次性物品则以“一次性物品的参考价”为准) if (disposableGoods != null && disposableGoods.getReferencePrice() != null) { - referencePrice = disposableGoods.getReferencePrice(); + Double referencePrice = disposableGoods.getReferencePrice(); + price = new BigDecimal(price.toString()).add( + new BigDecimal(count).multiply(new BigDecimal( + referencePrice.toString()))).doubleValue(); } - price = new BigDecimal(price.toString()).add( - new BigDecimal(count).multiply(new BigDecimal( - referencePrice.toString()))).doubleValue(); } } td.setIncludeImplant(includeImplantFlag); @@ -1666,7 +1662,7 @@ JSONObject obj = new JSONObject(); obj.put("name", name); - + obj.put("materialDefinitionId", materialDefinition.getId()); //材料id obj.put("tousseType", MaterialInstance.MATERIAL_TYPE_INSTRUMENT); obj.put("isDiposable", "否"); @@ -1675,6 +1671,7 @@ if (displayMaterialAmount){ double totalPrice = MathTools.mul(price, count).doubleValue(); obj.put("count", count); + obj.put("countBackup", count); //申请的数量备份起来 obj.put("totalPrice", totalPrice); }else{ obj.put("count", ""); Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsApplicationForm.js =================================================================== diff -u -r19992 -r20027 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsApplicationForm.js (.../goodsApplicationForm.js) (revision 19992) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsApplicationForm.js (.../goodsApplicationForm.js) (revision 20027) @@ -586,7 +586,7 @@ return false; } - if (isInterveneAmount && ('urgentAmount' == context.field || depth == 2)){ //干预的操作,不让修改加急数量和材料数量 + if (isInterveneAmount && 'urgentAmount' == context.field){ //干预的操作,不让修改加急数量 return false; } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r19992 -r20027 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 19992) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 20027) @@ -5196,14 +5196,63 @@ if (DatabaseUtil.isPoIdValid(tousseItemId)) { TousseItem tousseItem = tousseItemManager.get(tousseItemId); if (tousseItem != null) { - Integer amount = tousseItemVo.getAmount(); - Integer originalAmount = tousseItem.getAmount(); - if (amount != null && originalAmount != null && originalAmount > amount) { //只管“原来申请数量”大于“此次修改的数量的项 - tousseItem.setAmount(amount); - if (com.forgon.Constants.STR_YES.equals(tousseItem.getIsRecycling())) { //需要回收的项,发货以回收数量为准 - tousseItem.setRecyclingAmount(amount); + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseItemVo.getTousseType()) + && com.forgon.Constants.STR_NO.equals(tousseItemVo.getIsApplyEntireTousse())) { + Long tousseDefinitionId = tousseItem.getTousseDefinitionId(); + if (DatabaseUtil.isPoIdValid(tousseDefinitionId)) { + TousseDefinition tousseDefinition = tousseDefinitionManager.get(tousseDefinitionId); + if (tousseDefinition != null + && StringTools.isNotBlank(tousseItemVo.getDisinfectMaterilas())) { + String materialStr = tousseItemVo.getDisinfectMaterilas(); + if (materialStr.startsWith("\"")){ + materialStr = materialStr.substring(1,materialStr.length() - 1); + + materialStr = materialStr.replace("\\\\", "\\"); + materialStr = materialStr.replace("\\\"", "\""); + } + + JSONArray materialArry = JSONArray.fromObject(materialStr); + List materialInstances = tousseDefinition.getMaterialInstances(); + boolean flag = false; + for (Object object : materialArry) { + JSONObject obj = (JSONObject)object; + Long materialDefinitionId = obj.optLong("materialDefinitionId"); + Integer count = obj.optInt("count"); + for (MaterialInstance materialInstance : materialInstances) { + if (materialDefinitionId.equals(materialInstance.getMaterialDefinitionId()) + && !count.equals(materialInstance.getCount())) { + remark += String.format("器械(%s)申请数量从%s改成%s;", materialInstance.getMaterialName(), materialInstance.getCount(), count); + materialInstance.setCount(count); + objectDao.saveOrUpdate(materialInstance); + flag = true; + break; + } + } + } + + if (flag) { //重新计算算“材料的MD5”和“价格” + tousseDefinition.generateMaterialsMD5(); + tousseDefinition.setPrice(tousseDefinition.calculateDisinfectionPrice()); + List tousseInstances = tousseInstanceManager.getTousseInstanceBySql(String.format("where po.tousseDefinition.id=%s", tousseDefinition.getId())); + if (CollectionUtils.isNotEmpty(tousseInstances)) { + for (TousseInstance tousseInstance : tousseInstances) { + tousseInstance.setPrice(tousseDefinition.getPrice()); + tousseInstance.setFluctuationPrice(supplyRoomConfigManager.getTousseFluctuationPrice(tousseDefinition.getPrice())); + } + } + } + } } - remark += String.format("物品(%s)申请数量从%s改成%s;", tousseItem.getTousseName(), originalAmount, amount); + } else { + Integer amount = tousseItemVo.getAmount(); + Integer originalAmount = tousseItem.getAmount(); + if (amount != null && originalAmount != null && originalAmount > amount) { //只管“原来申请数量”大于“此次修改的数量的项 + tousseItem.setAmount(amount); + if (com.forgon.Constants.STR_YES.equals(tousseItem.getIsRecycling())) { //需要回收的项,发货以回收数量为准 + tousseItem.setRecyclingAmount(amount); + } + remark += String.format("物品(%s)申请数量从%s改成%s;", tousseItem.getTousseName(), originalAmount, amount); + } } list.add(tousseItem); }