From d0b3c7e7661904ef83900b93e550cabd038db80d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Fri, 10 Jul 2026 13:49:29 +0800 Subject: [PATCH 1/5] =?UTF-8?q?refactor(CoilTable):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=86=97=E4=BD=99=E7=9A=84itemName=E5=8F=82=E6=95=B0=E4=BC=A0?= =?UTF-8?q?=E9=80=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除了不必要的itemName手动赋值,利用展开运算符直接传入row数据即可,简化代码逻辑 --- klp-ui/src/views/crm/components/CoilTable.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/klp-ui/src/views/crm/components/CoilTable.vue b/klp-ui/src/views/crm/components/CoilTable.vue index 2b7eb6ffc..134399869 100644 --- a/klp-ui/src/views/crm/components/CoilTable.vue +++ b/klp-ui/src/views/crm/components/CoilTable.vue @@ -220,7 +220,6 @@ export default { this.labelRender.visible = true; this.labelRender.data = { ...row, - itemName: itemName, updateTime: row.updateTime?.split(' ')[0] || '', }; }, From 8ee5ab0a8dfc268868e8a245fa2f5f7b47a88f91 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Fri, 10 Jul 2026 15:39:55 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E9=80=80?= =?UTF-8?q?=E7=81=AB=E6=80=A7=E8=83=BD=E6=9F=A5=E8=AF=A2=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E5=8F=8C=E9=87=8D=E5=BA=93=E5=8C=BA=E7=AD=9B=E9=80=89=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 WmsAnnealPerformanceBo 中新增 coilWarehouseId 字段用于钢卷本身库区筛选 - 更新数据库查询映射,支持出炉时逻辑库区和钢卷本身库区的分别筛选 - 修改服务实现逻辑,区分出炉时逻辑库区和钢卷本身库区的数据处理 - 优化查询条件判断,支持多种筛选条件组合的统计信息重新计算 --- .../klp/domain/bo/WmsAnnealPerformanceBo.java | 5 +++- .../impl/WmsAnnealPerformanceServiceImpl.java | 30 ++++++++++++------- .../mapper/WmsAnnealPerformanceMapper.xml | 11 +++++-- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsAnnealPerformanceBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsAnnealPerformanceBo.java index f2e94362d..b57d97a30 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsAnnealPerformanceBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsAnnealPerformanceBo.java @@ -35,6 +35,9 @@ public class WmsAnnealPerformanceBo { // 当前钢卷号 private String currentCoilNo; - // 逻辑库区id + // 逻辑库区id(出炉时的逻辑库区,对应wms_furnace_plan_coil.logic_warehouse_id) private Long warehouseId; + + // 钢卷所在库区id(钢卷本身的逻辑库区,对应wms_material_coil.warehouse_id) + private Long coilWarehouseId; } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java index e1fcaa204..59917f106 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java @@ -118,7 +118,16 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer continue; } - // 为每个钢卷设置逻辑库区ID、层级和钢卷信息 + // 设置出炉时的逻辑库区到detail级别(取第一个非空的logicWarehouseId) + for (WmsFurnacePlanCoil planCoil : planCoils) { + if (planCoil.getLogicWarehouseId() != null) { + detail.setLogicWarehouseId(planCoil.getLogicWarehouseId()); + detail.setLogicWarehouseName(logicWarehouseNameMap.get(planCoil.getLogicWarehouseId())); + break; + } + } + + // 为每个钢卷设置炉火层级和钢卷信息(不覆盖钢卷本身的逻辑库区) List coilVos = new ArrayList<>(); for (WmsFurnacePlanCoil planCoil : planCoils) { Long coilId = planCoil.getCoilId(); @@ -132,11 +141,8 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer coilVo.setCoilId(coilId); } - // 设置逻辑库区ID和层级(每个钢卷可能不同) - if (planCoil.getLogicWarehouseId() != null) { - coilVo.setWarehouseId(planCoil.getLogicWarehouseId()); - coilVo.setWarehouseName(logicWarehouseNameMap.get(planCoil.getLogicWarehouseId())); - } + // 保持钢卷本身的warehouseId/warehouseName不变,不覆盖 + // 设置炉火层级 coilVo.setFurnaceLevel(planCoil.getFurnaceLevel()); @@ -153,9 +159,10 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer continue; // 跳过不匹配的钢卷 } } - if (bo.getWarehouseId() != null) { + // 钢卷本身的逻辑库区筛选(coilVo.warehouseId保持不变) + if (bo.getCoilWarehouseId() != null) { if (coilVo.getWarehouseId() == null || - !coilVo.getWarehouseId().equals(bo.getWarehouseId())) { + !coilVo.getWarehouseId().equals(bo.getCoilWarehouseId())) { continue; // 跳过不匹配的钢卷 } } @@ -178,8 +185,11 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer // 移除没有钢卷的计划 details.removeIf(detail -> detail.getCoils() == null || detail.getCoils().isEmpty()); - // 如果传入了enterCoilNo筛选条件,重新计算统计信息 - if (bo.getEnterCoilNo() != null && !bo.getEnterCoilNo().isEmpty()) { + // 如果传入了筛选条件,重新计算统计信息 + if ((bo.getEnterCoilNo() != null && !bo.getEnterCoilNo().isEmpty()) + || (bo.getCurrentCoilNo() != null && !bo.getCurrentCoilNo().isEmpty()) + || bo.getWarehouseId() != null + || bo.getCoilWarehouseId() != null) { summary.setPlanCount(filteredPlanCount); summary.setCoilCount(filteredCoilCount); summary.setTotalWeight(filteredTotalWeight); diff --git a/klp-wms/src/main/resources/mapper/WmsAnnealPerformanceMapper.xml b/klp-wms/src/main/resources/mapper/WmsAnnealPerformanceMapper.xml index fea6bdbf7..7f9831ef7 100644 --- a/klp-wms/src/main/resources/mapper/WmsAnnealPerformanceMapper.xml +++ b/klp-wms/src/main/resources/mapper/WmsAnnealPerformanceMapper.xml @@ -20,12 +20,17 @@ AND mc.enter_coil_no LIKE CONCAT('%', #{enterCoilNo}, '%') - + AND mc.current_coil_no LIKE CONCAT('%', #{currentCoilNo}, '%') + - AND mc.warehouse_id = #{warehouseId} + AND pc.logic_warehouse_id = #{warehouseId} + + + + AND mc.warehouse_id = #{coilWarehouseId} @@ -49,7 +54,7 @@ p.end_time AS endTime FROM wms_furnace_plan p LEFT JOIN wms_furnace f ON f.furnace_id = p.target_furnace_id - + INNER JOIN wms_furnace_plan_coil pc ON pc.plan_id = p.plan_id AND pc.del_flag = 0 INNER JOIN wms_material_coil mc ON mc.coil_id = pc.coil_id AND mc.del_flag = 0 From a247560fd6631a1e8a726cc4e11d99b4e52a0927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Fri, 10 Jul 2026 15:47:00 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat(wms=20anneal=20report):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=87=BA=E7=82=89=E5=BA=93=E5=8C=BA=E5=92=8C=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=BA=93=E5=8C=BA=E6=9F=A5=E8=AF=A2=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E5=8F=8A=E5=B1=95=E7=A4=BA=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整查询表单的库区标签为出炉库区,新增逻辑库区筛选组件,同时在表格中添加入炉库区展示列,完善查询参数初始化 --- klp-ui/src/views/wms/anneal/performance/report.vue | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/klp-ui/src/views/wms/anneal/performance/report.vue b/klp-ui/src/views/wms/anneal/performance/report.vue index 1e1499b5f..08c43731f 100644 --- a/klp-ui/src/views/wms/anneal/performance/report.vue +++ b/klp-ui/src/views/wms/anneal/performance/report.vue @@ -21,9 +21,12 @@ - + + + + 查询 重置 @@ -56,6 +59,7 @@ + @@ -100,9 +104,12 @@ export default { queryParams: { startTime, endTime, + currentCoilNo: undefined, targetFurnaceId: undefined, planNo: undefined, enterCoilNo: undefined, + warehouseId: undefined, + coilWarehouseId: undefined, }, summary: {}, detailList: [], @@ -142,7 +149,6 @@ export default { } }) || [] }).flat(); - console.log(this.detailList); this.loading = false; }).catch(() => { this.loading = false; From 45f2dfd2a5de05860c881416aa52fe20136b3a2b Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Fri, 10 Jul 2026 17:02:01 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix(attendance):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=80=83=E5=8B=A4=E8=AE=B0=E5=BD=95=E4=B8=AD=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E4=B8=8D=E5=87=86=E7=A1=AE=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 WmsEmployeeInfoMapper 和 WmsEmployeeInfo 依赖 - 添加 wmsEmployeeInfoMapper 成员变量用于查询员工信息 - 从 wms_employee_info 表获取准确的部门信息,替代打卡机中的部门数据 - 使用员工姓名作为键构建姓名到部门的映射关系 - 当存在准确部门信息时优先使用数据库中的部门名称 - 保持原有逻辑作为备选方案以确保数据完整性 --- .../impl/AttendanceRecordsServiceImpl.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/klp-wms/src/main/java/com/klp/service/impl/AttendanceRecordsServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/AttendanceRecordsServiceImpl.java index 9d1f074f1..af9a5b4c9 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/AttendanceRecordsServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/AttendanceRecordsServiceImpl.java @@ -15,6 +15,8 @@ import com.klp.domain.bo.AttendanceRecordsBo; import com.klp.domain.vo.AttendanceRecordsVo; import com.klp.domain.AttendanceRecords; import com.klp.mapper.AttendanceRecordsMapper; +import com.klp.mapper.WmsEmployeeInfoMapper; +import com.klp.domain.WmsEmployeeInfo; import com.klp.service.IAttendanceRecordsService; import javax.servlet.http.HttpServletResponse; @@ -35,6 +37,7 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService { private static final Logger log = LoggerFactory.getLogger(AttendanceRecordsServiceImpl.class); private final AttendanceRecordsMapper baseMapper; + private final WmsEmployeeInfoMapper wmsEmployeeInfoMapper; @Override public AttendanceRecordsVo queryById(Integer id) { @@ -134,6 +137,23 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService { lqw.orderByAsc(AttendanceRecords::getPin).orderByAsc(AttendanceRecords::getChecktime); List records = baseMapper.selectList(lqw); + // 从 wms_employee_info 获取正确的部门(打卡机里的部门可能不准) + Set names = records.stream() + .map(AttendanceRecords::getEname) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toSet()); + final Map nameDeptMap = new HashMap<>(); + if (!names.isEmpty()) { + List empList = wmsEmployeeInfoMapper.selectList( + Wrappers.lambdaQuery() + .select(WmsEmployeeInfo::getName, WmsEmployeeInfo::getDept) + .in(WmsEmployeeInfo::getName, names) + ); + empList.stream() + .filter(e -> StringUtils.isNotBlank(e.getName()) && StringUtils.isNotBlank(e.getDept())) + .forEach(e -> nameDeptMap.put(e.getName(), e.getDept())); + } + // 3. 按员工分组,再按日期分组 // key: pin, value: 员工信息 + 按天分组的打卡记录 LinkedHashMap employeeMap = new LinkedHashMap<>(); @@ -145,7 +165,7 @@ public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService { EmployeeAttendance e = new EmployeeAttendance(); e.pin = r.getPin(); e.ename = r.getEname(); - e.deptname = r.getDeptname(); + e.deptname = nameDeptMap.getOrDefault(r.getEname(), r.getDeptname()); e.dailyRecords = new TreeMap<>(); return e; }); From 325c0a288f5ffb4e268ae6a600f58a9da72ec39f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Fri, 10 Jul 2026 17:05:02 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix(wms/hrm/attendance/sync):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=89=93=E5=8D=A1=E6=97=B6=E9=97=B4=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将打卡时间从仅显示日期调整为显示完整的年月日时分秒格式 --- klp-ui/src/views/wms/hrm/attendance/sync.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/klp-ui/src/views/wms/hrm/attendance/sync.vue b/klp-ui/src/views/wms/hrm/attendance/sync.vue index 821b4a853..48630a642 100644 --- a/klp-ui/src/views/wms/hrm/attendance/sync.vue +++ b/klp-ui/src/views/wms/hrm/attendance/sync.vue @@ -86,7 +86,7 @@