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