zhanghl
2025-04-16 c803f8549dcc49e756292b0cf6fbc1dab525b64a
焊缝统计表-逻辑更新
已添加6个文件
已修改3个文件
894 ■■■■■ 文件已修改
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlateProcessStatController.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamTempController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateProcessStat.java 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateProcessStatService.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateProcessStatServiceImpl.java 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsWeldSeamServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateProcessStatMapper.xml 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlateProcessStatController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
package com.aps.core.controller.mainPlan;
import java.util.List;
import java.io.IOException;
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.ApsPlateProcessStat;
import com.aps.core.service.IApsPlateProcessStatService;
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-15
 */
@RestController
@RequestMapping("/plateProcessStat")
public class ApsPlateProcessStatController extends BaseController
{
    @Autowired
    private IApsPlateProcessStatService apsPlateProcessStatService;
    /**
     * å¯¼å‡ºé’£é‡‘统计列表
     */
    @RequiresPermissions("apsPlateProcessStat:export")
    @Log(title = "钣金统计", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ApsPlateProcessStat apsPlateProcessStat)
    {
        List<ApsPlateProcessStat> list = apsPlateProcessStatService.selectApsPlateProcessStatList(apsPlateProcessStat);
        ExcelUtil<ApsPlateProcessStat> util = new ExcelUtil<ApsPlateProcessStat>(ApsPlateProcessStat.class);
        util.exportExcel(response, list, "钣金统计数据");
    }
    /**
     * èŽ·å–é’£é‡‘ç»Ÿè®¡è¯¦ç»†ä¿¡æ¯
     */
    @RequiresPermissions("apsPlateProcessStat:query")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return success(apsPlateProcessStatService.selectApsPlateProcessStatById(id));
    }
    /**
     * æ–°å¢žé’£é‡‘统计
     */
    @RequiresPermissions("apsPlateProcessStat:add")
    @Log(title = "钣金统计", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ApsPlateProcessStat apsPlateProcessStat)
    {
        return toAjax(apsPlateProcessStatService.insertApsPlateProcessStat(apsPlateProcessStat));
    }
    /**
     * åˆ é™¤é’£é‡‘统计
     */
    @RequiresPermissions("apsPlateProcessStat:remove")
    @Log(title = "钣金统计", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids)
    {
        return toAjax(apsPlateProcessStatService.deleteApsPlateProcessStatByIds(ids));
    }
    /**
     * ä¿®æ”¹é’£é‡‘统计
     */
    /*@RequiresPermissions("apsPlateProcessStat:edit")*/
    @Log(title = "钣金统计", businessType = BusinessType.UPDATE)
    @PostMapping("/update")
    public AjaxResult updateStat()
    {
        apsPlateProcessStatService.savePlateProcessStat();
        return toAjax(true);
    }
    /**
     * æŸ¥è¯¢é’£é‡‘统计列表
     */
    /*@RequiresPermissions("apsPlateProcessStat:list")*/
    @GetMapping("/list")
    public TableDataInfo list(ApsPlateProcessStat apsPlateProcessStat)
    {
        List<ApsPlateProcessStat> list = apsPlateProcessStatService.selectApsPlateProcessStatList(apsPlateProcessStat);
        return getDataTable(list);
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamController.java
@@ -38,7 +38,7 @@
    /**
     * æŸ¥è¯¢ç„Šç¼åˆ—表
     */
    @RequiresPermissions("weldSeam:weldSeam:list")
//    @RequiresPermissions("weldSeam:weldSeam:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsWeldSeam apsWeldSeam) {
//        startPage();
@@ -131,23 +131,25 @@
            //分类
            List<SysDictData> list = DictUtils.getDictCache("aps_weld_classification");
            for (int i = 0; i < apsWeldSeamTemps.size(); i++) {
                ApsWeldSeamTemp apsWeldSeamTemp = apsWeldSeamTemps.get(i);
                //分类
                for (int j = 0; j < list.size(); j++) {
                    if (apsWeldSeamTemps.get(i).getClassificationTxt().equals(list.get(j).getDictLabel())) {
                        apsWeldSeamTemps.get(i).setClassification(list.get(j).getDictValue());
                    if (apsWeldSeamTemp.getClassificationTxt().equals(list.get(j).getDictLabel())) {
                        apsWeldSeamTemp.setClassification(list.get(j).getDictValue());
                    }
                }
                //工单类型
                for (int j = 0; j < listTypes.size(); j++) {
                    if (apsWeldSeamTemps.get(i).getWorkOrderTypeTxt().equals(listTypes.get(j).getDictLabel())) {
                        apsWeldSeamTemps.get(i).setWorkOrderType(listTypes.get(j).getDictValue());
                    if (apsWeldSeamTemp.getWorkOrderTypeTxt().equals(listTypes.get(j).getDictLabel())) {
                        apsWeldSeamTemp.setWorkOrderType(listTypes.get(j).getDictValue());
                    }
                }
                //插入版本号
                apsWeldSeamTemps.get(i).setBatchNumber(batchNum);
                apsWeldSeamTemp.setBatchNumber(batchNum);
                //插入临时表
                apsWeldSeamTemps.get(i).setTotalWeldSeam(apsWeldSeamTemps.get(i).getSingleWeldSeam().longValue()*apsWeldSeamTemps.get(i).getProductionQuantity().longValue());
                apsWeldSeamTempService.insertApsWeldSeamTemp(apsWeldSeamTemps.get(i));
                apsWeldSeamTemp.setTotalWeldSeam(apsWeldSeamTemp.getSingleWeldSeam().longValue()* apsWeldSeamTemp.getProductionQuantity().longValue());
                apsWeldSeamTempService.insertApsWeldSeamTemp(apsWeldSeamTemp);
            }
            return AjaxResult.success("导入成功", batchNum);
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamTempController.java
@@ -2,6 +2,8 @@
import java.util.List;
import com.aps.common.security.utils.DictUtils;
import com.aps.system.api.domain.SysDictData;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -44,6 +46,18 @@
    {
//        startPage();
        List<ApsWeldSeamTemp> list = apsWeldSeamTempService.selectApsWeldSeamTempList(apsWeldSeamTemp);
        //工单类型
        List<SysDictData> workOrderTypes = DictUtils.getDictCache("aps_weld_work_order_type");
        //分类
        List<SysDictData> classification = DictUtils.getDictCache("aps_weld_classification");
        list.forEach(tmp->{
            classification.stream().filter(t->t.getDictValue().equals(tmp.getClassification()))
                    .findFirst().ifPresent(t->{ tmp.setClassification(t.getDictLabel());}) ;
            workOrderTypes.stream().filter(t->t.getDictValue().equals(tmp.getWorkOrderType()))
                    .findFirst().ifPresent(t->{ tmp.setWorkOrderType(t.getDictLabel());}) ;
        });
        return getDataTable(list);
    }
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateProcessStat.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,264 @@
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;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aps.common.core.annotation.Excel;
import com.aps.common.core.web.domain.BaseEntity;
/**
 * é’£é‡‘统计对象 aps_plate_process_stat
 *
 * @author zhl
 * @date 2025-04-15
 */
public class ApsPlateProcessStat extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ä¸»é”®id */
    private String id;
    /** å·¥å•号 */
    @Excel(name = "工单号")
    private String workOrderNo;
    /** å·¥åºåç§° */
    @Excel(name = "工序名称")
    private String processName;
    /** æŽ’序 */
    @Excel(name = "排序")
    private Integer num;
    /** å·¥åºå· */
    @Excel(name = "工序号")
    private BigDecimal routeProcessNumber;
    /** å½“前工序号 */
    @Excel(name = "当前工序号")
    private BigDecimal currentProcessNumber;
    /** ç”Ÿäº§æ•°é‡ */
    @Excel(name = "生产数量")
    private Integer productionQuantity;
    /** æ ‡å‡†å·¥æ—¶ */
    @Excel(name = "标准工时")
    private Integer standardTime;
    /** å·¥åºæ€»å·¥æ—¶ */
    @Excel(name = "工序总工时")
    private Integer processTotalTime;
    /** è®¡åˆ’完成日 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划完成日", width = 30, dateFormat = "yyyy-MM-dd")
    private Date processPlanEndDay;
    /** è®¡ç®—完成日 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "计算完成日", width = 30, dateFormat = "yyyy-MM-dd")
    private Date computePlanEndDay;
    /** è®¡åˆ’开工日 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划开工日", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date processPlanStartDay;
    /** è®¢å•开工日 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "订单开工日", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date orderPlanEndDay;
    /** è®¾è®¡å·¥æ—¶ */
    @Excel(name = "设计工时")
    private Long designTimes;
    /** æ‰¹æ¬¡å· */
    @Excel(name = "批次号")
    private String batchNumber;
    /** åˆ é™¤æ ‡å¿—(0代表存在 2代表删除) */
    private String delFlag;
    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 setProcessName(String processName)
    {
        this.processName = processName;
    }
    public String getProcessName()
    {
        return processName;
    }
    public void setNum(Integer num)
    {
        this.num = num;
    }
    public Integer getNum()
    {
        return num;
    }
    public void setRouteProcessNumber(BigDecimal routeProcessNumber)
    {
        this.routeProcessNumber = routeProcessNumber;
    }
    public BigDecimal getRouteProcessNumber()
    {
        return routeProcessNumber;
    }
    public void setCurrentProcessNumber(BigDecimal currentProcessNumber)
    {
        this.currentProcessNumber = currentProcessNumber;
    }
    public BigDecimal getCurrentProcessNumber()
    {
        return currentProcessNumber;
    }
    public void setProductionQuantity(Integer productionQuantity)
    {
        this.productionQuantity = productionQuantity;
    }
    public Integer getProductionQuantity()
    {
        return productionQuantity;
    }
    public void setStandardTime(Integer standardTime)
    {
        this.standardTime = standardTime;
    }
    public Integer getStandardTime()
    {
        return standardTime;
    }
    public void setProcessTotalTime(Integer processTotalTime)
    {
        this.processTotalTime = processTotalTime;
    }
    public Integer getProcessTotalTime()
    {
        return processTotalTime;
    }
    public void setProcessPlanEndDay(Date processPlanEndDay)
    {
        this.processPlanEndDay = processPlanEndDay;
    }
    public Date getProcessPlanEndDay()
    {
        return processPlanEndDay;
    }
    public void setComputePlanEndDay(Date computePlanEndDay)
    {
        this.computePlanEndDay = computePlanEndDay;
    }
    public Date getComputePlanEndDay()
    {
        return computePlanEndDay;
    }
    public void setDesignTimes(Long designTimes)
    {
        this.designTimes = designTimes;
    }
    public Long getDesignTimes()
    {
        return designTimes;
    }
    public void setBatchNumber(String batchNumber)
    {
        this.batchNumber = batchNumber;
    }
    public String getBatchNumber()
    {
        return batchNumber;
    }
    public Date getProcessPlanStartDay() {
        return processPlanStartDay;
    }
    public void setProcessPlanStartDay(Date processPlanStartDay) {
        this.processPlanStartDay = processPlanStartDay;
    }
    public Date getOrderPlanEndDay() {
        return orderPlanEndDay;
    }
    public void setOrderPlanEndDay(Date orderPlanEndDay) {
        this.orderPlanEndDay = orderPlanEndDay;
    }
    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }
    public String getDelFlag()
    {
        return delFlag;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("workOrderNo", getWorkOrderNo())
            .append("processName", getProcessName())
            .append("num", getNum())
            .append("routeProcessNumber", getRouteProcessNumber())
            .append("currentProcessNumber", getCurrentProcessNumber())
            .append("productionQuantity", getProductionQuantity())
            .append("standardTime", getStandardTime())
            .append("processTotalTime", getProcessTotalTime())
            .append("processPlanEndDay", getProcessPlanEndDay())
            .append("computePlanEndDay", getComputePlanEndDay())
            .append("designTimes", getDesignTimes())
            .append("batchNumber", getBatchNumber())
            .append("createBy", getCreateBy())
            .append("delFlag", getDelFlag())
            .toString();
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.aps.core.mapper;
import java.util.List;
import com.aps.core.domain.ApsPlateProcessStat;
import org.apache.ibatis.annotations.Mapper;
/**
 * é’£é‡‘统计Mapper接口
 *
 * @author zhl
 * @date 2025-04-15
 */
@Mapper
public interface ApsPlateProcessStatMapper
{
    /**
     * æŸ¥è¯¢é’£é‡‘统计
     *
     * @param id é’£é‡‘统计主键
     * @return é’£é‡‘统计
     */
    public ApsPlateProcessStat selectApsPlateProcessStatById(String id);
    /**
     * æŸ¥è¯¢é’£é‡‘统计列表
     *
     * @param apsPlateProcessStat é’£é‡‘统计
     * @return é’£é‡‘统计集合
     */
    public List<ApsPlateProcessStat> selectApsPlateProcessStatList(ApsPlateProcessStat apsPlateProcessStat);
    /**
     * æ–°å¢žé’£é‡‘统计
     *
     * @param apsPlateProcessStat é’£é‡‘统计
     * @return ç»“æžœ
     */
    public int insertApsPlateProcessStat(ApsPlateProcessStat apsPlateProcessStat);
    /**
     * ä¿®æ”¹é’£é‡‘统计
     *
     * @param apsPlateProcessStat é’£é‡‘统计
     * @return ç»“æžœ
     */
    public int updateApsPlateProcessStat(ApsPlateProcessStat apsPlateProcessStat);
    /**
     * åˆ é™¤é’£é‡‘统计
     *
     * @param id é’£é‡‘统计主键
     * @return ç»“æžœ
     */
    public int deleteApsPlateProcessStatById(String id);
    /**
     * æ‰¹é‡åˆ é™¤é’£é‡‘统计
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteApsPlateProcessStatByIds(String[] ids);
    /**统计临时数据*/
    List<ApsPlateProcessStat> queryTempStat();
    /**
     * åˆ é™¤å½“前批次之外的数据
     */
    int removeOtherStat(String batchNumber);
    /**
     * æ‰¹é‡æ’入数据
     * */
    int batchInsertPlateStat(List<ApsPlateProcessStat> list);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateProcessStatService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.aps.core.service;
import java.util.List;
import com.aps.core.domain.ApsPlateProcessStat;
import org.springframework.transaction.annotation.Transactional;
/**
 * é’£é‡‘统计Service接口
 *
 * @author zhl
 * @date 2025-04-15
 */
public interface IApsPlateProcessStatService
{
    /**
     * æŸ¥è¯¢é’£é‡‘统计
     *
     * @param id é’£é‡‘统计主键
     * @return é’£é‡‘统计
     */
    public ApsPlateProcessStat selectApsPlateProcessStatById(String id);
    /**
     * æŸ¥è¯¢é’£é‡‘统计列表
     *
     * @param apsPlateProcessStat é’£é‡‘统计
     * @return é’£é‡‘统计集合
     */
    public List<ApsPlateProcessStat> selectApsPlateProcessStatList(ApsPlateProcessStat apsPlateProcessStat);
    /**
     * æ–°å¢žé’£é‡‘统计
     *
     * @param apsPlateProcessStat é’£é‡‘统计
     * @return ç»“æžœ
     */
    public int insertApsPlateProcessStat(ApsPlateProcessStat apsPlateProcessStat);
    /**
     * ä¿®æ”¹é’£é‡‘统计
     *
     * @param apsPlateProcessStat é’£é‡‘统计
     * @return ç»“æžœ
     */
    public int updateApsPlateProcessStat(ApsPlateProcessStat apsPlateProcessStat);
    /**
     * æ‰¹é‡åˆ é™¤é’£é‡‘统计
     *
     * @param ids éœ€è¦åˆ é™¤çš„钣金统计主键集合
     * @return ç»“æžœ
     */
    public int deleteApsPlateProcessStatByIds(String[] ids);
    /**
     * åˆ é™¤é’£é‡‘统计信息
     *
     * @param id é’£é‡‘统计主键
     * @return ç»“æžœ
     */
    public int deleteApsPlateProcessStatById(String id);
    @Transactional
    void savePlateProcessStat();
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateProcessStatServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,164 @@
package com.aps.core.service.impl;
import java.time.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.aps.common.core.utils.uuid.IdUtils;
import com.aps.common.security.utils.SecurityUtils;
import org.apache.commons.lang3.SystemUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.aps.core.mapper.ApsPlateProcessStatMapper;
import com.aps.core.domain.ApsPlateProcessStat;
import com.aps.core.service.IApsPlateProcessStatService;
import org.springframework.transaction.annotation.Transactional;
import static java.util.stream.Collectors.groupingBy;
/**
 * é’£é‡‘统计Service业务层处理
 *
 * @author zhl
 * @date 2025-04-15
 */
@Service
public class ApsPlateProcessStatServiceImpl implements IApsPlateProcessStatService
{
    @Autowired
    private ApsPlateProcessStatMapper apsPlateProcessStatMapper;
    /**
     * æŸ¥è¯¢é’£é‡‘统计
     *
     * @param id é’£é‡‘统计主键
     * @return é’£é‡‘统计
     */
    @Override
    public ApsPlateProcessStat selectApsPlateProcessStatById(String id)
    {
        return apsPlateProcessStatMapper.selectApsPlateProcessStatById(id);
    }
    /**
     * æŸ¥è¯¢é’£é‡‘统计列表
     *
     * @param apsPlateProcessStat é’£é‡‘统计
     * @return é’£é‡‘统计
     */
    @Override
    public List<ApsPlateProcessStat> selectApsPlateProcessStatList(ApsPlateProcessStat apsPlateProcessStat)
    {
        return apsPlateProcessStatMapper.selectApsPlateProcessStatList(apsPlateProcessStat);
    }
    /**
     * æ–°å¢žé’£é‡‘统计
     *
     * @param apsPlateProcessStat é’£é‡‘统计
     * @return ç»“æžœ
     */
    @Override
    public int insertApsPlateProcessStat(ApsPlateProcessStat apsPlateProcessStat)
    {
        return apsPlateProcessStatMapper.insertApsPlateProcessStat(apsPlateProcessStat);
    }
    /**
     * ä¿®æ”¹é’£é‡‘统计
     *
     * @param apsPlateProcessStat é’£é‡‘统计
     * @return ç»“æžœ
     */
    @Override
    public int updateApsPlateProcessStat(ApsPlateProcessStat apsPlateProcessStat)
    {
        return apsPlateProcessStatMapper.updateApsPlateProcessStat(apsPlateProcessStat);
    }
    /**
     * æ‰¹é‡åˆ é™¤é’£é‡‘统计
     *
     * @param ids éœ€è¦åˆ é™¤çš„钣金统计主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsPlateProcessStatByIds(String[] ids)
    {
        return apsPlateProcessStatMapper.deleteApsPlateProcessStatByIds(ids);
    }
    /**
     * åˆ é™¤é’£é‡‘统计信息
     *
     * @param id é’£é‡‘统计主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsPlateProcessStatById(String id)
    {
        return apsPlateProcessStatMapper.deleteApsPlateProcessStatById(id);
    }
    /**
     * ä¿å­˜é’£é‡‘统计数据
     */
    @Transactional
    @Override
    public void savePlateProcessStat() {
        String batchNum = IdUtils.fastSimpleUUID();
        List<ApsPlateProcessStat> tempList = apsPlateProcessStatMapper.queryTempStat();
        Map<String, List<ApsPlateProcessStat>> groupByOrderNo = tempList.stream().collect(groupingBy(ApsPlateProcessStat::getWorkOrderNo));
        for (Map.Entry<String, List<ApsPlateProcessStat>> entry : groupByOrderNo.entrySet()) {
            List<ApsPlateProcessStat> statPerOrder = entry.getValue();
            /*num ä¸ºæ ¹æ®å®Œå·¥æ—¶é—´æŽ’序出的序号,按此排序,可保证是按完工时间倒叙排列*/
            statPerOrder.sort((a, b)->a.getNum().compareTo(b.getNum()));
            ApsPlateProcessStat last=null;
            for (int i = 0; i <statPerOrder.size(); i++) {
                ApsPlateProcessStat stat = statPerOrder.get(i);
                stat.setId(IdUtils.fastSimpleUUID());
                stat.setBatchNumber(batchNum);
                stat.setCreateBy(SecurityUtils.getUsername());
                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);
                    /*计划完工日=钣金计划工单完成时间*/
                    stat.setProcessPlanEndDay(transDate(orderPlanEndDayLocalDateTime));
                    /*计划开工日=钣金计划工单完成时间 -  å·¥åºæ€»å·¥æ—¶*/
                    stat.setProcessPlanStartDay(transDate(orderPlanEndDayLocalDateTime.minusHours(stat.getProcessTotalTime())));
                }
                /*当工艺工序号 > å·¥å•当前工序时,代表是未来的工序,才进行计划开工日 å’Œè®¡åˆ’完工日的计算*/
                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(last!=null){
                            /*未开工工序的计划开工日=上一道工序的计划开工日+上一道工序的工序总工时。*/
                            stat.setProcessPlanEndDay(last.getProcessPlanStartDay());
                            stat.setProcessPlanStartDay(transDate(transLocalDateTime(last.getProcessPlanStartDay()).minusHours(stat.getProcessTotalTime()) ));
                        }
                   }
                }
                last = stat;
                apsPlateProcessStatMapper.insertApsPlateProcessStat(stat);
            }
        }
        apsPlateProcessStatMapper.removeOtherStat(batchNum);
    }
    private Date transDate(LocalDateTime localDateTime){
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }
    private LocalDateTime transLocalDateTime(Date date){
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsWeldSeamServiceImpl.java
@@ -114,7 +114,7 @@
            //通过工单号查询是否存在数据
            ApsWeldSeam apsWeldSeam1 = apsWeldSeamMapper.selectApsWeldSeamByWorkOrderNo(apsWeldSeam.getWorkOrderNo());
            //当工单号存在则更新数据否则插入数据
            if (ObjectUtils.isNotEmpty(apsWeldSeam1)) {
            if (apsWeldSeam1!=null&&apsWeldSeam1.getId()!=null) {
                apsWeldSeam.setId(apsWeldSeam1.getId());
                apsWeldSeamMapper.updateApsWeldSeam(apsWeldSeam);
            } else {
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateProcessStatMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,185 @@
<?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.ApsPlateProcessStatMapper">
    <resultMap type="ApsPlateProcessStat" id="ApsPlateProcessStatResult">
        <result property="id"    column="id"    />
        <result property="workOrderNo"    column="work_order_no"    />
        <result property="processName"    column="process_name"    />
        <result property="num"    column="num"    />
        <result property="routeProcessNumber"    column="route_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="processPlanEndDay"    column="process_plan_end_day"    />
        <result property="computePlanEndDay"    column="compute_plan_end_day"    />
        <result property="processPlanStartDay"    column="process_plan_start_day"    />
        <result property="orderPlanEndDay"    column="order_plan_end_day"    />
        <result property="designTimes"    column="design_times"    />
        <result property="batchNumber"    column="batch_number"    />
        <result property="createBy"    column="create_by"    />
        <result property="delFlag"    column="del_flag"    />
    </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, compute_plan_end_day, design_times, batch_number, create_by, del_flag from aps_plate_process_stat
    </sql>
    <select id="selectApsPlateProcessStatList" parameterType="ApsPlateProcessStat" resultMap="ApsPlateProcessStatResult">
        <include refid="selectApsPlateProcessStatVo"/>
        <where>
            <if test="workOrderNo != null  and workOrderNo != ''"> and work_order_no = #{workOrderNo}</if>
            <if test="processName != null  and processName != ''"> and process_name like concat('%', #{processName}, '%')</if>
            <if test="num != null "> and num = #{num}</if>
            <if test="routeProcessNumber != null "> and route_process_number = #{routeProcessNumber}</if>
            <if test="currentProcessNumber != null "> 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="processPlanEndDay != null "> and process_plan_end_day = #{processPlanEndDay}</if>
            <if test="computePlanEndDay != null "> and compute_plan_end_day = #{computePlanEndDay}</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="selectApsPlateProcessStatById" parameterType="String" resultMap="ApsPlateProcessStatResult">
        <include refid="selectApsPlateProcessStatVo"/>
        where id = #{id}
    </select>
    <insert id="insertApsPlateProcessStat" parameterType="ApsPlateProcessStat">
        insert into aps_plate_process_stat
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="workOrderNo != null">work_order_no,</if>
            <if test="processName != null">process_name,</if>
            <if test="num != null">num,</if>
            <if test="routeProcessNumber != null">route_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="processPlanEndDay != null">process_plan_end_day,</if>
            <if test="processPlanStartDay != null">process_plan_start_day,</if>
            <if test="designTimes != null">design_times,</if>
            <if test="batchNumber != null">batch_number,</if>
            <if test="createBy != null">create_by,</if>
            <if test="delFlag != null">del_flag,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="workOrderNo != null">#{workOrderNo},</if>
            <if test="processName != null">#{processName},</if>
            <if test="num != null">#{num},</if>
            <if test="routeProcessNumber != null">#{routeProcessNumber},</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="processPlanEndDay != null">#{processPlanEndDay},</if>
            <if test="processPlanStartDay != null">#{processPlanStartDay},</if>
            <if test="designTimes != null">#{designTimes},</if>
            <if test="batchNumber != null">#{batchNumber},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="delFlag != null">#{delFlag},</if>
         </trim>
    </insert>
    <update id="updateApsPlateProcessStat" parameterType="ApsPlateProcessStat">
        update aps_plate_process_stat
        <trim prefix="SET" suffixOverrides=",">
            <if test="workOrderNo != null">work_order_no = #{workOrderNo},</if>
            <if test="processName != null">process_name = #{processName},</if>
            <if test="num != null">num = #{num},</if>
            <if test="routeProcessNumber != null">route_process_number = #{routeProcessNumber},</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="processPlanEndDay != null">process_plan_end_day = #{processPlanEndDay},</if>
            <if test="computePlanEndDay != null">compute_plan_end_day = #{computePlanEndDay},</if>
            <if test="designTimes != null">design_times = #{designTimes},</if>
            <if test="batchNumber != null">batch_number = #{batchNumber},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteApsPlateProcessStatById" parameterType="String">
        delete from aps_plate_process_stat where id = #{id}
    </delete>
    <delete id="deleteApsPlateProcessStatByIds" parameterType="String">
        delete from aps_plate_process_stat where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <select id="queryTempStat" resultMap="ApsPlateProcessStatResult">
        select
            row_number() over (partition by rt.work_order_no  order by rt.process_number  desc ) as num,
            rt.work_order_no,
            rt.process_name,
            cast(rt.process_number as numeric(18, 2))   as route_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,
            rt.process_plan_end_day,
            pl.plan_end_day as order_plan_end_day
        from aps_plate_plan as pl
                 left join aps_process_route as rt on pl.document_number = rt.work_order_no
        where pl.del_flag = '0'  and rt.del_flag = '0'
          and (pl.document_status is not null and (pl.document_status != '3'))
        order by rt.work_order_no asc , rt.process_number desc
    </select>
    <update id="removeOtherStat" parameterType="String">
        delete from aps_plate_process_stat where batch_number != #{batchNumber}
    </update>
    <insert id="batchInsertPlateStat" parameterType="ApsPlateProcessStat">
        insert into aps_plate_process_stat
        (
            id,
            work_order_no,
            process_name,
            num,
            route_process_number,
            current_process_number,
            production_quantity,
            standard_time,
            process_total_time,
            process_plan_end_day,
            batch_number,
            create_by,
            del_flag
        )
        values
        <foreach collection="list" item="item" index="index" separator=",">
       (
            #{item.id},
            #{item.workOrderNo},
            #{item.processName},
            #{item.num},
            #{item.routeProcessNumber},
            #{item.currentProcessNumber},
            #{item.productionQuantity},
            #{item.standardTime},
            #{item.processTotalTime},
            #{item.processPlanEndDay},
            #{item.batchNumber},
            #{item.createBy},
            '0'
        )
        </foreach>
    </insert>
</mapper>