bluejay
2025-04-11 78dbf359be9e5b7ea11a4f3dde25a3037a21ddbc
零件统计表查询功能
已修改6个文件
已添加1个文件
130 ■■■■ 文件已修改
aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsPartRouteStatController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPartRouteStat.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsResourceDateStat.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPartRouteStatMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPartRouteStatService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPartRouteStatMapper.xml 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsPartRouteStatController.java
@@ -80,7 +80,6 @@
    {
        return toAjax(apsPartRouteStatService.insertApsPartRouteStat(apsPartRouteStat));
    }
    /**
     * ä¿®æ”¹é›¶ä»¶ç»Ÿè®¡è¡¨
     */
@@ -91,7 +90,6 @@
    {
        return toAjax(apsPartRouteStatService.updateApsPartRouteStat(apsPartRouteStat));
    }
    /**
     * åˆ é™¤é›¶ä»¶ç»Ÿè®¡è¡¨
     */
@@ -102,4 +100,10 @@
    {
        return toAjax(apsPartRouteStatService.deleteApsPartRouteStatByIds(ids));
    }
    @GetMapping("/query")
    public AjaxResult queryStat()
    {
        return apsPartRouteStatService.selectResourceDateStat();
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPartRouteStat.java
@@ -25,6 +25,8 @@
    @Excel(name = "工单号")
    private String workOrderNo;
    private String resourceGroupName;
    /** å·¥åºå· */
    @Excel(name = "工序号")
    private BigDecimal roadProcessNumber;
@@ -170,6 +172,14 @@
        return batchNumber;
    }
    public String getResourceGroupName() {
        return resourceGroupName;
    }
    public void setResourceGroupName(String resourceGroupName) {
        this.resourceGroupName = resourceGroupName;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsResourceDateStat.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.aps.core.domain;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
/*
* ç”¨äºŽç»Ÿè®¡èµ„源组日计划数据
* */
@Data
public class ApsResourceDateStat {
    private LocalDate planDay;
    private String resourceName;
    private Integer requireTimes;
    private Integer designTimes;
    private BigDecimal capacityLoad;
}
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPartRouteStatMapper.java
@@ -2,6 +2,7 @@
import java.util.List;
import com.aps.core.domain.ApsPartRouteStat;
import com.aps.core.domain.ApsResourceDateStat;
import org.apache.ibatis.annotations.Mapper;
/**
@@ -71,4 +72,5 @@
     * */
    int deleteLastBatch(String batchNumber);
    List<ApsResourceDateStat> selectResourceDateStat();
}
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPartRouteStatService.java
@@ -1,6 +1,8 @@
package com.aps.core.service;
import java.util.List;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.core.domain.ApsPartRouteStat;
/**
@@ -59,4 +61,5 @@
     */
    public int deleteApsPartRouteStatById(String id);
    AjaxResult selectResourceDateStat();
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java
@@ -1,13 +1,16 @@
package com.aps.core.service.impl;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import com.aps.common.core.utils.uuid.IdUtils;
import com.aps.common.core.utils.uuid.UUID;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.core.domain.ApsResourceDateStat;
import com.aps.core.mapper.ApsResourceGroupMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.commons.config.DefaultsBindHandlerAdvisor;
import org.springframework.stereotype.Service;
import com.aps.core.mapper.ApsPartRouteStatMapper;
import com.aps.core.domain.ApsPartRouteStat;
@@ -26,7 +29,7 @@
{
    @Autowired
    private ApsPartRouteStatMapper apsPartRouteStatMapper;
    private DefaultsBindHandlerAdvisor.MappingsProvider mappingsProvider;
    private ApsResourceGroupMapper resourceGroupMapper;
    /**
     * æŸ¥è¯¢é›¶ä»¶ç»Ÿè®¡è¡¨
@@ -103,6 +106,9 @@
    /**
     * æŸ¥è¯¢é›¶ä»¶å·¥åºå¹¶æ›´æ–°è®¡åˆ’开工日期
     * */
    public void updatePartRoutPlanDate() {
        List<ApsPartRouteStat> tempList = apsPartRouteStatMapper.selectPartRoutStat();
        /*对tempList æŒ‰ç…§ workOrderNo è¿›è¡Œåˆ†ç»„*/
@@ -140,6 +146,45 @@
            }
        }
        apsPartRouteStatMapper.deleteLastBatch(batchNum);
    }
    /** æŸ¥è¯¢èµ„源日历表
     */
    @Override
    public AjaxResult selectResourceDateStat() {
        /*查出所有统计的数据*/
        List<ApsResourceDateStat> list = apsPartRouteStatMapper.selectResourceDateStat();
        /*求出计划的最大时间,没有 è®¾ç½®ä¸ºå½“前时间+15天*/
        ApsResourceDateStat apsResourceDateStat = list.stream().max(Comparator.comparing(ApsResourceDateStat::getPlanDay)).orElse(null);
        LocalDate maxPlanDay = LocalDate.now().plus(15, ChronoUnit.DAYS);
        if(apsResourceDateStat!=null){
            maxPlanDay=apsResourceDateStat.getPlanDay();
        }
        /*组织出日期表头*/
        List<String> planDays = new ArrayList<>();
        LocalDate startDay = LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        while (startDay .isBefore( maxPlanDay)){
            planDays.add(startDay.format(formatter));
            startDay=startDay.plus(1,ChronoUnit.DAYS);
        }
        /*根据日期表头的顺序,组织出每个日期下的统计项目*/
        List<ApsResourceDateStat> targetList = new ArrayList<>();
        for (String planDay : planDays) {
            ApsResourceDateStat apsResourceDateStat1 = list.stream()
                    .filter(item -> item.getPlanDay().equals(LocalDate.parse(planDay, formatter)))
                    .findFirst().orElse(null);
            if(apsResourceDateStat1!=null){
                targetList.add(apsResourceDateStat1);
            }else{
                ApsResourceDateStat apsResourceDateStat2 = new ApsResourceDateStat();
                apsResourceDateStat2.setPlanDay( LocalDate.parse(planDay, formatter));
                targetList.add(apsResourceDateStat2);
            }
        }
        AjaxResult result=new AjaxResult(200,"生成成功")
                .put("planTitle",planDays)
                .put("planTable",targetList);
        return result;
    }
}
aps-modules/aps-core/src/main/resources/mapper/core/ApsPartRouteStatMapper.xml
@@ -17,10 +17,11 @@
        <result property="delFlag"    column="del_flag"    />
        <result property="createBy"    column="create_by"    />
        <result property="batchNumber"    column="batch_number"    />
        <result property="resourceGroupName"    column="resource_group_name"  />
    </resultMap>
    <sql id="selectApsPartRouteStatVo">
        select id, work_order_no, road_process_number, current_process_number, production_quantity, standard_time, process_total_time, process_plan_start_day, design_times, del_flag, create_by, batch_number from aps_part_route_stat
        select id, work_order_no, road_process_number, current_process_number, production_quantity, standard_time, process_total_time, process_plan_start_day, design_times, del_flag, create_by, batch_number ,resource_group_name from aps_part_route_stat
    </sql>
    <select id="selectApsPartRouteStatList" parameterType="ApsPartRouteStat" resultMap="ApsPartRouteStatResult">
@@ -122,13 +123,28 @@
            left join aps_resource_group as rs on rs.resource_group_name=rt.process_name
        where pl.del_flag='0' and rt.del_flag='0'
            /*零件计划状态为:非完工 */
            and ( pl.order_status!='' and ( pl.order_status!='3' or pl.order_status!='完工') )
            /*工艺路线的工序号>=零件计划的当前工序*/
            and cast( rt.process_number as decimal(18,2)) >=  cast( pl.process_number as decimal(18,2))
            /*工序计划开工日 <= èµ„源组的截止日期*/
            and rt.process_plan_start_day<=rs.request_date
            /*资源组需求截止日期<=当前日期+15天*/
            and rs.request_date<=(current_date + INTERVAL '15 day')
            and ( pl.document_status is not null and ( pl.document_status!='3' or pl.order_status!='完工') )
            /*工序计划开工日 å°äºŽç­‰äºŽ èµ„源组的截止日期*/
            and rt.process_plan_start_day  &lt;= rs.request_date
            order by rt.work_order_no,process_plan_start_day
    </select>
    <select id="selectResourceDateStat" resultMap="com.aps.core.domain.ApsResourceDateStat">
        with pl as  (
            select
            DATE( st.process_plan_start_day) AS plan_day,
                resource_group_name as resource_name,
                sum(process_total_time) as require_times
            from aps_part_route_stat  as st
            where st.del_flag='0'
            group by resource_group_name, plan_day
        )
        select  pl.resource_name
                ,pl.plan_day
                ,require_times
                ,(gp.theory_hours*gp.devices_quantity) as design_times
                ,((gp.theory_hours*gp.devices_quantity) / require_times * 100)  as capacity_load
        from pl left join aps_resource_group as gp on pl.resource_group_name=gp.resource_group_name
        where gp.del_flag='0'
        </select>
</mapper>