package com.aps.core.service.impl; import java.math.BigDecimal; import java.util.List; import java.util.Optional; 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.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; import com.aps.core.service.IApsStandardProcessRouteLineService; /** * 标准工艺路线LineService业务层处理 * * @author zhl * @date 2025-05-06 */ @Service public class ApsStandardProcessRouteLineServiceImpl implements IApsStandardProcessRouteLineService { @Autowired private ApsStandardProcessRouteLineMapper apsStandardProcessRouteLineMapper; @Resource ApsStandardProcessRouteHeaderMapper standardProcessRouteHeaderMapper; @Resource IApsPlateStandardRequireErrorService requireErrorService; @Resource private RedisTemplate redisTemplate; /** * 查询标准工艺路线Line * * @param id 标准工艺路线Line主键 * @return 标准工艺路线Line */ @Override public ApsStandardProcessRouteLine selectApsStandardProcessRouteLineById(Long id) { return apsStandardProcessRouteLineMapper.selectApsStandardProcessRouteLineById(id); } /** * 查询标准工艺路线Line列表 * * @param apsStandardProcessRouteLine 标准工艺路线Line * @return 标准工艺路线Line */ @Override public List selectApsStandardProcessRouteLineList(ApsStandardProcessRouteLine apsStandardProcessRouteLine) { return apsStandardProcessRouteLineMapper.selectApsStandardProcessRouteLineList(apsStandardProcessRouteLine); } /** * 新增标准工艺路线Line * * @param apsStandardProcessRouteLine 标准工艺路线Line * @return 结果 */ @Override public int insertApsStandardProcessRouteLine(ApsStandardProcessRouteLine apsStandardProcessRouteLine) { apsStandardProcessRouteLine.setCreateTime(DateUtils.getNowDate()); return apsStandardProcessRouteLineMapper.insertApsStandardProcessRouteLine(apsStandardProcessRouteLine); } /** * 修改标准工艺路线Line * * @param apsStandardProcessRouteLine 标准工艺路线Line * @return 结果 */ @Override public int updateApsStandardProcessRouteLine(ApsStandardProcessRouteLine apsStandardProcessRouteLine) { apsStandardProcessRouteLine.setUpdateTime(DateUtils.getNowDate()); return apsStandardProcessRouteLineMapper.updateApsStandardProcessRouteLine(apsStandardProcessRouteLine); } /** * 批量删除标准工艺路线Line * * @param ids 需要删除的标准工艺路线Line主键 * @return 结果 */ @Override public int deleteApsStandardProcessRouteLineByIds(Long[] ids) { return apsStandardProcessRouteLineMapper.deleteApsStandardProcessRouteLineByIds(ids); } /** * 删除标准工艺路线Line信息 * * @param id 标准工艺路线Line主键 * @return 结果 */ @Override public int deleteApsStandardProcessRouteLineById(Long id) { return apsStandardProcessRouteLineMapper.deleteApsStandardProcessRouteLineById(id); } /** * 根据料号 查询工艺路线 及其下的工序,计算工艺路线总工时 * @param require 需求信息 * @return 工艺路线总工时 */ @Override public ApsStandardProcessRouteLine getRouteLineTotalTime(ApsPlateStandardRequire require) { // 初始化总工时为0 BigDecimal totalRouteTime = BigDecimal.ZERO; //工厂 String plant=require.getOrgCode(); // 物料号 String itemNumber=require.getBomLineCode(); long routId=0L; ApsStandardProcessRouteLine ret=new ApsStandardProcessRouteLine(); ret.setRouteId(String.valueOf(routId)); ret.setRouteTime(BigDecimal.ZERO); // 查询标准工艺路线头部信息 Optional firstProcessRoute = standardProcessRouteHeaderMapper.queryStandardProcessRouteHeaderByPlantAndItemCode(plant, itemNumber).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(require.getNetRequirement()); ret.setRouteTime(totalRouteTime); ret.setRouteId(routeHeader.getRouteId()); }else { requireErrorService.saveRequireError(require,"标准工艺路线不存在"); } // 返回总工时 return ret; } @Override public ApsStandardProcessRouteLine getRouteHeaderRouteTime(ApsPlateStandardRequire require){ //工厂 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 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; } } }