Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java =================================================================== diff -u -r29048 -r29112 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 29048) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 29112) @@ -1629,4 +1629,18 @@ } } + /** + * 打印一次性物品汇总单(GDSZYY-14) + */ + public void printDisposableGoodsInvoicePlanSummary(){ + try { + String inventorySerialNumbers = StrutsParamUtils.getPraramValue("inventorySerialNumber", null); + JSONArray result = recyclingApplicationManager.printDisposableGoodsInvoicePlanSummary(inventorySerialNumbers); + StrutsResponseUtils.output(true, result); + } catch (Exception e) { + e.printStackTrace(); + StrutsResponseUtils.output(false, e.getMessage()); + } + } + } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r29100 -r29112 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 29100) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 29112) @@ -7903,4 +7903,147 @@ return isAllAwaiteDeliver; } + + @SuppressWarnings("unchecked") + @Override + public JSONArray printDisposableGoodsInvoicePlanSummary(String inventorySerialNumbers) { + JSONArray jsonArray = new JSONArray(); + // 根据二沙岛、芳村、大学城分院的科室编码 + String[] orgUnitCodings = {"002","003","005"}; + + List disposableGoodsList = null; + if(StringUtils.isNotBlank(inventorySerialNumbers)){ + String[] inventorySerialNumberArr = inventorySerialNumbers.split(";"); + String sql = String.format(" from %s po where (1=1) %s order by po.sequence ", DisposableGoods.class.getSimpleName(), SqlUtils.get_InSql("po.inventorySerialNumber", inventorySerialNumberArr)); + disposableGoodsList = objectDao.findByHql(sql); + }else{ + return jsonArray; + } + if(CollectionUtils.isEmpty(disposableGoodsList)){ + return jsonArray; + } + List disposableGoodsIds = new ArrayList(); + List disposableGoodsNames = new LinkedList(); + Map indexMap = new HashMap(); + int index = 0; + for (DisposableGoods disposableGoods : disposableGoodsList) { + disposableGoodsIds.add(disposableGoods.getId()); + indexMap.put(disposableGoods.getName() + "[" + disposableGoods.getSpecification() + "]", index++); + disposableGoodsNames.add(disposableGoods.getTtsNameOrName()); + } + + List parentOrgUnits = orgUnitManager.getByCodes(Arrays.asList(orgUnitCodings)); + + if(CollectionUtils.isEmpty(parentOrgUnits)){ + throw new RuntimeException("科室不存在!"); + } + + List tousseItemIdList = new ArrayList(); + + for(int i=0;i totalCountMap = new HashMap(); + JSONObject json = new JSONObject(); + + OrgUnit org = parentOrgUnits.get(i); + List allOrgUnitIds = new ArrayList(); + json.put("name", org.getName()); + Set parentOrgUnitSet = new HashSet(); + parentOrgUnitSet.add(org); + Set allOrgUnit = orgUnitManager.getAllChildrenOfOrgUnits(parentOrgUnitSet); + // 不包含祖先节点 + allOrgUnit.removeAll(parentOrgUnitSet); + for (OrgUnit orgUnit : allOrgUnit) { + allOrgUnitIds.add(orgUnit.getId()); + } + + JSONObject content = new JSONObject(); + content.put("header", disposableGoodsNames); + JSONArray body = new JSONArray(); + String sql = String.format("select ti.id tousseItemId, ou.orgUnitCoding, ou.name orgUnitName, dg.name disposableGoodsName, dg.ttsName, dg.specification, ti.amount from " + + " %s ti join %s ip on ip.id = ti.recyclingApplication_ID " + + " join %s ou on ip.departCoding = ou.orgUnitCoding " + + " join %s dg on ti.disposableGoodsId = dg.id where (1=1) " + + " and ti.isPrinted = 0 " + + " and ti.tousseType = '%s' ", + TousseItem.class.getSimpleName(), InvoicePlan.class.getSimpleName(), + OrgUnit.class.getSimpleName(), DisposableGoods.class.getSimpleName(), + DisposableGoods.TYPE_NAME); + + if(CollectionUtils.isNotEmpty(disposableGoodsList)){ + sql += " and " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIds); + } + + if(CollectionUtils.isNotEmpty(allOrgUnitIds)){ + sql += " and " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ou.id", allOrgUnitIds); + } + + sql += " order by ou.id "; + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + int[] goodsCounts = new int[disposableGoodsList.size()]; + String oldOrgUnitCode = null; + JSONObject bodyJson = null; + while(rs.next()){ + tousseItemIdList.add(rs.getLong("tousseItemId")); + String orgUnitCoding = rs.getString("orgUnitCoding"); + String orgUnitName = rs.getString("orgUnitName"); + String disposableGoodsName = rs.getString("disposableGoodsName"); + String specification = rs.getString("specification"); + int amount = rs.getInt("amount"); + + String key = disposableGoodsName + "[" + specification + "]"; + int countIndex = indexMap.get(key); + if(!StringUtils.equals(oldOrgUnitCode, orgUnitCoding)){ + // 另一个科室的物品 + bodyJson = new JSONObject(); + bodyJson.put("depart", orgUnitName); + goodsCounts = new int[disposableGoodsList.size()]; + goodsCounts[countIndex] = goodsCounts[countIndex] + amount; + bodyJson.put("count", goodsCounts); + body.add(bodyJson); + } else { + // 同一个科室的 + int[] oldGoodsCounts = new int[disposableGoodsList.size()]; + JSONArray arr = (JSONArray) bodyJson.opt("count"); + for(int j=0;j tousseItems = objectDao.findByIds(TousseItem.class.getSimpleName(), tousseItemIdList); + updateTousseItemPrintStatusByIds(tousseItems, true); + } + return jsonArray; + } + } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r29100 -r29112 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 29100) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 29112) @@ -509,4 +509,10 @@ * @return true:都为待发货状态申请单; false:包含已发货申请单 */ public boolean checkApplicationDeliverStatus(String applicationIds); + + /** + * 打印一次性物品汇总单(GDSZYY-14) + * @return + */ + public JSONArray printDisposableGoodsInvoicePlanSummary(String inventorySerialNumbers); }