From 566c542d3f1eb0ad9e918bd1fa9586ab1ed7ec86 Mon Sep 17 00:00:00 2001 From: xiejun <xj@2023> Date: 星期五, 17 十一月 2023 01:28:50 +0800 Subject: [PATCH] 自定义流水相关开发 --- Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml | 1 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialEnum.java | 162 ++++++++++++++++ Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java | 14 + Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java | 12 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCustomSerialDTO.java | 33 +++ Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java | 5 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomRomanSerialAlgorithmExample.java | 40 ++- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java | 5 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java | 19 + Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java | 1 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java | 2 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java | 5 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java | 270 +++++++++++++++++--------- Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java | 4 14 files changed, 443 insertions(+), 130 deletions(-) diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java index 16447a2..ac7e05b 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java +++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java @@ -196,7 +196,10 @@ * 鑷畾涔夌殑娴佹按绠楁硶绫� */ private String customCodeSerialClassText; - + /*** + * 鑷畾涔夋祦姘寸被鍨� + */ + private String customCodeSerialType; /** * 鏄惁鑷姩鍖归厤鍒嗙被鍊� */ diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCustomSerialDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCustomSerialDTO.java new file mode 100644 index 0000000..127eb39 --- /dev/null +++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCustomSerialDTO.java @@ -0,0 +1,33 @@ +package com.vci.ubcs.code.dto; + +import com.vci.ubcs.code.dto.datapush.BaseModelDTO; +import com.vci.ubcs.code.entity.CodeBasicSec; +import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO; +import com.vci.ubcs.starter.revision.model.BaseModel; +import lombok.Data; + +import java.util.List; + +@Data +public class CodeCustomSerialDTO extends BaseModelDTO { + //缂栫爜瑙勫垯鐮佹 + private List<CodeBasicSecVO> codeBasicSecVOList; + /*** + * 缂栫爜瑙勫垯id + */ + private String codeRuleOid; + /** + * 褰撳墠鏁版嵁娴佹按 + */ + private String currentFlowValue; + /*** + * 娴佸け渚濊禆 + */ + private String serialUnitString; + /*** + * 褰撳墠娴佹按鐮佹 + */ + private CodeBasicSecVO serialCodeCodeBasicSec; + + private BaseModel baseModel; +} diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java index 3ef8c4f..5c6d886 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java +++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java @@ -243,6 +243,10 @@ */ private String customCodeSerialClassText; + /*** + * 鑷畾涔夋祦姘寸被鍨� + */ + private String customCodeSerialType; /** * 鏄惁鑷姩鍖归厤鍒嗙被鍊� */ diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java index c506566..c460723 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java +++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java @@ -204,6 +204,11 @@ */ private String customCodeSerialClassText; + /*** + * 鑷畾涔夋祦姘寸被鍨� + */ + private String customCodeSerialType; + /** * 鏄惁鑷姩鍖归厤鍒嗙被鍊� */ diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java index 959255d..5e3bcb3 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java +++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java @@ -8,7 +8,10 @@ * @date 2022-2-17 */ public class CodeSerialAlgorithmVO extends BaseModel { - + /*** + * + */ + private String serialType; /** * 绠楁硶缂栧彿 */ @@ -61,8 +64,15 @@ this.description = description; } + public String getSerialType() { + return serialType; + } - @Override + public void setSerialType(String serialType) { + this.serialType = serialType; + } + + @Override public String toString() { return "CodeSerialAlgorithmVO{" + "id='" + id + '\'' + diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomRomanSerialAlgorithmExample.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomRomanSerialAlgorithmExample.java index abe1dfa..96da8d6 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomRomanSerialAlgorithmExample.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomRomanSerialAlgorithmExample.java @@ -1,34 +1,46 @@ package com.vci.ubcs.code.algorithm; +import com.alibaba.nacos.common.utils.StringUtils; import com.vci.ubcs.code.annotation.MdmSerialAlgorithm; import com.vci.ubcs.code.annotation.MdmSerialAlgorithmMethod; -import com.vci.ubcs.code.dto.CodeOrderSecDTO; -import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO; -import com.vci.ubcs.starter.revision.model.BaseModel; +import com.vci.ubcs.code.dto.CodeCustomSerialDTO; +import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO; +import com.vci.ubcs.starter.exception.VciBaseException; import com.vci.ubcs.starter.web.util.VciBaseUtil; - -import java.util.List; /**** * 鑷畾涔夌綏椹祦姘寸畻娉曡嚜瀹氫箟绫� */ -@MdmSerialAlgorithm(text = "鑷畾涔夌綏椹祦姘�",description = "鑷畾涔夌綏椹祦姘寸畻娉�") +@MdmSerialAlgorithm(text = "鑷畾涔夌綏椹祦姘�",serialType="custom_serial_roman",description = "鑷畾涔夌綏椹祦姘寸畻娉�") public class CustomRomanSerialAlgorithmExample { /** * 鐢熸垚缃楅┈娴佹按鍙风殑鏂规硶 * @return 娴佹按鍙风殑淇℃伅 */ @MdmSerialAlgorithmMethod - public String serialGenerate(BaseModel data, CodeRuleVO codeRuleVO, List<CodeOrderSecDTO> secDTOList){ + public String serialGenerate(CodeCustomSerialDTO codeCustomSerialDTO){ + // + codeCustomSerialDTO.getSerialUnitString(); + CodeBasicSecVO secVO= codeCustomSerialDTO.getSerialCodeCodeBasicSec(); + String currentFlowValue=codeCustomSerialDTO.getCurrentFlowValue(); - - - + Double newThisSerialValue = 0d; + if(StringUtils.isBlank(currentFlowValue)){ + //绗竴涓紪鐮� + newThisSerialValue = VciBaseUtil.getDouble(secVO.getSerialStart()); + }else { + //娴佹按鍙疯偗瀹氭槸鏁板瓧 + //灏嗙綏椹祦姘磋浆涓烘暟瀛楁祦姘� + int arabicValue=VciBaseUtil.convertRomanToArabic(currentFlowValue); + newThisSerialValue = (double)(arabicValue + secVO.getSerialStep()) ; + } + //瑕佺湅鏄惁瓒呰繃鏈�澶х殑娴佹按鍊� + if (newThisSerialValue >= secVO.getCodeFillLimit()) { + throw new VciBaseException("娴佹按鍙峰凡缁忚秴杩囧厑璁哥殑鏈�澶ф祦姘村�納0}", new String[]{secVO.getCodeFillLimit().toString()}); + } //灏嗘暟瀛楁祦姘磋浆涓虹綏椹祦姘� - String romanValue=VciBaseUtil.convertArabicToRoman(5); - //灏嗙綏椹祦姘磋浆涓烘暟瀛楁祦姘� - int arabicValue=VciBaseUtil.convertRomanToArabic(romanValue); - return ""; + String romanValue=VciBaseUtil.convertArabicToRoman(newThisSerialValue.intValue()); + return romanValue; } } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java index 41b71b8..a77e143 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java @@ -2,6 +2,7 @@ import com.vci.ubcs.code.annotation.MdmSerialAlgorithm; import com.vci.ubcs.code.annotation.MdmSerialAlgorithmMethod; +import com.vci.ubcs.code.dto.CodeCustomSerialDTO; import com.vci.ubcs.code.dto.CodeOrderSecDTO; import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO; import com.vci.ubcs.starter.revision.model.BaseModel; @@ -11,7 +12,7 @@ /** * 娴佹按绠楁硶鐨勭ず渚� */ -@MdmSerialAlgorithm(text = "娴佹按绠楁硶鐨勭ず渚�",description = "璇蜂笉瑕佷娇鐢ㄨ繖涓被锛岃繖涓被鍙槸绀轰緥锛岀敤浜庢煡鐪嬪浣曠紪鍐欐祦姘寸畻娉�") +@MdmSerialAlgorithm(text = "娴佹按绠楁硶鐨勭ず渚�",serialType="",description = "璇蜂笉瑕佷娇鐢ㄨ繖涓被锛岃繖涓被鍙槸绀轰緥锛岀敤浜庢煡鐪嬪浣曠紪鍐欐祦姘寸畻娉�") public class CustomSerialAlgorithmExample { /** @@ -19,7 +20,7 @@ * @return 娴佹按鍙风殑淇℃伅 */ @MdmSerialAlgorithmMethod - public String serialGenerate(BaseModel data, CodeRuleVO codeRuleVO, List<CodeOrderSecDTO> secDTOList){ + public String serialGenerate(CodeCustomSerialDTO codeCustomSerialDTO){ return ""; } } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialEnum.java new file mode 100644 index 0000000..efd4997 --- /dev/null +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialEnum.java @@ -0,0 +1,162 @@ +package com.vci.ubcs.code.algorithm; +import com.vci.ubcs.starter.annotation.VciEnum; +import com.vci.ubcs.starter.web.enumpck.BaseEnum; +import com.vci.ubcs.starter.web.util.VciBaseUtil; + +/*** + * 鑷畾涔夋祦姘存灇涓� + */ +@VciEnum(name ="customSerialEnum",text = "鑷畾涔夋祦姘寸被鍨�",description = "") +public enum CustomSerialEnum implements BaseEnum { + + /** + * 缂栬緫涓� + */ + ROMAN("custom_serial_roman","缃楅┈娴佹按"); + + /** + * 鏋氫妇鐨勫�� + */ + private String value; + + /** + * 鏋氫妇鏄剧ず鏂囨湰 + */ + private String text; + + /** + * 鏋勯�犲嚱鏁� + * + * @param value 鍊� + * @param text 鏄剧ず鏂囨湰 + */ + private CustomSerialEnum(String value, String text) { + this.value = value; + this.text = text; + } + + /** + * 鑾峰彇鏋氫妇鍊� + * + * @return 鏋氫妇鍊� + */ + @Override + public String getValue() { + return value; + } + + /** + * 璁剧疆鏋氫妇鍊� + * + * @param value 鏋氫妇鍊� + */ + public void setValue(String value) { + this.value = value; + } + + /** + * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰 + * + * @return 鏄剧ず鏂囨湰 + */ + @Override + public String getText() { + return text; + } + + /** + * 璁剧疆鏄剧ず鏂囨湰 + * + * @param text 鏄剧ず鏂囨湰 + */ + public void setText(String text) { + this.text = text; + } + + + + /** + * 鏍规嵁鏋氫妇绫诲瀷鍒ゆ柇搴旇杩斿洖浠�涔堟牱绫诲瀷鐨勬祦姘� + * 鏆傛椂鍔犱簡缃楅┈绫诲瀷锛屽鏋滃悗缁湁鍏朵粬娴佹按绫诲瀷鍒欓渶瑕佸湪姝ゅ鐞� + * @return 鏋氫妇鍊� + */ + public static Double getDoubleCustomSerialValue(String value,String customCodeSerialType) { + Double serialValue=null; + for (CustomSerialEnum wenum : CustomSerialEnum.values()) { + if (wenum.getValue().equalsIgnoreCase(customCodeSerialType)) {//濡傛灉涓虹綏椹� + int newValue = VciBaseUtil.convertRomanToArabic(value); + serialValue = new Double(newValue); + break; + } else { + serialValue=Double.parseDouble(value); + break; + } + } + return serialValue; + } + /** + * 鏍规嵁鏋氫妇绫诲瀷鍒ゆ柇搴旇杩斿洖浠�涔堟牱绫诲瀷鐨勬祦姘� + * 鏆傛椂鍔犱簡缃楅┈绫诲瀷锛屽鏋滃悗缁湁鍏朵粬娴佹按绫诲瀷鍒欓渶瑕佸湪姝ゅ鐞� + * @return 鏋氫妇鍊� + */ + public static String getStringCustomSerialValue(Double value,String customCodeSerialType) { + String serialValue=String.valueOf(value); + for (CustomSerialEnum wenum : CustomSerialEnum.values()) { + if (wenum.getValue().equalsIgnoreCase(customCodeSerialType)) {//濡傛灉涓虹綏椹� + String newValue=VciBaseUtil.convertArabicToRoman(value.intValue()); + serialValue=newValue; + break; + }else{ + break; + } + } + return serialValue; + } + + + /** + * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧�� + * + * @param text 鍚嶇О + * @return 鏋氫妇鍊� + */ + public static String getValueByText(String text) { + for (CustomSerialEnum wenum : CustomSerialEnum.values()) { + if (wenum.getText().equalsIgnoreCase(text)) { + return wenum.getValue(); + } + } + return ""; + } + + /** + * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉� + * + * @param value 鏋氫妇鍊� + * @return 鍚嶇О + */ + public static String getTextByValue(String value) { + for (CustomSerialEnum wenum : CustomSerialEnum.values()) { + if (wenum.getValue().equalsIgnoreCase(value)) { + return wenum.getText(); + } + } + return ""; + } + + /** + * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞� + * + * @param value 鏋氫妇鍊� + * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull + */ + public static CustomSerialEnum forValue(String value) { + for (CustomSerialEnum wenum : CustomSerialEnum.values()) { + if (wenum.getValue().equalsIgnoreCase(value)) { + return wenum; + } + } + return null; + } + +} diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java index dbab4dc..2440ee1 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java @@ -34,4 +34,6 @@ * @return 鎻忚堪 */ String description() default ""; + + String serialType() default ""; } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java index 8b6e805..ca73465 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java @@ -49,6 +49,7 @@ algorithmVO.setName(serialAlgorithm.text()); algorithmVO.setDescription(serialAlgorithm.description()); algorithmVO.setId(serialAlgorithm.value()); + algorithmVO.setSerialType(serialAlgorithm.serialType()); if(StringUtils.isBlank(algorithmVO.getId())){ algorithmVO.setId(beanName); } 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 a515f25..6db0334 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 @@ -976,10 +976,10 @@ // cbo.setLcStatus("Editing"); //// cbo.setLcStatus(lifeCycleVO.getStartStatus()); // } else { - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); // } } else { - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); } } @@ -3595,12 +3595,15 @@ for (int i = 0; i < threadSafeMaps.size(); i += MAX_IMPORT_NUM) { final int startIndex = i; final int endIndex = Math.min(i + MAX_IMPORT_NUM, threadSafeMaps.size()); - - executor.execute(() -> { - List<Map<String, String>> subList = threadSafeMaps.subList(startIndex, endIndex); - // 璋冪敤鎻掑叆鏁版嵁搴撶殑鏂规硶 - commonsMapper.insertByBaseModel(tableName, threadSafeMaps.get(0), subList); - }); + try { + executor.execute(() -> { + List<Map<String, String>> subList = threadSafeMaps.subList(startIndex, endIndex); + // 璋冪敤鎻掑叆鏁版嵁搴撶殑鏂规硶 + commonsMapper.insertByBaseModel(tableName, threadSafeMaps.get(0), subList); + }); + }catch (Throwable e){ + throw new ServiceException(e.getMessage()); + } } // 鍏抽棴绾跨▼姹� 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 d33879a..57d9c79 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 @@ -97,7 +97,7 @@ @Value("${batchadd.exportattr.type:鍩烘湰淇℃伅}") public String BATCHADD_EXCEPORT_ATTR_TYPE; - + @Value("${batchadd.redis.time:6000000}") public int BATCHADD_REDIS_TIME; @Value("${batchadd.import_data_limit:5001}") @@ -2765,10 +2765,10 @@ // if (lifeCycleVO != null) { // cbo.setLcStatus(lifeCycleVO.getStartStatus()); // } else { - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); // } } else { - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); } } @@ -3134,7 +3134,7 @@ Integer userSecret = VciBaseUtil.getCurrentUserSecret(); cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret)); } - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); }else{ //姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰� //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath)); @@ -3191,7 +3191,7 @@ Integer userSecret = VciBaseUtil.getCurrentUserSecret(); cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret)); } - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); }else{ //姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰� //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath)); @@ -3817,7 +3817,7 @@ //2.鍒ゆ柇鍏抽敭灞炴�у湪绯荤粺閲屾槸鍚﹂噸澶� //鍥犱负鏁版嵁閲忓緢澶э紝鎵�浠ュ緱鎯冲姙娉曞苟琛� //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); - Map<String,List<BaseModel>> indexTODataMap=new HashMap<>(); + Map<String,List<BaseModel>> indexTODataMap=new ConcurrentHashMap<>(); List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> { //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀� //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); 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 0924dbb..f48fd40 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 @@ -2,7 +2,9 @@ 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; @@ -36,15 +38,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; -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; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -105,7 +108,7 @@ //涓昏鏄负浜嗗綍鍏ユ渶澶ф祦姘村彿鍜宎llcode //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); List<CodeAllCode> allCodeDOList = new CopyOnWriteArrayList<>(); - Map<String/**娴佹按渚濇嵁**/, Map<String/**鐮佹鐨勪富閿�**/,Double/**鏈�澶ф祦姘村彿**/>> maxSerialMap = new HashMap<>(); + Map<String/**娴佹按渚濇嵁**/, ConcurrentHashMap<String/**鐮佹鐨勪富閿�**/,String/**鏈�澶ф祦姘村彿**/>> maxSerialMap = new ConcurrentHashMap<>(); // TODO 澶氱嚎绋嬫祦寮曞彂鐨勯棶棰樺凡淇敼 dataCBOList.parallelStream().forEach(cbo->{ log.info("code:----->"+cbo.getId()); @@ -120,6 +123,7 @@ List<CodeBasicSecVO> secVOList = finalRuleVO.getSecVOList().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList()); Map<String/**鐮佹鐨勪富閿�**/,String/**鐮佹鐨勫��**/> serialValueMap = new HashMap<>(); Map<String, CodeBasicSecVO> secVOMap = secVOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); + Map<String,Integer> serialSecOidIndexMap=new HashMap<>(); for (int i = 0; i < secLengths.length; i++) { CodeBasicSecVO secVO = secVOList.get(i); String thisSecValue = ""; @@ -137,38 +141,59 @@ // } if(VciBaseUtil.getBoolean(secVO.getSerialDependFlag())){ serialUnitList.add(thisSecValue); + serialSecOidIndexMap.put(secVO.getOid(),i); } if(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue().equalsIgnoreCase(secVO.getSecType())){ serialValueMap.put(secVO.getOid(),thisSecValue); } } - String serialUnitString = serialUnitList.size() == 0 ? EMPTY_SERIAL_UNIT : serialUnitList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE)); List<String> serialUnFileStringList = new ArrayList<>(); + AtomicReference<String> newSerialUnitString = new AtomicReference<>(""); if(!CollectionUtils.isEmpty(serialValueMap)){ + AtomicInteger index= new AtomicInteger(); serialValueMap.forEach((secOid,secValue)->{ //瑕佺湅鏄笉鏄ˉ浣嶇殑 CodeBasicSecVO secVO = secVOMap.get(secOid); - Double serialDb = null; + List<String >newSerialUnitList=new ArrayList<>(); + newSerialUnitList.addAll(serialUnitList); + if(index.get() ==0){ + if(serialSecOidIndexMap.containsKey(secOid)) { + int num = serialSecOidIndexMap.get(secOid); + newSerialUnitList.set(num, ""); + } + } + String serialUnitString = newSerialUnitList.size() == 0 ? EMPTY_SERIAL_UNIT : newSerialUnitList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE)); + newSerialUnitString.set(serialUnitString); + index.getAndIncrement(); + String serialDb = ""; // 鎴彇鎺夊墠鍚庣紑涔嬪悗鐨勭爜娈� String subSecValue = killPriffixSuffix(secValue, secVO.getPrefixCode(), secVO.getSuffixCode()); 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 = VciBaseUtil.getDouble(killUnNumberChar(killFillChar(subSecValue,secVO.getCodeFillSeparator(), + OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType()))));*/ + serialDb = killFillChar(subSecValue,secVO.getCodeFillSeparator(), + OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType())); } - Map<String, Double> thisUnitMaxMap = maxSerialMap.getOrDefault(serialUnitString, new HashMap<>()); - Double maxValue=serialDb; + Double newSerialDb= CustomSerialEnum.getDoubleCustomSerialValue(secValue,secVO.getCustomCodeSerialType()); + ConcurrentHashMap<String, String> thisUnitMaxMap = maxSerialMap.getOrDefault(serialUnitString, new ConcurrentHashMap<>()); + Double maxValue=newSerialDb; if(thisUnitMaxMap.containsKey(secOid)){ - maxValue= thisUnitMaxMap.getOrDefault(secOid,new Double(-1)); - if(maxValue<serialDb){ - maxValue=serialDb; + String newMaxValue= thisUnitMaxMap.getOrDefault(secOid,""); + maxValue=StringUtils.isBlank(newMaxValue)?-1:VciBaseUtil.getDouble(newMaxValue); + if(maxValue<newSerialDb){ + maxValue=newSerialDb; } } - thisUnitMaxMap.put(secOid,maxValue); + String newMaxValue=CustomSerialEnum.getStringCustomSerialValue(maxValue,secVO.getCustomCodeSerialType()); + serialDb=CustomSerialEnum.getStringCustomSerialValue(newSerialDb,secVO.getCustomCodeSerialType()); + thisUnitMaxMap.put(secOid,newMaxValue); maxSerialMap.put(serialUnitString,thisUnitMaxMap); serialUnFileStringList.add(String.valueOf(serialDb)); }); @@ -181,7 +206,7 @@ allCodeDO.setCodeClassifyTemplateOid(templateVO.getOid()); allCodeDO.setCreateCodeBtm(cbo.getBtmname()); allCodeDO.setCreateCodeOid(cbo.getOid()); - allCodeDO.setSerialUnit(serialUnitString); + allCodeDO.setSerialUnit(newSerialUnitString.get()); String unFillSerial =serialUnFileStringList.size()==1?serialUnFileStringList.get(0)+ SERIAL_VALUE_SPACE:serialUnFileStringList.stream().collect(Collectors.joining(SERIAL_VALUE_SPACE)); allCodeDO.setUnFillSerial(unFillSerial); allCodeDO.setLcStatus(cbo.getLcStatus()); @@ -204,7 +229,7 @@ if (!CollectionUtils.isEmpty(serialValueDOS)) { CodeSerialValue serialValueDO = serialValueDOS.get(0); log.info("oldmaxSerial--->"+serialValueDO.getMaxSerial()+"---- newmaxSerial---->"+maxSerial); - if(VciBaseUtil.getDouble(serialValueDO.getMaxSerial())<maxSerial){ + if(VciBaseUtil.getDouble(serialValueDO.getMaxSerial())<VciBaseUtil.getDouble(maxSerial)){ serialValueDO.setMaxSerial(String.valueOf(maxSerial)); DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO); editSerialValueList.add(serialValueDO); @@ -295,7 +320,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鏁版嵁锛�"+ addCodeDOs.stream().map(CodeAllCode::getId).collect(Collectors.toList())); + throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ codeAllCodes.stream().map(CodeAllCode::getId).collect(Collectors.toList())); } for (CodeAllCode codeAllCode : takeBack) { codeAllCode.setTs(new Date()); @@ -320,13 +345,6 @@ // try { mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList); - // 鎻愪氦浜嬪姟 - //transactionTemplate.getTransactionManager().commit(status); -// }catch (Exception e){ -// // 鍑虹幇寮傚父鏃跺洖婊氫簨鍔� -// transactionTemplate.getTransactionManager().rollback(status); -// } - } return codeList; }else { @@ -341,7 +359,7 @@ switchSecValue(secVO, secValueMap, classifyFullInfoBO, serialSecVOList, attrSecVOList, serialUnitList, secValueList); } //澶勭悊灞炴�х爜娈靛拰娴佹按鐮佹 - Map<String/**娴佹按鐮佹鐨勪富閿�**/, Map<String/**娴佹按渚濇嵁**/, Double>> lastMaxSerialValueMap = new HashMap<>(); + Map<String/**娴佹按鐮佹鐨勪富閿�**/, Map<String/**娴佹按渚濇嵁**/, String>> lastMaxSerialValueMap = new HashMap<>(); List<CodeAllCode> allCodeDOList = new ArrayList<>(); //宸茬粡瀛樺偍鐨勬渶澶ф祦姘村彿鐨勫唴瀹� @@ -366,7 +384,7 @@ switchAttrSecValue(attrSecVOList, cbo, thisSecValueList, attrSevIsSerialDepend, thisSerialUnitList); String serialUnitString = thisSerialUnitList.size() == 0 ? EMPTY_SERIAL_UNIT : thisSerialUnitList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE)); - switchSerialSecValue(serialSecVOList, attrSevIsSerialDepend, finalRuleVO, serialUnitString, maxSerialValueMap, thisSecValueList, lastMaxSerialValueMap, i == 0); + switchSerialSecValue(cbo,serialSecVOList, attrSevIsSerialDepend, finalRuleVO, serialUnitString, maxSerialValueMap, thisSecValueList, lastMaxSerialValueMap, i == 0); //缁勮缂栫爜鐨勫�� cbo.setId(thisSecValueList.stream().collect(Collectors.joining())); @@ -375,9 +393,9 @@ //鎶婄爜娈甸噷闈㈤兘鎵句竴涓嬫祦姘村彿 for (int j = 0; j < serialSecVOList.size(); j++) { CodeBasicSecVO secVO = serialSecVOList.get(j); - Double serialValue = lastMaxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>()).getOrDefault(serialUnitString, 0d); + String serialValue = lastMaxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>()).getOrDefault(serialUnitString, ""); if (serialValue != null) { - sb.append(String.valueOf(serialValue.longValue())).append(SERIAL_VALUE_SPACE); + sb.append(serialValue).append(SERIAL_VALUE_SPACE); } } //瑕佸瓨鍌ㄦ渶鍚庣殑鍏ㄩ儴allcode @@ -386,54 +404,57 @@ //澶勭悊鏈�澶ф祦姘� 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 -> { + 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())); + } - - //閫氳繃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(); + 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(); + } } } - } - if(takeBack.size()>0){ - codeAllCodeService.updateBatchById(takeBack); - } - codeAllCodeService.saveBatch(allCodeDOList); -// iCodeWupinService.saveBatch(dataCBOList); - mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList); + 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; + //} // batchCBO.getCreateCbos().stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmName())).forEach(s -> { // s.setLcStatus(statusMap.get(s.getOid())); // try { @@ -504,13 +525,27 @@ * @param lastMaxSerialValueMap 灏佽鍚� * @param firstData 鏄惁涓虹涓�鏉℃暟鎹� */ - private void switchSerialSecValue(List<CodeBasicSecVO> serialSecVOList,boolean attrSevIsSerialDepend, + private void switchSerialSecValue(BaseModel cbo, List<CodeBasicSecVO> serialSecVOList,boolean attrSevIsSerialDepend, CodeRuleVO ruleVO,String serialUnitString, Map<String/**鐮佹鐨勪富閿�**/,Map<String/**娴佹按渚濇嵁**/,CodeSerialValue>> maxSerialValueMap,List<String> thisSecValueList, - Map<String/**鐮佹鐨勪富閿�**/,Map<String/**娴佹按渚濇嵁**/, Double>> lastMaxSerialValueMap,boolean firstData){ + 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++) { CodeBasicSecVO secVO = serialSecVOList.get(j); + String secVOValue=""; + AtomicReference<String> newSerialUnitString= new AtomicReference<>(serialUnitString); + if(j==0){ + secVOValue=""; + newSerialUnitString.set(serialUnitString.replace("${" + secVO.getOid() + "}", secVOValue)); + }else{ + CodeBasicSecVO upSecVO =serialSecVOList.get(j-1); + secIdserialValueMap.forEach((key,vaule)->{ + newSerialUnitString.set(serialUnitString.replace("${"+key+"}", vaule)); + }); + } + if (attrSevIsSerialDepend || firstData) { //濡傛灉灞炴�х爜娈典篃鏄緷璧栵紝鍒欐瘡娆¢兘瑕佹煡璇紝濡傛灉灞炴�х爜娈典笉鏄緷璧栵紝鍒欏彧鏌ヨ涓�娆� // Map<String, String> conditionMap = new HashMap<>(); @@ -519,8 +554,9 @@ // //杩欎釜瀛楁鏄负浜嗚В鍐冲涓祦姘寸殑闂 // conditionMap.put("codeSecOid", secVO.getOid()); QueryWrapper<CodeSerialValue> codeSerialWrapper = new QueryWrapper<>(); + codeSerialWrapper.eq("codeRuleOid", ruleVO.getOid()); - codeSerialWrapper.eq("serialUnit", serialUnitString); + codeSerialWrapper.eq("serialUnit", newSerialUnitString.get()); codeSerialWrapper.eq("codeSecOid", secVO.getOid()); List<CodeSerialValue> serialValueDOS = serialValueMapper.selectList(codeSerialWrapper); if (!CollectionUtils.isEmpty(serialValueDOS)) { @@ -530,25 +566,41 @@ maxSerialValueMap.put(secVO.getOid(), unitSerialMap); } } - Double startValue = null; - if(maxSerialValueMap.containsKey(secVO.getOid()) && maxSerialValueMap.get(secVO.getOid()).containsKey(serialUnitString)){ - startValue = VciBaseUtil.getDouble(maxSerialValueMap.get(secVO.getOid()).get(serialUnitString).getMaxSerial()); + String serialString=""; + String thisSerialValue = ""; + String startValue = null; + if (maxSerialValueMap.containsKey(secVO.getOid()) && maxSerialValueMap.get(secVO.getOid()).containsKey(newSerialUnitString.get())) { + startValue = maxSerialValueMap.get(secVO.getOid()).get(newSerialUnitString.get()).getMaxSerial(); } - if(lastMaxSerialValueMap.containsKey(secVO.getOid()) && lastMaxSerialValueMap.get(secVO.getOid()).containsKey(serialUnitString)){ + if (lastMaxSerialValueMap.containsKey(secVO.getOid()) && lastMaxSerialValueMap.get(secVO.getOid()).containsKey(newSerialUnitString.get())) { //璇存槑澶氫釜鐢宠锛屼箣鍓嶅凡缁忓姞浜嗘祦姘村彿浜� - startValue = lastMaxSerialValueMap.get(secVO.getOid()).get(serialUnitString); + startValue = lastMaxSerialValueMap.get(secVO.getOid()).get(newSerialUnitString.get()); } - Double thisSerialValue = 0d; - if (startValue == null) { - //绗竴涓紪鐮� - thisSerialValue = VciBaseUtil.getDouble(secVO.getSerialStart()); - } else { - //娴佹按鍙疯偗瀹氭槸鏁板瓧 - thisSerialValue = startValue + (j + 1) * secVO.getSerialStep(); - } - //瑕佺湅鏄惁瓒呰繃鏈�澶х殑娴佹按鍊� - if (thisSerialValue >= secVO.getCodeFillLimit()) { - throw new VciBaseException("娴佹按鍙峰凡缁忚秴杩囧厑璁哥殑鏈�澶ф祦姘村�納0}",new String[]{secVO.getCodeFillLimit().toString()}); + if(StringUtils.isNotBlank(secVO.getCustomCodeSerialClass())){//鑷畾涔夋祦姘村鐞� + String currentFlowValue=startValue; + CodeCustomSerialDTO codeCustomSerialDTO=new CodeCustomSerialDTO(); + codeCustomSerialDTO.setSerialUnitString(newSerialUnitString.get()); + codeCustomSerialDTO.setSerialCodeCodeBasicSec(secVO); + codeCustomSerialDTO.setCurrentFlowValue(startValue); + codeCustomSerialDTO.setCodeBasicSecVOList(ruleVO.getSecVOList()); + codeCustomSerialDTO.setCodeRuleOid(ruleVO.getOid()); + codeCustomSerialDTO.setBaseModel(cbo); + thisSerialValue=customCodeSerial(secVO.getCustomCodeSerialClass(),codeCustomSerialDTO); + log.info(secVO.getCustomCodeSerialClassText()+"---->"+thisSerialValue); + }else { + Double newThisSerialValue = 0d; + if (startValue == null) { + //绗竴涓紪鐮� + newThisSerialValue = VciBaseUtil.getDouble(secVO.getSerialStart()); + } else { + //娴佹按鍙疯偗瀹氭槸鏁板瓧 + newThisSerialValue = Double.parseDouble(startValue) + (j + 1) * secVO.getSerialStep(); + } + //瑕佺湅鏄惁瓒呰繃鏈�澶х殑娴佹按鍊� + if (newThisSerialValue >= secVO.getCodeFillLimit()) { + throw new VciBaseException("娴佹按鍙峰凡缁忚秴杩囧厑璁哥殑鏈�澶ф祦姘村�納0}", new String[]{secVO.getCodeFillLimit().toString()}); + } + thisSerialValue=String.valueOf(newThisSerialValue.intValue()); } //瑕佺湅琛ヤ綅鐨勫唴瀹� Integer fillLength = VciBaseUtil.getInt(secVO.getCodeFillLength()); @@ -556,8 +608,9 @@ //闃叉鍦ㄦ坊鍔犵殑鍦版柟娌℃湁鎺у埗姝g‘ fillLength = VciBaseUtil.getInt(secVO.getCodeSecLength()); } - String serialString = String.valueOf(thisSerialValue.longValue()); + serialString = thisSerialValue; serialString = fillString(fillLength, OsCodeFillTypeEnum.forValue(secVO.getCodeFillType()), serialString, secVO.getCodeFillSeparator()); + for (int z = 0; z < thisSecValueList.size(); z++) { String secValue = thisSecValueList.get(z); if (secValue.equalsIgnoreCase("${" + secVO.getOid() + "}")) { @@ -565,13 +618,36 @@ thisSecValueList.set(z, joinPreffixAndSuffix(secVO, serialString)); } } - Map<String, Double> unitSerialMap = lastMaxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>()); - unitSerialMap.put(serialUnitString, thisSerialValue); + secIdserialValueMap.put(secVO.getOid(),thisSerialValue);//璁板綍娴佹按鐮佹褰撳墠鐨勫�� + Map<String, String> unitSerialMap = lastMaxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>()); + unitSerialMap.put(newSerialUnitString.get(), String.valueOf(thisSerialValue)); lastMaxSerialValueMap.put(secVO.getOid(),unitSerialMap); } } } - + private String customCodeSerial(String className, CodeCustomSerialDTO codeCustomSerialDTO){ + String result = ""; + try { + Class classInstance=Class.forName(className); + Object obj =classInstance.newInstance(); + Method method= classInstance.getMethod("serialGenerate",CodeCustomSerialDTO.class); + method.setAccessible(Boolean.TRUE); + //method.invoke(obj); + Object o= method.invoke(obj,codeCustomSerialDTO); + result= Func.isEmpty(o) ?"":o.toString(); + } catch (ClassNotFoundException e) { + throw new VciBaseException("鏈壘鍒拌嚜瀹氫箟娴佹按绠楁硶绫绘枃浠�"); + } catch (InvocationTargetException e) { + throw new VciBaseException("鎵ц鑷畾涔夋祦姘寸畻娉曞鐞嗘柟娉曞嚭鐜板紓甯�"); + } catch (NoSuchMethodException e) { + throw new VciBaseException("鏈壘鍒拌嚜瀹氫箟娴佹按绠楁硶澶勭悊鏂规硶"); + } catch (IllegalAccessException e) { + throw new VciBaseException("鎵ц鑷畾涔夋祦姘寸畻娉曞鐞嗘柟娉曞嚭鐜板紓甯�"); + } catch (InstantiationException e) { + e.printStackTrace(); + } + return result; + } /** * 杞崲鐮佸�肩殑鍐呭 * @param secVO 鐮佹鐨勫唴瀹� @@ -769,7 +845,7 @@ * @param maxSerialValueMap 渚濇嵁瀛樺偍鐨勬渶澶ф祦姘寸殑鍐呭 */ private void saveSerialValue(CodeRuleVO ruleVO, - Map<String/**鐮佹鐨勪富閿�**/,Map<String, Double>> lastMaxSerialValueMap, + Map<String/**鐮佹鐨勪富閿�**/,Map<String, String>> lastMaxSerialValueMap, Map<String/**鐮佹鐨勪富閿�**/,Map<String, CodeSerialValue>> maxSerialValueMap){ List<CodeSerialValue> editSerialValueDOList = new ArrayList<>(); List<CodeSerialValue> addSerialValueDOList = new ArrayList<>(); diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml index 76c9657..97c678e 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml @@ -56,6 +56,7 @@ <result property="codeFillFlag" column="CODEFILLFLAG" jdbcType="VARCHAR"/> <result property="customCodeSerialClass" column="CUSTOMCODESERIALCLASS" jdbcType="VARCHAR"/> <result property="customCodeSerialClassText" column="CUSTOMCODESERIALCLASSTEXT" jdbcType="VARCHAR"/> + <result property="customCodeSerialType" column="CUSTOMCODESERIALTYPE" jdbcType="VARCHAR"/> <result property="matchClassifyValueFlag" column="MATCHCLASSIFYVALUEFLAG" jdbcType="VARCHAR"/> <result property="parentClassifySecOid" column="PARENTCLASSIFYSECOID" jdbcType="VARCHAR"/> <result property="parentClassifySecText" column="b__name" jdbcType="VARCHAR"/> -- Gitblit v1.9.3