zhanghl
2025-05-22 f274ea473d1ba857c8ac213fc43524b4e773cf71
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java
@@ -1,21 +1,21 @@
package com.aps.core.service.impl;
import java.math.BigDecimal;
import java.util.Hashtable;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
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.ApsPlateStandardRequire;
import com.aps.core.domain.ApsPlateStandardRequireError;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequire;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequireError;
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;
import org.springframework.stereotype.Service;
import com.aps.core.mapper.ApsStandardProcessRouteLineMapper;
import com.aps.core.domain.ApsStandardProcessRouteLine;
@@ -35,7 +35,10 @@
    @Resource
    ApsStandardProcessRouteHeaderMapper standardProcessRouteHeaderMapper;
    @Resource
    ApsPlateStandardRequireErrorMapper requireErrorMapper;
    IApsPlateStandardRequireErrorService requireErrorService;
    @Resource
    private RedisTemplate redisTemplate;
    /**
     * 查询标准工艺路线Line
     * 
@@ -116,8 +119,6 @@
     */
    @Override
    public ApsStandardProcessRouteLine getRouteLineTotalTime(ApsPlateStandardRequire require) {
        // 定义独占生产模式常量
        String productivityModel_monopolize = "独占";
        // 初始化总工时为0
        BigDecimal totalRouteTime = BigDecimal.ZERO;
        //工厂
@@ -128,7 +129,6 @@
        ApsStandardProcessRouteLine ret=new ApsStandardProcessRouteLine();
        ret.setRouteId(String.valueOf(routId));
        ret.setRouteTime(BigDecimal.ZERO);
        // 查询标准工艺路线头部信息
        Optional<ApsStandardProcessRouteHeader> firstProcessRoute = standardProcessRouteHeaderMapper.queryStandardProcessRouteHeaderByPlantAndItemCode(plant, itemNumber).stream().findFirst();
        if (firstProcessRoute.isPresent()) {
@@ -136,52 +136,62 @@
            // 构建工艺路线行参数对象
            ApsStandardProcessRouteLine routeLineParam =new ApsStandardProcessRouteLine();
            routeLineParam.setRouteId(routeHeader.getRouteId());
            // 查询标准工艺路线行信息
            List<ApsStandardProcessRouteLine> apsStandardProcessRouteLines = apsStandardProcessRouteLineMapper.selectApsStandardProcessRouteLineList(routeLineParam);
            /*工艺路线Line 总工时*/
            if(apsStandardProcessRouteLines.isEmpty()){
                saveRequireError(require,"工序不存在");
            }else {
                // 遍历每个工艺路线行
                apsStandardProcessRouteLines.forEach(line -> {
                    // 默认将设计产能设置为路线时间
                    line.setRouteTime(line.getDesignCapacity());
                    // 如果生产模式为独占,则路线时间为设计产能乘以净需求量
                    if (line.getProductivityModel().equals(productivityModel_monopolize)) {
                        line.setRouteTime(line.getDesignCapacity().multiply(require.getNetRequirement()));
                    }
                });
                // 累加路线时间到总工时中
               totalRouteTime = apsStandardProcessRouteLines.stream()
                        .map(ApsStandardProcessRouteLine::getRouteTime)
                        .reduce(BigDecimal.ZERO, BigDecimal::add);
            }
            BigDecimal standardTime = apsStandardProcessRouteLineMapper.selectTotalStandTime(routeHeader.getRouteId()).getStandardTime();
            totalRouteTime =standardTime.multiply(require.getNetRequirement());
            ret.setRouteTime(totalRouteTime);
            ret.setRouteId(routeHeader.getRouteId());
        }else {
            saveRequireError(require,"标准工艺路线不存在");
            requireErrorService.saveRequireError(require,"标准工艺路线不存在");
        }
        // 返回总工时
        return ret;
    }
    @Override
    public ApsStandardProcessRouteLine getRouteHeaderRouteTime(ApsPlateStandardRequire require){
    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);
        //工厂
        String plant=require.getOrgCode();
        // 物料号
        String itemCode=require.getBomLineCode();
        // 净需求
        BigDecimal netRequirement=  require.getNetRequirement();
        //构建Redis Key
        String key = "ROUTE:ROUTE_"+plant+"_"+itemCode;
        BigDecimal totalRouteTime = BigDecimal.ZERO;
        ApsStandardProcessRouteLine ret=new ApsStandardProcessRouteLine();
        ret.setRouteId("0");
        ret.setRouteTime(totalRouteTime);
        Object routeHeaderObj = redisTemplate.opsForValue().get(key);
        if (routeHeaderObj != null) {
            totalRouteTime = (BigDecimal) routeHeaderObj;
            ret.setRouteId("0");
            ret.setRouteTime(totalRouteTime.multiply(netRequirement));
            return  ret;
        } else {
            requireErrorService.saveRequireError(require,"标准工艺路线不存在");
            /*// 查询标准工艺路线头部信息
            Optional<ApsStandardProcessRouteHeader> firstProcessRoute = standardProcessRouteHeaderMapper.queryStandardProcessRouteHeaderByPlantAndItemCode(plant, itemCode).stream().findFirst();
            if (firstProcessRoute.isPresent()) {
                ApsStandardProcessRouteHeader routeHeader = firstProcessRoute.get();
                // 构建工艺路线行参数对象
                ApsStandardProcessRouteLine routeLineParam =new ApsStandardProcessRouteLine();
                routeLineParam.setRouteId(routeHeader.getRouteId());
                // 查询标准工艺路线行信息
                BigDecimal standardTime = apsStandardProcessRouteLineMapper.selectTotalStandTime(routeHeader.getRouteId()).getStandardTime();
                totalRouteTime =standardTime.multiply(netRequirement);
                // 计算返回的数据
                ret.setRouteTime(totalRouteTime);
                ret.setRouteId(routeHeader.getRouteId());
                *//*存储至Redis*//*
                redisTemplate.opsForValue().set(key, standardTime);
            }else {
                saveRequireError(require,"标准工艺路线不存在");
            }*/
            return ret;
        }
    }
}