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