zhanghl
2025-05-22 dae4a24949c0c8cfad87aff850b667d3cad399c1
优化: 钣金详细计划、钣金计划大表、钣金工单计划
已修改21个文件
203 ■■■■■ 文件已修改
aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsBomHeaderController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/enums/PLAN_TASK_STATUS.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateStandardRequireBatchService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateStandardRequireErrorService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsBomHeaderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomHeaderServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireBatchServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireErrorServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsBomHeaderMapper.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireBomOrderDetailMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireBomStockDetailMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireErrorMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java
@@ -29,6 +29,9 @@
     * 判断是否存在锁
     * */
    public boolean existLock(String key,String value){
        if(null==this.redisTemplate.opsForValue().get(key)){
            return false;
        }
        return this.redisTemplate.opsForValue().get(key).equals(value);
    }
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsBomHeaderController.java
@@ -129,7 +129,8 @@
    @PostMapping("/setBomDataToRedis")
    public void setBomDataToRedis()
    {
        apsBomHeaderService.setBomDataToRedis("");
        apsBomHeaderService.setBomDataToRedis("FORTUNA");
        //apsBomHeaderService.setBomDataToRedis("FORTUNE");
    }
    @PostMapping("/test")
@@ -137,4 +138,10 @@
    {
        apsBomHeaderService.setBomDataToRedis("FORTUNA");
    }
    @GetMapping("/getBomRdsCount/{orgCode}")
    public Integer getBomRdsCount(String orgCode)
    {
        return apsBomHeaderService.getBomKeys(orgCode);
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/enums/PLAN_TASK_STATUS.java
@@ -2,8 +2,8 @@
public enum PLAN_TASK_STATUS {
    IN_PROCESS("InProgress","进行中"),
    FINISHED("Finished","完成");
    FINISHED("Finished","完成"),
    ERROR("Error","失败");
    private String code;
    private String desc;
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateStandardRequireBatchService.java
@@ -63,5 +63,5 @@
    String getNewBatchNumber();
    @Transactional
    void initRequireBatch();
    void initRequireBatch(String batchNumber);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateStandardRequireErrorService.java
@@ -1,6 +1,8 @@
package com.aps.core.service.ApsPlate;
import java.util.List;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequire;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequireError;
/**
@@ -58,4 +60,6 @@
     * @return 结果
     */
    public int deleteApsPlateStandardRequireErrorById(Long id);
    void saveRequireError(ApsPlateStandardRequire require, String message);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsBomHeaderService.java
@@ -66,4 +66,6 @@
     * @return
     */
    public boolean setBomDataToRedis(String orgCode);
    Integer getBomKeys(String orgCode);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomHeaderServiceImpl.java
@@ -131,4 +131,8 @@
        }
        return true;
    }
    @Override
    public Integer getBomKeys(String orgCode){
        return redisTemplate.keys("BOM:BOM_"+orgCode+"*").size();
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java
@@ -140,10 +140,6 @@
                bomLineList.add(apsBom);
            }
        }
//        else {
//            bomLineList = selectApsBomLineList(plant, itemNumber);
//        }
        return bomLineList;
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java
@@ -90,8 +90,7 @@
    }
    @Override
    public AjaxResult generatorPlan()
    {
    public AjaxResult generatorPlan() {
        String plateOrderPlanKey = PLATE_ORDER_PLAN.getKey();
        boolean existsLock = redisLockUtils.existLock(plateOrderPlanKey, PLAN_TASK_TYPE.PLATE_PLAN.getCode());
        if (existsLock){
@@ -104,19 +103,21 @@
        if (existsDbTask){
            return AjaxResult.warn("钣金工单计划任务正在执行中!!");
        }
        String currentBatchNum = requireBatchService.getNewBatchNumber();
        try {
            redisLockUtils.getLock(plateOrderPlanKey,PLAN_TASK_TYPE.PLATE_PLAN.getCode(), 3*60L);
            String batchNum= requireBatchService.getNewBatchNumber();
            this.savePlanTask(batchNum);
            apsPlateStandardRequireService.generatorPlan(batchNum);
            this.updateTaskStatus(batchNum, PLAN_TASK_STATUS.FINISHED);
            redisLockUtils.getLock(plateOrderPlanKey, PLAN_TASK_TYPE.PLATE_PLAN.getCode(), 15 * 60L);
            this.savePlanTask(currentBatchNum);
            //Thread.sleep(60*1000);
            apsPlateStandardRequireService.generatorPlan(currentBatchNum);
            /*清除已经存在的 工单计划完工时间*/
            orderEndDayMapper.batchRemove();
            log.info("计划任务执行完成!"+batchNum);
            this.updateTaskStatus(currentBatchNum, PLAN_TASK_STATUS.FINISHED);
            log.info("计划任务执行完成!" + currentBatchNum);
            return success();
        }catch (Exception e){
            redisLockUtils.releaseLock(plateOrderPlanKey,PLAN_TASK_TYPE.PLATE_PLAN.getCode());
            log.error("计划任务执行失败!"+e.getMessage());
            this.updateTaskStatus(currentBatchNum, PLAN_TASK_STATUS.ERROR);
            return AjaxResult.error("计划任务执行失败!"+e.getMessage());
        }finally {
            redisLockUtils.releaseLock(plateOrderPlanKey,PLAN_TASK_TYPE.PLATE_PLAN.getCode());
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java
@@ -18,6 +18,7 @@
import com.aps.core.domain.ApsPlate.ApsPlateProcessShopStat;
import com.aps.core.domain.ApsPlate.ApsPlateProcessStat;
import com.aps.core.mapper.*;
import com.aps.core.service.ApsPlate.IApsPlateProcessStatService;
import com.aps.system.api.domain.SysDictData;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -59,6 +60,9 @@
    @Resource
    private ApsPlatePlanMapper apsPlatePlanMapper;
    @Autowired
    private IApsPlateProcessStatService apsPlateProcessStatService;
    /**
@@ -136,6 +140,7 @@
    @Override
    public void saveShopStat() {
        try {
            apsPlateProcessStatService.savePlateProcessStat();
            // 开始之前先删除所有历史数据
            apsPlateProcessShopStatMapper.deleteAll();
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java
@@ -2,12 +2,15 @@
import java.math.BigDecimal;
import java.time.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import cn.hutool.core.util.IdUtil;
import com.aps.common.core.utils.uuid.IdUtils;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequireBomOrderDetail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.aps.core.mapper.ApsPlateProcessStatMapper;
@@ -109,9 +112,11 @@
    public void savePlateProcessStat() {
        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();
        List<ApsPlateProcessStat> totalList=new ArrayList<>();
        for (Map.Entry<String, List<ApsPlateProcessStat>> entry : groupByOrderNo.entrySet()) {
            List<ApsPlateProcessStat> statPerOrder = entry.getValue();
            /*num 为根据完工时间排序出的序号,按此排序,可保证是按完工时间倒叙排列*/
@@ -176,13 +181,21 @@
                    }
                }
                last = stat;
                apsPlateProcessStatMapper.insertApsPlateProcessStat(stat);
                totalList.add(stat);
                //apsPlateProcessStatMapper.insertApsPlateProcessStat(stat);
            }
            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);
            }
        }
    }
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireBatchServiceImpl.java
@@ -136,16 +136,12 @@
    @Transactional
    @Override
    public void initRequireBatch() {
        ApsPlateStandardRequireBatch batch=apsPlateStandardRequireBatchMapper.selectLastRequireBatch();
        if (batch!=null){
            String batchNumber = batch.getBatchNumber();
            apsPlateStandardRequireMapper.deleteLastPatch(batchNumber);
            apsPlateStandardRequireBomOrderDetailMapper.deleteLastPatch(batchNumber);
            apsPlateStandardRequireBomStockDetailMapper.deleteLastPatch(batchNumber);
            apsPlateStandardRequireErrorMapper.deleteLastPatch(batchNumber);
    public void initRequireBatch(String currentBatchNumber) {
        apsPlateStandardRequireMapper.deleteLastPatch(currentBatchNumber);
        apsPlateStandardRequireBomOrderDetailMapper.deleteLastPatch(currentBatchNumber);
        apsPlateStandardRequireBomStockDetailMapper.deleteLastPatch(currentBatchNumber);
        apsPlateStandardRequireErrorMapper.deleteLastPatch(currentBatchNumber);
            apsPlatePlanMapper.initUnMatchQty();
            apsMaterialStorageManagementMapper.initRemainderStock();
        }
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireErrorServiceImpl.java
@@ -1,7 +1,11 @@
package com.aps.core.service.impl.ApsPlate;
import java.util.List;
import cn.hutool.core.util.IdUtil;
import com.aps.common.core.utils.DateUtils;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequire;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.aps.core.mapper.ApsPlateStandardRequireErrorMapper;
@@ -93,4 +97,21 @@
    {
        return apsPlateStandardRequireErrorMapper.deleteApsPlateStandardRequireErrorById(id);
    }
    @Override
    public void saveRequireError(ApsPlateStandardRequire require, String message) {
        ApsPlateStandardRequireError data = ApsPlateStandardRequireError.builder()
                .id(IdUtil.getSnowflakeNextId())
                .requireId(require.getId())
                .batchNumber(require.getBatchNumber())
                .docNum(require.getDocNum())
                .itemNum(require.getBomLineCode())
                .orgCode(require.getOrgCode())
                .message(message)
                .delFlag("0")
                .build();
        data.setCreateBy(SecurityUtils.getUsername());
        data.setCreateTime(DateUtils.getNowDate());
        apsPlateStandardRequireErrorMapper.insertApsPlateStandardRequireError(data);
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireServiceImpl.java
@@ -1,29 +1,27 @@
package com.aps.core.service.impl.ApsPlate;
import java.math.BigDecimal;
import java.util.*;
import cn.hutool.core.util.IdUtil;
import com.aps.common.core.utils.DateUtils;
import com.aps.common.security.utils.DictUtils;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.domain.*;
import com.aps.core.domain.ApsPlate.ApsPlatePlan;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequireBomOrderDetail;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequireBomStockDetail;
import com.aps.core.domain.ApsBom;
import com.aps.core.domain.ApsMaterialStorageManagement;
import com.aps.core.domain.ApsPlate.*;
import com.aps.core.domain.ApsStandardProcessRouteLine;
import com.aps.core.mapper.*;
import com.aps.core.service.*;
import com.aps.core.service.ApsPlate.*;
import com.aps.core.service.IApsBomService;
import com.aps.core.service.IApsMaterialStorageManagementService;
import com.aps.core.service.IApsStandardProcessRouteLineService;
import com.aps.system.api.domain.SysDictData;
import jakarta.annotation.Resource;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequire;
import com.aps.core.mapper.ApsPlateStandardRequireMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
/**
 * 钣金工单标准需求Service业务层处理
@@ -39,29 +37,17 @@
    private ApsPlateStandardRequireMapper apsPlateStandardRequireMapper;
    @Resource
    private ApsPlateStandardRequireBatchMapper requireBatchMapper;
    @Resource
    ApsPlatePlanMapper platePlanMapper;
    @Resource
    ApsBomHeaderMapper bomHeaderMapper;
    @Resource
    IApsBomService bomLineService;
    @Resource
    ApsMaterialStorageManagementMapper itemStorageMapper;
    @Resource
    ApsPlateStandardRequireBomStockDetailMapper plateBomStockDetailMapper;
    @Resource
    IApsPlateStandardRequireBomStockDetailService bomStockDetailService;
    @Resource
    ApsStandardProcessRouteHeaderMapper standardProcessRouteHeaderMapper;
    @Resource
    ApsStandardProcessRouteLineMapper ApsStandardProcessRouteLineMapper;
    @Resource
    ApsPlateStandardRequireBomOrderDetailMapper plateBomOrderDetailMapper;
@@ -76,10 +62,11 @@
    IApsStandardProcessRouteLineService routeLineService;
    @Resource
    IApsPlateStandardRequireBatchService requireBatchService;
    IApsPlateStandardRequireErrorService requireErrorService;
    @Resource
    private IApsMaterialStorageManagementService storageManagementService;
    @Resource
    IApsPlateStandardRequireBatchService requireBatchService;
    /**
     * 查询钣金工单标准需求
     * 
@@ -167,9 +154,7 @@
    @Transactional
    @Override
    public void generatorPlan(String batchNum){
        /*初始化数据*/
        requireBatchService.initRequireBatch();
        requireBatchService.initRequireBatch(batchNum);
        /*定义工厂为南通 */
        String plantCode="FORTUNA";
        /*获取钣金主单信息*/
@@ -296,7 +281,10 @@
        if (itemStorageOpt.isPresent()) {
            ApsMaterialStorageManagement     itemStorage=itemStorageOpt.get();
            BigDecimal remainderStock =itemStorage.getRemainderStock();
            BigDecimal remainderStock =BigDecimal.ZERO;
            if(null!=itemStorage.getRemainderStock()){
                remainderStock = itemStorage.getRemainderStock();
            }
            /*计算净需求 默认=需求数量*/
            if (remainderStock.compareTo(BigDecimal.ZERO) == 0) {
                require.setNetRequirement(require.getBomUseAmount());
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java
@@ -12,6 +12,7 @@
import com.aps.core.domain.ApsStandardProcessRouteHeader;
import com.aps.core.mapper.ApsPlateStandardRequireErrorMapper;
import com.aps.core.mapper.ApsStandardProcessRouteHeaderMapper;
import com.aps.core.service.ApsPlate.IApsPlateStandardRequireErrorService;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
@@ -34,7 +35,7 @@
    @Resource
    ApsStandardProcessRouteHeaderMapper standardProcessRouteHeaderMapper;
    @Resource
    ApsPlateStandardRequireErrorMapper requireErrorMapper;
    IApsPlateStandardRequireErrorService requireErrorService;
    @Resource
    private RedisTemplate redisTemplate;
@@ -141,7 +142,7 @@
            ret.setRouteTime(totalRouteTime);
            ret.setRouteId(routeHeader.getRouteId());
        }else {
            saveRequireError(require,"标准工艺路线不存在");
            requireErrorService.saveRequireError(require,"标准工艺路线不存在");
        }
        // 返回总工时
        return ret;
@@ -170,7 +171,7 @@
            ret.setRouteTime(totalRouteTime.multiply(netRequirement));
            return  ret;
        } else {
            saveRequireError(require,"标准工艺路线不存在");
            requireErrorService.saveRequireError(require,"标准工艺路线不存在");
            /*// 查询标准工艺路线头部信息
            Optional<ApsStandardProcessRouteHeader> firstProcessRoute = standardProcessRouteHeaderMapper.queryStandardProcessRouteHeaderByPlantAndItemCode(plant, itemCode).stream().findFirst();
            if (firstProcessRoute.isPresent()) {
@@ -193,19 +194,4 @@
        }
    }
    private void saveRequireError(ApsPlateStandardRequire require,String message) {
        ApsPlateStandardRequireError data = ApsPlateStandardRequireError.builder()
                .id(IdUtil.getSnowflakeNextId())
                .requireId(require.getId())
                .batchNumber(require.getBatchNumber())
                .docNum(require.getDocNum())
                .itemNum(require.getBomLineCode())
                .orgCode(require.getOrgCode())
                .message(message)
                .delFlag("0")
                .build();
        data.setCreateBy(SecurityUtils.getUsername());
        data.setCreateTime(DateUtils.getNowDate());
        requireErrorMapper.insertApsPlateStandardRequireError(data);
    }
}
aps-modules/aps-core/src/main/resources/mapper/core/ApsBomHeaderMapper.xml
@@ -109,13 +109,10 @@
        LEFT JOIN aps_bom_line b on a.bom_header_id=b.bom_header_id
        LEFT JOIN aps_material_management d on b.item_code=d.item_number
        LEFT JOIN aps_material_management c on a.item_code=c.item_number
        <where>
        where   d.material_type='制造件' and c.material_type='制造件'
            <if test="orgCode != null and orgCode != ''">
                and a.org_code=#{orgCode} and d.applicable_factories=#{orgCode}
            </if>
            and d.material_type='制造件'
            and c.material_type='制造件'
        </where>
        ORDER BY mainItemCode
    </select>
</mapper>
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml
@@ -173,10 +173,13 @@
            production_quantity,
            standard_time,
            process_total_time,
            process_plan_start_day,
            process_plan_end_day,
            order_plan_end_day,
            batch_number,
            create_by,
            del_flag
            del_flag,
            warning
        )
        values
        <foreach collection="list" item="item" index="index" separator=",">
@@ -190,10 +193,13 @@
            #{item.productionQuantity},
            #{item.standardTime},
            #{item.processTotalTime},
            #{item.processPlanStartDay},
            #{item.processPlanEndDay},
            #{item.orderPlanEndDay},
            #{item.batchNumber},
            #{item.createBy},
            '0'
            '0',
            #{item.warning}
        )
        </foreach>
    </insert>
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireBomOrderDetailMapper.xml
@@ -127,7 +127,7 @@
    </delete>
    <update id="deleteLastPatch" parameterType="String">
        update aps_plate_standard_require_bom_order_detail set del_flag = '1' where batch_number = #{batchNumber}
        update aps_plate_standard_require_bom_order_detail set del_flag = '1' where del_flag = '0' and batch_number != #{batchNumber}
    </update>
    <insert id="batchInsert" parameterType="com.aps.core.domain.ApsPlate.ApsPlateStandardRequireBomOrderDetail">
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireBomStockDetailMapper.xml
@@ -120,7 +120,9 @@
    </delete>
    <update id="deleteLastPatch" parameterType="String">
        update aps_plate_standard_require_bom_stock_detail set del_flag = '1' where batch_number = #{batchNumber}
        update aps_plate_standard_require_bom_stock_detail
        set del_flag = '1'
        where del_flag = '0' and batch_number != #{batchNumber}
    </update>
    <insert id="batchInsert" parameterType="com.aps.core.domain.ApsPlate.ApsPlateStandardRequireBomStockDetail">
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireErrorMapper.xml
@@ -103,6 +103,8 @@
        </foreach>
    </delete>
    <update id="deleteLastPatch" parameterType="String">
        update aps_plate_standard_require_error set del_flag = '1' where batch_number = #{batchNumber}
        update aps_plate_standard_require_error
        set del_flag = '1'
        where del_flag = '0' and batch_number != #{batchNumber}
    </update>
</mapper>
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireMapper.xml
@@ -226,6 +226,6 @@
        </foreach>
    </insert>
    <update id="deleteLastPatch" parameterType="String">
        update aps_plate_standard_require set del_flag = '1' where batch_number = #{batchNumber}
        update aps_plate_standard_require set del_flag = '1' where del_flag = '0' and batch_number != #{batchNumber}
    </update>
</mapper>