From 13c1adb5494af143cf7b3d7ee60c6f4025a90040 Mon Sep 17 00:00:00 2001 From: zhanghl <253316343@qq.com> Date: 星期四, 08 五月 2025 13:45:57 +0800 Subject: [PATCH] 钣金计划:完善工序总工时 计算方法 --- aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequire.java | 12 - aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java | 287 ++++++++++++++++++++--------------- aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequireError.java | 2 aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireMapper.java | 2 aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireMapper.xml | 39 ++++ aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java | 86 ++++++++++ aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteLineService.java | 5 7 files changed, 299 insertions(+), 134 deletions(-) diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequire.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequire.java index 38c9842..bb1c86f 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequire.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequire.java @@ -28,6 +28,8 @@ /** 闇�姹傝拷婧疘D */ @Excel(name = "闇�姹傝拷婧疘D") private String requireId; + /**鍗曞彿*/ + private String docNum; /** bom_line_id */ // @Excel(name = "bom_line_id") @@ -91,21 +93,15 @@ /** 鏈尮閰嶉渶姹傛暟閲� */ @Excel(name = "鏈尮閰嶉渶姹傛暟閲�") - private String unmatchedDemandAmount; + private BigDecimal unmatchedDemandAmount; /** 寤鸿瀹屾垚鏃ユ湡 */ -// @Excel(name = "寤鸿瀹屾垚鏃ユ湡") - private String suggestedCompletionDate; - + private Date suggestedCompletionDate; /** 寤惰繜椋庨櫓鏍囪瘑 */ -// @Excel(name = "寤惰繜椋庨櫓鏍囪瘑") private String hasDelayRisk; - - /** $column.columnComment */ private String batchNumber; - /** $column.columnComment */ private String delFlag; } diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequireError.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequireError.java index e83f199..7015421 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequireError.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlateStandardRequireError.java @@ -3,6 +3,7 @@ import com.aps.common.core.annotation.Excel; import com.aps.common.core.web.domain.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; @@ -17,6 +18,7 @@ @EqualsAndHashCode(callSuper = true) @Data @Schema(description = "閽i噾鏍囧噯闇�姹傚紓甯镐俊鎭疄浣撶被") +@Builder public class ApsPlateStandardRequireError extends BaseEntity { @Serial diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireMapper.java index 32e8244..dfdd85f 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireMapper.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireMapper.java @@ -69,4 +69,6 @@ * @return */ public List<ApsPlateStandardRequire> selectPlateSupplyGapList(ApsPlateStandardRequire apsPlateStandardRequire); + + int batchInsert(List<ApsPlateStandardRequire> requireList); } diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteLineService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteLineService.java index 870f6ed..747db7a 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteLineService.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteLineService.java @@ -1,6 +1,9 @@ package com.aps.core.service; +import java.math.BigDecimal; import java.util.List; + +import com.aps.core.domain.ApsPlateStandardRequire; import com.aps.core.domain.ApsStandardProcessRouteLine; /** @@ -58,4 +61,6 @@ * @return 缁撴灉 */ public int deleteApsStandardProcessRouteLineById(Long id); + + ApsStandardProcessRouteLine getRouteLineTotalTime(ApsPlateStandardRequire require); } diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java index 78193ca..7029b83 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java @@ -1,25 +1,20 @@ package com.aps.core.service.impl; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Optional; +import java.util.*; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import com.aps.common.core.utils.DateUtils; import com.aps.common.security.utils.DictUtils; import com.aps.common.security.utils.SecurityUtils; import com.aps.core.domain.*; import com.aps.core.mapper.*; -import com.aps.core.service.IApsBomService; -import com.aps.core.service.IApsPlateStandardRequireBomOrderDetailService; -import com.aps.core.service.IApsPlateStandardRequireBomStockDetailService; +import com.aps.core.service.*; import com.aps.system.api.domain.SysDictData; import jakarta.annotation.Resource; import com.aps.core.domain.ApsPlateStandardRequire; import com.aps.core.mapper.ApsPlateStandardRequireMapper; -import com.aps.core.service.IApsPlateStandardRequireService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.aps.core.service.IApsPlateStandardRequireService; @@ -72,6 +67,8 @@ @Resource IApsPlateStandardRequireBomOrderDetailService bomOrderDetailService; + @Resource + IApsStandardProcessRouteLineService routeLineService; /** * 鏌ヨ閽i噾宸ュ崟鏍囧噯闇�姹� @@ -169,111 +166,139 @@ String batchNum=getBatch(); /*鑾峰彇閽i噾涓诲崟淇℃伅*/ List<ApsPlatePlan> mainPlans = platePlanMapper.selectPlatePlanByPlantMajor(plantCode,mainOrderType); - List<ApsPlateStandardRequire> requiresList=new ArrayList<>(); for (ApsPlatePlan mainPlan : mainPlans) { String itemNumber = mainPlan.getItemNumber(); /*鏍规嵁鏂欏彿 鑾峰彇BOM Header */ + /*褰撳墠Bom鑺傜偣澶勭悊瀹屾垚鍚庯紝澶勭悊涓嬬骇BOM*/ + List<ApsBom> bomLineList = bomLineService.selectApsBomLineList(plantCode, itemNumber); + List<ApsPlateStandardRequire> requiresList=new ArrayList<>(); + if(!bomLineList.isEmpty()){ + bomLineList.forEach(line -> { + getBomRequires(plantCode, line, batchNum, null, mainPlan, requiresList, 0L); + }); + } + // 鎵归噺鎻掑叆浠ユ彁楂樻�ц兘 + if (!requiresList.isEmpty()) { + int batchSize = 1000; + for (int i = 0; i < requiresList.size(); i += batchSize) { + int end = Math.min(i + batchSize, requiresList.size()); + List<ApsPlateStandardRequire> batch = requiresList.subList(i, end); + apsPlateStandardRequireMapper.batchInsert(batch); + } + } } + } - private void getBomRequires(String plant, ApsBom bomLine, String batchNum, Date upLevelStartDate, ApsPlatePlan plan, List<ApsPlateStandardRequire> allRequires, Long level){ + + private void getBomRequires(String plant, ApsBom bomLine, String batchNum, Date upLevelStartDate, ApsPlatePlan plan, List<ApsPlateStandardRequire> allRequires, Long level) { String itemNumber = bomLine.getItemCode(); - String productivityModel_combined_batch="鍚堟壒"; - String productivityModel_monopolize="鐙崰"; - Optional<ApsStandardProcessRouteHeader> firstProcessRoute = standardProcessRouteHeaderMapper.queryStandardProcessRouteHeaderByPlantAndItemCode(plant, itemNumber).stream().findFirst(); - if (firstProcessRoute.isPresent()) { - /*鑾峰彇宸ヨ壓璺嚎Header淇℃伅*/ - ApsStandardProcessRouteHeader routeHeader = firstProcessRoute.get(); - /*鏋勫缓闇�姹備俊鎭�*/ - ApsPlateStandardRequire require = new ApsPlateStandardRequire(); - require.setId(IdUtil.getSnowflakeNextId()); - require.setRequireId(plan.getId()); - require.setBatchNumber(batchNum); - require.setOrgCode(plant); - require.setBomLineCode(itemNumber); - require.setBomLineLevel(level); - require.setBomUseAmount(bomLine.getNum()); - require.setCreateTime(DateUtils.getNowDate()); - require.setCreateBy(SecurityUtils.getUsername()); - /*璁$畻闇�姹傛暟閲�*/ - if (level == 0) { - require.setBomUseAmount(BigDecimal.ONE); - require.setCompleteDate(plan.getPlanEndDay()); - require.setDemandDate(plan.getPlanEndDay()); - } else { - require.setBomUseAmount(bomLine.getNum().multiply(plan.getProductionQuantity())); - } - /*鏌ユ壘搴撳瓨锛岃绠楀噣闇�姹傦紝淇濆瓨鍓╀綑搴撳瓨锛屼繚瀛樺簱瀛樻墸鍑忔槑缁�*/ - BigDecimal remainderStock = BigDecimal.ZERO; - Optional<ApsMaterialStorageManagement> itemStorage = getItemStorage(plant, itemNumber); - if (itemStorage.isPresent()) { - ApsMaterialStorageManagement storage = itemStorage.get(); - /*鍓╀綑搴撳瓨*/ - remainderStock = storage.getRemainderStock(); - /*璁$畻鍑�闇�姹� 榛樿=闇�姹傛暟閲�*/ - if (remainderStock.compareTo(BigDecimal.ZERO) == 0) { - require.setNetRequirement(require.getBomUseAmount()); - } - if (remainderStock.compareTo(BigDecimal.ZERO) > 0) { - BigDecimal subtract = require.getBomUseAmount().subtract(remainderStock); - BigDecimal deductionAmount = BigDecimal.ZERO; - BigDecimal afterStockAmount = BigDecimal.ZERO; - if (subtract.compareTo(BigDecimal.ZERO) >= 0) { - deductionAmount = remainderStock; - afterStockAmount = BigDecimal.ZERO; - require.setNetRequirement(subtract); - } else { - deductionAmount = require.getBomUseAmount(); - afterStockAmount = remainderStock.subtract(deductionAmount); - require.setNetRequirement(BigDecimal.ZERO); - } - bomStockDetailService.saveStorageAndDetail(storage, plan, bomLine, batchNum, deductionAmount, afterStockAmount); - } - } - /*鍑�闇�姹�*/ - BigDecimal netRequirement = require.getNetRequirement(); - /*宸ヨ壓璺嚎鎬婚渶姹�*/ - BigDecimal totalRouteTime = getRouteLineTotalTime(routeHeader, productivityModel_monopolize, netRequirement); - long millisecond = 60*60*1000L; - long totalRouteMillisecond = totalRouteTime.multiply(BigDecimal.valueOf(millisecond)).longValue(); - /*瀹屾垚鏃堕棿锛宭evel=0 鏃堕粯璁や负宸ュ崟鐨勮鍒掑畬鎴愭棩鏈�*/ - Date completeDate= plan.getPlanEndDay(); - /*棰勭暀澶╂暟*/ - Long reservedDay = getReservedDays(); - if(level>0){ - /* 褰撳墠闇�姹傚畬鎴愭棩鏈熶负涓婇樁灞傞渶姹傜殑寮�濮嬫椂闂� - 棰勭暀澶╂暟(杞崲涓烘绉�)*/ - long reservedMillisecond = reservedDay *24* millisecond; - completeDate.setTime(upLevelStartDate.getTime()-reservedMillisecond); - } - /*璁剧疆瀹屾垚鏃ユ湡*/ - require.setCompleteDate(completeDate); - require.setDemandDate(require.getCompleteDate()); - /*璁剧疆寮�濮嬫椂闂�*/ - Date startDay = new Date(); - startDay.setTime(completeDate.getTime() - totalRouteMillisecond); - require.setStartDate(startDay); - require.setMatchState("宸插尮閰�"); - require.setMatchMode("搴撳瓨鍖归厤"); - if(require.getNetRequirement().compareTo(BigDecimal.ZERO)>0){ - require.setMatchState("寰呭尮閰�"); - require.setMatchMode("宸ュ崟鍖归厤"); - } - require.setHasDelayRisk("鏃犻闄�"); - - allRequires.add(require); - /*褰撳墠Bom鑺傜偣澶勭悊瀹屾垚鍚庯紝澶勭悊涓嬬骇BOM*/ - List<ApsBom> bomLineList = bomLineService.selectApsBomLineList(plant, itemNumber); - if(!bomLineList.isEmpty()){ - bomLineList.forEach(line -> { - getBomRequires(plant, line, batchNum, require.getStartDate(), plan, allRequires, level+1); - }); - } - + String productivityModel_combined_batch = "鍚堟壒"; + String productivityModel_monopolize = "鐙崰"; + /*鏋勫缓闇�姹備俊鎭�*/ + ApsPlateStandardRequire require = new ApsPlateStandardRequire(); + require.setId(IdUtil.getSnowflakeNextId()); + require.setRequireId(plan.getId()); + require.setBatchNumber(batchNum); + require.setDocNum(plan.getDocumentNumber()); + require.setOrgCode(plant); + require.setBomLineCode(itemNumber); + require.setBomLineLevel(level); + require.setBomUseAmount(bomLine.getNum()); + require.setCreateTime(DateUtils.getNowDate()); + require.setCreateBy(SecurityUtils.getUsername()); + /*璁$畻闇�姹傛暟閲�*/ + if (level == 0) { + require.setBomUseAmount(BigDecimal.ONE); + require.setCompleteDate(plan.getPlanEndDay()); + require.setDemandDate(plan.getPlanEndDay()); } else { - throw new RuntimeException("鏈壘鍒版爣鍑嗗伐鑹鸿矾绾�"); + require.setBomUseAmount(bomLine.getNum().multiply(plan.getProductionQuantity())); + } + /*鏌ユ壘搴撳瓨锛岃绠楀噣闇�姹傦紝淇濆瓨鍓╀綑搴撳瓨锛屼繚瀛樺簱瀛樻墸鍑忔槑缁�*/ + BigDecimal remainderStock = BigDecimal.ZERO; + Optional<ApsMaterialStorageManagement> itemStorage = getItemStorage(plant, itemNumber); + if (itemStorage.isPresent()) { + ApsMaterialStorageManagement storage = itemStorage.get(); + /*鍓╀綑搴撳瓨*/ + remainderStock = storage.getRemainderStock(); + /*璁$畻鍑�闇�姹� 榛樿=闇�姹傛暟閲�*/ + if (remainderStock.compareTo(BigDecimal.ZERO) == 0) { + require.setNetRequirement(require.getBomUseAmount()); + } + if (remainderStock.compareTo(BigDecimal.ZERO) > 0) { + BigDecimal subtract = require.getBomUseAmount().subtract(remainderStock); + BigDecimal deductionAmount = BigDecimal.ZERO; + BigDecimal afterStockAmount = BigDecimal.ZERO; + if (subtract.compareTo(BigDecimal.ZERO) >= 0) { + deductionAmount = remainderStock; + afterStockAmount = BigDecimal.ZERO; + require.setNetRequirement(subtract); + } else { + deductionAmount = require.getBomUseAmount(); + afterStockAmount = remainderStock.subtract(deductionAmount); + require.setNetRequirement(BigDecimal.ZERO); + } + bomStockDetailService.saveStorageAndDetail(storage, plan, bomLine, batchNum, deductionAmount, afterStockAmount); + } + } + + /*宸ヨ壓璺嚎鎬婚渶姹�*/ + ApsStandardProcessRouteLine routeHeader = routeLineService.getRouteLineTotalTime(require); + String routeId = routeHeader.getRouteId(); + BigDecimal totalRouteTime = routeHeader.getRouteTime(); + long millisecond = 60 * 60 * 1000L; + long totalRouteMillisecond = totalRouteTime.multiply(BigDecimal.valueOf(millisecond)).longValue(); + require.setProcessRouteId(routeId); + require.setProcessRouteHours(String.valueOf(totalRouteTime)); + + /*瀹屾垚鏃堕棿锛宭evel=0 鏃堕粯璁や负宸ュ崟鐨勮鍒掑畬鎴愭棩鏈�*/ + Date completeDate = plan.getPlanEndDay(); + /*棰勭暀澶╂暟*/ + Long reservedDay = getReservedDays(); + if (level > 0) { + /* 褰撳墠闇�姹傚畬鎴愭棩鏈熶负涓婇樁灞傞渶姹傜殑寮�濮嬫椂闂� - 棰勭暀澶╂暟(杞崲涓烘绉�)*/ + long reservedMillisecond = reservedDay * 24 * millisecond; + completeDate.setTime(upLevelStartDate.getTime() - reservedMillisecond); + } + /*璁剧疆瀹屾垚鏃ユ湡*/ + require.setCompleteDate(completeDate); + require.setDemandDate(completeDate); + /*璁剧疆寮�濮嬫椂闂�*/ + Date startDay = new Date(); + startDay.setTime(completeDate.getTime() - totalRouteMillisecond); + require.setStartDate(startDay); + + /*璁$畻鏄惁鏈夐闄�*/ + require.setHasDelayRisk("鏃犻闄�"); + Date dateZero = getDateZero(DateUtils.getNowDate()); + if (startDay.before(dateZero)) { + require.setHasDelayRisk("鏈夐闄�"); + } + + /*鐢熶骇鍩哄湴*/ + require.setProductionBase(plan.getProductionBase()); + + require.setMatchState("宸插尮閰�"); + require.setMatchMode("搴撳瓨鍖归厤"); + if (require.getNetRequirement().compareTo(BigDecimal.ZERO) > 0) { + require.setMatchState("寰呭尮閰�"); + require.setMatchMode("宸ュ崟鍖归厤"); + } + require.setHasDelayRisk("鏃犻闄�"); + /*浣跨敤瀛愪欢宸ュ崟杩涜闇�姹傚尮閰�*/ + matchRequireAndSubPlan(require); + + allRequires.add(require); + /*褰撳墠Bom鑺傜偣澶勭悊瀹屾垚鍚庯紝澶勭悊涓嬬骇BOM*/ + List<ApsBom> bomLineList = bomLineService.selectApsBomLineList(plant, itemNumber); + if (!bomLineList.isEmpty()) { + bomLineList.forEach(line -> { + getBomRequires(plant, line, batchNum, require.getStartDate(), plan, allRequires, level + 1); + }); } } @@ -315,10 +340,8 @@ ApsMaterialStorageManagement storageParam = new ApsMaterialStorageManagement(); storageParam.setItemNumber(itemNumber); storageParam.setApplicableFactories(plant); - Optional<ApsMaterialStorageManagement> firstStorage = itemStorageMapper.selectApsMaterialStorageManagementList(storageParam).stream() + return itemStorageMapper.selectApsMaterialStorageManagementList(storageParam).stream() .findFirst(); - - return firstStorage; } /** @@ -336,31 +359,32 @@ /** * 浣跨敤瀛愪欢宸ュ崟鍖归厤闇�姹備腑鐨勫噣闇�姹� * */ + private void matchRequireAndSubPlan(ApsPlateStandardRequire require) { BigDecimal netRequirement = require.getNetRequirement(); if (netRequirement.compareTo(BigDecimal.ZERO) > 0) { ApsPlatePlan platePlan = apsPlatePlanMapper.selectUnMatchPlateSubPlan(require.getOrgCode()); /*瀛愪欢宸ュ崟鐨勬湭鍖归厤鏁伴噺 浣滀负褰撳墠鐨勫簱瀛�*/ - BigDecimal stock = platePlan.getUnmatchedQuantity(); - if (netRequirement.compareTo(stock) < 0) { - /* 搴撳瓨鏁伴噺 澶т簬 鍑�闇�姹傛暟閲�*/ - /* 鍑�闇�姹傛暟閲�=0 锛屽瓙浠跺伐鍗曟湭鍖归厤鏁伴噺= 搴撳瓨-鍑�闇�姹�*/ - netRequirement = BigDecimal.ZERO; - require.setNetRequirement(netRequirement); - BigDecimal subtract = stock.subtract(netRequirement); - bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement); - /*鍑�闇�姹傚凡缁忚婊¤冻锛屼笉闇�瑕佺户缁尮閰�*/ + while (platePlan != null && netRequirement.compareTo(BigDecimal.ZERO) > 0) { + BigDecimal stock = platePlan.getUnmatchedQuantity(); + if (netRequirement.compareTo(stock) < 0) { + /* 搴撳瓨鏁伴噺 澶т簬 鍑�闇�姹傛暟閲�*/ + /* 鍑�闇�姹傛暟閲�=0 锛屽瓙浠跺伐鍗曟湭鍖归厤鏁伴噺= 搴撳瓨-鍑�闇�姹�*/ + netRequirement = BigDecimal.ZERO; + require.setNetRequirement(netRequirement); + BigDecimal subtract = stock.subtract(netRequirement); + bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement); + /*鍑�闇�姹傚凡缁忚婊¤冻锛屼笉闇�瑕佺户缁尮閰�*/ - } else if (netRequirement.compareTo(stock) == 0) { - /*鍑�闇�姹傛暟閲� == 搴撳瓨鏁伴噺*/ - netRequirement = BigDecimal.ZERO; - require.setNetRequirement(netRequirement); - BigDecimal subtract = BigDecimal.ZERO; - bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement); - /*鍑�闇�姹傚凡缁忚婊¤冻锛屼笉闇�瑕佺户缁尮閰�*/ - } - if (netRequirement.compareTo(stock) > 0) { - while (platePlan != null && netRequirement.compareTo(BigDecimal.ZERO) > 0) { + } else if (netRequirement.compareTo(stock) == 0) { + /*鍑�闇�姹傛暟閲� == 搴撳瓨鏁伴噺*/ + netRequirement = BigDecimal.ZERO; + require.setNetRequirement(netRequirement); + BigDecimal subtract = BigDecimal.ZERO; + bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement); + /*鍑�闇�姹傚凡缁忚婊¤冻锛屼笉闇�瑕佺户缁尮閰�*/ + } + if (netRequirement.compareTo(stock) > 0) { /*闇�姹傚ぇ浜庡簱瀛�*/ /*鍑�闇�姹� 琚儴鍒嗘弧瓒� */ BigDecimal rest = netRequirement.subtract(stock); @@ -373,10 +397,23 @@ netRequirement = rest; } } - } + require.setUnmatchedDemandAmount(require.getNetRequirement()); + } + /** + * 鑾峰彇鏃ユ湡闆剁偣 + * */ + private Date getDateZero(Date date){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } } diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java index 5ebab9c..5597f89 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java @@ -1,7 +1,18 @@ package com.aps.core.service.impl; +import java.math.BigDecimal; +import java.util.Hashtable; import java.util.List; +import java.util.Optional; + 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.ApsStandardProcessRouteHeader; +import com.aps.core.mapper.ApsPlateStandardRequireErrorMapper; +import com.aps.core.mapper.ApsStandardProcessRouteHeaderMapper; +import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.aps.core.mapper.ApsStandardProcessRouteLineMapper; @@ -19,7 +30,10 @@ { @Autowired private ApsStandardProcessRouteLineMapper apsStandardProcessRouteLineMapper; - + @Resource + ApsStandardProcessRouteHeaderMapper standardProcessRouteHeaderMapper; + @Resource + ApsPlateStandardRequireErrorMapper requireErrorMapper; /** * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Line * @@ -93,4 +107,74 @@ { return apsStandardProcessRouteLineMapper.deleteApsStandardProcessRouteLineById(id); } + /** + * 鏍规嵁鏂欏彿 鏌ヨ宸ヨ壓璺嚎 鍙婂叾涓嬬殑宸ュ簭锛岃绠楀伐鑹鸿矾绾挎�诲伐鏃� + * @param require 闇�姹備俊鎭� + * @return 宸ヨ壓璺嚎鎬诲伐鏃� + */ + @Override + public ApsStandardProcessRouteLine getRouteLineTotalTime(ApsPlateStandardRequire require) { + // 瀹氫箟鐙崰鐢熶骇妯″紡甯搁噺 + String productivityModel_monopolize = "鐙崰"; + // 鍒濆鍖栨�诲伐鏃朵负0 + BigDecimal totalRouteTime = BigDecimal.ZERO; + //宸ュ巶 + String plant=require.getOrgCode(); + // 鐗╂枡鍙� + String itemNumber=require.getBomLineCode(); + long routId=0L; + ApsStandardProcessRouteLine ret=ApsStandardProcessRouteLine.builder() + .routeId(String.valueOf(routId)) + .routeTime(BigDecimal.ZERO) + .build(); + // 鏌ヨ鏍囧噯宸ヨ壓璺嚎澶撮儴淇℃伅 + Optional<ApsStandardProcessRouteHeader> firstProcessRoute = standardProcessRouteHeaderMapper.queryStandardProcessRouteHeaderByPlantAndItemCode(plant, itemNumber).stream().findFirst(); + if (firstProcessRoute.isPresent()) { + ApsStandardProcessRouteHeader routeHeader = firstProcessRoute.get(); + // 鏋勫缓宸ヨ壓璺嚎琛屽弬鏁板璞� + ApsStandardProcessRouteLine routeLineParam = ApsStandardProcessRouteLine.builder() + .routeId(routeHeader.getRouteId()) + .build(); + // 鏌ヨ鏍囧噯宸ヨ壓璺嚎琛屼俊鎭� + 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.add(line.getRouteTime()); + }); + } + ret.setRouteTime(totalRouteTime); + ret.setRouteId(routeHeader.getRouteId()); + }else { + saveRequireError(require,"鏍囧噯宸ヨ壓璺嚎涓嶅瓨鍦�"); + } + // 杩斿洖鎬诲伐鏃� + return ret; + } + + private void saveRequireError(ApsPlateStandardRequire require,String message) { + ApsPlateStandardRequireError data = ApsPlateStandardRequireError.builder() + .requireId(require.getRequireId()) + .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); + } } diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireMapper.xml index 5c2ae08..ba9c463 100644 --- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireMapper.xml +++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireMapper.xml @@ -177,4 +177,43 @@ <if test="requireId != null and requireId != ''"> and require_id like '%' || #{requireId} || '%'</if> <if test="bomLineCode != null and bomLineCode != ''"> and bom_line_code like '%' || #{bomLineCode} || '%'</if> </select> + + <insert id="batchInsert" parameterType="java.util.List"> + insert into aps_plate_standard_require + (id, require_id,doc_num,batch_number, org_code, bom_line_id, bom_line_code, bom_line_level, bom_use_amount, process_route_id, + process_route_hours, require_amount, net_requirement, start_date, complete_date, demand_date, + production_base, match_state, match_mode, unmatched_demand_amount, suggested_completion_date, + has_delay_risk, batch_number, del_flag, create_time, create_by) + values + <foreach collection="list" item="item" separator=","> + ( + #{item.Id}, + #{item.requireId}, + #{item.docNum}, + #{item.batchNumber}, + #{item.orgCode}, + #{item.bomLineId}, + #{item.bomLineCode}, + #{item.bomLineLevel}, + #{item.bomUseAmount}, + #{item.processRouteId}, + #{item.processRouteHours}, + #{item.requireAmount}, + #{item.netRequirement}, + #{item.startDate}, + #{item.completeDate}, + #{item.demandDate}, + #{item.productionBase}, + #{item.matchState}, + #{item.matchMode}, + #{item.unmatchedDemandAmount}, + #{item.suggestedCompletionDate}, + #{item.hasDelayRisk}, + #{item.batchNumber}, + #{item.delFlag}, + #{item.createTime}, + #{item.createBy} + ) + </foreach> + </insert> </mapper> \ No newline at end of file -- Gitblit v1.9.3