zhanghl
2025-04-17 8bfafbd2e35e2cd0e370281c007fe98fe7fb91d3
钣金统计表更新逻辑
已修改3个文件
70 ■■■■ 文件已修改
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateProcessStat.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateProcessStatServiceImpl.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateProcessStatMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateProcessStat.java
@@ -1,7 +1,6 @@
package com.aps.core.domain;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -83,6 +82,10 @@
    /** 删除标志(0代表存在 2代表删除) */
    private String delFlag;
    private Boolean warning;
    public void setId(String id) 
    {
@@ -237,6 +240,13 @@
    {
        return delFlag;
    }
    public Boolean getWarning() {
        return warning;
    }
    public void setWarning(Boolean warning) {
        this.warning = warning;
    }
    @Override
    public String toString() {
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateProcessStatServiceImpl.java
@@ -110,6 +110,8 @@
        String batchNum = IdUtils.fastSimpleUUID();
        List<ApsPlateProcessStat> tempList = apsPlateProcessStatMapper.queryTempStat();
        Map<String, List<ApsPlateProcessStat>> groupByOrderNo = tempList.stream().collect(groupingBy(ApsPlateProcessStat::getWorkOrderNo));
        Boolean hasBefore = false;
        LocalDateTime now = LocalDateTime.now();
        for (Map.Entry<String, List<ApsPlateProcessStat>> entry : groupByOrderNo.entrySet()) {
            List<ApsPlateProcessStat> statPerOrder = entry.getValue();
            /*num 为根据完工时间排序出的序号,按此排序,可保证是按完工时间倒叙排列*/
@@ -120,33 +122,61 @@
                stat.setId(IdUtils.fastSimpleUUID());
                stat.setBatchNumber(batchNum);
                stat.setCreateBy(SecurityUtils.getUsername());
                stat.setWarning(false);
                if(i==0){
                    Date orderPlanEndDay = stat.getOrderPlanEndDay();
                    LocalDateTime transLocalDateTime = transLocalDateTime(orderPlanEndDay);
                    LocalTime endOfDay = LocalTime.of(23, 59, 59);
                    LocalDateTime orderPlanEndDayLocalDateTime =  LocalDateTime.of( transLocalDateTime.toLocalDate(), endOfDay);
                    if(orderPlanEndDayLocalDateTime.isBefore(now)){
                        hasBefore = true;
                        stat.setWarning(true);
                        stat.setProcessPlanEndDay(transDate(now));
                        stat.setProcessPlanStartDay(transDate(now));
                    }else {
                    /*计划完工日=钣金计划工单完成时间*/
                    stat.setProcessPlanEndDay(transDate(orderPlanEndDayLocalDateTime));
                    /*计划开工日=钣金计划工单完成时间 -  工序总工时*/
                    stat.setProcessPlanStartDay(transDate(orderPlanEndDayLocalDateTime.minusHours(stat.getProcessTotalTime())));
                        LocalDateTime lastPlanStartDt = orderPlanEndDayLocalDateTime.minusHours(stat.getProcessTotalTime());
                        if(lastPlanStartDt.isBefore(now)){
                            hasBefore = true;
                            stat.setProcessPlanStartDay(transDate(now));
                        }else {
                            stat.setProcessPlanStartDay(transDate(lastPlanStartDt));
                }
                /*当工艺工序号 > 工单当前工序时,代表是未来的工序,才进行计划开工日 和计划完工日的计算*/
                if( stat.getRouteProcessNumber().compareTo(stat.getCurrentProcessNumber())>0){
                    /*&计划开工日  和 计划完成日 ,同时大于当前日期时执行计算*/
                    LocalDateTime currentEndDay = transLocalDateTime(stat.getProcessPlanEndDay());
                    LocalDateTime currentStartDay = transLocalDateTime(stat.getProcessPlanStartDay());
                    if(currentEndDay.isAfter(LocalDateTime.now()) && currentStartDay.isAfter(LocalDateTime.now())){
                    }
                }
                /*当工艺工序号 >= 工单当前工序 代表是未来工序,才进行计划开工日 和计划完工日的计算
                * 当工艺工序号 < 工单当前工序  过去工序,不进行计算
                * */
                if( stat.getRouteProcessNumber().compareTo(stat.getCurrentProcessNumber())>=0){
                    /*倒排时 下一道工序存在 比当前时间小的计划时间,则当前计划开始和结束时间都是当前时间*/
                    if(hasBefore){
                        stat.setWarning(true);
                        stat.setProcessPlanEndDay(transDate(now));
                        stat.setProcessPlanStartDay(transDate(now));
                    }else{
                        /*下一道工序计划时间都正常时,*/
                        if(last!=null){
                            /*未开工工序的计划开工日=上一道工序的计划开工日+上一道工序的工序总工时。*/
                            /*当前工序结束时间=下一道工序的开始时间*/
                            stat.setProcessPlanEndDay(last.getProcessPlanStartDay());
                            stat.setProcessPlanStartDay(transDate(transLocalDateTime(last.getProcessPlanStartDay()).minusHours(stat.getProcessTotalTime()) ));
                            /*开始时间=结束时间-总工时*/
                            LocalDateTime crtStartDt = transLocalDateTime(last.getProcessPlanStartDay()).minusHours(stat.getProcessTotalTime());
                            /*如果开始时间小于当前时间*/
                            if(crtStartDt.isBefore(now)){
                                hasBefore=true;
                                stat.setWarning(true);
                                stat.setProcessPlanStartDay(transDate(now));
                            }else {
                                stat.setProcessPlanStartDay(transDate(crtStartDt));
                            }
                        }
                   }
                }
                last = stat;
                apsPlateProcessStatMapper.insertApsPlateProcessStat(stat);
            }
            hasBefore=false;
        }
        apsPlateProcessStatMapper.removeOtherStat(batchNum);
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateProcessStatMapper.xml
@@ -22,10 +22,14 @@
        <result property="batchNumber"    column="batch_number"    />
        <result property="createBy"    column="create_by"    />
        <result property="delFlag"    column="del_flag"    />
        <result property="warning"    column="warning"    />
    </resultMap>
    <sql id="selectApsPlateProcessStatVo">
        select id, work_order_no, process_name, num, route_process_number, current_process_number, production_quantity, standard_time, process_total_time, process_plan_end_day,process_plan_start_day, order_plan_end_day, design_times, batch_number, create_by, del_flag from aps_plate_process_stat
        select id, work_order_no, process_name, num, route_process_number, current_process_number, production_quantity,
               standard_time, process_total_time, process_plan_end_day,process_plan_start_day, order_plan_end_day, design_times,
               batch_number, create_by, del_flag, warning
        from aps_plate_process_stat
    </sql>
    <select id="selectApsPlateProcessStatList" parameterType="ApsPlateProcessStat" resultMap="ApsPlateProcessStatResult">
@@ -69,6 +73,7 @@
            <if test="designTimes != null">design_times,</if>
            <if test="batchNumber != null">batch_number,</if>
            <if test="createBy != null">create_by,</if>
            <if test="warning != null">warning,</if>
            del_flag,
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -87,6 +92,7 @@
            <if test="designTimes != null">#{designTimes},</if>
            <if test="batchNumber != null">#{batchNumber},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="warning != null">#{warning},</if>
           '0'
         </trim>
    </insert>