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] || '', }; }, 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; 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 @@ 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/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; }); 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