Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java =================================================================== diff -u -r13656 -r13899 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 13656) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 13899) @@ -70,7 +70,7 @@ public List loadToussePrintData(String departCoding); - public List getDisinfectGoodsPrintData(String departCoding); + public Collection getDisinfectGoodsPrintData(String departCoding); public List getDiposableGoodsPrintData(String departCoding); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java =================================================================== diff -u -r13683 -r13899 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 13683) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 13899) @@ -222,5 +222,11 @@ * @param materialInstanceStr */ public void addCssdHandleToussesConfig(TousseDefinition tousseDefinition); + /** + * 获取消毒物品中材料的信息,如材料的描述(湿化瓶x3;湿化瓶芯x2),还有总金额,总数量及单价 + * @param tousseDefinition 消毒物品的包定义,对于拆包申请的,只能使用生成的包定义 + * @return + */ + public JSONObject getDisinfectionMaterialInfo(TousseDefinition tousseDefinition); } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r13890 -r13899 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 13890) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 13899) @@ -110,6 +110,7 @@ import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.GsonUtil; import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.string.StringTools; import com.forgon.tools.util.SqlUtils; import com.google.gson.Gson; import com.google.gson.JsonArray; @@ -756,7 +757,7 @@ * @return */ @Override - public List getDisinfectGoodsPrintData(String departCoding) { + public Collection getDisinfectGoodsPrintData(String departCoding) { String sql = " where 1=1 and po.isPrint = '" + Invoice.PRINT_NO + "' "; if (StringUtils.isNotBlank(departCoding)) { sql += "and po.invoicePlan.departCoding = '" + departCoding + "'"; @@ -765,101 +766,61 @@ + InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM + "' order by po.sendTime asc"; List list = findBySql(sql); - Map> map = new HashMap>(); - if (list != null) { - for (Invoice invoice : list) { - List tousseList = invoice.getTousseInstances(objectDao); - for (TousseInstance tousseInstance : tousseList) { - String operationTime = new SimpleDateFormat("yyyy-MM-dd") - .format(tousseInstance.getOperationTime());// 消毒日期 - String validUntil = ""; - Date validUntil2 = tousseInstance.getValidUntil(); - if (validUntil2 != null) { - validUntil = new SimpleDateFormat("yyyy-MM-dd") - .format(validUntil2);// 失效日期 - } - - TousseDefinition tousseDefinition = tousseInstance - .getTousseDefinition(); - List materialList = tousseDefinition.getMaterialInstances(); - for (MaterialInstance materialInstance : materialList) { - String materialName = materialInstance - .getMaterialName(); - int amount = materialInstance.getCount(); - Double price = 0.00; - Double totalPrice = 0.00; - // 消毒物品价格 - MaterialDefinition materialDefinition = materialInstance.getMaterialDefinition(); - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION - .equals(tousseDefinition - .getTousseType())) { - price = materialDefinition - .getDisinfectionPrice(); - // 灭菌物品价格 - } else { - price = materialDefinition - .getSterilizationPrice(); - } - if (price == null) { - price = 0.00; - } - totalPrice = MathTools.mul(price, amount, 2); - merge(map, operationTime, validUntil, materialName, amount, price, totalPrice, materialName); -// List voList = map.get(materialName); -// // 合并名称相同的物品,消毒日期、失效日期、单价相同的才合并 -// if (voList != null) { -// InvoicePrintVo tempVo = null; -// for (InvoicePrintVo vo : voList) { -// if (vo.getFrequency().equals(price) -// && vo.getSterilizationdate().equals( -// operationTime) -// && vo.getSterilizerName().equals( -// validUntil)) { -// tempVo = vo; -// break; -// } -// } -// if (tempVo != null) { -// tempVo.setAmount(tempVo.getAmount() + amount); -// tempVo.setTotalPrice(tempVo.getTotalPrice() -// + totalPrice); -// } else { -// tempVo = new InvoicePrintVo(); -// tempVo.setMaterialAmount(amount); -// tempVo.setMaterialName(materialName); -// tempVo.setMaterialPrice(price); -// tempVo.setOperationTime(operationTime); -// tempVo.setValidUntil(validUntil); -// tempVo.setMaterialTotalPrice(totalPrice); -// voList.add(tempVo); -// } + return getDisinfectGoodsPrintData(list); +// Map> map = new HashMap>(); +// if (list != null) { +// for (Invoice invoice : list) { +// List tousseList = invoice.getTousseInstances(objectDao); +// for (TousseInstance tousseInstance : tousseList) { +// String operationTime = new SimpleDateFormat("yyyy-MM-dd") +// .format(tousseInstance.getOperationTime());// 消毒日期 +// String validUntil = ""; +// Date validUntil2 = tousseInstance.getValidUntil(); +// if (validUntil2 != null) { +// validUntil = new SimpleDateFormat("yyyy-MM-dd") +// .format(validUntil2);// 失效日期 +// } +// +// TousseDefinition tousseDefinition = tousseInstance +// .getTousseDefinition(); +// List materialList = tousseDefinition.getMaterialInstances(); +// for (MaterialInstance materialInstance : materialList) { +// String materialName = materialInstance +// .getMaterialName(); +// int amount = materialInstance.getCount(); +// Double price = 0.00; +// Double totalPrice = 0.00; +// // 消毒物品价格 +// MaterialDefinition materialDefinition = materialInstance.getMaterialDefinition(); +// if (TousseDefinition.PACKAGE_TYPE_DISINFECTION +// .equals(tousseDefinition +// .getTousseType())) { +// price = materialDefinition +// .getDisinfectionPrice(); +// // 灭菌物品价格 // } else { -// voList = new ArrayList(); -// InvoicePrintVo tempVo = new InvoicePrintVo(); -// tempVo = new InvoicePrintVo(); -// tempVo.setMaterialAmount(amount); -// tempVo.setMaterialName(materialName); -// tempVo.setMaterialPrice(price); -// tempVo.setOperationTime(operationTime); -// tempVo.setValidUntil(validUntil); -// tempVo.setMaterialTotalPrice(totalPrice); -// voList.add(tempVo); -// map.put(tousseInstance.getTousseName(), voList); +// price = materialDefinition +// .getSterilizationPrice(); // } - } - } - } - } - Iterator iterator = map.keySet().iterator(); - List returnList = new ArrayList(); - while (iterator.hasNext()) { - String tousseName = iterator.next(); - List voList = map.get(tousseName); - for (InvoicePrintVo invoicePrintVo : voList) { - returnList.add(invoicePrintVo); - } - } - return returnList; +// if (price == null) { +// price = 0.00; +// } +// totalPrice = MathTools.mul(price, amount, 2); +// merge(map, operationTime, validUntil, materialName, amount, price, totalPrice, materialName); +// } +// } +// } +// } +// Iterator iterator = map.keySet().iterator(); +// List returnList = new ArrayList(); +// while (iterator.hasNext()) { +// String tousseName = iterator.next(); +// List voList = map.get(tousseName); +// for (InvoicePrintVo invoicePrintVo : voList) { +// returnList.add(invoicePrintVo); +// } +// } +// return returnList; } /** @@ -4726,7 +4687,7 @@ if(CollectionUtils.isEmpty(invoices)) return CollectionUtils.emptyCollection(); - Map> map = new HashMap>(); + Map map = new HashMap(); for (Invoice invoice : invoices) { List tousseList = invoice.getTousseInstances(objectDao); for (TousseInstance tousseInstance : tousseList) { @@ -4741,93 +4702,118 @@ if (expireDate != null){ expireDateStr = Constants.SIMPLEDATEFORMAT_YYYYMMDD.format(expireDate); } - - List materialList = tousseDefinition.getMaterialInstances(); - for (MaterialInstance materialInstance : materialList) { - String materialName = materialInstance.getMaterialName(); - int amount = materialInstance.getCount(); - Double price = 0.00; - Double totalPrice = 0.00; - // 消毒物品价格 - MaterialDefinition materialDefinition = materialInstance.getMaterialDefinition(); - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION - .equals(tousseDefinition - .getTousseType())) { - price = materialDefinition - .getDisinfectionPrice(); - // 灭菌物品价格 - } else { - price = materialDefinition - .getSterilizationPrice(); + String keyName = tousseInstance.getTousseName(); + keyName = CssdUtils.filterDisinfectGoodsName(keyName); + JSONObject materialJson = tousseDefinitionManager.getDisinfectionMaterialInfo(tousseDefinition); + + InvoicePrintVo invoicePrintVo = map.get(keyName); + if(invoicePrintVo == null){ + invoicePrintVo = new InvoicePrintVo(); + invoicePrintVo.setName(keyName); + invoicePrintVo.setMaterialName(keyName); + invoicePrintVo.setMaterialPrice(materialJson.getDouble("price")); + invoicePrintVo.setOperationTime(operationTime); + invoicePrintVo.setValidUntil(expireDateStr); + invoicePrintVo.setExpireDate(expireDateStr); + invoicePrintVo.setMaterialTotalPrice(materialJson.getDouble("totalPrice")); + invoicePrintVo.setSpecification(materialJson.getString("materialStr")); + invoicePrintVo.setSterilizerName(tousseInstance.getSterilizerName()); + invoicePrintVo.setFrequency(tousseInstance.getSterileFrequency()); + if(tousseDefinition.applyEntireTousse()){ + invoicePrintVo.setPrice(materialJson.getDouble("totalPrice")); + }else{ + invoicePrintVo.setPrice(materialJson.getDouble("price")); } - if (price == null) { - price = 0.00; - } - totalPrice = MathTools.mul(price, amount, 2); - - //String keyName = tousseInstance.getTousseName(); - //keyName = CssdUtils.filterDisinfectGoodsName(keyName); - - merge(map, operationTime, expireDateStr, materialName, - amount, price, totalPrice, materialName); + map.put(keyName, invoicePrintVo); } + if(tousseDefinition.applyEntireTousse()){ + invoicePrintVo.setAmount(MathTools.add(invoicePrintVo.getAmount(), 1).intValue()); + }else{ + invoicePrintVo.setAmount(MathTools.add(invoicePrintVo.getAmount(), materialJson.getInt("totalAmout")).intValue()); + } + invoicePrintVo.setMaterialAmount(MathTools.add(invoicePrintVo.getAmount(), materialJson.getInt("totalAmout")).intValue()); + invoicePrintVo.setTotalPrice(MathTools.add(invoicePrintVo.getTotalPrice(), materialJson.getDouble("totalPrice")).doubleValue()); + +// List materialList = tousseDefinition.getMaterialInstances(); +// for (MaterialInstance materialInstance : materialList) { +// String materialName = materialInstance.getMaterialName(); +// int amount = materialInstance.getCount(); +// +// Double totalPrice = 0.00; +// // 消毒物品价格 +// Double price = materialInstance.getMaterialDefinition().getDisinfectionPrice(); +// if (price == null) { +// price = 0.00; +// } +// totalPrice = MathTools.mul(price, amount, 2); +// +//// String keyName = tousseInstance.getTousseName(); +//// keyName = CssdUtils.filterDisinfectGoodsName(keyName); +//// +//// merge(map, operationTime, expireDateStr, materialName, +//// amount, price, totalPrice, keyName); +// } } } + return SummaryInvoicePrintData(map); + } + + private Collection SummaryInvoicePrintData( + Map map) { Iterator iterator = map.keySet().iterator(); Collection returnList = new ArrayList(); while (iterator.hasNext()) { String tousseName = iterator.next(); - List voList = map.get(tousseName); - for (InvoicePrintVo invoicePrintVo : voList) { - returnList.add(invoicePrintVo); - } + InvoicePrintVo vo = map.get(tousseName); + returnList.add(vo); } return returnList; } - private void merge(Map> map, - String operationTime, String expireDateStr, String materialName, - int amount, Double price, Double totalPrice, String keyName) { - List voList = map.get(keyName); - - if(voList == null){ - voList = new ArrayList(); - map.put(keyName, voList); - } - // 合并名称相同的物品,消毒日期、失效日期、单价相同的才合并 - InvoicePrintVo tempVo = null; - for (InvoicePrintVo vo : voList) { - if (vo.getPrice().equals(price) - && vo.getOperationTime().equals( - operationTime) - && vo.getExpireDate().equals( - expireDateStr)) { - tempVo = vo; - break; - } - } - if (tempVo != null) { - tempVo.setAmount(MathTools.add(tempVo.getAmount(), amount).intValue()); - tempVo.setMaterialAmount(MathTools.add(tempVo.getMaterialAmount(), amount).intValue()); - tempVo.setTotalPrice(MathTools.add(tempVo.getTotalPrice(),totalPrice).doubleValue()); - tempVo.setMaterialTotalPrice(MathTools.add(tempVo.getMaterialTotalPrice(), totalPrice).doubleValue()); - } else { - tempVo = new InvoicePrintVo(); - tempVo.setName(materialName); - tempVo.setMaterialName(materialName); - tempVo.setAmount(amount); - tempVo.setMaterialAmount(amount); - tempVo.setMaterialPrice(price); - tempVo.setPrice(price); - tempVo.setOperationTime(operationTime); - tempVo.setValidUntil(expireDateStr); - tempVo.setExpireDate(expireDateStr); - tempVo.setMaterialTotalPrice(totalPrice); - tempVo.setTotalPrice(totalPrice); - voList.add(tempVo); - } - } +// private void merge(Map> map, +// String operationTime, String expireDateStr, String materialName, +// int amount, Double price, Double totalPrice, String keyName) { +// List voList = map.get(keyName); +// +// if(voList == null){ +// voList = new ArrayList(); +// map.put(keyName, voList); +// } +// // 合并名称相同的物品,消毒日期、失效日期、单价相同的才合并 +// InvoicePrintVo tempVo = null; +// for (InvoicePrintVo vo : voList) { +// if (StringTools.equals(materialName, vo.getName()) +// && vo.getPrice().equals(price) +// && vo.getOperationTime().equals( +// operationTime) +// && vo.getExpireDate().equals( +// expireDateStr)) { +// tempVo = vo; +// break; +// } +// } +// if (tempVo != null) { +// tempVo.setAmount(MathTools.add(tempVo.getAmount(), amount).intValue()); +// tempVo.setMaterialAmount(MathTools.add(tempVo.getMaterialAmount(), amount).intValue()); +// tempVo.setTotalPrice(MathTools.add(tempVo.getTotalPrice(),totalPrice).doubleValue()); +// tempVo.setMaterialTotalPrice(MathTools.add(tempVo.getMaterialTotalPrice(), totalPrice).doubleValue()); +// } else { +// tempVo = new InvoicePrintVo(); +// tempVo.setName(materialName); +// tempVo.setMaterialName(materialName); +// tempVo.setAmount(amount); +// tempVo.setMaterialAmount(amount); +// tempVo.setMaterialPrice(price); +// tempVo.setPrice(price); +// tempVo.setOperationTime(operationTime); +// tempVo.setValidUntil(expireDateStr); +// tempVo.setExpireDate(expireDateStr); +// tempVo.setMaterialTotalPrice(totalPrice); +// tempVo.setTotalPrice(totalPrice); +// voList.add(tempVo); +// } +// } @Override public Collection getDisinfectGoodsPrintData( String[] invoiceIds){ Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java =================================================================== diff -u -r13890 -r13899 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 13890) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 13899) @@ -1181,11 +1181,11 @@ OrgUnit orgUnit= (OrgUnit) orgUnitManager.getOrgUnitByCode(departCoding); String barcode = orgUnit.getBarcode(); try { - List tousseList = invoiceManager + Collection tousseList = invoiceManager .loadToussePrintData(departCoding); - List disinfectGoodslist = invoiceManager + Collection disinfectGoodslist = invoiceManager .getDisinfectGoodsPrintData(departCoding); - List diposableGoodsList = invoiceManager + Collection diposableGoodsList = invoiceManager .getDiposableGoodsPrintData(departCoding); StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); JsonConfig config = new JsonConfig(); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r13802 -r13899 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 13802) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 13899) @@ -10,6 +10,7 @@ import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.regex.Matcher; @@ -60,6 +61,7 @@ import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.string.StringTools; import com.forgon.tools.util.SqlUtils; /** @@ -2173,4 +2175,34 @@ cssdHandleTousses.setTousseName(tousseDefinition.getName()); objectDao.saveOrUpdate(cssdHandleTousses); } + + @Override + public JSONObject getDisinfectionMaterialInfo( + TousseDefinition tousseDefinition) { + JSONObject json = new JSONObject(); + if(tousseDefinition != null && tousseDefinition.isDisinfection()){ + List materialList = tousseDefinition.getMaterialInstances(); + Double totalPrice = 0.00; + int totalAmout = 0; + List materialStr = new LinkedList(); + for (MaterialInstance materialInstance : materialList) { + String materialName = materialInstance.getMaterialName(); + int amount = materialInstance.getCount(); + materialStr.add(materialName + "x" + amount); + + // 消毒物品价格 + Double price = materialInstance.getMaterialDefinition().getDisinfectionPrice(); + if (price == null) { + price = 0.00; + } + totalPrice += MathTools.mul(price, amount, 2); + totalAmout += amount; + } + json.put("totalPrice", totalPrice); + json.put("totalAmout", totalAmout); + json.put("price", MathTools.divide(totalPrice, totalAmout, 2)); + json.put("materialStr", StringTools.join(materialStr, ";")); + } + return json; + } }