From 9bb19dd1eeea68b3669727253be49df50fe1428f Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期五, 10 十一月 2023 16:08:07 +0800
Subject: [PATCH] 整合代码
---
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 52 insertions(+), 4 deletions(-)
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
index 29ff41a..886df4a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -66,9 +66,14 @@
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringPool;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.Cache;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.DefaultTransactionDefinition;
+import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
@@ -81,7 +86,7 @@
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.*;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
@@ -97,6 +102,11 @@
@Service
public class MdmEngineServiceImpl implements MdmEngineService {
+ /**
+ * 鍗曟sql鐨勬渶澶氬鍏ユ暟閲�
+ */
+ @Value("${batchadd.single_maxnum:500}")
+ private Integer MAX_IMPORT_NUM;
/**
* 妯℃澘鐨勬湇鍔�
@@ -147,13 +157,11 @@
@Autowired
private FormulaServiceImpl formulaService;
-
/**
* 瀵筼md涓彁渚涚殑feign鎺ュ彛杩涜璋冪敤锛屼互鍙婂鐞嗙浉鍏抽�昏緫
*/
@Autowired
ICodeReferBtmTypeService codeReferBtmTypeService;
-
/**
* 鐩镐技椤规煡璇㈣鍒�
@@ -3524,6 +3532,7 @@
* @return 澶勭悊鎴愬姛鏁版嵁鏉℃暟
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public Integer insertBatchByType(String btmType, List<BaseModel> baseModels) {
//浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
@@ -3540,6 +3549,7 @@
}).collect(Collectors.toSet());
//灏哹ean杞负map,mybatis缁熶竴澶勭悊
List<Map<String, String>> maps = new ArrayList<>();
+
baseModels.stream().forEach(model -> {
try {
maps.add(VciBaseUtil.convertBean2Map(model,existFild));
@@ -3547,10 +3557,48 @@
throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.toString());
}
});
- return commonsMapper.insertByBaseModel(listR.getData().get(0).getTableName(), maps.get(0), maps);
+ try {
+ bactchExecuteInsert(listR.getData().get(0).getTableName(),maps);
+ }catch (Exception e){
+ throw new ServiceException("鍒嗘壒鎵цinsert璇彞鎶ラ敊:"+e.getMessage());
+ }
+ return maps.size();
}
/**
+ * 鍒嗘壒鎵цinsert璇彞
+ * @param tableName
+ * @param maps
+ * @throws ServiceException
+ */
+ @Transactional(rollbackFor = Exception.class)
+ void bactchExecuteInsert(String tableName, List<Map<String, String>> maps) throws ServiceException{
+ ExecutorService executor = Executors.newFixedThreadPool(10); // 鍒涘缓涓�涓浐瀹氬ぇ灏忕殑绾跨▼姹�
+ List<Map<String, String>> threadSafeMaps = new CopyOnWriteArrayList<>(maps);
+
+ for (int i = 0; i < threadSafeMaps.size(); i += MAX_IMPORT_NUM) {
+ final int startIndex = i;
+ final int endIndex = Math.min(i + MAX_IMPORT_NUM, maps.size());
+
+ executor.execute(() -> {
+ List<Map<String, String>> subList = threadSafeMaps.subList(startIndex, endIndex);
+ // 璋冪敤鎻掑叆鏁版嵁搴撶殑鏂规硶
+ commonsMapper.insertByBaseModel(tableName, threadSafeMaps.get(0), subList);
+ });
+ }
+
+ // 鍏抽棴绾跨▼姹�
+ executor.shutdown();
+ try {
+ // 绛夊緟鎵�鏈変换鍔℃墽琛屽畬鎴�
+ executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
+ } catch (InterruptedException e) {
+ // 澶勭悊寮傚父
+ throw new ServiceException("澶氱嚎绋嬫柟寮忔墽琛屾壒閲忔彃鍏ユ椂浜х敓閿欒:"+e.getMessage());
+ }
+ }
+
+ /**
* 浼犲叆涓氬姟绫诲瀷浠ュ強ID鏌ヨ涓氬姟琛ㄦ暟鎹槸鍚﹂噸澶�
*
* @param btmType 涓氬姟绫诲瀷
--
Gitblit v1.9.3