Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r14657 -r14662 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 14657) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 14662) @@ -679,7 +679,8 @@ @SuppressWarnings("unchecked") @Override public List loadAllNotPrintInvoice(String departCoding) { - String sql = " where 1=1 and po.isPrint = '" + Invoice.PRINT_NO + "' "; + String sql = " where 1=1 and po.isPrint in ( '" + Invoice.PRINT_NO + "','" + +Invoice.PRINT_PART+"') "; if (StringUtils.isNotBlank(departCoding)) { sql += "and po.invoicePlan.departCoding = '" + departCoding + "'"; } @@ -692,7 +693,8 @@ */ @Override public List loadToussePrintData(String departCoding) { - String sql = " where 1=1 and po.isPrint = '" + Invoice.PRINT_NO + "' "; + String sql = " where 1=1 and po.isPrint in( '" + Invoice.PRINT_NO + + "','"+Invoice.PRINT_PART+"') "; if (StringUtils.isNotBlank(departCoding)) { sql += "and po.invoicePlan.departCoding = '" + departCoding + "'"; } @@ -779,15 +781,18 @@ */ @Override public Collection getDisinfectGoodsPrintData(String departCoding) { - String sql = " where 1=1 and po.isPrint = '" + Invoice.PRINT_NO + "' "; + String sql = " where 1=1 and isPrint in ( '" + Invoice.PRINT_NO + + "','"+Invoice.PRINT_PART+"') "; if (StringUtils.isNotBlank(departCoding)) { - sql += "and po.invoicePlan.departCoding = '" + departCoding + "'"; + sql += "and invoicePlan.departCoding = '" + departCoding + "'"; } - sql += " and po.invoicePlan.type = '" - + InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM - + "' order by po.sendTime asc"; - List list = findBySql(sql); - return getDisinfectGoodsPrintData(list,null); + sql += " and invoicePlan.type = '" + + InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM + "'"; + String orderBy = " order by sendTime asc"; + List list = findBySql(sql + orderBy); + String tousseSql = "where invoice_id in (select id from " + Invoice.class.getSimpleName() + + sql + ")"; + return getDisinfectGoodsPrintData(list,loadInvoiceTousseInstance(tousseSql),null); // Map> map = new HashMap>(); // if (list != null) { // for (Invoice invoice : list) { @@ -852,7 +857,8 @@ */ @Override public List getDiposableGoodsPrintData(String departCoding) { - String sql = " where 1=1 and po.isPrint = '" + Invoice.PRINT_NO + "' "; + String sql = " where 1=1 and po.isPrint in ( '" + Invoice.PRINT_NO + + "','"+Invoice.PRINT_PART+"') "; if (StringUtils.isNotBlank(departCoding)) { sql += "and po.invoicePlan.departCoding = '" + departCoding + "'"; } @@ -4730,6 +4736,7 @@ } // 找出已经存在项 private Map> loadToussePrintData(Collection invoices,List tousseGroupIds, + Map> invoiceTousseInstances, Set printedInvoiceItemIds){ Map> tousseGroupIdPrintVoMap = new HashMap>(); @@ -4744,69 +4751,73 @@ } for (Invoice invoice : invoices) { - List tousseList = invoice.getTousseInstances(objectDao); - for (TousseInstance tousseInstance : tousseList) { - TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); - if(tousseDefinition.isDisinfection()){ - continue; - } - if(!tousseGroupIds.contains(Constants.ZERO_LONG) && !tousseGroupIds.contains(tousseDefinition.getTousseGroupID())){ - continue; - } - Long tousseGroupId = 0L; - List voList =null; - if(!tousseGroupIds.contains(Constants.ZERO_LONG)){ //不包含0说明是对应器械包组的器械包,需要放到对应对的id的列表中 - tousseGroupId = tousseDefinition.getTousseGroupID(); - } - voList = tousseGroupIdPrintVoMap.get(tousseGroupId); - if(voList == null){ - voList = new ArrayList(); - tousseGroupIdPrintVoMap.put(tousseGroupId, voList); - } - String sterilizationdate = tousseInstance.getSterileStartDate();// 灭菌日期 - String sterilizerName = tousseInstance.getSterilizerName();// 灭菌炉 - String frequency = tousseInstance.getSterileFrequency();// 炉次 - - InvoicePrintVo tempVo = findInvoicePrintVoForTousseMerge(voList, tousseInstance, mergeTousseRuleForInvoiceBatchPrint); - InvoiceItem item = CollectionUtils.find(invoice.getInvoiceItem(), new Predicate(){ - @Override - public boolean evaluate(InvoiceItem object) { - if(StringTools.equals(tousseInstance.getTousseName(),object.getTousseName())){ - return true; + List tousseList = invoiceTousseInstances.get(invoice.getId());//invoice.getTousseInstances(objectDao); + if(CollectionUtils.isNotEmpty(tousseList)){ + for (TousseInstance tousseInstance : tousseList) { + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + if(tousseDefinition.isDisinfection()){ + continue; + } + if(!tousseGroupIds.contains(Constants.ZERO_LONG) && !tousseGroupIds.contains(tousseDefinition.getTousseGroupID())){ + continue; + } + Long tousseGroupId = 0L; + List voList =null; + if(!tousseGroupIds.contains(Constants.ZERO_LONG)){ //不包含0说明是对应器械包组的器械包,需要放到对应对的id的列表中 + tousseGroupId = tousseDefinition.getTousseGroupID(); + } + voList = tousseGroupIdPrintVoMap.get(tousseGroupId); + if(voList == null){ + voList = new ArrayList(); + tousseGroupIdPrintVoMap.put(tousseGroupId, voList); + } + String sterilizationdate = tousseInstance.getSterileStartDate();// 灭菌日期 + String sterilizerName = tousseInstance.getSterilizerName();// 灭菌炉 + String frequency = tousseInstance.getSterileFrequency();// 炉次 + + InvoicePrintVo tempVo = findInvoicePrintVoForTousseMerge(voList, tousseInstance, mergeTousseRuleForInvoiceBatchPrint); + InvoiceItem item = CollectionUtils.find(invoice.getInvoiceItem(), new Predicate(){ + @Override + public boolean evaluate(InvoiceItem object) { + if(StringTools.equals(tousseInstance.getTousseName(),object.getTousseName())){ + return true; + } + return false; + }}); + if(printedInvoiceItemIds != null){ + if(item != null){ + printedInvoiceItemIds.add(item.getId()); + }else{ + logger.error("未找到器械包(名称:" + tousseInstance.getTousseName()+" id:" + tousseInstance.getId() + + ")的发货项,数据异常。发生在批量打印发货单(发货单id:" + invoice.getId()); } - return false; - }}); - if(printedInvoiceItemIds != null){ - if(item != null){ - printedInvoiceItemIds.add(item.getId()); - }else{ - logger.error("未找到器械包(名称:" + tousseInstance.getTousseName()+" id:" + tousseInstance.getId() - + ")的发货项,数据异常。发生在批量打印发货单(发货单id:" + invoice.getId()); } - } - - - if (tempVo != null) { - tempVo.setAmount(tempVo.getAmount() + 1); - tempVo.setTotalPrice(tempVo.getTotalPrice() - + tousseInstance.getPrice()); - } else { - String expireDateStr = tousseInstance.getValidUntilStr(Constants.SIMPLEDATEFORMAT_YYYYMMDD); - tempVo = new InvoicePrintVo(); - tempVo.setAmount(1); - tempVo.setFrequency(frequency); - tempVo.setName(tousseInstance.getTousseName()); - tempVo.setUnit(tousseDefinition.getUnit()); - tempVo.setPrice(tousseInstance.getFluctuationPrice()); - tempVo.setSterilizationdate(sterilizationdate); - tempVo.setBatchNumber(sterilizationdate); - tempVo.setExpireDate(expireDateStr); - tempVo.setSterilizerName(sterilizerName); - tempVo.setTotalPrice(tousseInstance.getPrice()); - voList.add(tempVo); + if (tempVo != null) { + tempVo.setAmount(tempVo.getAmount() + 1); + tempVo.setTotalPrice(tempVo.getTotalPrice() + + tousseInstance.getPrice()); + } else { + + String expireDateStr = tousseInstance.getValidUntilStr(Constants.SIMPLEDATEFORMAT_YYYYMMDD); + + tempVo = new InvoicePrintVo(); + tempVo.setAmount(1); + tempVo.setFrequency(frequency); + tempVo.setName(tousseInstance.getTousseName()); + tempVo.setUnit(tousseDefinition.getUnit()); + tempVo.setPrice(tousseInstance.getFluctuationPrice()); + tempVo.setSterilizationdate(sterilizationdate); + tempVo.setBatchNumber(sterilizationdate); + tempVo.setExpireDate(expireDateStr); + tempVo.setSterilizerName(sterilizerName); + tempVo.setTotalPrice(tousseInstance.getPrice()); + voList.add(tempVo); + } } + }else{ + logger.debug("发货单(id:" + invoice.getId()+")没有器械包"); } } return tousseGroupIdPrintVoMap; @@ -4962,16 +4973,22 @@ /** * 消毒物品发货单打印数据 - * @param departCoding + * @param invoices 发货单,只能是同一个科室的 + * @param invoiceTousseInstances 发货单id到发货单的包实例的Map,不能为空。如果为null或者空集合,返回空集合 * @return */ - private Collection getDisinfectGoodsPrintData(Collection invoices,Set printedInvoiceItemIds){ - if(CollectionUtils.isEmpty(invoices)) + private Collection getDisinfectGoodsPrintData(Collection invoices,Map> invoiceTousseInstances,Set printedInvoiceItemIds){ + if(CollectionUtils.isEmpty(invoices) || invoiceTousseInstances == null || invoiceTousseInstances.size() <=0) return CollectionUtils.emptyCollection(); Map map = new HashMap(); for (Invoice invoice : invoices) { - List tousseList = invoice.getTousseInstances(objectDao); + List tousseList = invoiceTousseInstances.get(invoice.getId()); + if(CollectionUtils.isEmpty(tousseList)){ + logger.debug("未找到发货单(id: "+ invoice.getId()+")的包实例"); + continue; + } for (TousseInstance tousseInstance : tousseList) { TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); if(!tousseDefinition.isDisinfection()){ @@ -5118,12 +5135,14 @@ return CollectionUtils.emptyCollection(); String idsStr = StringUtils.join(invoiceIds, ","); - String sql = String.format(" where po.id in (%s)", idsStr); - sql += String.format(" and po.invoicePlan.type != '%s'" - + " order by po.sendTime asc", + String sql = String.format(" where id in (%s)", idsStr); + sql += String.format(" and invoicePlan.type != '%s'", InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM); - List list = findBySql(sql); - return getDisinfectGoodsPrintData(list,null); + String orderBy = " order by sendTime asc"; + List list = findBySql(sql + orderBy); + String toussesql = " where invoice_id in ( select id from " + + Invoice.class.getSimpleName() + sql + " ) "; + return getDisinfectGoodsPrintData(list,loadInvoiceTousseInstance(toussesql),null); } /** * 获取一次性物品发货单打印数据 @@ -5261,10 +5280,13 @@ String[] depts = departCodes.split(";"); String depSql = SqlUtils.getStringFieldInCollectionsPredicate("po.invoicePlan.departCoding", Arrays.asList(depts)); - List invoices = objectDao.findBySql(Invoice.class.getSimpleName(),"where " - + depSql + " and po.isPrint='" + Invoice.PRINT_NO + "'"); + String where = " where " + depSql + " and po.isPrint in ('" + Invoice.PRINT_NO + "','" + Invoice.PRINT_PART + "') "; + String invoiceSql = "from " + Invoice.class.getSimpleName() + " po " + + " left outer join fetch po.invoiceItem " + where; + List invoices = objectDao.findByHql(invoiceSql); + String tousseSql = "where po.invoice_id in ( select po.id from " + Invoice.class.getSimpleName() + " po " + where + ")"; Map> departCodingInvoiceMap = seperateInvoiceByDepart(invoices); - return mergeLoadPrintData(departCodingInvoiceMap,config); + return mergeLoadPrintData(departCodingInvoiceMap,config,loadInvoiceTousseInstance(tousseSql)); } /** @@ -5287,12 +5309,32 @@ return departCodingInvoiceMap; } /** + * 加载发货单中的包实例,并生成一个以发货单id为key,发货单对应的包实例的集合为list的map + * @param sql + * @return + */ + private Map> loadInvoiceTousseInstance(String sql){ + Map> invoiceTousseMap = new HashMap>(); + List tousseInstances = objectDao.findBySql(TousseInstance.class.getSimpleName(),sql ); + if(CollectionUtils.isNotEmpty(tousseInstances)){ + for(TousseInstance ti : tousseInstances){ + List list = invoiceTousseMap.get(ti.getInvoice_id()); + if(list == null){ + list = new ArrayList(); + invoiceTousseMap.put(ti.getInvoice_id(), list); + } + list.add(ti); + } + } + return invoiceTousseMap; + } + /** * * @param departCodingInvoiceMap 科室跟发货单的map * @param config 发货单打印配置,如果为null,则返回失败的json对象 * @return */ - private JSONObject mergeLoadPrintData(Map> departCodingInvoiceMap,PrintInvoiceConfig config){ + private JSONObject mergeLoadPrintData(Map> departCodingInvoiceMap,PrintInvoiceConfig config,Map> invoiceTousseInstances){ if(config == null || departCodingInvoiceMap == null || departCodingInvoiceMap.size() <=0){ return JSONUtil.buildJsonObject(false); } @@ -5313,15 +5355,15 @@ } }); if(config.mergePrintSameDepart()){ - List vos = buildBatchPrintInvoiceVo(invoices,config,depart,printUser,printedInviceItemIds); + List vos = buildBatchPrintInvoiceVo(invoices,config,depart,printUser,invoiceTousseInstances,printedInviceItemIds); if(CollectionUtils.isNotEmpty(vos)){ batchPrintInvoiceVos.addAll(vos); } }else{ for(Invoice invoice : invoices){ List array = new ArrayList(); array.add(invoice); - List vos = buildBatchPrintInvoiceVo(array,config,depart,printUser,printedInviceItemIds); + List vos = buildBatchPrintInvoiceVo(array,config,depart,printUser,invoiceTousseInstances,printedInviceItemIds); if(CollectionUtils.isNotEmpty(vos)){ batchPrintInvoiceVos.addAll(vos); } @@ -5388,7 +5430,7 @@ * @return */ private List buildBatchPrintInvoiceVo(List invoices,PrintInvoiceConfig config,OrgUnit depart, - String printUser,Set printedInvoiceItemIds){ + String printUser,Map> invoiceTousseInstances,Set printedInvoiceItemIds){ List retList = new ArrayList(); if(StringTools.isNotBlank(config.getTousseGroupConfig())){ // 转换为打印配置对象,是一个数组,数组中的每个元素定义一种打印组合,每个元素也是一个数组 @@ -5444,15 +5486,15 @@ batchPrintInvoiceVo.setSendTime(invoices.get(0).getSendTime()); batchPrintInvoiceVo.setSerialNumber2(invoices.get(0).getSerialNumber()); - Map> tousseGroupPrintDataMap = loadToussePrintData(invoices, tousseGroupIds,printedInvoiceItemIds); + Map> tousseGroupPrintDataMap = loadToussePrintData(invoices, tousseGroupIds,invoiceTousseInstances,printedInvoiceItemIds); Collection disposableVos = null; Collection disinfectGoodsVos = null; if(hasDisposable){ disposableVos = getDiposableGoodsPrintData(invoices,printedInvoiceItemIds); } if(hasDisinfection){ - disinfectGoodsVos = getDisinfectGoodsPrintData(invoices,printedInvoiceItemIds); + disinfectGoodsVos = getDisinfectGoodsPrintData(invoices,invoiceTousseInstances,printedInvoiceItemIds); } List goodsVo = mergeInvoicePrintVo(tousseGroupPrintDataMap, disposableVos, disinfectGoodsVos, groupTypeArray); @@ -5525,6 +5567,9 @@ @Override public JSONObject batchPrintInvoice(String ids, String type) { + if(StringTools.isEmpty(ids)){ + return JSONUtil.buildJsonObject(false, "请选择发货单"); + } List invoices = getByIds(ids); Map> departCodingInvoiceMap = seperateInvoiceByDepart(invoices); JSONArray types = new JSONArray(); @@ -5568,7 +5613,8 @@ PrintInvoiceConfig config = new PrintInvoiceConfig(); config.setMergePrint(Constants.STR_YES); config.setTousseGroupConfig(json.toString()); - return mergeLoadPrintData(departCodingInvoiceMap,config); + String toussesql = " where po.invoice_id in ( " + ids + " ) "; + return mergeLoadPrintData(departCodingInvoiceMap,config,loadInvoiceTousseInstance(toussesql)); } @SuppressWarnings("unchecked") Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/dwr/table/InvoiceTableManager.java =================================================================== diff -u -r14604 -r14662 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/dwr/table/InvoiceTableManager.java (.../InvoiceTableManager.java) (revision 14604) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/dwr/table/InvoiceTableManager.java (.../InvoiceTableManager.java) (revision 14662) @@ -289,7 +289,8 @@ Map sqlWhereParamMap = gridManager .getParamFromView(parameterMap); String departCoding = sqlWhereParamMap.get("departCoding"); - String sql = " where po.isPrint = '" + Invoice.PRINT_NO + "' "; + String sql = " where po.isPrint in ( '" + Invoice.PRINT_NO + + "','"+Invoice.PRINT_PART+"' ) "; if (StringUtils.isNotBlank(departCoding)) { sql += "and po.invoicePlan.departCoding = '" + departCoding + "'"; }