zhanghl
2025-05-23 52aa02cfdb3a70811140e775b947f2200ca8a3eb
[钣金计划大表] 优化更新逻辑
已修改7个文件
118 ■■■■ 文件已修改
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessStatController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateProcessStatService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java
@@ -52,8 +52,13 @@
    @PostMapping("/update")
    public AjaxResult update()
    {
        apsPlateProcessShopStatService.saveShopStat();
        return toAjax(true);
        try {
            apsPlateProcessShopStatService.saveShopStat();
            return toAjax(true);
        } catch (Exception e) {
          return AjaxResult.error("更新失败!"+e.getMessage());
        }
    }
    /**
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessStatController.java
@@ -89,7 +89,7 @@
    @PostMapping("/update")
    public AjaxResult updateStat()
    {
        apsPlateProcessStatService.savePlateProcessStat();
        apsPlateProcessStatService.computePlateProcessStat();
        return toAjax(true);
    }
    /**
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java
@@ -73,4 +73,6 @@
     * 批量插入数据
     * */
    int batchInsertPlateStat(List<ApsPlateProcessStat> list);
    int deleteAll();
}
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateProcessStatService.java
@@ -60,6 +60,6 @@
     */
    public int deleteApsPlateProcessStatById(String id);
    @Transactional
    void savePlateProcessStat();
    List<ApsPlateProcessStat> computePlateProcessStat();
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java
@@ -5,6 +5,8 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.alibaba.nacos.common.utils.JacksonUtils;
@@ -136,38 +138,34 @@
    /**
     * 保存钣金车间统计
     */
    @Transactional
    @Transactional( rollbackFor =Exception.class)
    @Override
    public void saveShopStat() {
        try {
            apsPlateProcessStatService.savePlateProcessStat();
        // 定义该功能使用数据源为南通的工厂
        final String plant = "FORTUNA";
        final String major="BJ";
        // 查询相关数据
        ApsPlatePlan platePlan = new ApsPlatePlan();
        platePlan.setPlant(plant);
        List<ApsPlatePlan> planList = apsPlatePlanMapper.selectApsPlatePlanList(platePlan);
        ApsShop apsShop = new ApsShop();
        apsShop.setPlantCode(plant);
        List<ApsShop> shopList = shopMapper.selectApsShopList(apsShop);
        ApsStandardProcess process = new ApsStandardProcess();
        process.setPlant(plant);
        process.setMajor(major);
        List<ApsStandardProcess> shopProcesses = standardProcessMapper.selectApsStandardProcessList(process);
        if (!planList.isEmpty() &&  !shopList.isEmpty() &&  !shopProcesses.isEmpty()) {
            // 开始之前先删除所有历史数据
            apsPlateProcessStatMapper.deleteAll();
            apsPlateProcessShopStatMapper.deleteAll();
            // 定义该功能使用数据源为南通的工厂
            final String plant = "FORTUNA";
            final String major="钣金";
            // 查询相关数据
            ApsPlatePlan platePlan = new ApsPlatePlan();
            platePlan.setPlant(plant);
            List<ApsPlatePlan> planList = apsPlatePlanMapper.selectApsPlatePlanList(platePlan);
            List<ApsPlateProcessStat> statList = apsPlateProcessStatMapper.selectApsPlateProcessStatList(new ApsPlateProcessStat());
            ApsShop apsShop = new ApsShop();
            apsShop.setPlantCode(plant);
            List<ApsShop> shopList = shopMapper.selectApsShopList(apsShop);
            ApsStandardProcess process = new ApsStandardProcess();
            process.setPlant(plant);
            process.setMajor(major);
            List<ApsStandardProcess> shopProcesses = standardProcessMapper.selectApsStandardProcessList(process);
            if (planList.isEmpty() || shopList.isEmpty() || shopProcesses.isEmpty()) {
                log.warn("计划列表、车间列表或工序列表为空,无法生成统计信息");
                return;
            }
            // 构建车间名称到工序名称的映射
            Map<String, List<String>> shopToProcessNames = shopProcesses.stream()
            List<ApsPlateProcessStat> statList =apsPlateProcessStatService.computePlateProcessStat();
                // 构建车间名称到工序名称的映射
            Map<String, List<String>> shopToProcessNames = shopProcesses.stream().filter(x -> null!=x.getWorkShop())
                    .collect(Collectors.groupingBy(ApsStandardProcess::getWorkShop,
                            Collectors.mapping(ApsStandardProcess::getProcessName, Collectors.toList())
                    ));
@@ -179,18 +177,22 @@
                    statsToInsert.add(stat);
                }
            }
            // 批量插入以提高性能
            if (!statsToInsert.isEmpty()) {
                int batchSize = 1000;
                for (int i = 0; i < statsToInsert.size(); i += batchSize) {
                    int end = Math.min(i + batchSize, statsToInsert.size());
                    List<ApsPlateProcessShopStat> batch = statsToInsert.subList(i, end);
                    apsPlateProcessShopStatMapper.batchInsert(batch);
                }
            List<List<ApsPlateProcessStat>> processStatBatchList = ListUtil.split(statList, 1000);
            processStatBatchList.forEach(batch -> apsPlateProcessStatMapper.batchInsertPlateStat(batch));
            List<List<ApsPlateProcessShopStat>> shopStatBatchList = ListUtil.split(statsToInsert, 1000);
            shopStatBatchList.forEach(batch -> apsPlateProcessShopStatMapper.batchInsert(batch));
        }else {
            if(shopProcesses.isEmpty()){
                throw  new RuntimeException("未找到标准工序数据!");
            }
        } catch (Exception e) {
            log.error("保存钣金车间统计时发生异常", e);
            throw new RuntimeException("保存钣金车间统计失败", e);
            if(shopList.isEmpty()){
                throw  new RuntimeException("未找到车间数据!");
            }
            if(planList.isEmpty()){
                throw  new RuntimeException("未找到工单数据!");
            }
        }
    }
@@ -210,7 +212,6 @@
        stat.setWorkCenter(plan.getWorkCenter());
        stat.setProcessNumber(plan.getProcessNumber());
        try {
            List<String> processNames = shopToProcessNames.getOrDefault(shopName, Collections.emptyList());
            if (!processNames.isEmpty()) {
@@ -253,6 +254,7 @@
            }
        } catch (Exception e) {
            log.error("computer error:"+ JSONObject.toJSONString(stat));
            throw new RuntimeException("计算车间统计数据异常!");
        }
        return stat;
    }
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java
@@ -107,12 +107,10 @@
    /**
     * 保存钣金统计数据
     */
    @Transactional
    @Override
    public void savePlateProcessStat() {
    public List<ApsPlateProcessStat> computePlateProcessStat() {
        String batchNum = IdUtils.fastSimpleUUID();
        List<ApsPlateProcessStat> tempList = apsPlateProcessStatMapper.queryTempStat();
        ApsPlateProcessStat apsPlateProcessStat = tempList.stream().filter(x -> x.getWorkOrderNo().equals("MO-250409003498")).findFirst().get();
        Map<String, List<ApsPlateProcessStat>> groupByOrderNo = tempList.stream().collect(groupingBy(ApsPlateProcessStat::getWorkOrderNo));
        Boolean hasBefore = false;
        LocalDateTime now = LocalDateTime.now();
@@ -186,16 +184,7 @@
            }
            hasBefore=false;
        }
        apsPlateProcessStatMapper.removeOtherStat(batchNum);
        if(!totalList.isEmpty()){
            int batchSize = 1000;
            totalList.forEach(x->x.setId(String.valueOf(IdUtil.getSnowflakeNextId())));
            for (int i = 0; i < totalList.size(); i += batchSize) {
                int end = Math.min(i + batchSize, totalList.size());
                List<ApsPlateProcessStat> batch = totalList.subList(i, end);
                apsPlateProcessStatMapper.batchInsertPlateStat(batch);
            }
        }
        return totalList;
    }
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml
@@ -160,7 +160,9 @@
    <update id="removeOtherStat" parameterType="String">
        delete from aps_plate_process_stat where batch_number != #{batchNumber}
    </update>
    <update id="deleteAll" parameterType="String">
        delete from aps_plate_process_stat
    </update>
    <insert id="batchInsertPlateStat" parameterType="com.aps.core.domain.ApsPlate.ApsPlateProcessStat">
        insert into aps_plate_process_stat
        (