From 4208d7f9407ab7c9d6b756f5f8a7616b7686fc74 Mon Sep 17 00:00:00 2001 From: xiejun <xj@2023> Date: 星期五, 17 十一月 2023 12:40:20 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java | 126 +++++++++++++++++++++-------------------- 1 files changed, 65 insertions(+), 61 deletions(-) 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 c4010bf..3e1bc24 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 @@ -1,10 +1,10 @@ package com.vci.ubcs.code.service.impl; +import com.vci.ubcs.code.algorithm.CustomSerialEnum; +import com.vci.ubcs.code.dto.CodeCustomSerialDTO; import com.alibaba.nacos.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.vci.ubcs.code.algorithm.CustomSerialEnum; import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO; -import com.vci.ubcs.code.dto.CodeCustomSerialDTO; import com.vci.ubcs.code.dto.CodeOrderSecDTO; import com.vci.ubcs.code.entity.CodeAllCode; import com.vci.ubcs.code.entity.CodeClassifyValue; @@ -114,7 +114,7 @@ log.info("code:----->"+cbo.getId()); //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); String code = cbo.getId(); - List<String> serialUnitList = new ArrayList<>(); + List<String> serialUnitList = new CopyOnWriteArrayList<>(); String seclenghStr=cbo.getData().get(CODE_SEC_LENGTH_FIELD); String[] secLengths = cbo.getData().get(CODE_SEC_LENGTH_FIELD).split("#"); cbo.getData().remove(CODE_SEC_LENGTH_FIELD);//灏嗘key闄ゅ幓 @@ -171,13 +171,11 @@ if(OsCodeFillTypeEnum.NONE.getValue().equalsIgnoreCase(secVO.getCodeFillType())){ //涓嶈ˉ鐮� //鎶婃墍鏈変笉鏄暟瀛楃殑鍘绘帀锛屽洜涓哄彲鑳戒細鏄�佹暟鎹紝鏂拌鍒� - // serialDb = VciBaseUtil.getDouble(killUnNumberChar(subSecValue)); + // serialDb = VciBaseUtil.getDouble(killUnNumberChar(subSecValue)); //serialDb = killUnNumberChar(subSecValue); serialDb=subSecValue; }else { //宸﹀彸濉厖鐨勶紝鎴戜滑闇�瑕� - /*serialDb = VciBaseUtil.getDouble(killUnNumberChar(killFillChar(subSecValue,secVO.getCodeFillSeparator(), - OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType()))));*/ serialDb = killFillChar(subSecValue,secVO.getCodeFillSeparator(), OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType())); } @@ -261,8 +259,8 @@ // TODO 鍘嗗彶鏁版嵁瀵煎叆鐨勬椂鍊欒繖鍎垮伓灏斾細瑙﹀彂绌烘寚閽堝紓甯� Map<String,List<CodeAllCode>> ruleGroup = allCodeDOList.stream().collect(Collectors.groupingBy(s -> s.getCodeRuleOid())); Map<String, CodeAllCode> codeDOMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getCodeRuleOid() + "${SEP}" + s.getId(), t -> t)); - List<CodeAllCode> addCodeDOs = new ArrayList<>(); - List<CodeAllCode> editCodeDOs = new ArrayList<>(); + List<CodeAllCode> addCodeDOs = new CopyOnWriteArrayList<>(); + List<CodeAllCode> editCodeDOs = new CopyOnWriteArrayList<>(); ruleGroup.forEach((ruleOid,allCodeDOS)->{ VciBaseUtil.switchCollectionForOracleIn(allCodeDOS).stream().forEach(codeDOs->{ QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>(); @@ -311,7 +309,7 @@ .collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))), ArrayList::new)); - if( distinctCodeAllCOdes.size() != addCodeDOs.size() ){ + if(distinctCodeAllCOdes.size() != addCodeDOs.size() ){ throw new VciBaseException("缂栫爜鏁版嵁閲嶅锛屾棤娉曚繚瀛橈紝璇锋敞鎰忥紒"); } QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>(); @@ -320,7 +318,7 @@ List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(wrapper); List<CodeAllCode> takeBack = codeAllCodes.stream().filter(e -> e.getLcStatus().equals("TakeBack")).collect(Collectors.toList()); if(codeAllCodes.size()>takeBack.size()){ - throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ codeAllCodes.stream().map(CodeAllCode::getId).collect(Collectors.toList())); + throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ addCodeDOs.stream().map(CodeAllCode::getId).collect(Collectors.toList())); } for (CodeAllCode codeAllCode : takeBack) { codeAllCode.setTs(new Date()); @@ -332,7 +330,8 @@ if(codeAllCode.getId().equals(next.getId())){ codeAllCode.setCreateCodeOid(next.getCreateCodeOid()); codeAllCode.setLcStatus(next.getLcStatus()); - iterator.remove(); + // TODO: 杩欏効鍏堟殏鏃舵敞閲婃帀锛屾病鐪嬫噦杩欏効涓轰粈涔堣杩欐牱鍋氾紝瀵艰嚧鎶ラ敊 + //iterator.remove(); } } } @@ -345,6 +344,13 @@ // try { mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList); + // 鎻愪氦浜嬪姟 + //transactionTemplate.getTransactionManager().commit(status); +// }catch (Exception e){ +// // 鍑虹幇寮傚父鏃跺洖婊氫簨鍔� +// transactionTemplate.getTransactionManager().rollback(status); +// } + } return codeList; }else { @@ -404,57 +410,54 @@ //澶勭悊鏈�澶ф祦姘� saveSerialValue( finalRuleVO, lastMaxSerialValueMap, maxSerialValueMap); - allCodeDOList.stream().forEach( - allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");} - ); - Map<String, String> statusMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus())); - allCodeDOList.stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmname())).forEach(s -> { - s.setLcStatus(statusMap.get(s.getOid())); - }); - //閫氳繃ID鏉ヨ繘琛屽幓閲� - List<CodeAllCode> distinctCodeAllCOdes = allCodeDOList.stream().collect(Collectors - .collectingAndThen( - Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))), - ArrayList::new)); - if( distinctCodeAllCOdes.size() != allCodeDOList.size() ){ - throw new ServiceException("缂栫爜鏁版嵁閲嶅锛屾棤娉曚繚瀛橈紝璇锋敞鎰忥紒"); - } - QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>(); - wrapper.eq("CREATECODEBTM",allCodeDOList.get(0).getCreateCodeBtm()); - wrapper.in("ID",allCodeDOList.stream().map(CodeAllCode::getId).collect(Collectors.toList())); - List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(wrapper); - List<CodeAllCode> takeBack = codeAllCodes.stream().filter(e -> e.getLcStatus().equals("TakeBack")).collect(Collectors.toList()); - if(codeAllCodes.size()>takeBack.size()){ - throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ codeAllCodes.stream().map(CodeAllCode::getId).collect(Collectors.toList())); - } + allCodeDOList.stream().forEach( + allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");} + ); - for (CodeAllCode codeAllCode : takeBack) { - codeAllCode.setTs(new Date()); - codeAllCode.setLastModifyTime(new Date()); - codeAllCode.setLastModifier(AuthUtil.getUserId().toString()); - Iterator<CodeAllCode> iterator = allCodeDOList.iterator(); - while (iterator.hasNext()){ - CodeAllCode next = iterator.next(); - if(codeAllCode.getId().equals(next.getId())){ - codeAllCode.setCreateCodeOid(next.getCreateCodeOid()); - codeAllCode.setLcStatus(next.getLcStatus()); - iterator.remove(); - } + + Map<String, String> statusMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus())); + allCodeDOList.stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmname())).forEach(s -> { + s.setLcStatus(statusMap.get(s.getOid())); + }); + + + //閫氳繃ID鏉ヨ繘琛屽幓閲� + List<CodeAllCode> distinctCodeAllCOdes = allCodeDOList.stream().collect(Collectors + .collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))), + ArrayList::new)); + if( distinctCodeAllCOdes.size() != allCodeDOList.size() ){ + throw new ServiceException("缂栫爜鏁版嵁閲嶅锛屾棤娉曚繚瀛橈紝璇锋敞鎰忥紒"); + } + QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>(); + wrapper.eq("CREATECODEBTM",allCodeDOList.get(0).getCreateCodeBtm()); + wrapper.in("ID",allCodeDOList.stream().map(CodeAllCode::getId).collect(Collectors.toList())); + List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(wrapper); + List<CodeAllCode> takeBack = codeAllCodes.stream().filter(e -> e.getLcStatus().equals("TakeBack")).collect(Collectors.toList()); + if(codeAllCodes.size()>takeBack.size()){ + throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ allCodeDOList.stream().map(CodeAllCode::getId).collect(Collectors.toList())); + } + + for (CodeAllCode codeAllCode : takeBack) { + codeAllCode.setTs(new Date()); + codeAllCode.setLastModifyTime(new Date()); + codeAllCode.setLastModifier(AuthUtil.getUserId().toString()); + Iterator<CodeAllCode> iterator = allCodeDOList.iterator(); + while (iterator.hasNext()){ + CodeAllCode next = iterator.next(); + if(codeAllCode.getId().equals(next.getId())){ + codeAllCode.setCreateCodeOid(next.getCreateCodeOid()); + codeAllCode.setLcStatus(next.getLcStatus()); + //iterator.remove(); } } - mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(), dataCBOList); - if(takeBack.size()>0){ - codeAllCodeService.updateBatchById(takeBack); - } - codeAllCodeService.saveBatch(allCodeDOList); -// iCodeWupinService.saveBatch(dataCBOList); - // 鎻愪氦浜嬪姟 - // transactionTemplate.getTransactionManager().commit(status); - //}catch (Exception e){ - // 鍑虹幇寮傚父鏃跺洖婊氫簨鍔� - // transactionTemplate.getTransactionManager().rollback(status); - // throw e; - //} + } + if(takeBack.size()>0){ + codeAllCodeService.updateBatchById(takeBack); + } + codeAllCodeService.saveBatch(allCodeDOList); +// iCodeWupinService.saveBatch(dataCBOList); + mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList); // batchCBO.getCreateCbos().stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmName())).forEach(s -> { // s.setLcStatus(statusMap.get(s.getOid())); // try { @@ -529,7 +532,6 @@ CodeRuleVO ruleVO,String serialUnitString, Map<String/**鐮佹鐨勪富閿�**/,Map<String/**娴佹按渚濇嵁**/,CodeSerialValue>> maxSerialValueMap,List<String> thisSecValueList, Map<String/**鐮佹鐨勪富閿�**/,Map<String/**娴佹按渚濇嵁**/, String>> lastMaxSerialValueMap,boolean firstData){ - if (!CollectionUtils.isEmpty(serialSecVOList)) { Map<String,String> secIdserialValueMap=new LinkedHashMap<>(); for (int j = 0; j < serialSecVOList.size(); j++) { @@ -625,7 +627,8 @@ } } } - private String customCodeSerial(String className, CodeCustomSerialDTO codeCustomSerialDTO){ + + private String customCodeSerial(String className, CodeCustomSerialDTO codeCustomSerialDTO){ String result = ""; try { Class classInstance=Class.forName(className); @@ -648,6 +651,7 @@ } return result; } + /** * 杞崲鐮佸�肩殑鍐呭 * @param secVO 鐮佹鐨勫唴瀹� -- Gitblit v1.9.3