From a89e7507fd3ea022fef986022f4823de31af361d Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Thu, 10 Jul 2025 09:00:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E5=87=BA=E5=BA=93=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=96=B0=E5=A2=9E=E6=9C=A8=E7=AE=B1=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E5=92=8C=E6=9C=A8=E7=AE=B1=E6=8F=8F=E8=BF=B0=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在出库查询界面添加木箱编码和木箱描述两个新字段 - 更新后端服务和数据库查询以支持新增字段 --- .../service/impl/OutBillQueryServiceImpl.java | 230 ++++++++++-------- .../nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql | 6 + 2 files changed, 128 insertions(+), 108 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java index 32172a27e..98856c850 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java @@ -29,7 +29,6 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.function.Function; import java.util.stream.Collectors; @@ -45,7 +44,8 @@ import java.util.stream.Collectors; public class OutBillQueryServiceImpl implements OutBillQueryService { @Autowired - private IpdmBiSubpackagerelationService ipdmBiSubpackagerelationService; + private IpdmBiSubpackagerelationService ipdmBiSubpackagerelationService; + @Override public Map queryAll(Map whereJson, Pageable page, String[] bill_types) { String stor_id = MapUtil.getStr(whereJson, "stor_id"); @@ -285,6 +285,7 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { String end_time = MapUtil.getStr(map, "end_time"); String pcsn = MapUtil.getStr(map, "pcsn"); String customer_name = MapUtil.getStr(map, "customer_name"); + map.put("flag", "22"); map.put("stor_id", stor_id); if (ObjectUtil.isNotEmpty(bill_types)) { @@ -299,9 +300,11 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { if (StrUtil.isNotEmpty(pcsn)){ // 判断是否有空格 boolean matches = pcsn.matches(".*\\s.*"); + if (matches) { String[] s = pcsn.split(" "); String pcsn_in = String.join("','", Arrays.asList(s)); + map.put("pcsn_in", "('"+pcsn_in+"')"); map.put("pcsn", ""); } else { @@ -311,6 +314,7 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { if (ObjectUtil.isNotEmpty(customer_name)) { map.put("customer_name", "%" + customer_name + "%"); } + // 处理时间 if (ObjectUtil.isNotEmpty(begin_time) && ObjectUtil.isNotEmpty(end_time)) { String begin_time_today = begin_time.substring(0, 10); @@ -342,122 +346,133 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { for (List jsonObjects : deque) { datas.addAll(jsonObjects); } - List> list = new ArrayList<>(); - for (int i = 0; i < resultJSONArray.size(); i++) { - JSONObject json = resultJSONArray.getJSONObject(i); - Map mp = new LinkedHashMap<>(); - // 查询第一次入库的源销售订单 - JSONObject jsonSub = datas.stream() - .filter(row -> row.getString("container_name").equals(json.getString("pcsn"))) - .min(Comparator.comparing(row -> row.getString("insert_time"))) - .orElse(null); + ConcurrentLinkedDeque>> listDeque = new ConcurrentLinkedDeque<>(); + Lists.partition(resultJSONArray,1000).stream().map((Function) o->CompletableFuture.runAsync(() -> { + List> items = new ArrayList<>(); + for (Object item : o) { + JSONObject json = (JSONObject) item; + Map mp = new LinkedHashMap<>(); + // 查询第一次入库的源销售订单 + JSONObject jsonSub = datas.stream() + .filter(row -> row.getString("container_name").equals(json.getString("pcsn"))) + .min(Comparator.comparing(row -> row.getString("insert_time"))) + .orElse(null); - mp.put("仓库", json.getString("stor_name")); - if (ObjectUtil.isNotEmpty(bill_type) && "1004".equals(bill_type)) { - mp.put("移入仓库", json.getString("in_stor_name")); - } - mp.put("库区", json.getString("sect_name")); - mp.put("生产区域", json.getString("pcsn").substring(0, 2)); - String bill_type1 = json.getString("bill_type"); - - String bill_name = ""; - switch (bill_type1) { - case "1001" : - bill_name = "发货出库"; - break; - case "1003" : - bill_name = "改切出库"; - break; - case "1004" : - bill_name = "调拨出库"; - break; - case "1005" : - bill_name = "拆箱出库"; - break; - case "1006" : - bill_name = "返检出库"; - break; - case "1007" : - bill_name = "超期报废"; - break; - case "1008" : - bill_name = "退货报废"; - break; - case "1010" : - bill_name = "质量问题报废"; - break; - case "1002" : - bill_name = "其他报废"; - break; - case "1011" : - bill_name = "分拣出库"; - break; - case "1009" : - bill_name = "手工出库"; - break; - } - mp.put("业务类型", bill_name); - mp.put("交货单号", json.getString("vbeln")); - mp.put("物流公司", json.getString("cust_name")); - mp.put("运费", json.getString("estimated_freight")); - mp.put("木箱号", json.getString("box_no")); - mp.put("物料编码", json.getString("material_code")); - mp.put("物料名称", json.getString("material_name")); - mp.put("子卷号", json.getString("pcsn")); - mp.put("sap批次", json.getString("sap_pcsn")); - mp.put("净重", json.getString("net_weight")); - mp.put("单位", json.getString("qty_unit_name")); - mp.put("管件类型", json.getString("paper_type")); - mp.put("管件编码", json.getString("paper_code")); - mp.put("管件描述", json.getString("paper_name")); - mp.put("客户编码", json.getString("customer_name")); - mp.put("发货客户名称", json.getString("customer_description")); - mp.put("销售订单", json.getString("sale_order_name")); - mp.put("行号", ""); - mp.put("原销售订单", json.getString("sale_order_name")); - mp.put("原行号", ""); - - if (ObjectUtil.isNotEmpty(json.getString("sale_order_name"))) { - try { - mp.put("销售订单", json.getString("sale_order_name").substring(0, json.getString("sale_order_name").indexOf("-"))); - mp.put("行号", json.getString("sale_order_name").substring(json.getString("sale_order_name").indexOf("-") + 1, json.getString("sale_order_name").length())); - } catch (Exception e) { - mp.put("销售订单", json.getString("sale_order_name")); - mp.put("行号", ""); + mp.put("仓库", json.getString("stor_name")); + if (ObjectUtil.isNotEmpty(bill_type) && "1004".equals(bill_type)) { + mp.put("移入仓库", json.getString("in_stor_name")); } - } - // 原销售订单 - if (ObjectUtil.isEmpty(jsonSub)) { + mp.put("库区", json.getString("sect_name")); + mp.put("生产区域", json.getString("pcsn").substring(0, 2)); + String bill_type1 = json.getString("bill_type"); + + String bill_name = ""; + switch (bill_type1) { + case "1001" : + bill_name = "发货出库"; + break; + case "1003" : + bill_name = "改切出库"; + break; + case "1004" : + bill_name = "调拨出库"; + break; + case "1005" : + bill_name = "拆箱出库"; + break; + case "1006" : + bill_name = "返检出库"; + break; + case "1007" : + bill_name = "超期报废"; + break; + case "1008" : + bill_name = "退货报废"; + break; + case "1010" : + bill_name = "质量问题报废"; + break; + case "1002" : + bill_name = "其他报废"; + break; + case "1011" : + bill_name = "分拣出库"; + break; + case "1009" : + bill_name = "手工出库"; + break; + } + mp.put("业务类型", bill_name); + mp.put("交货单号", json.getString("vbeln")); + mp.put("物流公司", json.getString("cust_name")); + mp.put("运费", json.getString("estimated_freight")); + mp.put("木箱号", json.getString("box_no")); + mp.put("木箱编码", json.getString("box_material_code")); + mp.put("木箱描述", json.getString("box_material_name")); + mp.put("物料编码", json.getString("material_code")); + mp.put("物料名称", json.getString("material_name")); + mp.put("子卷号", json.getString("pcsn")); + mp.put("sap批次", json.getString("sap_pcsn")); + mp.put("净重", json.getString("net_weight")); + mp.put("单位", json.getString("qty_unit_name")); + mp.put("管件类型", json.getString("paper_type")); + mp.put("管件编码", json.getString("paper_code")); + mp.put("管件描述", json.getString("paper_name")); + mp.put("客户编码", json.getString("customer_name")); + mp.put("发货客户名称", json.getString("customer_description")); + mp.put("销售订单", json.getString("sale_order_name")); + mp.put("行号", ""); + mp.put("原销售订单", json.getString("sale_order_name")); + mp.put("原行号", ""); + if (ObjectUtil.isNotEmpty(json.getString("sale_order_name"))) { try { - mp.put("原销售订单", json.getString("sale_order_name").substring(0, json.getString("sale_order_name").indexOf("-"))); - mp.put("原行号", json.getString("sale_order_name").substring(json.getString("sale_order_name").indexOf("-") + 1, json.getString("sale_order_name").length())); + mp.put("销售订单", json.getString("sale_order_name").substring(0, json.getString("sale_order_name").indexOf("-"))); + mp.put("行号", json.getString("sale_order_name").substring(json.getString("sale_order_name").indexOf("-") + 1, json.getString("sale_order_name").length())); } catch (Exception e) { - mp.put("原销售订单", json.getString("sale_order_name")); - mp.put("原行号", ""); + mp.put("销售订单", json.getString("sale_order_name")); + mp.put("行号", ""); } } - } else { - if (ObjectUtil.isNotEmpty(jsonSub.getString("sale_order_name"))) { - try { - mp.put("原销售订单", jsonSub.getString("sale_order_name").substring(0, jsonSub.getString("sale_order_name").indexOf("-"))); - mp.put("原行号", jsonSub.getString("sale_order_name").substring(jsonSub.getString("sale_order_name").indexOf("-") + 1, jsonSub.getString("sale_order_name").length())); - } catch (Exception e) { - mp.put("原销售订单", jsonSub.getString("sale_order_name")); - mp.put("原行号", ""); + // 原销售订单 + if (ObjectUtil.isEmpty(jsonSub)) { + if (ObjectUtil.isNotEmpty(json.getString("sale_order_name"))) { + try { + mp.put("原销售订单", json.getString("sale_order_name").substring(0, json.getString("sale_order_name").indexOf("-"))); + mp.put("原行号", json.getString("sale_order_name").substring(json.getString("sale_order_name").indexOf("-") + 1, json.getString("sale_order_name").length())); + } catch (Exception e) { + mp.put("原销售订单", json.getString("sale_order_name")); + mp.put("原行号", ""); + } + } + } else { + if (ObjectUtil.isNotEmpty(jsonSub.getString("sale_order_name"))) { + try { + mp.put("原销售订单", jsonSub.getString("sale_order_name").substring(0, jsonSub.getString("sale_order_name").indexOf("-"))); + mp.put("原行号", jsonSub.getString("sale_order_name").substring(jsonSub.getString("sale_order_name").indexOf("-") + 1, jsonSub.getString("sale_order_name").length())); + } catch (Exception e) { + mp.put("原销售订单", jsonSub.getString("sale_order_name")); + mp.put("原行号", ""); + } } } + + mp.put("业务员", json.getString("sales_owner")); + mp.put("出库日期", json.getString("input_time")); + mp.put("产品规格", String.format("%.0f", json.getDoubleValue("width"))); + mp.put("产品厚度", json.getString("thickness")); + mp.put("单位面积", json.getString("mass_per_unit_area")); + mp.put("制单人", json.getString("input_optname")); + mp.put("备注", json.getString("remark")); + items.add(mp); } - mp.put("业务员", json.getString("sales_owner")); - mp.put("出库日期", json.getString("input_time")); - mp.put("产品规格", String.format("%.0f", json.getDoubleValue("width"))); - mp.put("产品厚度", json.getString("thickness")); - mp.put("单位面积", json.getString("mass_per_unit_area")); - mp.put("制单人", json.getString("input_optname")); - mp.put("备注", json.getString("remark")); - list.add(mp); + listDeque.add(items); + })).parallel().forEach(CompletableFuture::join); + List> list = new ArrayList<>(); + for (List> maps : listDeque) { + list.addAll(maps); } - Set set = list.get(0).keySet(); + Set set = listDeque.getFirst().get(0).keySet(); int colIndex = 0; String[] col = new String[set.size()]; for (String s : set) { @@ -465,6 +480,5 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { colIndex++; } new FileUtil().downloadExcelIO(list,col,response); -// FileUtil.downloadExcel(list, response); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql index 4c0bacbcd..05a64a90d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql @@ -266,6 +266,8 @@ base.cust_name, dis.sect_name, dis.box_no, + bib.material_code box_material_code, + bib.material_name box_material_name, dis.qty_unit_name, mater.material_code, mater.material_name, @@ -317,6 +319,7 @@ a.pcsn ) AS c inner JOIN st_ivt_iostorinvdis dis ON dis.iostorinvdis_id = c.iostorinvdis_id + inner JOIN bst_ivt_boxinfo bib ON dis.box_no = bib.box_no inner JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id inner JOIN st_ivt_iostorinvdtl dtl ON dtl.iostorinvdtl_id = dis.iostorinvdtl_id LEFT JOIN md_cs_transportationbase base ON base.cust_code = mst.trans_code @@ -385,6 +388,8 @@ base.cust_name, dis.sect_name, dis.box_no, + bib.material_code box_material_code, + bib.material_name box_material_name, dis.qty_unit_name, mater.material_code, mater.material_name, @@ -436,6 +441,7 @@ a.pcsn ) AS c inner JOIN st_ivt_iostorinvdis dis ON dis.iostorinvdis_id = c.iostorinvdis_id + inner JOIN bst_ivt_boxinfo bib ON dis.box_no = bib.box_no inner JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id inner JOIN st_ivt_iostorinvdtl dtl ON dtl.iostorinvdtl_id = dis.iostorinvdtl_id LEFT JOIN md_cs_transportationbase base ON base.cust_code = mst.trans_code