Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r30661 -r30700 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 30661) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 30700) @@ -14,6 +14,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -9123,7 +9124,148 @@ } } } + /** + * 获取发货单 发货物品明细 + * + * @param invoiceId + * @return + */ + @Override + public Map getInvoiceItemJsonArrayMapByInvoiceIdList(List invoiceIdList) { + Map invoiceIdToInvoiceItemDetailJsonArrayMap = new HashMap(); + if (CollectionUtils.isNotEmpty(invoiceIdList)) { + List invoiceList = getCollection(invoiceIdList); + if (CollectionUtils.isNotEmpty(invoiceList)) { + List newInvoiceIdList = invoiceList.stream().map(Invoice::getId).collect(Collectors.toList()); + @SuppressWarnings("unchecked") + List tousseInstanceList = + objectDao.findBySql(TousseInstance.class.getSimpleName(), + String.format("where %s or %s", SqlUtils.getNonStringFieldInLargeCollectionsPredicate("invoice_id", newInvoiceIdList) + , SqlUtils.getNonStringFieldInLargeCollectionsPredicate("invoice2_id", newInvoiceIdList))); + Map> invoiceIdToTousseInstanceListMap = new HashMap>(); + Map idToTousseDefinitionMap = new HashMap(); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + for (TousseInstance tousseInstance : tousseInstanceList) { + TousseDefinition td = tousseInstance.getTousseDefinition(); + idToTousseDefinitionMap.put(td.getId(), td); + Long invoiceId = tousseInstance.getInvoice_id(); + Long invoice2Id = tousseInstance.getInvoice2_id(); + if(DatabaseUtil.isPoIdValid(invoiceId)){ + List tiList = invoiceIdToTousseInstanceListMap.get(invoiceId); + if(tiList == null){ + tiList = new ArrayList(); + } + tiList.add(tousseInstance); + invoiceIdToTousseInstanceListMap.put(invoiceId,tiList); + } + if(DatabaseUtil.isPoIdValid(invoice2Id) && !invoice2Id.equals(invoiceId)){ + List tiList = invoiceIdToTousseInstanceListMap.get(invoice2Id); + if(tiList == null){ + tiList = new ArrayList(); + } + tiList.add(tousseInstance); + invoiceIdToTousseInstanceListMap.put(invoice2Id,tiList); + } + } + } + + for(Invoice invoice : invoiceList){ + JSONArray array = new JSONArray(); + Long invoiceId = invoice.getId(); + //List tousseInstances = invoiceIdToTousseInstanceListMap.get(invoiceId); + Set invoiceItemSet = invoice.getInvoiceItem(); + Map invoiceItemJsonMap = new LinkedHashMap(); + for (InvoiceItem invoiceItem : invoiceItemSet) { + String name = invoiceItem.getTousseName(); + String tousseType = invoiceItem.getTousseType(); + String key = name + "_" + tousseType; + //StringBuffer materialBuff = new StringBuffer(); + if(invoiceItemJsonMap.containsKey(key)){ + JSONObject invoiceItemJson = invoiceItemJsonMap.get(key); + Integer middlePackageAmount = invoiceItem.getMiddlePackageAmount(); + int amount = invoiceItemJson.optInt("amount", 0); + if(middlePackageAmount != null && middlePackageAmount > 0){ + invoiceItemJson.put("amount", amount + middlePackageAmount); + }else{ + invoiceItemJson.put("amount", amount + invoiceItem.getAmount()); + } + invoiceItemJsonMap.put(key, invoiceItemJson); + continue; + } + JSONArray materialArray = new JSONArray(); + // 消毒物品材料显示 + if (InvoiceItem.DIPOSABLE_NO.equals(invoiceItem + .getDiposable())) { + /*TousseInstance tousseInstanceFind = CollectionUtils.find(tousseInstances, new Predicate(){ + @Override + public boolean evaluate(TousseInstance tousseInstance) { + return StringTools.equals(tousseInstance.getTousseName(),name); + } + });*/ + TousseDefinition definition = idToTousseDefinitionMap.get(invoiceItem.getTousseDefinitionId()); + + if (definition != null + && TousseDefinition.PACKAGE_TYPE_DISINFECTION + .equals(definition.getTousseType())) { + List materialList = definition + .getMaterialInstances(); + List diposableGoodsItems = definition + .getDiposableGoodsItems(); + for (int i = 0; i < materialList.size(); i++) { + MaterialInstance materialInstance = materialList.get(i); + String materialName = materialInstance + .getMaterialDefinition().getName(); + int count = materialInstance.getCount(); + JSONObject material = new JSONObject(); + material.put("name", materialName); + material.put("count", count); + materialArray.add(material); + } + + // 一次性材料 + for (int i = 0; i < diposableGoodsItems.size(); i++) { + String diposableGoodName = diposableGoodsItems + .get(i).getDiposableGoods().getName(); + String sp = diposableGoodsItems.get(i) + .getDiposableGoods().getSpecification(); + if (StringUtils.isNotBlank(sp)) { + diposableGoodName += "[" + sp + "]"; + } + int count = diposableGoodsItems.get(i) + .getAmount(); + JSONObject material = new JSONObject(); + material.put("name", diposableGoodName); + material.put("count", count); + materialArray.add(material); + } + } + } + JSONObject json = new JSONObject(); + json.put("name", name); + Integer middlePackageAmount = invoiceItem.getMiddlePackageAmount(); + if(middlePackageAmount != null && middlePackageAmount > 0){ + json.put("amount", middlePackageAmount); + }else{ + json.put("amount", invoiceItem.getAmount()); + } + + json.put("material", materialArray); + invoiceItemJsonMap.put(key, json); + } + if(!invoiceItemJsonMap.isEmpty()){ + for (String key : invoiceItemJsonMap.keySet()) { + array.add(invoiceItemJsonMap.get(key)); + } + } + invoiceIdToInvoiceItemDetailJsonArrayMap.put(invoiceId, array); + } + } + } + return invoiceIdToInvoiceItemDetailJsonArrayMap; + } + + /** * 计算总的发货数量 * @param invoiceItems * @return Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java =================================================================== diff -u -r29520 -r30700 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 29520) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 30700) @@ -220,7 +220,14 @@ * @param receiver 签收人 */ public void signInvoice(Collection ids,String receiver); - + + /** + * 根据发货单id的集合,获取发货单 发货物品明细 + * @param invoiceIdList + * @return {发货单1的id:[{},{}],...发货单n的id:[{},{}]} + */ + public Map getInvoiceItemJsonArrayMapByInvoiceIdList(List invoiceIdList); + public Collection loadToussePrintData(String[] invoiceIds); public Collection getDisinfectGoodsPrintData(String[] invoiceIds); public Collection getDiposableGoodsPrintData(String[] invoiceIds); Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/dwr/table/InvoiceTableManager.java =================================================================== diff -u -r29139 -r30700 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/dwr/table/InvoiceTableManager.java (.../InvoiceTableManager.java) (revision 29139) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/dwr/table/InvoiceTableManager.java (.../InvoiceTableManager.java) (revision 30700) @@ -9,11 +9,15 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.stream.Collectors; +import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.time.DateUtils; +import org.apache.log4j.Logger; import com.forgon.Constants; import com.forgon.component.grid.GridManager; @@ -77,6 +81,8 @@ private ExceptionHandler exceptionHandler; private SupplyRoomConfigManager supplyRoomConfigManager; + + private Logger logger = Logger.getLogger(getClass()); public void setSupplyRoomConfigManager( SupplyRoomConfigManager supplyRoomConfigManager) { @@ -134,6 +140,7 @@ } public String findInvoiceTableList(Map> parameterMap) { + long time1 = System.currentTimeMillis(); Map sqlWhereParamMap = gridManager .getParamFromView(parameterMap); @@ -255,7 +262,30 @@ "invoicePlan", "returnedTousseItems", "diposableGoodsItems", "tousseInstances", "noProvideGoods", "invoiceItem" }); - return json; + long time2 = System.currentTimeMillis(); + JSONObject jsonObject = JSONObject.fromObject(json); + JSONArray rows = jsonObject.optJSONArray(JSONUtil.JSON_KEY_ROWS); + if(CollectionUtils.isNotEmpty(rows)){ + List invoiceIdList = new ArrayList(); + for (int i = 0; i < rows.size(); i++) { + JSONObject rowJsonObject = rows.optJSONObject(i); + invoiceIdList.add(rowJsonObject.optLong("id")); + } + JSONArray newRows = new JSONArray(); + Map invoiceIdToInvoiceItemJSONArrayMap = invoiceManager.getInvoiceItemJsonArrayMapByInvoiceIdList(invoiceIdList); + for (int i = 0; i < rows.size(); i++) { + JSONObject rowJsonObject = rows.optJSONObject(i); + JSONArray array = invoiceIdToInvoiceItemJSONArrayMap.get(rowJsonObject.optLong("id")); + if(CollectionUtils.isNotEmpty(array)){ + rowJsonObject.put("itemArray" , array.toString()); + newRows.add(rowJsonObject); + } + } + jsonObject.put(JSONUtil.JSON_KEY_ROWS, newRows); + } + long time3 = System.currentTimeMillis(); + logger.debug("发货管理查询所花时间(毫秒)=" + (time3 - time1)); + return jsonObject.toString(); } /** Index: ssts-web/src/main/webapp/disinfectsystem/invoice/invoiceView.js =================================================================== diff -u -r30605 -r30700 --- ssts-web/src/main/webapp/disinfectsystem/invoice/invoiceView.js (.../invoiceView.js) (revision 30605) +++ ssts-web/src/main/webapp/disinfectsystem/invoice/invoiceView.js (.../invoiceView.js) (revision 30700) @@ -2489,7 +2489,8 @@ {name : 'personInCharge'}, {name : 'warehouseName'}, {name : 'applicant'}, - {name : 'personInChargeCode'} + {name : 'personInChargeCode'}, + {name : 'itemArray'} //将鼠标移入时悬浮的信息内容设置到该属性里,用于显示,不再实时请求后台进行查询了 ]; var filters = new Ext.grid.GridFilters({ @@ -2913,13 +2914,22 @@ grid.on('mouseover',function(e) {// 添加mouseover事件 var index = grid.getView().findRowIndex( e.getTarget());// 根据mouse所在的target可以取到列的位置 + //console.log("index=" + index); if (index !== false) {// 当取到了正确的列时,(因为如果传入的target列没有取到的时候会返回false) var record = this.getStore().getAt(index); var recordID = record.get('id'); var isDiposableApplicationForm = (record.data['recyclingApplicationType'] == diposableGoodsApplicationForm); var tableContent = record.data['htmlContent']; if (!tableContent) { - var content = ""; + var itemArray = record.get('itemArray'); + tableContent = getTableContent(itemArray); + var curRecord = findRecordByNameAndValueFromStore(grid.getStore(),'id',recordID); + if(!isUndefinedOrNull(curRecord)){ + curRecord.set( + "htmlContent", + tableContent); + } + /*var content = ""; Ext.Ajax.request({ url : WWWROOT + '/disinfectSystem/invoiceAction!getInvoiceItemsByInvoiceId.do', @@ -2977,7 +2987,7 @@ failure : function( response, options) { } - }); + });*/ } else { if(isIE()){ var rowEl = Ext4.fly(e.getTarget()); @@ -2993,6 +3003,39 @@ } } }); + + function getTableContent(invoiceItems){ + if (invoiceItems != null) { + var content = ""; + for ( var i = 0; i < invoiceItems.length; i++) { + content += " " + + invoiceItems[i].name + + "" + + invoiceItems[i].amount + + ""; + // 消毒物品材料显示 + if (invoiceItems[i].material != null + && invoiceItems[i].material.length > 0) { + var materialArray = invoiceItems[i].material; + for ( var j = 0; j < materialArray.length; j++) { + var materialItem = materialArray[j]; + content += "   " + + materialItem.name + + "" + + materialItem.count + + ""; + } + } + } + } + var tableContent = (""); + tableContent += "" + + content + + "

物品名称

数量


"; + return tableContent; + } function checkPrintStatus(callback){ var records = grid.getSelectionModel().getSelections();