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