Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java =================================================================== diff -u -r17305 -r17313 --- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java (.../ReturnGoodsRecordAction.java) (revision 17305) +++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java (.../ReturnGoodsRecordAction.java) (revision 17313) @@ -29,6 +29,7 @@ import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseDefinitionUtils; import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; @@ -270,7 +271,7 @@ // 是否为器械包 boolean isTousse = "true".equals(StrutsParamUtils.getPraramValue( "isTousse", "")); - Map returnMsg = new HashMap(); + JSONObject returnMsg = new JSONObject(); returnMsg.put("success", false); if (StringUtils.isNotBlank(barcode)) { try { @@ -282,10 +283,15 @@ //msg = "false#&找不到该条码所应的器械包"; returnMsg.put("errMsg", "找不到该条码所应的器械包"); } else { + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + if(tousseDefinition == null){ + throw new RuntimeException("包定义已不存在!"); + } String tousseType = tousseInstance.getTousseDefinition() .getTousseType(); boolean isFixedBarcodeTousseInstance = TousseInstanceUtils.isFixedBarcodeTousseInstance(tousseInstance); - + Double fluctuationPrice = tousseInstance.getFluctuationPrice(); + Double price = tousseInstance.getPrice(); if(!isFixedBarcodeTousseInstance){ if (!TousseDefinition.PACKAGE_TYPE_INSIDE .equals(tousseType) && !TousseDefinition.PACKAGE_TYPE_DRESSING @@ -304,13 +310,24 @@ // 验证是否已发货 throw new RuntimeException(String.format("%s为 %s状态,不能退货!", tousseInstance.getTousseName(),tousseInstance.getStatus())); } + }else{ + if(tousseDefinition.isDisinfection()){ + price = TousseDefinitionUtils.getTousseDefinitionPrice(tousseDefinition); + fluctuationPrice = supplyRoomConfigManager.getTousseFluctuationPrice(price); + } } returnMsg.put("success", true); // // 设置结算科室 // String settleAccountsDepart = TousseInstanceUtils.getSettleAccountsDepartFromInvoice(tousseInstance.getId().toString(), objectDao); // tousseInstance.setSettleAccountsDepart(settleAccountsDepart); - returnMsg.put("tousseInstance", tousseInstance); + + String tousseJsonStr = JSONUtil.toJSONStringEx(tousseInstance,true,TousseInstance.filterProperties); + JSONObject tousseJson = JSONObject.fromObject(tousseJsonStr); + + tousseJson.put("price", price); + tousseJson.put("fluctuationPrice", fluctuationPrice); + returnMsg.put("tousseInstance", tousseJson); // msg = "true#&" // + tousseInstance.getTousseDefinition() // .getName() + "#&" @@ -329,8 +346,7 @@ try { StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); if(isTousse){ - String jsonStr = JSONUtil.toJSONStringEx(returnMsg,true,TousseInstance.filterProperties); - StrutsParamUtils.getResponse().getWriter().print(jsonStr); + StrutsParamUtils.getResponse().getWriter().print(returnMsg.toString()); }else{ // 一次性物品 @@ -648,30 +664,65 @@ } returnTousseItem.setTousseDefinition(tousseDefinition); returnTousseItem.setAmount(currentAmount); - returnTousseItem.setPrice(tousseDefinition.getPrice()); + Double definitionPrice = tousseDefinition.getPrice(); + if(tousseDefinition.isDisinfection()){ + definitionPrice = TousseDefinitionUtils.getTousseDefinitionPrice(tousseDefinition); + } + returnTousseItem.setPrice(definitionPrice); // 统计方式 returnTousseItem.setMaterialAmount(tousseDefinition .getTousseAmount()); - Double fluctuationPrice = supplyRoomConfigManager.getTousseFluctuationPrice(tousseDefinition.getPrice()); - returnTousseItem.setFluctuationPrice(fluctuationPrice); + Double definitionFluctuationPrice = supplyRoomConfigManager.getTousseFluctuationPrice(definitionPrice); + returnTousseItem.setFluctuationPrice(definitionFluctuationPrice); + BigDecimal settlementFluctuationPrice = new BigDecimal(0.00); BigDecimal settlementPrice = new BigDecimal(0.00); // 物品统计总价 - settlementPrice = MathTools.mul(fluctuationPrice, currentAmount); - returnTousseItem.setSettlementPrice(settlementPrice); +// settlementFluctuationPrice = MathTools.mul(definitionFluctuationPrice, currentAmount); + returnTousseItem.setIsDelivery("是" .equals(returnTousseItemDetailArr[3]) ? "是" : "否"); returnTousseItem.setIsPacking("是" .equals(returnTousseItemDetailArr[4]) ? "是" : "否"); int len = returnTousseItemDetailArr.length; + + List tousseInstances = new ArrayList(); + int tousseAmount = 0; if (len >= 7) { - List tousseInstances = new ArrayList(); + for (int k = 6; k < len; k++) { tousseInstances .add(tousseInstanceManager .getTousseInstanceByBarcode(returnTousseItemDetailArr[k])); } returnTousseItem.setTousseInstanceList(tousseInstances); + tousseAmount = tousseInstances.size(); } + if(tousseAmount > currentAmount){ + throw new RuntimeException("参数错误"); + } + boolean reSetPrice = false; + // 有包实例时重新计算价格 + for (TousseInstance tousseInstance : tousseInstances) { + Double toussePrice = tousseInstance.getPrice(); + Double tousseFluctuationPrice = tousseInstance.getFluctuationPrice(); + + settlementPrice = settlementPrice.add(MathTools.mul(toussePrice, 1)); + settlementFluctuationPrice = settlementFluctuationPrice.add(MathTools.mul(tousseFluctuationPrice, 1)); + + if(!toussePrice.equals(definitionPrice) || !tousseFluctuationPrice.equals(definitionFluctuationPrice)){ + reSetPrice = true; + } + } + int tousseDefinitionAmount = currentAmount - tousseAmount; + settlementPrice = settlementPrice.add(MathTools.mul(definitionPrice, tousseDefinitionAmount)); + settlementFluctuationPrice = settlementFluctuationPrice.add(MathTools.mul(definitionFluctuationPrice, tousseDefinitionAmount)); + + returnTousseItem.setSettlementPrice(settlementFluctuationPrice); + // 重新设置价格 + if(reSetPrice){ + returnTousseItem.setFluctuationPrice(settlementFluctuationPrice.doubleValue()/currentAmount); + returnTousseItem.setPrice(settlementPrice.doubleValue()/currentAmount); + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java =================================================================== diff -u -r16258 -r17313 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java (.../TousseDefinitionUtils.java) (revision 16258) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java (.../TousseDefinitionUtils.java) (revision 17313) @@ -4,16 +4,37 @@ */ package com.forgon.disinfectsystem.basedatamanager.toussedefinition.service; +import java.io.File; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.lang.StringUtils; + +import com.forgon.Constants; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; +import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; +import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinitionMaterial; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.log.model.Log; +import com.forgon.serialnumber.model.SerialNum; +import com.forgon.tools.GB2Alpha; +import com.forgon.tools.GB2WB; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; /** * @author jeffli @@ -133,4 +154,66 @@ } return false; } + + public static Double getTousseDefinitionPrice(TousseDefinition td) { + + List materialInstanceList = td.getMaterialInstances(); + + List diposableGoodsItems = td + .getDiposableGoodsItems(); + String tousseType = td.getTousseType(); + Double price = 0.0; + + if (materialInstanceList != null) { + for (MaterialInstance materialInstance : materialInstanceList) { + + MaterialDefinition materialDefinition = materialInstance + .getMaterialDefinition(); + if (materialDefinition == null) { + continue; + } + // 外来器械材料申请数量和回收数量分开 + Integer applyAmount = materialInstance.getApplyAmount(); + if (applyAmount == null) { + applyAmount = 0; + } + int count = Math.max(materialInstance.getCount(), applyAmount); + + // 给器械包添加价格如果是消毒物品则加上消毒价格,如果需要灭菌则加上灭菌价格 + Double materialPrice = 0.0; + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION + .equals(tousseType) + && materialDefinition.getDisinfectionPrice() != null) { + materialPrice = materialDefinition.getDisinfectionPrice(); + } else if (TousseDefinition.PACKAGE_TYPE_STERILIZATION + .equals(tousseType) + && materialDefinition.getSterilizationPrice() != null) { + materialPrice = materialDefinition.getSterilizationPrice(); + } + price = new BigDecimal(price.toString()).add( + new BigDecimal(count).multiply(new BigDecimal( + materialPrice.toString()))).doubleValue(); + + } + } + if (diposableGoodsItems != null) { + for (DiposableGoodsInstance diposableGoodsInstance : diposableGoodsItems) { + int count = diposableGoodsInstance.getAmount(); + DisposableGoods disposableGoods = diposableGoodsInstance + .getDiposableGoods(); + + Double referencePrice = 0.0; + if (disposableGoods != null + && disposableGoods.getReferencePrice() != null) { + referencePrice = disposableGoods.getReferencePrice(); + } + price = new BigDecimal(price.toString()).add( + new BigDecimal(count).multiply(new BigDecimal( + referencePrice.toString()))).doubleValue(); + + } + } + + return price; + } }