ludc
2023-11-12 12253875406a93c2cc0f02d4abc87505e9898b15
历史数据导入,单次导入超过800条报错变量溢出bug
已修改10个文件
130 ■■■■■ 文件已修改
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/cache/NacosConfigCache.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/pom.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MdmCountConfigController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
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)
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语句
     * 多线程方式分批执行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); // 创建一个固定大小的线程池
    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 业务类型
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);
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;
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>
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>
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;
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));
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;
        }