| | |
| | | import jakarta.annotation.Resource; |
| | | import com.aps.core.domain.ApsPlateStandardRequire; |
| | | import com.aps.core.mapper.ApsPlateStandardRequireMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import com.aps.core.service.IApsPlateStandardRequireService; |
| | |
| | | * @author zhl |
| | | * @date 2025-05-06 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class ApsPlateStandardRequireServiceImpl implements IApsPlateStandardRequireService |
| | | { |
| | |
| | | /*获取钣金主单信息*/ |
| | | List<ApsPlatePlan> mainPlans = platePlanMapper.selectPlatePlanByPlantMajor(plantCode,mainOrderType); |
| | | Hashtable<String, ApsMaterialStorageManagement> usedStorage = new Hashtable<>(); |
| | | |
| | | log.info("开始生成需求:"); |
| | | for (ApsPlatePlan mainPlan : mainPlans) { |
| | | String itemNumber = mainPlan.getItemNumber(); |
| | | /*根据料号 获取BOM Header */ |
| | |
| | | List<ApsPlateStandardRequireBomStockDetail> stockDetailsList=new ArrayList<>(); |
| | | List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList=new ArrayList<>(); |
| | | |
| | | |
| | | log.info("开始生成需求:工单号:"+mainPlan.getDocumentNumber()); |
| | | getBomRequires(plantCode, "0","0",itemNumber,BigDecimal.ONE, batchNum, null |
| | | , mainPlan, requiresList, 0L,stockDetailsList,orderDetailsList,usedStorage |
| | | ); |
| | |
| | | apsPlateStandardRequireMapper.batchInsert(batch); |
| | | } |
| | | } |
| | | |
| | | log.info("生成完成"); |
| | | // if(!stockDetailsList.isEmpty()){ |
| | | // int batchSize = 1000; |
| | | // stockDetailsList.forEach(x->x.setId(IdUtil.getSnowflakeNextId())); |
| | |
| | | require.setBomLineId(bomLineId); |
| | | require.setBomLineCode(itemCode); |
| | | require.setBomLineLevel(level); |
| | | require.setBomUseAmount(itemNum); |
| | | require.setOrderCreateTime(plan.getOrderCreateTime()); |
| | | require.setCreateTime(DateUtils.getNowDate()); |
| | | require.setCreateBy(SecurityUtils.getUsername()); |
| | | require.setDelFlag("0"); |
| | | require.setProductionBase(plan.getProductionBase()); |
| | | /*计算需求数量*/ |
| | | /*BOM用量 level0=1 */ |
| | | if (level == 0) { |
| | | require.setBomUseAmount(BigDecimal.ONE); |
| | | } else { |
| | | require.setBomUseAmount(itemNum.multiply(plan.getProductionQuantity())); |
| | | require.setBomUseAmount(itemNum); |
| | | } |
| | | /*计算需求数量*/ |
| | | require.setRequireAmount(itemNum.multiply(plan.getProductionQuantity())); |
| | | /*查找库存,计算净需求,保存剩余库存,保存库存扣减明细*/ |
| | | /*默认净需求为BOM用量*/ |
| | | require.setNetRequirement(require.getBomUseAmount()); |
| | | require.setNetRequirement(require.getRequireAmount()); |
| | | |
| | | /*读取库存信息的优先级-> 内存、redis、db*/ |
| | | /* ApsMaterialStorageManagement storage = usedStorage.get(itemCode); |
| | |
| | | |
| | | /*设置开始时间*/ |
| | | Date startDay = new Date(); |
| | | startDay.setTime(require.getCompleteDate().getTime() - totalRouteMillisecond); |
| | | /*开始时间 默认为 完成时间 如果净需求>0 开始时间=结束时间-工序总工时*/ |
| | | startDay.setTime(require.getCompleteDate().getTime()); |
| | | if(require.getNetRequirement().compareTo(BigDecimal.ZERO)>0){ |
| | | startDay.setTime(require.getCompleteDate().getTime() - totalRouteMillisecond); |
| | | } |
| | | |
| | | require.setStartDate(startDay); |
| | | |
| | | /*计算是否有风险*/ |
| | |
| | | matchRequireAndSubPlan(require,orderDetailsList); |
| | | } |
| | | allRequires.add(require); |
| | | log.info("已生成需求:"+plan.getDocumentNumber()+"bomHeaderCode:"+bomHeaderCode+"bomLineCode:"+itemCode+"bomLevel:"+level); |
| | | if (require.getNetRequirement().compareTo(BigDecimal.ZERO) > 0) { |
| | | /*当前Bom节点处理完成后,处理下级BOM*/ |
| | | long nextLevel=level+1; |