wenwj
2025-04-11 6c3b6d53a8a41777f0dc5f6beb6dd5db6a3f89f4
Merge branch 'dev' of http://192.168.50.149:8085/r/aps-backend into dev
已添加6个文件
710 ■■■■■ 文件已修改
aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsPartRouteStatController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPartRouteStat.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPartRouteStatMapper.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPartRouteStatService.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPartRouteStatMapper.xml 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsPartRouteStatController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package com.aps.core.controller;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.aps.common.log.annotation.Log;
import com.aps.common.log.enums.BusinessType;
import com.aps.common.security.annotation.RequiresPermissions;
import com.aps.core.domain.ApsPartRouteStat;
import com.aps.core.service.IApsPartRouteStatService;
import com.aps.common.core.web.controller.BaseController;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.common.core.utils.poi.ExcelUtil;
import com.aps.common.core.web.page.TableDataInfo;
/**
 * é›¶ä»¶ç»Ÿè®¡è¡¨Controller
 *
 * @author zhl
 * @date 2025-04-11
 */
@RestController
@RequestMapping("/ApsPartRouteStat")
public class ApsPartRouteStatController extends BaseController
{
    @Autowired
    private IApsPartRouteStatService apsPartRouteStatService;
    /**
     * æŸ¥è¯¢é›¶ä»¶ç»Ÿè®¡è¡¨åˆ—表
     */
    @RequiresPermissions("ApsPartRouteStat:ApsPartRouteStat:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsPartRouteStat apsPartRouteStat)
    {
        startPage();
        List<ApsPartRouteStat> list = apsPartRouteStatService.selectApsPartRouteStatList(apsPartRouteStat);
        return getDataTable(list);
    }
    /**
     * å¯¼å‡ºé›¶ä»¶ç»Ÿè®¡è¡¨åˆ—表
     */
    @RequiresPermissions("ApsPartRouteStat:ApsPartRouteStat:export")
    @Log(title = "零件统计表", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ApsPartRouteStat apsPartRouteStat)
    {
        List<ApsPartRouteStat> list = apsPartRouteStatService.selectApsPartRouteStatList(apsPartRouteStat);
        ExcelUtil<ApsPartRouteStat> util = new ExcelUtil<ApsPartRouteStat>(ApsPartRouteStat.class);
        util.exportExcel(response, list, "零件统计表数据");
    }
    /**
     * èŽ·å–é›¶ä»¶ç»Ÿè®¡è¡¨è¯¦ç»†ä¿¡æ¯
     */
    @RequiresPermissions("ApsPartRouteStat:ApsPartRouteStat:query")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return success(apsPartRouteStatService.selectApsPartRouteStatById(id));
    }
    /**
     * æ–°å¢žé›¶ä»¶ç»Ÿè®¡è¡¨
     */
    @RequiresPermissions("ApsPartRouteStat:ApsPartRouteStat:add")
    @Log(title = "零件统计表", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ApsPartRouteStat apsPartRouteStat)
    {
        return toAjax(apsPartRouteStatService.insertApsPartRouteStat(apsPartRouteStat));
    }
    /**
     * ä¿®æ”¹é›¶ä»¶ç»Ÿè®¡è¡¨
     */
    @RequiresPermissions("ApsPartRouteStat:ApsPartRouteStat:edit")
    @Log(title = "零件统计表", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ApsPartRouteStat apsPartRouteStat)
    {
        return toAjax(apsPartRouteStatService.updateApsPartRouteStat(apsPartRouteStat));
    }
    /**
     * åˆ é™¤é›¶ä»¶ç»Ÿè®¡è¡¨
     */
    @RequiresPermissions("ApsPartRouteStat:ApsPartRouteStat:remove")
    @Log(title = "零件统计表", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids)
    {
        return toAjax(apsPartRouteStatService.deleteApsPartRouteStatByIds(ids));
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPartRouteStat.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,190 @@
package com.aps.core.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aps.common.core.annotation.Excel;
import com.aps.common.core.web.domain.BaseEntity;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * é›¶ä»¶ç»Ÿè®¡è¡¨å¯¹è±¡ aps_part_route_stat
 *
 * @author zhl
 * @date 2025-04-11
 */
public class ApsPartRouteStat extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ä¸»é”®id */
    private String id;
    /** å·¥å•号 */
    @Excel(name = "工单号")
    private String workOrderNo;
    /** å·¥åºå· */
    @Excel(name = "工序号")
    private BigDecimal roadProcessNumber;
    /** å½“前工序号 */
    @Excel(name = "当前工序号")
    private BigDecimal currentProcessNumber;
    /** ç”Ÿäº§æ•°é‡ */
    @Excel(name = "生产数量")
    private Long productionQuantity;
    /** æ ‡å‡†å·¥æ—¶ */
    @Excel(name = "标准工时")
    private Long standardTime;
    /** å·¥åºæ€»å·¥æ—¶ */
    @Excel(name = "工序总工时")
    private Long processTotalTime;
    /** è®¡åˆ’开工日 */
    @Excel(name = "计划开工日")
    private LocalDateTime processPlanStartDay;
    /** è®¾è®¡å·¥æ—¶ */
    @Excel(name = "设计工时")
    private Long designTimes;
    /** åˆ é™¤æ ‡å¿—(0代表存在 2代表删除) */
    private String delFlag;
    /** æ‰¹æ¬¡å· */
    @Excel(name = "批次号")
    private String batchNumber;
    public void setId(String id)
    {
        this.id = id;
    }
    public String getId()
    {
        return id;
    }
    public void setWorkOrderNo(String workOrderNo)
    {
        this.workOrderNo = workOrderNo;
    }
    public String getWorkOrderNo()
    {
        return workOrderNo;
    }
    public void setRoadProcessNumber(BigDecimal roadProcessNumber)
    {
        this.roadProcessNumber = roadProcessNumber;
    }
    public BigDecimal getRoadProcessNumber()
    {
        return roadProcessNumber;
    }
    public void setCurrentProcessNumber(BigDecimal currentProcessNumber)
    {
        this.currentProcessNumber = currentProcessNumber;
    }
    public BigDecimal getCurrentProcessNumber()
    {
        return currentProcessNumber;
    }
    public void setProductionQuantity(Long productionQuantity)
    {
        this.productionQuantity = productionQuantity;
    }
    public Long getProductionQuantity()
    {
        return productionQuantity;
    }
    public void setStandardTime(Long standardTime)
    {
        this.standardTime = standardTime;
    }
    public Long getStandardTime()
    {
        return standardTime;
    }
    public void setProcessTotalTime(Long processTotalTime)
    {
        this.processTotalTime = processTotalTime;
    }
    public Long getProcessTotalTime()
    {
        return processTotalTime;
    }
    public void setProcessPlanStartDay(LocalDateTime processPlanStartDay)
    {
        this.processPlanStartDay = processPlanStartDay;
    }
    public LocalDateTime getProcessPlanStartDay()
    {
        return processPlanStartDay;
    }
    public void setDesignTimes(Long designTimes)
    {
        this.designTimes = designTimes;
    }
    public Long getDesignTimes()
    {
        return designTimes;
    }
    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }
    public String getDelFlag()
    {
        return delFlag;
    }
    public void setBatchNumber(String batchNumber)
    {
        this.batchNumber = batchNumber;
    }
    public String getBatchNumber()
    {
        return batchNumber;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("workOrderNo", getWorkOrderNo())
            .append("roadProcessNumber", getRoadProcessNumber())
            .append("currentProcessNumber", getCurrentProcessNumber())
            .append("productionQuantity", getProductionQuantity())
            .append("standardTime", getStandardTime())
            .append("processTotalTime", getProcessTotalTime())
            .append("processPlanStartDay", getProcessPlanStartDay())
            .append("designTimes", getDesignTimes())
            .append("delFlag", getDelFlag())
            .append("createBy", getCreateBy())
            .append("batchNumber", getBatchNumber())
            .toString();
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPartRouteStatMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.aps.core.mapper;
import java.util.List;
import com.aps.core.domain.ApsPartRouteStat;
import org.apache.ibatis.annotations.Mapper;
/**
 * é›¶ä»¶ç»Ÿè®¡è¡¨Mapper接口
 *
 * @author zhl
 * @date 2025-04-11
 */
@Mapper
public interface ApsPartRouteStatMapper
{
    /**
     * æŸ¥è¯¢é›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param id é›¶ä»¶ç»Ÿè®¡è¡¨ä¸»é”®
     * @return é›¶ä»¶ç»Ÿè®¡è¡¨
     */
    public ApsPartRouteStat selectApsPartRouteStatById(String id);
    /**
     * æŸ¥è¯¢é›¶ä»¶ç»Ÿè®¡è¡¨åˆ—表
     *
     * @param apsPartRouteStat é›¶ä»¶ç»Ÿè®¡è¡¨
     * @return é›¶ä»¶ç»Ÿè®¡è¡¨é›†åˆ
     */
    public List<ApsPartRouteStat> selectApsPartRouteStatList(ApsPartRouteStat apsPartRouteStat);
    /**
     * æ–°å¢žé›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param apsPartRouteStat é›¶ä»¶ç»Ÿè®¡è¡¨
     * @return ç»“æžœ
     */
    public int insertApsPartRouteStat(ApsPartRouteStat apsPartRouteStat);
    /**
     * ä¿®æ”¹é›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param apsPartRouteStat é›¶ä»¶ç»Ÿè®¡è¡¨
     * @return ç»“æžœ
     */
    public int updateApsPartRouteStat(ApsPartRouteStat apsPartRouteStat);
    /**
     * åˆ é™¤é›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param id é›¶ä»¶ç»Ÿè®¡è¡¨ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteApsPartRouteStatById(String id);
    /**
     * æ‰¹é‡åˆ é™¤é›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteApsPartRouteStatByIds(String[] ids);
    /**
     * æŸ¥è¯¢é›¶ä»¶ç»Ÿè®¡ç”¨äºŽè®¡ç®—
     * @return
     */
    List<ApsPartRouteStat>  selectPartRoutStat();
    /**
     *  åœ¨é‡æ–°æ’入之前, åˆ é™¤é™¤æ­¤batchNumber之外的数据,
     * */
    int deleteLastBatch(String batchNumber);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPartRouteStatService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.aps.core.service;
import java.util.List;
import com.aps.core.domain.ApsPartRouteStat;
/**
 * é›¶ä»¶ç»Ÿè®¡è¡¨Service接口
 *
 * @author zhl
 * @date 2025-04-11
 */
public interface IApsPartRouteStatService
{
    /**
     * æŸ¥è¯¢é›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param id é›¶ä»¶ç»Ÿè®¡è¡¨ä¸»é”®
     * @return é›¶ä»¶ç»Ÿè®¡è¡¨
     */
    public ApsPartRouteStat selectApsPartRouteStatById(String id);
    /**
     * æŸ¥è¯¢é›¶ä»¶ç»Ÿè®¡è¡¨åˆ—表
     *
     * @param apsPartRouteStat é›¶ä»¶ç»Ÿè®¡è¡¨
     * @return é›¶ä»¶ç»Ÿè®¡è¡¨é›†åˆ
     */
    public List<ApsPartRouteStat> selectApsPartRouteStatList(ApsPartRouteStat apsPartRouteStat);
    /**
     * æ–°å¢žé›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param apsPartRouteStat é›¶ä»¶ç»Ÿè®¡è¡¨
     * @return ç»“æžœ
     */
    public int insertApsPartRouteStat(ApsPartRouteStat apsPartRouteStat);
    /**
     * ä¿®æ”¹é›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param apsPartRouteStat é›¶ä»¶ç»Ÿè®¡è¡¨
     * @return ç»“æžœ
     */
    public int updateApsPartRouteStat(ApsPartRouteStat apsPartRouteStat);
    /**
     * æ‰¹é‡åˆ é™¤é›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param ids éœ€è¦åˆ é™¤çš„零件统计表主键集合
     * @return ç»“æžœ
     */
    public int deleteApsPartRouteStatByIds(String[] ids);
    /**
     * åˆ é™¤é›¶ä»¶ç»Ÿè®¡è¡¨ä¿¡æ¯
     *
     * @param id é›¶ä»¶ç»Ÿè®¡è¡¨ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteApsPartRouteStatById(String id);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
package com.aps.core.service.impl;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import com.aps.common.core.utils.uuid.IdUtils;
import com.aps.common.core.utils.uuid.UUID;
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;
import com.aps.core.service.IApsPartRouteStatService;
import static java.util.stream.Collectors.groupingBy;
/**
 * é›¶ä»¶ç»Ÿè®¡è¡¨Service业务层处理
 *
 * @author zhl
 * @date 2025-04-11
 */
@Service
public class ApsPartRouteStatServiceImpl implements IApsPartRouteStatService
{
    @Autowired
    private ApsPartRouteStatMapper apsPartRouteStatMapper;
    private DefaultsBindHandlerAdvisor.MappingsProvider mappingsProvider;
    /**
     * æŸ¥è¯¢é›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param id é›¶ä»¶ç»Ÿè®¡è¡¨ä¸»é”®
     * @return é›¶ä»¶ç»Ÿè®¡è¡¨
     */
    @Override
    public ApsPartRouteStat selectApsPartRouteStatById(String id)
    {
        return apsPartRouteStatMapper.selectApsPartRouteStatById(id);
    }
    /**
     * æŸ¥è¯¢é›¶ä»¶ç»Ÿè®¡è¡¨åˆ—表
     *
     * @param apsPartRouteStat é›¶ä»¶ç»Ÿè®¡è¡¨
     * @return é›¶ä»¶ç»Ÿè®¡è¡¨
     */
    @Override
    public List<ApsPartRouteStat> selectApsPartRouteStatList(ApsPartRouteStat apsPartRouteStat)
    {
        return apsPartRouteStatMapper.selectApsPartRouteStatList(apsPartRouteStat);
    }
    /**
     * æ–°å¢žé›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param apsPartRouteStat é›¶ä»¶ç»Ÿè®¡è¡¨
     * @return ç»“æžœ
     */
    @Override
    public int insertApsPartRouteStat(ApsPartRouteStat apsPartRouteStat)
    {
        return apsPartRouteStatMapper.insertApsPartRouteStat(apsPartRouteStat);
    }
    /**
     * ä¿®æ”¹é›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param apsPartRouteStat é›¶ä»¶ç»Ÿè®¡è¡¨
     * @return ç»“æžœ
     */
    @Override
    public int updateApsPartRouteStat(ApsPartRouteStat apsPartRouteStat)
    {
        return apsPartRouteStatMapper.updateApsPartRouteStat(apsPartRouteStat);
    }
    /**
     * æ‰¹é‡åˆ é™¤é›¶ä»¶ç»Ÿè®¡è¡¨
     *
     * @param ids éœ€è¦åˆ é™¤çš„零件统计表主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsPartRouteStatByIds(String[] ids)
    {
        return apsPartRouteStatMapper.deleteApsPartRouteStatByIds(ids);
    }
    /**
     * åˆ é™¤é›¶ä»¶ç»Ÿè®¡è¡¨ä¿¡æ¯
     *
     * @param id é›¶ä»¶ç»Ÿè®¡è¡¨ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsPartRouteStatById(String id)
    {
        return apsPartRouteStatMapper.deleteApsPartRouteStatById(id);
    }
    public void updatePartRoutPlanDate() {
        List<ApsPartRouteStat> tempList = apsPartRouteStatMapper.selectPartRoutStat();
        /*对tempList æŒ‰ç…§ workOrderNo è¿›è¡Œåˆ†ç»„*/
        Map<String, List<ApsPartRouteStat>> groupByWorkOrderNo = tempList.stream().collect(groupingBy(ApsPartRouteStat::getWorkOrderNo));
        /*本次计算批次号*/
        String batchNum = IdUtils.fastSimpleUUID();
        apsPartRouteStatMapper.deleteLastBatch(batchNum);
        for (Map.Entry<String, List<ApsPartRouteStat>> entry : groupByWorkOrderNo.entrySet()) {
            /*取出每个零件工单的工艺路线信息*/
            List<ApsPartRouteStat> apsPartRouteStatList = entry.getValue();
            /*按照工序号进行排序*/
            apsPartRouteStatList.sort((a, b)->a.getRoadProcessNumber().compareTo(b.getRoadProcessNumber()));
            /*临时保存 ä¸Šä¸€é“工序的工序总工时*/
            ApsPartRouteStat last=null;
            for (int i = 0; i <apsPartRouteStatList.size(); i++) {
                ApsPartRouteStat stat = apsPartRouteStatList.get(0);
                /*判断当前工序 å½“前工序只有一条*/
                if (stat.getCurrentProcessNumber().equals(stat.getRoadProcessNumber())) {
                    /* å¯¹ stat.getProcessPlanStartDay() å’Œå½“前日期 è¿›è¡Œå¯¹æ¯”,只对比到日,不用管十分秒*/
                    if (stat.getProcessPlanStartDay().toLocalDate().isBefore(LocalDateTime.now().toLocalDate())) {
                        stat.setProcessPlanStartDay(LocalDateTime.now());
                    }
                }
                /*未开工工序的计划开工日=上一道工序的计划开工日+上一道工序的工序总工时。*/
                if (stat.getCurrentProcessNumber().compareTo(stat.getRoadProcessNumber()) > 0) {
                    if (last != null) {
                        stat.setProcessPlanStartDay(last.getProcessPlanStartDay().plusHours(last.getProcessTotalTime()));
                    }
                }
                /*保存上一步计算的 å¼€å·¥æ—¥*/
                last = stat;
                stat.setId(IdUtils.fastUUID().toString());
                stat.setBatchNumber(batchNum);
                apsPartRouteStatMapper.insertApsPartRouteStat(stat);
            }
        }
        apsPartRouteStatMapper.deleteLastBatch(batchNum);
    }
}
aps-modules/aps-core/src/main/resources/mapper/core/ApsPartRouteStatMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aps.core.mapper.ApsPartRouteStatMapper">
    <resultMap type="ApsPartRouteStat" id="ApsPartRouteStatResult">
        <result property="id"    column="id"    />
        <result property="workOrderNo"    column="work_order_no"    />
        <result property="roadProcessNumber"    column="road_process_number"    />
        <result property="currentProcessNumber"    column="current_process_number"    />
        <result property="productionQuantity"    column="production_quantity"    />
        <result property="standardTime"    column="standard_time"    />
        <result property="processTotalTime"    column="process_total_time"    />
        <result property="processPlanStartDay"    column="process_plan_start_day"    />
        <result property="designTimes"    column="design_times"    />
        <result property="delFlag"    column="del_flag"    />
        <result property="createBy"    column="create_by"    />
        <result property="batchNumber"    column="batch_number"    />
    </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
    </sql>
    <select id="selectApsPartRouteStatList" parameterType="ApsPartRouteStat" resultMap="ApsPartRouteStatResult">
        <include refid="selectApsPartRouteStatVo"/>
        <where>
            <if test="workOrderNo != null  and workOrderNo != ''"> and work_order_no = #{workOrderNo}</if>
            <if test="roadProcessNumber != null  and roadProcessNumber != ''"> and road_process_number = #{roadProcessNumber}</if>
            <if test="currentProcessNumber != null  and currentProcessNumber != ''"> and current_process_number = #{currentProcessNumber}</if>
            <if test="productionQuantity != null "> and production_quantity = #{productionQuantity}</if>
            <if test="standardTime != null "> and standard_time = #{standardTime}</if>
            <if test="processTotalTime != null "> and process_total_time = #{processTotalTime}</if>
            <if test="processPlanStartDay != null  and processPlanStartDay != ''"> and process_plan_start_day = #{processPlanStartDay}</if>
            <if test="designTimes != null "> and design_times = #{designTimes}</if>
            <if test="batchNumber != null  and batchNumber != ''"> and batch_number = #{batchNumber}</if>
        </where>
    </select>
    <select id="selectApsPartRouteStatById" parameterType="String" resultMap="ApsPartRouteStatResult">
        <include refid="selectApsPartRouteStatVo"/>
        where id = #{id}
    </select>
    <insert id="insertApsPartRouteStat" parameterType="ApsPartRouteStat">
        insert into aps_part_route_stat
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="workOrderNo != null">work_order_no,</if>
            <if test="roadProcessNumber != null and roadProcessNumber != ''">road_process_number,</if>
            <if test="currentProcessNumber != null">current_process_number,</if>
            <if test="productionQuantity != null">production_quantity,</if>
            <if test="standardTime != null">standard_time,</if>
            <if test="processTotalTime != null">process_total_time,</if>
            <if test="processPlanStartDay != null and processPlanStartDay != ''">process_plan_start_day,</if>
            <if test="designTimes != null">design_times,</if>
            <if test="delFlag != null">del_flag,</if>
            <if test="createBy != null">create_by,</if>
            <if test="batchNumber != null">batch_number,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="workOrderNo != null">#{workOrderNo},</if>
            <if test="roadProcessNumber != null and roadProcessNumber != ''">#{roadProcessNumber},</if>
            <if test="currentProcessNumber != null">#{currentProcessNumber},</if>
            <if test="productionQuantity != null">#{productionQuantity},</if>
            <if test="standardTime != null">#{standardTime},</if>
            <if test="processTotalTime != null">#{processTotalTime},</if>
            <if test="processPlanStartDay != null and processPlanStartDay != ''">#{processPlanStartDay},</if>
            <if test="designTimes != null">#{designTimes},</if>
            <if test="delFlag != null">#{delFlag},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="batchNumber != null">#{batchNumber},</if>
         </trim>
    </insert>
    <update id="updateApsPartRouteStat" parameterType="ApsPartRouteStat">
        update aps_part_route_stat
        <trim prefix="SET" suffixOverrides=",">
            <if test="workOrderNo != null">work_order_no = #{workOrderNo},</if>
            <if test="roadProcessNumber != null and roadProcessNumber != ''">road_process_number = #{roadProcessNumber},</if>
            <if test="currentProcessNumber != null">current_process_number = #{currentProcessNumber},</if>
            <if test="productionQuantity != null">production_quantity = #{productionQuantity},</if>
            <if test="standardTime != null">standard_time = #{standardTime},</if>
            <if test="processTotalTime != null">process_total_time = #{processTotalTime},</if>
            <if test="processPlanStartDay != null and processPlanStartDay != ''">process_plan_start_day = #{processPlanStartDay},</if>
            <if test="designTimes != null">design_times = #{designTimes},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="batchNumber != null">batch_number = #{batchNumber},</if>
        </trim>
        where id = #{id}
    </update>
    <update id="deleteApsPartRouteStatById" parameterType="String">
        update aps_part_route_stat set del_flag = '1' where id = #{id}
    </update>
    <update id="deleteApsPartRouteStatByIds" parameterType="String">
        update aps_part_route_stat set del_flag = '1'
        where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </update>
    <update id="deleteLastBatch" parameterType="String">
        update aps_part_route_stat set del_flag = '1' where batch_number != #{batchNumber}
    </update>
    <select id="selectPartRoutStat"  resultMap="ApsPartRouteStatResult" >
        select rt.work_order_no,
            rt.process_name,
            cast( rt.process_number as numeric(18,2)) as road_process_number,
            cast( pl.process_number as numeric(18,2)) as current_process_number,
            pl.production_quantity,
            rt.standard_time,
            (rt.standard_time*pl.production_quantity) as process_total_time,
            rt.process_plan_start_day ,
            (rs.devices_quantity*rs.theory_hours) as design_time
        from aps_part_plan  as pl
            left join aps_process_route as rt on pl.document_number=rt.work_order_no
            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')
            order by rt.work_order_no,process_plan_start_day
    </select>
</mapper>