From 50630eae2287c4f31f1f67720af3b9e832981f3e Mon Sep 17 00:00:00 2001 From: tzy <1042411602@qq.com> Date: Sun, 23 Nov 2025 23:03:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E8=89=BA=E6=A8=A1=E7=89=88=EF=BC=8C?= =?UTF-8?q?=E5=B7=A5=E8=89=BA=E7=94=9F=E4=BA=A7bom=E7=9A=84=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=EF=BC=8C=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 5 + ruoyi-admin/pom.xml | 6 + .../controller/ProcessOrderProController.java | 110 +++++++++++++++++- .../resources/jpg/生产及工艺计划模版.xlsx | Bin 18390 -> 18504 bytes 4 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 .idea/.gitignore diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..10b731c --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 359ab1e..f52b9a9 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -138,6 +138,12 @@ org.springframework.security spring-security-core + + cn.dev33 + sa-token-core + 1.39.0 + compile + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessOrderProController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessOrderProController.java index 8d9250e..822e101 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessOrderProController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessOrderProController.java @@ -1453,12 +1453,17 @@ public class ProcessOrderProController extends BaseController { } if (!kingdeeBomRows.isEmpty()) { List> bomDataList2 = convertKingdeeBomToMapList(kingdeeBomRows); - dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("KingdeeBomData", bomDataList2)); + // 合并到 RouteBomData 中统一按物料分组导出(方案A) } // 添加伊特产品数据 if (!routeList.isEmpty()) { - List> evoRouteDataList = convertRouteDataToMapList(routeList); - dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("ProcessRouteExcelDTO", evoRouteDataList)); + // 合并到 RouteBomData 中统一按物料分组导出(方案A) + } + + // 方案A:合并工艺与BOM为单一数据集并按物料分组 + if (!routeList.isEmpty() || !kingdeeBomRows.isEmpty()) { + List> routeBomDataList = convertRouteBomToMapList(routeList, kingdeeBomRows); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("RouteBomData", routeBomDataList)); } // 使用模板导出Excel @@ -1493,6 +1498,105 @@ public class ProcessOrderProController extends BaseController { } } + /** + * 合并工艺路线与金蝶BOM行,按物料编码分组生成统一的 RouteBomData 列表 + * 每条记录包含两类:rowType=route(工艺行)或 rowType=bom(BOM行),以便模板在同一块中连续展示 + */ + private List> convertRouteBomToMapList(List routeDataList, + List> kingdeeBomRows) { + Map>> grouped = new LinkedHashMap<>(); + + // 先按工艺数据建立分组与顺序 + for (ProcessRoute item : routeDataList) { + String mcode = item.getMaterialCode(); + if (mcode == null) mcode = ""; + grouped.computeIfAbsent(mcode, k -> new ArrayList<>()); + + Map map = new HashMap<>(); + map.put("rowType", "route"); + map.put("routeDescription", item.getRouteDescription()); + map.put("materialCode", item.getMaterialCode()); + map.put("materialName", item.getMaterialName()); + map.put("material", item.getMaterial()); + map.put("discWeight", item.getDiscWeight()); + map.put("processNo", item.getProcessNo()); + map.put("workCenter", item.getWorkCenter()); + map.put("processName", item.getProcessName()); + map.put("processDescription", item.getProcessDescription()); + map.put("processControl", item.getProcessControl()); + map.put("activityDuration", item.getActivityDuration()); + map.put("activityUnit", item.getActivityUnit()); + map.put("unitQuantity", item.getUnitQuantity()); + map.put("batchQuantity", item.getBatchQuantity()); + map.put("firstBatchQuantity", item.getFirstBatchQuantity()); + map.put("planStartTime", formatDate(item.getPlanStartTime())); + map.put("planEndTime", formatDate(item.getPlanEndTime())); + map.put("xuStartTime", formatDate(item.getXuStartTime())); + map.put("xuEndTime", formatDate(item.getXuEndTime())); + + // BOM占位(当前行类型为工艺,BOM字段置空) + map.put("rawMaterialCode", ""); + map.put("rawMaterialName", ""); + map.put("bomMaterial", ""); + map.put("bomDanZhong", ""); + map.put("discUsage", ""); + map.put("bomUnit", ""); + + grouped.get(mcode).add(map); + } + + // 追加BOM数据到对应物料分组;若该物料此前未出现,则在最后新增一个分组 + for (Map row : kingdeeBomRows) { + String mcode = Objects.toString(row.get("materialCode"), ""); + grouped.computeIfAbsent(mcode, k -> new ArrayList<>()); + + Map map = new HashMap<>(); + map.put("rowType", "bom"); + map.put("routeDescription", row.get("routeDescription")); + map.put("materialCode", row.get("materialCode")); + map.put("materialName", row.get("materialName")); + map.put("material", row.get("material")); + map.put("discWeight", row.get("discWeight")); + + // 工艺占位(当前行类型为BOM,工艺字段置空) + map.put("processNo", ""); + map.put("workCenter", ""); + map.put("processName", ""); + map.put("processDescription", ""); + map.put("processControl", ""); + map.put("activityDuration", ""); + map.put("activityUnit", ""); + map.put("unitQuantity", ""); + map.put("batchQuantity", ""); + map.put("firstBatchQuantity", ""); + map.put("planStartTime", ""); + map.put("planEndTime", ""); + map.put("xuStartTime", ""); + map.put("xuEndTime", ""); + + // BOM具体字段 + map.put("rawMaterialCode", row.get("rawMaterialCode")); + map.put("rawMaterialName", row.get("rawMaterialName")); + map.put("bomMaterial", row.get("bomMaterial")); + map.put("bomDanZhong", row.get("bomDanZhong")); + map.put("discUsage", row.get("discUsage")); + map.put("bomUnit", row.get("bomUnit")); + + grouped.get(mcode).add(map); + } + + // 展平为顺序列表并补齐序号 + List> result = new ArrayList<>(); + int index = 1; + for (Map.Entry>> entry : grouped.entrySet()) { + for (Map m : entry.getValue()) { + m.put("index", index++); + result.add(m); + } + } + return result; + } + private List> convertKingdeeBomToMapList(List> kingdeeBomRows) { List> mapList = new ArrayList<>(); int index = 1; diff --git a/ruoyi-system/src/main/resources/jpg/生产及工艺计划模版.xlsx b/ruoyi-system/src/main/resources/jpg/生产及工艺计划模版.xlsx index caaf06d56309f892f6932d3b385867a2ac56662e..7f72a343d2580c96e6024997348a2380b7951787 100644 GIT binary patch delta 12398 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 delta 12355 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