From 7af8acca55ef250ba4742f9ad5524ab0fd0cd0f5 Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期一, 12 五月 2025 13:28:46 +0800
Subject: [PATCH] 钣金计划:优化bomline匹配库存和子单信息,改为批量保存
---
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateStandardRequireBomOrderDetailService.java | 4 +
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateStandardRequireBomStockDetailService.java | 5 ++
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java | 49 +++++++++++++++++++-----
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireBomOrderDetailMapper.java | 2 +
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireBomOrderDetailMapper.xml | 13 ++++++
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireBomStockDetailMapper.java | 4 ++
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireBomOrderDetailServiceImpl.java | 7 ++-
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireBomStockDetailMapper.xml | 13 ++++++
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireBomStockDetailServiceImpl.java | 9 +++-
9 files changed, 89 insertions(+), 17 deletions(-)
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireBomOrderDetailMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireBomOrderDetailMapper.java
index 9960819..53c9204 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireBomOrderDetailMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireBomOrderDetailMapper.java
@@ -63,4 +63,6 @@
public int deleteApsPlateStandardRequireBomOrderDetailByIds(Long[] ids);
int deleteLastPatch(String batchNumber);
+
+ int batchInsert(List<ApsPlateStandardRequireBomOrderDetail> list);
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireBomStockDetailMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireBomStockDetailMapper.java
index 9dcb767..fb5fd9e 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireBomStockDetailMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireBomStockDetailMapper.java
@@ -1,6 +1,8 @@
package com.aps.core.mapper;
import java.util.List;
+
+import com.aps.core.domain.ApsPlateStandardRequireBomOrderDetail;
import com.aps.core.domain.ApsPlateStandardRequireBomStockDetail;
import org.apache.ibatis.annotations.Mapper;
@@ -62,4 +64,6 @@
public int deleteApsPlateStandardRequireBomStockDetailByIds(Long[] ids);
int deleteLastPatch(String batchNumber);
+
+ int batchInsert(List<ApsPlateStandardRequireBomStockDetail> list);
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateStandardRequireBomOrderDetailService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateStandardRequireBomOrderDetailService.java
index 6bee8d5..480f095 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateStandardRequireBomOrderDetailService.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateStandardRequireBomOrderDetailService.java
@@ -63,5 +63,7 @@
*/
public int deleteApsPlateStandardRequireBomOrderDetailById(Long id);
- void savePlastPlanAndBomOrderDetail(ApsPlateStandardRequire require, ApsPlatePlan platePlan, BigDecimal subtract, BigDecimal stock, BigDecimal netRequirement);
+ void savePlastPlanAndBomOrderDetail(ApsPlateStandardRequire require, ApsPlatePlan platePlan, BigDecimal subtract
+ , BigDecimal stock, BigDecimal netRequirement, List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList
+ );
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateStandardRequireBomStockDetailService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateStandardRequireBomStockDetailService.java
index 7e16116..b32fffd 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateStandardRequireBomStockDetailService.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPlateStandardRequireBomStockDetailService.java
@@ -64,5 +64,8 @@
*/
public int deleteApsPlateStandardRequireBomStockDetailById(Long id);
- void saveStorageAndDetail(ApsMaterialStorageManagement itemStorage, ApsPlatePlan plan, String bomLineId,String itemCode, String batchNum, BigDecimal deductionAmount, BigDecimal afterStockAmount,Long requireId);
+ void saveStorageAndDetail(ApsMaterialStorageManagement itemStorage, ApsPlatePlan plan, String bomLineId
+ ,String itemCode, String batchNum, BigDecimal deductionAmount, BigDecimal afterStockAmount,Long requireId
+ , List<ApsPlateStandardRequireBomStockDetail> stockDetailsList
+ );
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireBomOrderDetailServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireBomOrderDetailServiceImpl.java
index 0f54f59..4feac70 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireBomOrderDetailServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireBomOrderDetailServiceImpl.java
@@ -104,7 +104,8 @@
}
@Transactional
@Override
- public void savePlastPlanAndBomOrderDetail(ApsPlateStandardRequire require, ApsPlatePlan platePlan, BigDecimal subtract, BigDecimal stock, BigDecimal netRequirement) {
+ public void savePlastPlanAndBomOrderDetail(ApsPlateStandardRequire require, ApsPlatePlan platePlan, BigDecimal subtract
+ , BigDecimal stock, BigDecimal netRequirement, List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList) {
platePlan.setUnmatchedQuantity(subtract);
apsPlatePlanMapper.updatePlanUnMatchQtyByVersion(platePlan);
/* 璁板綍宸ュ崟涓庡噣闇�姹傜殑鍖归厤鍏崇郴*/
@@ -124,6 +125,8 @@
.build();
bomOrderDetail.setCreateTime(DateUtils.getNowDate());
bomOrderDetail.setCreateBy(SecurityUtils.getUsername());
- apsPlateStandardRequireBomOrderDetailMapper.insertApsPlateStandardRequireBomOrderDetail(bomOrderDetail);
+
+ orderDetailsList.add(bomOrderDetail);
+ // apsPlateStandardRequireBomOrderDetailMapper.insertApsPlateStandardRequireBomOrderDetail(bomOrderDetail);
}
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireBomStockDetailServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireBomStockDetailServiceImpl.java
index a3637e7..34616a5 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireBomStockDetailServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireBomStockDetailServiceImpl.java
@@ -111,7 +111,10 @@
* */
@Transactional
@Override
- public void saveStorageAndDetail(ApsMaterialStorageManagement itemStorage, ApsPlatePlan plan, String bomLineId,String itemCode, String batchNum, BigDecimal deductionAmount, BigDecimal afterStockAmount,Long requireId){
+ public void saveStorageAndDetail(ApsMaterialStorageManagement itemStorage, ApsPlatePlan plan, String bomLineId,
+ String itemCode, String batchNum, BigDecimal deductionAmount,
+ BigDecimal afterStockAmount,Long requireId
+ ,List<ApsPlateStandardRequireBomStockDetail> stockDetailsList){
/*鏇存柊鐗╂枡鍓╀綑搴撳瓨*/
itemStorageMapper.updateMaterialStorageByVersion(itemStorage.getId(), afterStockAmount,itemStorage.getVersion());
/*璁板綍鎵e噺鏄庣粏*/
@@ -131,8 +134,8 @@
bomStockDetail.setCreateBy(SecurityUtils.getUsername());
bomStockDetail.setCreateTime(DateUtils.getNowDate());
- plateBomStockDetailMapper.insertApsPlateStandardRequireBomStockDetail(bomStockDetail);
+ stockDetailsList.add(bomStockDetail);
+ //plateBomStockDetailMapper.insertApsPlateStandardRequireBomStockDetail(bomStockDetail);
}
-
}
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 10d1fd8..fe53f85 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
@@ -72,6 +72,8 @@
@Resource
IApsPlateStandardRequireBatchService requireBatchService;
+ @Autowired
+ private ApsPlateStandardRequireBomStockDetailMapper apsPlateStandardRequireBomStockDetailMapper;
/**
* 鏌ヨ閽i噾宸ュ崟鏍囧噯闇�姹�
@@ -177,8 +179,9 @@
/*褰撳墠Bom鑺傜偣澶勭悊瀹屾垚鍚庯紝澶勭悊涓嬬骇BOM*/
List<ApsPlateStandardRequire> requiresList=new ArrayList<>();
-
- getBomRequires(plantCode, "0","0",itemNumber,BigDecimal.ONE, batchNum, null, mainPlan, requiresList, 0L);
+ List<ApsPlateStandardRequireBomStockDetail> stockDetailsList=new ArrayList<>();
+ List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList=new ArrayList<>();
+ getBomRequires(plantCode, "0","0",itemNumber,BigDecimal.ONE, batchNum, null, mainPlan, requiresList, 0L,stockDetailsList,orderDetailsList);
// 鎵归噺鎻掑叆浠ユ彁楂樻�ц兘
if (!requiresList.isEmpty()) {
@@ -187,6 +190,24 @@
int end = Math.min(i + batchSize, requiresList.size());
List<ApsPlateStandardRequire> batch = requiresList.subList(i, end);
apsPlateStandardRequireMapper.batchInsert(batch);
+ }
+ }
+
+ if(!stockDetailsList.isEmpty()){
+ int batchSize = 1000;
+ for (int i = 0; i < stockDetailsList.size(); i += batchSize) {
+ int end = Math.min(i + batchSize, stockDetailsList.size());
+ List<ApsPlateStandardRequireBomStockDetail> batch = stockDetailsList.subList(i, end);
+ plateBomStockDetailMapper.batchInsert(batch);
+ }
+ }
+
+ if(!orderDetailsList.isEmpty()){
+ int batchSize = 1000;
+ for (int i = 0; i < orderDetailsList.size(); i += batchSize) {
+ int end = Math.min(i + batchSize, orderDetailsList.size());
+ List<ApsPlateStandardRequireBomOrderDetail> batch = orderDetailsList.subList(i, end);
+ plateBomOrderDetailMapper.batchInsert(batch);
}
}
}
@@ -206,7 +227,12 @@
* @param allRequires 鎵�鏈夐渶姹傜殑鍒楄〃
* @param level 灞傜骇
*/
- private void getBomRequires(String plant, String bomHeaderCode, String bomLineId,String itemCode,BigDecimal itemNum, String batchNum, Date upLevelStartDate, ApsPlatePlan plan, List<ApsPlateStandardRequire> allRequires, Long level) {
+ private void getBomRequires(String plant, String bomHeaderCode, String bomLineId,String itemCode,BigDecimal itemNum,
+ String batchNum, Date upLevelStartDate, ApsPlatePlan plan,
+ List<ApsPlateStandardRequire> allRequires,
+ Long level,List<ApsPlateStandardRequireBomStockDetail> stockDetailsList
+ ,List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList
+ ) {
/*鏋勫缓闇�姹備俊鎭�*/
ApsPlateStandardRequire require = new ApsPlateStandardRequire();
require.setId(IdUtil.getSnowflakeNextId());
@@ -258,7 +284,7 @@
require.setNetRequirement(BigDecimal.ZERO);
}
/*璁板綍搴撳瓨鍓╀綑鏁伴噺锛岃褰曞簱瀛樹娇鐢ㄨ褰�*/
- bomStockDetailService.saveStorageAndDetail(storage, plan, bomLineId,itemCode, batchNum, deductionAmount, afterStockAmount,require.getId());
+ bomStockDetailService.saveStorageAndDetail(storage, plan, bomLineId,itemCode, batchNum, deductionAmount, afterStockAmount,require.getId(),stockDetailsList);
}
}
/*鏈尮閰嶆暟閲忥紝榛樿涓哄噣闇�姹�*/
@@ -311,7 +337,7 @@
require.setMatchState("寰呭尮閰�");
require.setMatchMode("宸ュ崟鍖归厤");
/*浣跨敤瀛愪欢宸ュ崟杩涜闇�姹傚尮閰�*/
- matchRequireAndSubPlan(require);
+ matchRequireAndSubPlan(require,orderDetailsList);
}
allRequires.add(require);
if (require.getNetRequirement().compareTo(BigDecimal.ZERO) > 0) {
@@ -320,7 +346,10 @@
List<ApsBom> bomLineList = bomLineService.selectRdsBomLineList(plant, itemCode);
if (!bomLineList.isEmpty()) {
bomLineList.forEach(line -> {
- getBomRequires(plant, itemCode, line.getBomLineId(),line.getItemCode() ,line.getNum() , batchNum, require.getStartDate(), plan, allRequires, nextLevel);
+ getBomRequires(plant, itemCode, line.getBomLineId(),line.getItemCode() ,line.getNum() , batchNum
+ , require.getStartDate(), plan, allRequires, nextLevel,stockDetailsList
+ ,orderDetailsList
+ );
});
}
}
@@ -352,7 +381,7 @@
* 浣跨敤瀛愪欢宸ュ崟鍖归厤闇�姹備腑鐨勫噣闇�姹�
* */
- private void matchRequireAndSubPlan(ApsPlateStandardRequire require) {
+ private void matchRequireAndSubPlan(ApsPlateStandardRequire require, List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList) {
BigDecimal netRequirement = require.getNetRequirement();
require.setMatchMode("宸ュ崟鍖归厤");
if (netRequirement.compareTo(BigDecimal.ZERO) > 0) {
@@ -364,7 +393,7 @@
/* 搴撳瓨鏁伴噺 澶т簬 鍑�闇�姹傛暟閲�*/
/* 鍑�闇�姹傛暟閲�=0 锛屽瓙浠跺伐鍗曟湭鍖归厤鏁伴噺= 搴撳瓨-鍑�闇�姹�*/
BigDecimal subtract = stock.subtract(netRequirement);
- bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement);
+ bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement,orderDetailsList);
netRequirement = BigDecimal.ZERO;
require.setMatchState("宸插尮閰�");
require.setUnmatchedDemandAmount(BigDecimal.ZERO);
@@ -374,7 +403,7 @@
/*鍑�闇�姹傛暟閲� == 搴撳瓨鏁伴噺*/
BigDecimal subtract = BigDecimal.ZERO;
- bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement);
+ bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement,orderDetailsList);
netRequirement = BigDecimal.ZERO;
require.setMatchState("宸插尮閰�");
require.setUnmatchedDemandAmount(BigDecimal.ZERO);
@@ -386,7 +415,7 @@
BigDecimal rest = netRequirement.subtract(stock);
require.setMatchState("鍖归厤涓�");
/*宸ュ崟 鏈尮閰嶆暟閲忎负0 鍏ㄩ儴鐢ㄤ簬鍖归厤闇�姹�*/
- bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, BigDecimal.ZERO, stock, netRequirement);
+ bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, BigDecimal.ZERO, stock, netRequirement,orderDetailsList);
/*鍑�闇�姹傛湭琚弧瓒筹紝闇�瑕佺户缁尮閰�*/
platePlan = apsPlatePlanMapper.selectUnMatchPlateSubPlan(require.getOrgCode(), require.getBomLineCode());
/*鍓╀綑鍑�闇�姹�*/
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireBomOrderDetailMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireBomOrderDetailMapper.xml
index 5d6ac40..650ec9a 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireBomOrderDetailMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireBomOrderDetailMapper.xml
@@ -129,4 +129,17 @@
<update id="deleteLastPatch" parameterType="String">
update aps_plate_standard_require_bom_order_detail set del_flag = '1' where batch_number = #{batchNumber}
</update>
+
+ <insert id="batchInsert" parameterType="ApsPlateStandardRequireBomOrderDetail">
+ insert into aps_plate_standard_require_bom_order_detail
+ (id, require_id,require_track_id, bom_line_id, bom_line_code, doc_no,
+ before_prod_amount, deduction_amount, after_prod_amount,
+ org_code, batch_number, del_flag, create_time, create_by,)
+ values
+ <foreach collection="list" item="item" index="index" separator=",">
+ (#{item.id}, #{item.requireId},#{item.requireTrackId}, #{item.bomLineId}, #{item.bomLineCode}, #{item.docNo},
+ #{item.beforeProdAmount}, #{item.deductionAmount}, #{item.afterProdAmount},
+ #{item.orgCode}, #{item.batchNumber}, #{item.delFlag}, #{item.createTime}, #{item.createBy},)
+ </foreach>
+ </insert>
</mapper>
\ No newline at end of file
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireBomStockDetailMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireBomStockDetailMapper.xml
index 552802d..8574f88 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireBomStockDetailMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlateStandardRequireBomStockDetailMapper.xml
@@ -122,4 +122,17 @@
<update id="deleteLastPatch" parameterType="String">
update aps_plate_standard_require_bom_stock_detail set del_flag = '1' where batch_number = #{batchNumber}
</update>
+
+ <insert id="batchInsert" parameterType="ApsPlateStandardRequireBomStockDetail">
+ insert into aps_plate_standard_require_bom_stock_detail
+ (id,require_id, require_track_id, bom_line_id, bom_line_code, before_stock_amount, deduction_amount
+ , after_stock_amount, org_code, batch_number, del_flag, create_time, create_by)
+ values
+ <foreach item="item" index="index" collection="list" separator=",">
+ ( #{id}, #{item.requireId}, #{item.requireTrackId}, #{item.bomLineId}, #{item.bomLineCode}
+ , #{item.beforeStockAmount} , #{item.deductionAmount}, #{item.afterStockAmount}, #{item.orgCode}
+ , #{item.batchNumber} , #{item.delFlag}, #{item.createTime}, #{item.createBy}
+ )
+ </foreach>
+ </insert>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.3