Index: forgon-core/src/main/java/com/forgon/results/handler/ResultBackHandler.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/results/handler/ResultBackHandler.java (revision 0) +++ forgon-core/src/main/java/com/forgon/results/handler/ResultBackHandler.java (revision 15176) @@ -0,0 +1,43 @@ +package com.forgon.results.handler; + +import org.apache.log4j.Logger; +import org.json.JSONArray; +import org.json.JSONObject; + +/** + * Created by zhonghaowen on 2016/9/29. + * 页面返回结果处理器 + */ +public abstract class ResultBackHandler { + + protected Logger logger = Logger.getLogger(this.getClass()); + + /** + * 处理页面返回结果 + * + * @param target 返回页面json字符串 + * @return 处理后返回页面的json字符串 + */ + public String handleResult(String target) { + try { + //将字符串装成jsonObject + JSONObject result = new JSONObject(target); + //获得rows的JSONArray + JSONArray rows = result.getJSONArray("rows"); + this.doHandleRows(rows); + return result.toString(); + } + catch (Exception e) { + logger.error(e, e); + throw new RuntimeException(e); + } + } + + /** + * 处理rows的数组 + * + * @param rows JSONArray数组 + */ + public abstract void doHandleRows(JSONArray rows); + +} Index: forgon-core/src/main/java/com/forgon/results/handler/LendGoodsBriefHandler.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/results/handler/LendGoodsBriefHandler.java (revision 0) +++ forgon-core/src/main/java/com/forgon/results/handler/LendGoodsBriefHandler.java (revision 15176) @@ -0,0 +1,114 @@ +package com.forgon.results.handler; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * Created by zhonghaowen on 2016/9/29. + * 物品简要处理器 + */ +public class LendGoodsBriefHandler extends ResultBackHandler { + + private static LendGoodsBriefHandler lendGoodsBriefHandler; + + private LendGoodsBriefHandler() { + } + + + public static LendGoodsBriefHandler getInstance() { + if (lendGoodsBriefHandler == null) { + synchronized (LendGoodsBriefHandler.class) { + if (lendGoodsBriefHandler == null) { + lendGoodsBriefHandler = new LendGoodsBriefHandler(); + } + } + } + return lendGoodsBriefHandler; + } + + @Override + public void doHandleRows(JSONArray rows) { + //迭代rows,合并物品简要相同的物品,将lendGoodsBrief:导丝x1,导丝x1 处理成lendGoodsBrief:导丝x2 + for (int i = 0, len = rows.length(); i < len; i++) { + JSONObject json = rows.getJSONObject(i); + if (json.has("lendGoodsBrief")) { + String obj = json.getString("lendGoodsBrief"); + String[] array = obj.split(","); + if (array.length == 1) { + continue; + } + Map map = this.calculateRepeatCount(array); + logger.debug(map); + String afterMerge = this.handleResult(map); + //重新设置lendGoodsBrief的值 + json.put("lendGoodsBrief", afterMerge); + } + } + } + + + /** + * 计算重复物品的数量 + * + * @param arrays lendGoodsBrief的字符串数组 + * @return map返回结果类似({导丝x=2, 其他x=1}) + */ + private Map calculateRepeatCount(String[] arrays) { + // map是用于存放计算后对应物品的数量 + Map map = new HashMap<>(); + //迭代这个物品简要的数组 + for (String array1 : arrays) { + //获取对应的名字 + String key = this.getKeyName(array1); + if (map.get(key) != null) { + continue; + } + int count = 0; + // 逐个物品对比,如果有同名的,则将对应的数量叠加 + for (String array2 : arrays) { + String key2 = this.getKeyName(array2); + Integer value = Integer.parseInt(array2.substring(array2.indexOf("x") + 1)); + if (key.equals(key2)) { + count += value; + } + } + map.put(key, count); + } + return map; + } + + /** + * 获得对应物品的名字(例:导丝x) + * + * @param array 物品简要的数组的元素 + * @return + */ + private String getKeyName(String array) { + return array.substring(0, array.indexOf("x") + 1); + } + + /** + * 将这个计算后对应数量的map转换成对应格式的字符串 + * + * @param map 已经计算后数量的map + * @return lendGoodsBrief的结果 (lendGoodsBrief:'导丝x2') + */ + private String handleResult(Map map) { + StringBuilder sb = new StringBuilder(); + Set set = map.keySet(); + int size = set.size(); + int i = 0; + for (String key : set) { + sb.append(key).append(map.get(key)); + if (i++ < size - 1) { + sb.append(","); + } + } + return sb.toString(); + } + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/dwr/table/RecyclingApplicationTableManager.java =================================================================== diff -u -r15133 -r15176 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/dwr/table/RecyclingApplicationTableManager.java (.../RecyclingApplicationTableManager.java) (revision 15133) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/dwr/table/RecyclingApplicationTableManager.java (.../RecyclingApplicationTableManager.java) (revision 15176) @@ -15,6 +15,8 @@ import java.util.List; import java.util.Map; +import com.forgon.results.handler.LendGoodsBriefHandler; +import com.forgon.results.handler.ResultBackHandler; import net.sf.json.JSONException; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; @@ -148,11 +150,12 @@ + AcegiHelper.getLoginUser().getCurrentOrgUnitCode()+ "'"; } } - return gridManager.renderGrid(parameterMap, - InvoicePlan.class.getSimpleName(), sql, new String[] { - "applicationItems", "returnedTousseItems", "invoice", - "recyclingRecord", - "recyclingApplications", "parent" }); + String result = gridManager.renderGrid(parameterMap, InvoicePlan.class.getSimpleName(), sql, new String[] {"applicationItems", "returnedTousseItems", "invoice", + "recyclingRecord", "recyclingApplications", "parent" }); + ResultBackHandler lendGoodsBriefHandler = LendGoodsBriefHandler.getInstance(); + //合并物品简要相同名称的物品的数量 + result = lendGoodsBriefHandler.handleResult(result); + return result; } public String findRecyclingApplicationTableList(