From 1c0b0da99e10dccf2ca45a07a19a1665822e2555 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 25 Jun 2026 15:04:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E9=80=80=E7=81=AB=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E9=80=89=E6=8B=A9=E5=90=88=E5=90=8C=E6=8F=90=E5=89=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在退火计划表格中添加合同号选择功能,支持远程搜索和下拉选择 - 更新数据库表结构,在wms_furnace_plan_coil表中新增contract_id字段 - 修改后端实体类将contractNo改为contractId,并更新相关映射配置 - 调整前端页面布局,将左右两列比例从12:12调整为10:14 - 优化退火完成验证逻辑,要求所有钢卷必须绑定合同后才能完成操作 - 修复材料网格布局样式,改为固定2列显示 - 添加订单列表加载和搜索功能,支持按关键词过滤 - 更新完成退火对话框提示文案,明确合同绑定要求 --- .../resources/db/migration/V9__anneal_wip.sql | 3 + klp-ui/src/views/wms/anneal/plan/ctrl.vue | 112 ++++++++++++------ .../com/klp/domain/WmsFurnacePlanCoil.java | 4 +- .../klp/domain/bo/WmsFurnacePlanCoilBo.java | 4 +- .../klp/domain/vo/WmsFurnacePlanCoilVo.java | 4 +- .../impl/WmsFurnacePlanCoilServiceImpl.java | 2 +- .../impl/WmsFurnacePlanServiceImpl.java | 7 +- .../mapper/klp/WmsFurnacePlanCoilMapper.xml | 2 +- script/sql/mysql/klp-oa.sql | 1 + 9 files changed, 97 insertions(+), 42 deletions(-) diff --git a/klp-admin/src/main/resources/db/migration/V9__anneal_wip.sql b/klp-admin/src/main/resources/db/migration/V9__anneal_wip.sql index 43b88727b..fdc0f2197 100644 --- a/klp-admin/src/main/resources/db/migration/V9__anneal_wip.sql +++ b/klp-admin/src/main/resources/db/migration/V9__anneal_wip.sql @@ -36,6 +36,9 @@ CREATE TABLE IF NOT EXISTS wms_furnace_plan_coil ( plan_coil_id BIGINT AUTO_INCREMENT PRIMARY KEY, plan_id BIGINT NOT NULL COMMENT '计划ID', coil_id BIGINT NOT NULL COMMENT '钢卷ID', + logic_warehouse_id BIGINT NULL COMMENT '逻辑库区去向(钢卷退火后目标逻辑库区)', + furnace_level TINYINT(1) NULL COMMENT '炉火层级(1=一层,2=二层,3=三层)', + contract_id BIGINT NULL COMMENT '合同ID', del_flag TINYINT DEFAULT 0 COMMENT '删除标记(0正常 1删除)', create_by VARCHAR(64) NULL, update_by VARCHAR(64) NULL, diff --git a/klp-ui/src/views/wms/anneal/plan/ctrl.vue b/klp-ui/src/views/wms/anneal/plan/ctrl.vue index f6c37c365..05a718992 100644 --- a/klp-ui/src/views/wms/anneal/plan/ctrl.vue +++ b/klp-ui/src/views/wms/anneal/plan/ctrl.vue @@ -52,7 +52,7 @@ @pagination="getList" /> - +
领料列表 @@ -102,7 +102,7 @@
- +
退火计划 @@ -136,8 +136,33 @@ - - + + + + - + @@ -238,6 +261,7 @@ import { listAnnealPlan, updateAnnealPlanCoil, getAnnealPlan, addAnnealPlan, updateAnnealPlan, delAnnealPlan, changeAnnealPlanStatus, inFurnace, completeAnnealPlan, listAnnealPlanCoils, bindAnnealPlanCoils, unbindAnnealPlanCoil } from "@/api/wms/annealPlan"; import { listAnnealFurnace } from "@/api/wms/annealFurnace"; import { listMaterialCoil } from "@/api/wms/coil"; +import { listOrder } from "@/api/crm/order"; import { listCoilContractRel } from '@/api/wms/coilContractRel'; import { listWarehouse } from '@/api/wms/warehouse' import WarehouseSelect from "@/components/KLPService/WarehouseSelect"; @@ -279,6 +303,8 @@ export default { }, currentPlan: {}, coilList: [], + orderList: [], + orderLoading: false, materialLoading: false, materialTotal: 0, materialList: [], @@ -303,6 +329,7 @@ export default { floatLayerConfig: { columns: [ { label: '入场钢卷号', prop: 'enterCoilNo' }, + { label: '合同号', prop: 'contractId' }, { label: '当前钢卷号', prop: 'coil.currentCoilNo' }, { label: '厂家卷号', prop: 'coil.supplierCoilNo' }, { label: '逻辑库位', prop: 'coil.warehouseName' }, @@ -332,6 +359,7 @@ export default { this.loadFurnaces(); this.getMaterialCoils(); this.loadWarehouses(); + this.loadOrderList(); }, methods: { getList() { @@ -363,6 +391,33 @@ export default { this.loadPlanCoils(); }); }, + handleContractIdChange(row) { + updateAnnealPlanCoil(row).then(() => { + this.$message.success('合同号已更新'); + }); + }, + loadOrderList() { + this.orderLoading = true; + listOrder({ pageNum: 1, pageSize: 100 }).then(response => { + this.orderList = response.rows || []; + this.orderLoading = false; + }).catch(() => { + this.orderLoading = false; + }); + }, + remoteSearchOrders(query) { + if (query) { + this.orderLoading = true; + listOrder({ pageNum: 1, pageSize: 20, keyword: query }).then(response => { + this.orderList = response.rows || []; + this.orderLoading = false; + }).catch(() => { + this.orderLoading = false; + }); + } else { + this.loadOrderList(); + } + }, getMaterialCoils() { this.materialLoading = true; listMaterialCoil(this.materialQueryParams).then(response => { @@ -397,17 +452,10 @@ export default { ...item, coilId: item.coilId, enterCoilNo: item.enterCoilNo, - warehouseId: item.logicWarehouseId || null + warehouseId: item.logicWarehouseId || null, + contractId: item.contractId || null, + contractCode: (this.orderList.find(o => o.orderId === item.contractId) || {}).contractCode || null, })); - // 查询每个钢卷绑定的合同号作为默认值 - for (const coil of this.completeCoils) { - listCoilContractRel({ coilId: coil.coilId }).then(res => { - const rows = res.rows || [] - if (rows.length > 0 && rows[0].contractId) { - this.$set(coil, 'contractId', rows[0].contractId) - } - }) - } this.completeLoading = false; }).catch(() => { this.completeLoading = false; @@ -585,9 +633,14 @@ export default { warehouseId: item.warehouseId, contractId: item.contractId, })); - const missing = locations.filter(item => !item.warehouseId || !item.contractId); - if (missing.length > 0) { - this.$message.warning('请先为所有钢卷分配实际库位和关联合同'); + const missingWarehouse = locations.filter(item => !item.warehouseId); + if (missingWarehouse.length > 0) { + this.$message.warning('请先为所有钢卷分配实际库位'); + return; + } + const missingContract = locations.filter(item => !item.contractId); + if (missingContract.length > 0) { + this.$message.warning('请先在明细中为所有钢卷绑定合同后再完成退火'); return; } this.completeLoading = true; @@ -703,8 +756,7 @@ export default { /* ========== 修复在这里 ========== */ .material-grid { display: grid; - /* 核心修复:去掉固定 4 列,改用自动填充,实现真正自适应 */ - grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + grid-template-columns: repeat(2, 1fr); gap: 12px; min-height: 120px; /* 必须加,让 grid 不受父级弹性压缩影响 */ @@ -712,15 +764,6 @@ export default { box-sizing: border-box; } -/* 媒体查询只需要控制最小宽度即可,不用写死列数 */ -@media (max-width: 768px) { - .material-grid { - grid-template-columns: 1fr; - } -} - -/* =============================== */ - .material-card { border: 1px solid #e9ecf2; border-radius: 8px; @@ -806,3 +849,6 @@ export default { padding-bottom: 40px; } + diff --git a/klp-wms/src/main/java/com/klp/domain/WmsFurnacePlanCoil.java b/klp-wms/src/main/java/com/klp/domain/WmsFurnacePlanCoil.java index 5493ff3a8..c2efabf43 100644 --- a/klp-wms/src/main/java/com/klp/domain/WmsFurnacePlanCoil.java +++ b/klp-wms/src/main/java/com/klp/domain/WmsFurnacePlanCoil.java @@ -47,9 +47,9 @@ public class WmsFurnacePlanCoil extends BaseEntity { private Integer furnaceLevel; /** - * 合同号 + * 合同ID */ - private String contractNo; + private Long contractId; /** * 删除标志(0=正常,1=已删除) diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsFurnacePlanCoilBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsFurnacePlanCoilBo.java index 902473856..d5b0db937 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsFurnacePlanCoilBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsFurnacePlanCoilBo.java @@ -43,9 +43,9 @@ public class WmsFurnacePlanCoilBo extends BaseEntity { private Integer furnaceLevel; /** - * 合同号 + * 合同ID */ - private String contractNo; + private Long contractId; /** * 钢卷ID列表(逗号分隔) diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsFurnacePlanCoilVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsFurnacePlanCoilVo.java index 43c223c7f..b708df869 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsFurnacePlanCoilVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsFurnacePlanCoilVo.java @@ -34,8 +34,8 @@ public class WmsFurnacePlanCoilVo { @ExcelProperty(value = "炉火层级") private Integer furnaceLevel; - @ExcelProperty(value = "合同号") - private String contractNo; + @ExcelProperty(value = "合同ID") + private Long contractId; @ExcelProperty(value = "入场钢卷号") private String enterCoilNo; diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanCoilServiceImpl.java index 34f40b873..b2ef79572 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanCoilServiceImpl.java @@ -64,7 +64,7 @@ public class WmsFurnacePlanCoilServiceImpl implements IWmsFurnacePlanCoilService lqw.eq(bo.getCoilId() != null, WmsFurnacePlanCoil::getCoilId, bo.getCoilId()); lqw.eq(bo.getLogicWarehouseId() != null, WmsFurnacePlanCoil::getLogicWarehouseId, bo.getLogicWarehouseId()); lqw.eq(bo.getFurnaceLevel() != null, WmsFurnacePlanCoil::getFurnaceLevel, bo.getFurnaceLevel()); - lqw.eq(bo.getContractNo() != null, WmsFurnacePlanCoil::getContractNo, bo.getContractNo()); + lqw.eq(bo.getContractId() != null, WmsFurnacePlanCoil::getContractId, bo.getContractId()); return lqw; } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanServiceImpl.java index a609b4a5e..9904d1e3a 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanServiceImpl.java @@ -392,6 +392,11 @@ public class WmsFurnacePlanServiceImpl implements IWmsFurnacePlanService { if (targetLocation == null) { throw new ServiceException("钢卷" + coil.getEnterCoilNo() + "未分配库位"); } + // 校验合同ID:必须所有钢卷都已绑定合同 + Long contractId = contractIdMap.get(coil.getCoilId()); + if (contractId == null) { + throw new ServiceException("钢卷" + coil.getEnterCoilNo() + "未绑定合同,请先在明细中设置合同"); + } WmsMaterialCoil oldCoil = materialCoilMapper.selectById(coil.getCoilId()); if (oldCoil == null) { @@ -414,7 +419,7 @@ public class WmsFurnacePlanServiceImpl implements IWmsFurnacePlanService { updateBo.setStatus(0); updateBo.setExportBy(null); updateBo.setExportTime(null); - updateBo.setContractId(contractIdMap.get(coil.getCoilId())); + updateBo.setContractId(contractId); materialCoilService.updateByBo(updateBo, "annealing"); diff --git a/klp-wms/src/main/resources/mapper/klp/WmsFurnacePlanCoilMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsFurnacePlanCoilMapper.xml index 3a746c15c..dea43a776 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsFurnacePlanCoilMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsFurnacePlanCoilMapper.xml @@ -10,7 +10,7 @@ - + diff --git a/script/sql/mysql/klp-oa.sql b/script/sql/mysql/klp-oa.sql index 6e0d5e635..26cb70cdb 100644 --- a/script/sql/mysql/klp-oa.sql +++ b/script/sql/mysql/klp-oa.sql @@ -3976,6 +3976,7 @@ CREATE TABLE `wms_furnace_plan_coil` ( `coil_id` bigint NOT NULL COMMENT '钢卷ID', `logic_warehouse_id` bigint NULL DEFAULT NULL COMMENT '逻辑库区去向(钢卷退火后目标逻辑库区)', `furnace_level` tinyint(1) NULL DEFAULT NULL COMMENT '炉火层级(1=一层,2=二层,3=三层)', + `contract_id` bigint NULL DEFAULT NULL COMMENT '合同ID', `del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标记(0正常 1删除)', `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,