From 08574f46cff13c74683c55e46eec703b11aa4729 Mon Sep 17 00:00:00 2001 From: z Date: Fri, 24 Apr 2026 15:29:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E8=B4=A7=E5=8D=95=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bdgzsomthing/bdgzsomthingController.java | 2 +- .../DataAcquisitionMapper.java | 63 +++++++++-- .../DataAcquisitionServiceImpl.java | 48 +------- .../service/screen/ScreenServiceImpl.java | 104 ++++++++++++++++-- .../src/views/heli/deliverorder/index.vue | 2 +- .../heli/deliverorder/shipmentsPrint.vue | 27 ++++- 6 files changed, 182 insertions(+), 64 deletions(-) diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/bdgzsomthing/bdgzsomthingController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/bdgzsomthing/bdgzsomthingController.java index d85535fb..a3dbff9e 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/bdgzsomthing/bdgzsomthingController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/bdgzsomthing/bdgzsomthingController.java @@ -151,7 +151,7 @@ public class bdgzsomthingController { BeanUtils.toBean(list, bdgzsomthingRespVO.class)); } - @Scheduled(fixedRate = 10800000) +// @Scheduled(fixedRate = 10800000) public void scheduledTask() { bdgzsomthingService.selectds(); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/dataacquisition/DataAcquisitionMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/dataacquisition/DataAcquisitionMapper.java index 7663c13d..cfaf4ad8 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/dataacquisition/DataAcquisitionMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/dataacquisition/DataAcquisitionMapper.java @@ -10,7 +10,9 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.configuration.Configurati import com.chanko.yunxi.mes.module.heli.dal.dataobject.dataacquisition.DataAcquisitionDO; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; import com.chanko.yunxi.mes.module.heli.controller.admin.dataacquisition.vo.*; /** @@ -46,18 +48,57 @@ public interface DataAcquisitionMapper extends BaseMapperX { "ORDER BY t1.running_status ASC") List selectLatestByCode(); - @Select("SELECT t1.id FROM equipment_data_acquisition t1 " + - "INNER JOIN (" + - " SELECT code, MAX(create_time) AS max_create_time " + - " FROM equipment_data_acquisition " + - " WHERE status = 1 " + - " GROUP BY code" + - ") t2 ON t1.code = t2.code " + - "WHERE t1.status = 0 " + - " AND t1.create_time > t2.max_create_time " + - "ORDER BY t1.create_time ASC") + @Select("SELECT id FROM (" + + " SELECT t1.id, " + + " @rn := IF(@prev_code = t1.code, @rn + 1, 1) AS row_num, " + + " @prev_code := t1.code " + + " FROM equipment_data_acquisition t1 " + + " INNER JOIN (" + + " SELECT code, MAX(CASE WHEN status = 1 THEN create_time END) AS max_status1_time " + + " FROM equipment_data_acquisition GROUP BY code" + + " ) t2 ON t1.code = t2.code, (SELECT @rn := 0, @prev_code := '') vars " + + " WHERE t1.status = 0 " + + " AND (t2.max_status1_time IS NULL OR t1.create_time > t2.max_status1_time) " + + " ORDER BY t1.code, t1.create_time" + + ") ranked WHERE row_num = 1") List selectNextStatusZeroIds(); + @Update("UPDATE equipment_data_acquisition t " + + "INNER JOIN (" + + " SELECT target_id FROM (" + + " SELECT id AS target_id FROM (" + + " SELECT t1.id, " + + " @rn := IF(@prev_code = t1.code, @rn + 1, 1) AS row_num, " + + " @prev_code := t1.code " + + " FROM equipment_data_acquisition t1 " + + " INNER JOIN (" + + " SELECT code, MAX(CASE WHEN status = 1 THEN create_time END) AS max_status1_time " + + " FROM equipment_data_acquisition GROUP BY code" + + " ) t2 ON t1.code = t2.code, (SELECT @rn := 0, @prev_code := '') vars " + + " WHERE t1.status = 0 " + + " AND (t2.max_status1_time IS NULL OR t1.create_time > t2.max_status1_time) " + + " ORDER BY t1.code, t1.create_time" + + " ) ranked WHERE row_num = 1" + + " ) tmp" + + ") target ON t.id = target.target_id " + + "SET t.status = 1") + int updateNextStatusToActive(); + + @Update("UPDATE equipment_data_acquisition t " + + "INNER JOIN (" + + " SELECT id, " + + " DATE_ADD(#{baseTime}, INTERVAL rn * 5 SECOND) AS new_time " + + " FROM (" + + " SELECT id, code, " + + " @rn := IF(@prev_code = code, @rn + 1, 0) AS rn, " + + " @prev_code := code " + + " FROM equipment_data_acquisition, (SELECT @rn := 0, @prev_code := '') vars " + + " ORDER BY code, id" + + " ) ranked" + + ") calc ON t.id = calc.id " + + "SET t.create_time = calc.new_time") + int batchUpdateTimeByGroup(@Param("baseTime") java.time.LocalDateTime baseTime); + default List getDataAcquisitionList(String code){ MPJLambdaWrapper query = new MPJLambdaWrapper<>(); query.selectAll(DataAcquisitionDO.class) @@ -70,6 +111,6 @@ public interface DataAcquisitionMapper extends BaseMapperX { .last("limit 10"); return selectList(query); } - @Select("") + @Select("SELECT status FROM equipment_job_config LIMIT 1;") Integer selectStatus(); } \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/dataacquisition/DataAcquisitionServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/dataacquisition/DataAcquisitionServiceImpl.java index d60a5344..f5e38836 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/dataacquisition/DataAcquisitionServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/dataacquisition/DataAcquisitionServiceImpl.java @@ -3,7 +3,6 @@ package com.chanko.yunxi.mes.module.heli.service.dataacquisition; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.module.heli.controller.admin.dataacquisition.vo.DataAcquisitionPageReqVO; @@ -88,23 +87,13 @@ public class DataAcquisitionServiceImpl implements DataAcquisitionService { @Override public void updateDataCollection() { - // 查找每个 code 分组中 status=1 的最大 createTime 之后的 status=0 的最小记录的 id Integer integer = dataAcquisitionMapper.selectStatus(); - System.out.println("=== equipment_job_config status: " + integer); + log.info("=== equipment_job_config status: {}", integer); if (ObjectUtil.isNotEmpty(integer) && integer == 0) { - List ids = dataAcquisitionMapper.selectNextStatusZeroIds(); - System.out.println("=== selectNextStatusZeroIds returned " + (ids == null ? 0 : ids.size()) + " ids: " + ids); - if (ObjectUtil.isNotEmpty(ids)) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.in(DataAcquisitionDO::getId, ids); - updateWrapper.set(DataAcquisitionDO::getStatus, 1); - int rows = dataAcquisitionMapper.update(null, updateWrapper); - System.out.println("=== updated rows: " + rows); - } else { - System.out.println("=== No status=0 records found"); - } + int rows = dataAcquisitionMapper.updateNextStatusToActive(); + log.info("=== updated rows: {}", rows); } else { - System.out.println("=== Task disabled (status != 0)"); + log.info("=== Task disabled (status != 0)"); } } @@ -120,33 +109,8 @@ public class DataAcquisitionServiceImpl implements DataAcquisitionService { @Override public void updateTime(LocalDateTime acquisitionTime) { - // 查询所有数据按 code 分组,并按 id 排序(id 代表插入顺序) - List allData = dataAcquisitionMapper.selectList( - new LambdaQueryWrapper() - .orderByAsc(DataAcquisitionDO::getId) - ); - - if (allData == null || allData.isEmpty()) { - return; - } - - // 按 code 分组 - Map> groupedByCode = allData.stream() - .collect(Collectors.groupingBy(DataAcquisitionDO::getCode, Collectors.toList())); - - // 遍历每个分组,更新时间 - for (Map.Entry> entry : groupedByCode.entrySet()) { - List groupData = entry.getValue(); - for (int i = 0; i < groupData.size(); i++) { - DataAcquisitionDO record = groupData.get(i); - // 第一条记录使用 updateReqVO 的时间,之后的每条增加5秒 - LocalDateTime newCreateTime = acquisitionTime.plusSeconds(i * 5L); - - // 更新该条记录的创建时间 - record.setCreateTime(newCreateTime); - dataAcquisitionMapper.updateById(record); - } - } + // 一条 SQL 批量更新:按 code 分组,每组内按 id 排序,第一条用 acquisitionTime,之后每条递增5秒 + dataAcquisitionMapper.batchUpdateTimeByGroup(acquisitionTime); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/screen/ScreenServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/screen/ScreenServiceImpl.java index 9c35e2b5..a8ad7acc 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/screen/ScreenServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/screen/ScreenServiceImpl.java @@ -10,6 +10,7 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.module.heli.controller.admin.screen.vo.ScreenPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.screen.vo.ScreenSaveReqVO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.equipmanufacture.EquipManufactureDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.found.FoundDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.monordnum.MonOrdNumDO; @@ -28,6 +29,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatch import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum.YearNumDO; +import com.chanko.yunxi.mes.module.heli.dal.mysql.customer.CustomerMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.equipmanufacture.EquipManufactureMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.found.FoundMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.monordnum.MonOrdNumMapper; @@ -114,6 +116,8 @@ public class ScreenServiceImpl implements ScreenService { private ProcessBomDetailMapper processBomDetailMapper; @Resource private ProcessDesignProgressMapper processDesignProgressMapper; + @Resource + private CustomerMapper customerMapper; @Override public Long createScreen(ScreenSaveReqVO createReqVO) { @@ -257,14 +261,62 @@ public class ScreenServiceImpl implements ScreenService { @Override public List searchProgress(Integer type) { ProcessDO processDO = processMapper.selectType(type); - if (ObjectUtil.isNotEmpty(processDO)) { - List processDetailDOS = processDetailMapper.selectProcessIdAndIsSelect(processDO.getId()); - if (ObjectUtil.isNotEmpty(processDetailDOS)) { - return processDetailDOS; - } - return processDetailMapper.selectProcessId(processDO.getId()); + if (ObjectUtil.isEmpty(processDO)) { + return new ArrayList<>(); } - return new ArrayList<>(); + + List processDetailDOS = processDetailMapper.selectProcessIdAndIsSelect(processDO.getId()); + List result; + if (ObjectUtil.isEmpty(processDetailDOS)) { + result = processDetailMapper.selectProcessId(processDO.getId()); + } else { + result = processDetailDOS; + } + + if (ObjectUtil.isEmpty(result)) { + return new ArrayList<>(); + } + + // 批量查询项目和客户信息,避免N+1查询 + List projectIds = result.stream() + .map(ProcessDetailDO::getProjectId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + + if (CollUtil.isEmpty(projectIds)) { + return result; + } + + Map projectOrderMap = projectOrderMapper.selectBatchIds(projectIds).stream() + .collect(Collectors.toMap(ProjectOrderDO::getId, Function.identity())); + + List customerIds = projectOrderMap.values().stream() + .map(ProjectOrderDO::getCustomerId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + + Map customerMap; + if (CollUtil.isNotEmpty(customerIds)) { + customerMap = customerMapper.selectBatchIds(customerIds).stream() + .collect(Collectors.toMap(CustomerDO::getId, Function.identity())); + } else { + customerMap = Collections.emptyMap(); + } + + // 设置项目名称和客户简称 + result.forEach(processDetailDO -> { + ProjectOrderDO projectOrderDO = projectOrderMap.get(processDetailDO.getProjectId()); + if (ObjectUtil.isNotEmpty(projectOrderDO) && ObjectUtil.isNotEmpty(projectOrderDO.getCustomerId())) { + CustomerDO customerDO = customerMap.get(projectOrderDO.getCustomerId()); + if (ObjectUtil.isNotEmpty(customerDO)) { + processDetailDO.setProjectNameSim(projectOrderDO.getProjectNameSim() + "(" + customerDO.getBrief() + ")"); + } + } + }); + + return result; } public void syncYearData() { @@ -345,6 +397,19 @@ public class ScreenServiceImpl implements ScreenService { ProcessDO process = getProcess(1); List projectOrderDOS =projectOrderMapper.selectOrder(); List processDetailDOS = processDetailMapper.selectProcessIdAndIsSelect(process.getId()); + for (ProcessDetailDO processDetailDO : processDetailDOS) { + ProjectOrderDO projectOrderDO = projectOrderMapper.selectById(processDetailDO.getProjectId()); + if (ObjectUtil.isNotEmpty(projectOrderDO)){ + processDetailDO.setProjectName(projectOrderDO.getProjectName()); + processDetailDO.setProjectNameSim(projectOrderDO.getProjectNameSim()); + processDetailDO.setProjectId(projectOrderDO.getId()); + processDetailDO.setOrdDate(projectOrderDO.getOrderTime()); + processDetailDO.setProjectStartTime(projectOrderDO.getProjectStartTime()); + processDetailDO.setProjectEndTime(projectOrderDO.getProjectEndTime()); + processDetailDO.setDeliveryStatus(projectOrderDO.getDeliveryStatus()); + + } + } //删除现有数据 deleteProcessDetail(process.getId()); List addList = new ArrayList<>(); @@ -535,6 +600,19 @@ public class ScreenServiceImpl implements ScreenService { ProcessDO process = getProcess(3); List projectOrderDOS =projectOrderMapper.selectOrder(); List processDetailDOS = processDetailMapper.selectProcessIdAndIsSelect(process.getId()); + for (ProcessDetailDO processDetailDO : processDetailDOS) { + ProjectOrderDO projectOrderDO = projectOrderMapper.selectById(processDetailDO.getProjectId()); + if (ObjectUtil.isNotEmpty(projectOrderDO)){ + processDetailDO.setProjectName(projectOrderDO.getProjectName()); + processDetailDO.setProjectNameSim(projectOrderDO.getProjectNameSim()); + processDetailDO.setProjectId(projectOrderDO.getId()); + processDetailDO.setOrdDate(projectOrderDO.getOrderTime()); + processDetailDO.setProjectStartTime(projectOrderDO.getProjectStartTime()); + processDetailDO.setProjectEndTime(projectOrderDO.getProjectEndTime()); + processDetailDO.setDeliveryStatus(projectOrderDO.getDeliveryStatus()); + + } + } //删除现有数据 deleteProcessDetail(process.getId()); List addList = new ArrayList<>(); @@ -617,6 +695,18 @@ public class ScreenServiceImpl implements ScreenService { ProcessDO process = getProcess(2); List projectOrderDOS =projectOrderMapper.selectOrder(); List processDetailDOS = processDetailMapper.selectProcessIdAndIsSelect(process.getId()); + for (ProcessDetailDO processDetailDO : processDetailDOS) { + ProjectOrderDO projectOrderDO = projectOrderMapper.selectById(processDetailDO.getProjectId()); + if (ObjectUtil.isNotEmpty(projectOrderDO)){ + processDetailDO.setProjectName(projectOrderDO.getProjectName()); + processDetailDO.setProjectNameSim(projectOrderDO.getProjectNameSim()); + processDetailDO.setProjectId(projectOrderDO.getId()); + processDetailDO.setOrdDate(projectOrderDO.getOrderTime()); + processDetailDO.setProjectStartTime(projectOrderDO.getProjectStartTime()); + processDetailDO.setProjectEndTime(projectOrderDO.getProjectEndTime()); + processDetailDO.setDeliveryStatus(projectOrderDO.getDeliveryStatus()); + } + } //删除现有数据 deleteProcessDetail(process.getId()); List addList = new ArrayList<>(); diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/index.vue index addedb85..4b14d494 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/index.vue @@ -12,7 +12,7 @@ :inline="true" label-width="110px" > - + 项目名称 {{ formData.projectName }} 重量(T) {{ formData.transportWeight }} @@ -68,6 +68,7 @@ {{ item.name }} 备件:{{ item.name }} 刀具:{{ item.name }} + 其他:{{ item.name }} {{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, item.unit) }} {{ item.amount }} {{ item.weight }} @@ -183,7 +184,7 @@ 项目名称 {{ formData.projectName }} 重量(T) {{ formData.transportWeight }} @@ -331,6 +332,15 @@ style=" {{ item.amount }} {{ item.remark }} + + {{ index + 1 }} + + 其他:{{ item.name }} + + {{ item.blueprintNo }} + {{ item.amount }} + {{ item.remark }} + @@ -413,6 +423,15 @@ style=" {{ item.amount }} {{ item.remark }} + + {{ index + 1 }} + + 其他:{{ item.name }} + + {{ item.blueprintNo }} + {{ item.amount }} + {{ item.remark }} + @@ -584,6 +603,7 @@ const formData: any = ref({ deliverOrderOtherSubs: [], deliverOrderOtherSpareSubs: [], deliverOrderOtherCutterSubs: [], + otherSubs: [], attachments: [], operateLogs: [], active: undefined, @@ -627,6 +647,9 @@ const open = async (id: number) => { formData.value.deliverOrderOtherCutterSubs = subArr.filter( (sub) => sub.category == 'OTHER_LIST' && sub.subType == 2 ) + formData.value.otherSubs = subArr.filter( + (sub) => sub.category == 'OTHER_LIST' && sub.subType == 3 + ) } else { num.value=6-subTotalAmount.value formData.value.deliverOrderSubs = subArr