From 12253875406a93c2cc0f02d4abc87505e9898b15 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期日, 12 十一月 2023 20:20:03 +0800
Subject: [PATCH] 历史数据导入,单次导入超过800条报错变量溢出bug
---
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java | 2
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java | 55 ++++++++++++++----
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MdmCountConfigController.java | 1
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java | 2
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/NacosConfigCache.java | 6 --
Source/UBCS/ubcs-service/ubcs-system/pom.xml | 21 ++++---
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml | 16 +++++
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java | 4
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java | 22 +++---
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java | 1
10 files changed, 88 insertions(+), 42 deletions(-)
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/NacosConfigCache.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/NacosConfigCache.java
index f5af68d..c4c7eb4 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/NacosConfigCache.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/NacosConfigCache.java
@@ -8,12 +8,6 @@
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.utils.Func;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.tool.utils.Func;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.Yaml;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
index 2d6d567..6b963c6 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
@@ -435,8 +435,8 @@
private List<CodeRule> listCodeRuleDOByIdCollections(Collection<String> idCollections) throws VciBaseException {
List<CodeRule> codeRuleDOList = new ArrayList<CodeRule>();
if (!CollectionUtils.isEmpty(idCollections)) {
- Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(idCollections);
- for (Collection<String> ids : oidCollectionsList) {
+ Collection<Collection<String>> idCollectionsList = VciBaseUtil.switchCollectionForOracleIn(idCollections);
+ for (Collection<String> ids : idCollectionsList) {
List<CodeRule> tempDOList = codeRuleMapper.selectList(
Wrappers.<CodeRule>query()
.lambda().in(CodeRule::getId,ids)
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 886df4a..a515f25 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
@@ -103,10 +103,22 @@
public class MdmEngineServiceImpl implements MdmEngineService {
/**
+ * 澶氱嚎绋嬫柟寮忔壒閲忔墽琛屽紑鍚嚎绋嬫睜鐨勬�绘暟
+ */
+ @Value("${batchadd.thread_num:10}")
+ private Integer THREAD_NUM;
+
+ /**
* 鍗曟sql鐨勬渶澶氬鍏ユ暟閲�
*/
- @Value("${batchadd.single_maxnum:500}")
+ @Value("${batchadd.single_maxnum:200}")
private Integer MAX_IMPORT_NUM;
+
+ /**
+ * 鏄惁寮�鍚绾跨▼鏂瑰紡瀵煎叆鍘嗗彶鏁版嵁
+ */
+ @Value("${batchadd.is_thread_import:false}")
+ private boolean IS_THREAD_IMPORT;
/**
* 妯℃澘鐨勬湇鍔�
@@ -419,7 +431,7 @@
* @param orderDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭
* @return 杩斿洖缂栫爜鐨勫唴瀹�
*/
- private String addSaveCode(CodeOrderDTO orderDTO,boolean authUser) throws Exception {
+ private String addSaveCode(CodeOrderDTO orderDTO, boolean authUser) throws Exception {
VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭",
orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�");
CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
@@ -3532,7 +3544,6 @@
* @return 澶勭悊鎴愬姛鏁版嵁鏉℃暟
*/
@Override
- @Transactional(rollbackFor = Exception.class)
public Integer insertBatchByType(String btmType, List<BaseModel> baseModels) {
//浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
@@ -3557,28 +3568,33 @@
throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.toString());
}
});
- try {
- bactchExecuteInsert(listR.getData().get(0).getTableName(),maps);
- }catch (Exception e){
- throw new ServiceException("鍒嗘壒鎵цinsert璇彞鎶ラ敊:"+e.getMessage());
+ // 鏄惁寮�鍚绾跨▼鎵ц鎻掑叆璇彞
+ if(IS_THREAD_IMPORT){
+ try {
+ threadBactchExecuteInsert(listR.getData().get(0).getTableName(),maps);
+ }catch (Exception e){
+ throw new ServiceException("鍒嗘壒鎵цinsert璇彞鎶ラ敊:"+e.getMessage());
+ }
+ }else {
+ bacthExcecuteInsert(listR.getData().get(0).getTableName(),maps);
}
+
return maps.size();
}
/**
- * 鍒嗘壒鎵цinsert璇彞
+ * 澶氱嚎绋嬫柟寮忓垎鎵规墽琛宨nsert璇彞
* @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); // 鍒涘缓涓�涓浐瀹氬ぇ灏忕殑绾跨▼姹�
+ private void threadBactchExecuteInsert(String tableName, List<Map<String, String>> maps) throws ServiceException{
+ ExecutorService executor = Executors.newFixedThreadPool(THREAD_NUM); // 鍒涘缓涓�涓浐瀹氬ぇ灏忕殑绾跨▼姹�
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());
+ final int endIndex = Math.min(i + MAX_IMPORT_NUM, threadSafeMaps.size());
executor.execute(() -> {
List<Map<String, String>> subList = threadSafeMaps.subList(startIndex, endIndex);
@@ -3599,6 +3615,21 @@
}
/**
+ * 鍗曠嚎绋嬫柟寮忓垎鎵规墽琛�
+ * @param tableName
+ * @param maps
+ */
+ private void bacthExcecuteInsert(String tableName, List<Map<String, String>> maps){
+ for (int i = 0; i < maps.size(); i += MAX_IMPORT_NUM) {
+ final int startIndex = i;
+ final int endIndex = Math.min(i + MAX_IMPORT_NUM, maps.size());
+ List<Map<String, String>> subList = maps.subList(startIndex, endIndex);
+ // 璋冪敤鎻掑叆鏁版嵁搴撶殑鏂规硶
+ commonsMapper.insertByBaseModel(tableName, maps.get(0), subList);
+ }
+ }
+
+ /**
* 浼犲叆涓氬姟绫诲瀷浠ュ強ID鏌ヨ涓氬姟琛ㄦ暟鎹槸鍚﹂噸澶�
*
* @param btmType 涓氬姟绫诲瀷
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
index dc8f6e8..d33879a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -1038,7 +1038,7 @@
//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
List<String> rowIndexList = ruleRowIndexMap.get(ruleOid);
List<ClientBusinessObject> thisCbos = finalNeedSaveCboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList());
- List<BaseModel> dataCBOList=new ArrayList<>();
+ List<BaseModel> dataCBOList=new CopyOnWriteArrayList<>();
thisCbos.stream().forEach(clientBusinessObject -> {
BaseModel baseModel=new BaseModel();
BeanUtil.convert(clientBusinessObject,baseModel);
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
index 5c2fa06..0924dbb 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -85,8 +85,8 @@
private FormulaServiceImpl formulaService;
// 娉ㄥ叆浜嬪姟绠$悊鍣�
- @Autowired
- private TransactionTemplate transactionTemplate;
+// @Autowired
+// private TransactionTemplate transactionTemplate;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -273,9 +273,9 @@
codeAllCodeService.updateBatchById(editCodeDOs);
}
// 鑾峰彇浜嬪姟瀹氫箟
- DefaultTransactionDefinition def = new DefaultTransactionDefinition();
+ //DefaultTransactionDefinition def = new DefaultTransactionDefinition();
// 寮�濮嬩簨鍔�
- TransactionStatus status = transactionTemplate.getTransactionManager().getTransaction(def);
+ //TransactionStatus status = transactionTemplate.getTransactionManager().getTransaction(def);
if(!CollectionUtils.isEmpty(addCodeDOs)){
Map<String, String> statusMap = addCodeDOs.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus()));
addCodeDOs.stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmname())).forEach(s -> {
@@ -318,14 +318,14 @@
codeAllCodeService.saveBatch(addCodeDOs);
}
- try {
- mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
+// try {
+ mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
// 鎻愪氦浜嬪姟
- transactionTemplate.getTransactionManager().commit(status);
- }catch (Exception e){
- // 鍑虹幇寮傚父鏃跺洖婊氫簨鍔�
- transactionTemplate.getTransactionManager().rollback(status);
- }
+ //transactionTemplate.getTransactionManager().commit(status);
+// }catch (Exception e){
+// // 鍑虹幇寮傚父鏃跺洖婊氫簨鍔�
+// transactionTemplate.getTransactionManager().rollback(status);
+// }
}
return codeList;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
index de66f02..af5be61 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -52,6 +52,22 @@
</foreach>
</insert>
+ <!--<insert id="insertByBaseModel" parameterType="java.util.Map">
+ <foreach collection="mapList" item="value" index="key" separator=",">
+ insert into ${tableName} (
+ <foreach collection="columnMap" item="value" index="key" separator=",">
+ ${key}
+ </foreach>
+ )
+ <foreach collection="mapList" item="columnMap" separator=" union all ">
+ select <foreach collection="columnMap" item="value" index="key" separator=",">
+ #{value}
+ </foreach>
+ from dual
+ </foreach>
+ </foreach>
+ </insert>-->
+
<insert id="deleteByTaleAndOid" >
delete from ${tableName} where oid in (${oids})
</insert>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/pom.xml b/Source/UBCS/ubcs-service/ubcs-system/pom.xml
index 10b2072..1b1716d 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/pom.xml
+++ b/Source/UBCS/ubcs-service/ubcs-system/pom.xml
@@ -31,6 +31,12 @@
<groupId>com.vci.ubcs</groupId>
<artifactId>ubcs-system-api</artifactId>
<version>3.0.1.RELEASE</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.springblade</groupId>
+ <artifactId>blade-starter-log</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>com.vci.ubcs</groupId>
@@ -38,19 +44,16 @@
<version>3.0.1.RELEASE</version>
</dependency>
<dependency>
- <groupId>com.oracle.database.jdbc</groupId>
- <artifactId>ojdbc8</artifactId>
- </dependency>
- <dependency>
- <groupId>cn.easyproject</groupId>
- <artifactId>orai18n</artifactId>
- <version>${orai18n.version}</version>
- </dependency>
- <dependency>
<groupId>com.vci.ubcs</groupId>
<artifactId>ubcs-util-api</artifactId>
<version>3.0.1.RELEASE</version>
<scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.springblade</groupId>
+ <artifactId>blade-starter-log</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
</dependencies>
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MdmCountConfigController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MdmCountConfigController.java
index 2dc3585..49d1bdf 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MdmCountConfigController.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MdmCountConfigController.java
@@ -5,7 +5,6 @@
import com.vci.ubcs.system.vo.MdmCountConfigVO;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
-import oracle.jdbc.proxy.annotation.Post;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.PostMapping;
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java
index 92e402f..1aad52f 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java
@@ -33,6 +33,7 @@
import lombok.AllArgsConstructor;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.log.annotation.ApiLog;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
@@ -105,6 +106,7 @@
//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
@ApiOperationSupport(order = 3)
@ApiOperation(value = "鎳掑姞杞藉垪琛�", notes = "浼犲叆menu")
+ @ApiLog("鑿滃崟鎳掑姞杞藉垪琛�")
public R<List<MenuVO>> lazyList(Long parentId, @ApiIgnore @RequestParam Map<String, Object> menu) {
List<MenuVO> list = menuService.lazyList(parentId, menu);
return R.data(MenuWrapper.build().listNodeLazyVO(list));
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
index 472b595..5b01b14 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
@@ -74,6 +74,7 @@
@Override
public List<MenuVO> lazyList(Long parentId, Map<String, Object> param) {
+ int i = 1 / 0;
if (Func.isEmpty(Func.toStr(param.get(PARENT_ID)))) {
parentId = null;
}
--
Gitblit v1.9.3