sfd
2025-05-23 edca6e6425e38e2ec87b08f164fb3c68dd195da6
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
     * 
@@ -139,25 +142,56 @@
            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;
        }
    }
}