From bce3fcf05020405e33199706c3d91e9b9a71bd39 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期五, 01 十二月 2023 12:42:05 +0800
Subject: [PATCH] 关键属性查重特殊字符转义添加

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java |  528 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 471 insertions(+), 57 deletions(-)

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 0d7fb7a..094677d 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
@@ -1,5 +1,6 @@
 package com.vci.ubcs.code.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -9,8 +10,10 @@
 import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
 import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
 import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
+import com.vci.ubcs.code.dto.CodeBZApplyDTO;
 import com.vci.ubcs.code.dto.CodeDeleteBatchDTO;
 import com.vci.ubcs.code.dto.CodeOrderDTO;
+import com.vci.ubcs.code.dto.CodeOrderSecDTO;
 import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
 import com.vci.ubcs.code.entity.*;
 import com.vci.ubcs.code.enumpack.*;
@@ -22,6 +25,7 @@
 import com.vci.ubcs.code.vo.pagemodel.UITablePageVO;
 import com.vci.ubcs.code.vo.pagemodel.*;
 import com.vci.ubcs.code.wrapper.BaseMdodelWrapper;
+import com.vci.ubcs.code.wrapper.CodeAllcodeWrapper;
 import com.vci.ubcs.flow.core.dto.FlowStatusDTO;
 import com.vci.ubcs.flow.core.feign.IMDMIFlowAttrClient;
 import com.vci.ubcs.flow.core.vo.ProcessStageAttrVO;
@@ -39,6 +43,8 @@
 import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
 import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
+import com.vci.ubcs.starter.util.SaveLogUtil;
+import com.vci.ubcs.starter.util.SpecialCharacterConverter;
 import com.vci.ubcs.starter.util.UBCSSqlKeyword;
 import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
 import com.vci.ubcs.starter.web.constant.RegExpConstant;
@@ -59,13 +65,16 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.annotation.OperateLog;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cache.Cache;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -81,7 +90,7 @@
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
 import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.*;
 import java.util.stream.Collectors;
 
 import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
@@ -97,6 +106,66 @@
 @Service
 public class MdmEngineServiceImpl implements MdmEngineService {
 
+	/**
+	 * 澶氱嚎绋嬫柟寮忔壒閲忔墽琛屽紑鍚嚎绋嬫睜鐨勬�绘暟
+	 */
+	@Value("${batchadd.thread_num:10}")
+	private Integer THREAD_NUM;
+
+	/**
+	 * 鍗曟sql鐨勬渶澶氬鍏ユ暟閲�
+	 */
+	@Value("${batchadd.single_maxnum:200}")
+	private Integer MAX_IMPORT_NUM;
+
+	/**
+	 * 鏄惁寮�鍚绾跨▼鏂瑰紡瀵煎叆鍘嗗彶鏁版嵁
+	 */
+	@Value("${batchadd.is_thread_import:false}")
+	private boolean IS_THREAD_IMPORT;
+
+	/***
+	 * 鎿嶄綔绫诲瀷
+	 */
+	@Value("${bzApply.operationType:operationType}")
+	private String operationType;
+	/***
+	 * 鏄惁绯诲垪
+	 */
+	@Value("${bzApply.isSeries:isSeries}")
+	private String isSeries;
+	/***
+	 *鍙戝竷鏃堕棿
+	 */
+	@Value("${bzApply.releaseTime:releaseTime}")
+	private String releaseTime;
+	/***
+	 * 婧愭爣鍑嗗彿
+	 */
+	@Value("${bzApply.oldCode:oldCode}")
+	private String oldCode;
+
+	/***
+	 * 绯诲垪娴佹按
+	 */
+	@Value("${bzApply.seriesFlow:seriesFlow}")
+	private String seriesFlow;
+	/***
+	 * 鏄惁鍙樻洿绯诲垪
+	 */
+	@Value("${bzApply.isEditSeries:isEditSeries}")
+	private String isEditSeries;
+	/***
+	 * 鎺у埗鏄惁鍐欏叆鍊肩殑鐮佹鍚嶇О
+	 */
+	@Value("${bzApply.secName:绯诲垪鍙穧")
+	private String secName;
+
+	/***
+	 * 鎺у埗鏄惁鍐欏叆鍊肩殑鐮佹鍚嶇О
+	 */
+	@Value("${bzApply.yearSecName:骞翠唬鍙穧")
+	private String yearSecName;
 
     /**
      * 妯℃澘鐨勬湇鍔�
@@ -147,13 +216,11 @@
     @Autowired
     private FormulaServiceImpl formulaService;
 
-
     /**
      * 瀵筼md涓彁渚涚殑feign鎺ュ彛杩涜璋冪敤锛屼互鍙婂鐞嗙浉鍏抽�昏緫
      */
     @Autowired
     ICodeReferBtmTypeService codeReferBtmTypeService;
-
 
     /**
      * 鐩镐技椤规煡璇㈣鍒�
@@ -284,8 +351,15 @@
 	 */
 	@Autowired
 	private IMDMIFlowAttrClient imdmiFlowAttrClient;
-//	@Autowired
-//	private CodeOsbtmtypeMapper codeOsbtmtypeMapper;----
+
+	//	@Autowired
+	//	private CodeOsbtmtypeMapper codeOsbtmtypeMapper;
+
+	/**
+	 * 鏃ュ織淇濆瓨宸ュ叿绫�
+	 */
+	@Autowired
+	private SaveLogUtil saveLogUtil;
 
 
     /**
@@ -348,39 +422,52 @@
     @Transactional
     @Override
     public void changeStatus(BaseModelDTO baseModelDTO) {
-        VciBaseUtil.alertNotNull(baseModelDTO, "鏁版嵁淇℃伅", baseModelDTO.getOid(), "涓婚敭", baseModelDTO.getBtmname(), "涓氬姟绫诲瀷", baseModelDTO.getLcStatus(), "鐩爣鐘舵��");
-        List<String> oids = VciBaseUtil.str2List(baseModelDTO.getOid());
-        List<BaseModel> baseModels = new ArrayList<>();
-        baseModels = selectByTypeAndOid(baseModelDTO.getBtmname(), baseModelDTO.getOid());
-        if (baseModels.size() == 0) {
-            throw new VciBaseException("鏈煡璇㈠埌鐩稿叧鏁版嵁銆�");
-        }
-        //杩橀渶瑕佷慨鏀筧llCode鐨勭敓鍛藉懆鏈�
-        QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
-        allCodeWrapper.eq("createcodebtm", baseModelDTO.getBtmname());
-        allCodeWrapper.in("createcodeoid", oids);
-        List<CodeAllCode> codeCbos = codeAllCodeService.selectByWrapper(allCodeWrapper);// 鍥炴敹闇�瑕佷笟鍔℃暟鎹垹闄�
-        if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) {
-            R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(baseModelDTO.getBtmname()));
-            if (!listR.isSuccess() || listR.getData().size() == 0) {
-                throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
-            }
-			// 鐩存帴鍒犻櫎锛屼笉缁欑姸鎬�
-			commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()));
-			// commonsMapper.updateByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()),CodeDefaultLC.TASK_BACK.getValue());
-        } else {
-            for (BaseModel baseModel : baseModels) {
-                baseModel.setLcStatus(baseModelDTO.getLcStatus());
-            }
-			R r = updateBatchByBaseModel(baseModelDTO.getBtmname(), baseModels);
-			if(!r.isSuccess()){
-				throw new VciBaseException("鏇存柊鏁版嵁鍑洪敊锛岄噸璇曪紒"+r.getMsg());
+		try {
+			VciBaseUtil.alertNotNull(baseModelDTO, "鏁版嵁淇℃伅", baseModelDTO.getOid(), "涓婚敭", baseModelDTO.getBtmname(), "涓氬姟绫诲瀷", baseModelDTO.getLcStatus(), "鐩爣鐘舵��");
+			List<String> oids = VciBaseUtil.str2List(baseModelDTO.getOid());
+			List<BaseModel> baseModels = new ArrayList<>();
+			baseModels = selectByTypeAndOid(baseModelDTO.getBtmname(), baseModelDTO.getOid());
+			if (baseModels.size() == 0) {
+				throw new VciBaseException("鏈煡璇㈠埌鐩稿叧鏁版嵁銆�");
 			}
+			//杩橀渶瑕佷慨鏀筧llCode鐨勭敓鍛藉懆鏈�
+			QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
+			allCodeWrapper.eq("createcodebtm", baseModelDTO.getBtmname());
+			allCodeWrapper.in("createcodeoid", oids);
+			List<CodeAllCode> codeCbos = codeAllCodeService.selectByWrapper(allCodeWrapper);// 鍥炴敹闇�瑕佷笟鍔℃暟鎹垹闄�
+			if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) {
+				R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(baseModelDTO.getBtmname()));
+				if (!listR.isSuccess() || listR.getData().size() == 0) {
+					throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+				}
+				// 鐩存帴鍒犻櫎锛屼笉缁欑姸鎬�
+				commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()));
+				// commonsMapper.updateByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()),CodeDefaultLC.TASK_BACK.getValue());
+			} else {
+				for (BaseModel baseModel : baseModels) {
+					baseModel.setLcStatus(baseModelDTO.getLcStatus());
+				}
+				R r = updateBatchByBaseModel(baseModelDTO.getBtmname(), baseModels);
+				if(!r.isSuccess()){
+					throw new VciBaseException("鏇存柊鏁版嵁鍑洪敊锛岄噸璇曪紒"+r.getMsg());
+				}
+			}
+			for (CodeAllCode codeCbo : codeCbos) {
+				codeCbo.setLcStatus(baseModelDTO.getLcStatus());
+			}
+			codeAllCodeService.updateBatchById(codeCbos);
+
+			//璁板綍鏃ュ織淇℃伅
+			saveLogUtil.operateLog(
+				CodeDefaultLC.getTextByValue(baseModelDTO.getLcStatus()),
+				false,
+				JSON.toJSONString(baseModels)
+			);
+		}catch (Exception e){
+			// 鎻掑叆鏇存敼鏃ュ織璁板綍
+			saveLogUtil.operateLog(CodeDefaultLC.getTextByValue(baseModelDTO.getLcStatus()),true,e.getMessage());
+			throw e;
 		}
-        for (CodeAllCode codeCbo : codeCbos) {
-            codeCbo.setLcStatus(baseModelDTO.getLcStatus());
-        }
-        codeAllCodeService.updateBatchById(codeCbos);
     }
 
 	/**
@@ -411,7 +498,7 @@
      * @param orderDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭
      * @return 杩斿洖缂栫爜鐨勫唴瀹�
      */
-    private String addSaveCode(CodeOrderDTO orderDTO,boolean authUser) throws Exception {
+	private String addSaveCode(CodeOrderDTO orderDTO, boolean authUser) throws Exception {
         VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭",
                 orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�");
         CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
@@ -681,14 +768,16 @@
 
         //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
         if (!CollectionUtils.isEmpty(conditionMap)) {
-			conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'");
+			// TODO: 鍚屼竴涓簱鍒ら噸涓嶉渶瑕佸尯鍒嗗垎绫籵id
+			// conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'");
 //			final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
             R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId()));
 //				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
             if (!listR.isSuccess() || listR.getData().size() == 0) {
                 throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
             }
-            final String[] sql = {"select count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
+            //final String[] sql = {"select count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
+			final String[] sql = {"select id from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
             conditionMap.forEach((key, value) -> {
 				if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)) {
 					sql[0] += " and " + key + " is null";
@@ -703,11 +792,17 @@
                 sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
             }
             sql[0] += " and lastR = '1' and lastV = '1' ";
+			// 鑾峰彇涓嶅弬涓庢牎楠岀殑鍒嗙被oid
+			String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
+			if(Func.isNotEmpty(isParticipateCheckOids)){
+				sql[0] += " and codeclsfid not in(" + isParticipateCheckOids + ")";
+			}
 //			if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
-            if (Integer.parseInt(commonsMapper.selectById(sql[0]).get(0)) > 0) {
+			List<String> repeatData = commonsMapper.selectList(sql[0]);
+			if (!repeatData.isEmpty()) {
                 String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}";
                 String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"};
-                throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs);
+                throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇璇ユ暟鎹凡缁忎笌绯荤粺涓紪鍙蜂负"+repeatData.stream().collect(Collectors.joining(","))+"鐨勬暟鎹噸澶嶃�傝淇!銆�" + ruleInfoMsg, objs);
             }
         }
     }
@@ -799,6 +894,255 @@
 		return R.data("false");
 	}
 
+	/***
+	 *
+	 * @param codeBZApplyDTO 缂栫爜鐢宠鐩稿叧鐨勪俊鎭紝闇�瑕佹湁灞炴�у拰鐮佹鐩稿叧鐨勪俊鎭�
+	 * @return
+	 * @throws Exception
+	 */
+	@Override
+	public String addSaveBZ(CodeBZApplyDTO codeBZApplyDTO) throws Exception {
+		return addSaveBZCode(codeBZApplyDTO,true);
+	}
+
+	/**
+	 * 鏍囧噯鐢宠鍜屼慨璁㈢敤
+	 *
+	 * @param codeBZApplyDTO 缂栫爜鐢宠鐩稿叧鐨勪俊鎭紝闇�瑕佹湁灞炴�у拰鐮佹鐩稿叧鐨勪俊鎭�
+	 * @param authUser
+	 * @return
+	 */
+	public String addSaveBZCode(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception {
+		String code="";
+		VciBaseUtil.alertNotNull(codeBZApplyDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭",
+			codeBZApplyDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", codeBZApplyDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�");
+		//鎿嶄綔绫诲瀷
+		if(StringUtils.isBlank(codeBZApplyDTO.getOperationType())){
+			String operationTypeValue=codeBZApplyDTO.getData().get(operationType);
+			codeBZApplyDTO.setOperationType(operationTypeValue);
+		}
+		//鏄惁绯诲垪
+		if(!codeBZApplyDTO.isSeries()){
+			boolean isSeriesValue=codeBZApplyDTO.getData().get(isSeries).equals("true")?true:false;
+			codeBZApplyDTO.setSeries(isSeriesValue);
+		}
+		//鍘熸爣鍑嗗彿
+		if(StringUtils.isBlank(codeBZApplyDTO.getOldCode())){
+			String oldCodeValue=codeBZApplyDTO.getData().get(oldCode);
+			codeBZApplyDTO.setOldCode(oldCodeValue);
+		}
+		//绯诲垪娴佹按
+		if(StringUtils.isBlank(codeBZApplyDTO.getSeriesFlow())){
+			String seriesFlowValue=codeBZApplyDTO.getData().get(seriesFlow);
+			codeBZApplyDTO.setSeriesFlow(seriesFlowValue);
+		}
+		//鍙戝竷鏃堕棿
+		if(StringUtils.isBlank(codeBZApplyDTO.getReleaseTime())){
+			String releaseTimeValue=codeBZApplyDTO.getData().get(releaseTime);
+			codeBZApplyDTO.setReleaseTime(releaseTimeValue);
+		}
+		//鏄惁鍙樻洿绯诲垪
+		if(!codeBZApplyDTO.isEditSeries()){
+			boolean isEditSeriesValue=codeBZApplyDTO.getData().get(isEditSeries).equals("true")?true:false;
+			codeBZApplyDTO.setEditSeries(isEditSeriesValue);
+		}
+		VciBaseUtil.alertNotNull(codeBZApplyDTO.getOperationType(), "鎿嶄綔绫诲瀷",
+			codeBZApplyDTO.isSeries(), "鏄惁绯诲垪", codeBZApplyDTO.getReleaseTime(), "鍙戝竷鏃堕棿");
+
+		if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_FORMULATE.getValue())){//鍒跺畾
+			code=	addsaveDataBZ(codeBZApplyDTO,authUser);
+		}else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_AMENDMENT.getValue())){//淇
+			VciBaseUtil.alertNotNull(codeBZApplyDTO.getOldCode(), "婧愭爣鍑嗗彿");
+			code=	amendmentDataBZ(codeBZApplyDTO,authUser);
+			createChangeOder(code,codeBZApplyDTO,authUser);
+		}else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_EDIT.getValue())){//鏇存敼
+			code=	amendmentDataBZ(codeBZApplyDTO,authUser);
+			createChangeOder(code,codeBZApplyDTO,authUser);
+		}else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_DISABLE.getValue())) {//浣滃簾
+			code=	amendmentDataBZ(codeBZApplyDTO,authUser);
+			createChangeOder(code,codeBZApplyDTO,authUser);
+		}else if(codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_AMENDMENT.getValue())) {//澶囨煡
+			code=	amendmentDataBZ(codeBZApplyDTO,authUser);
+			createChangeOder(code,codeBZApplyDTO,authUser);
+		}
+		return code;
+	}
+
+	/***
+	 * 淇
+	 * @param codeBZApplyDTO
+	 * @param authUser
+	 * @return
+	 */
+	private String amendmentDataBZ(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception {
+		CodeOrderDTO orderDTO=new CodeOrderDTO();
+		BeanUtil.convert(codeBZApplyDTO,orderDTO);
+		CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(codeBZApplyDTO.getCodeRuleOid());
+		Map<String, CodeBasicSecVO> codeCodeBasicSecMap = ruleVO.getSecVOList().stream().filter(s -> StringUtils.isNotBlank(s.getOid())).collect(Collectors.toMap(s -> s.getOid().toLowerCase(Locale.ROOT), t -> t));
+		VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭",
+			orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�");
+		String oldCode=codeBZApplyDTO.getOldCode();//婧愭爣鍑嗙紪鐮�
+		String releaseTime=codeBZApplyDTO.getReleaseTime();
+		List<CodeOrderSecDTO> secDTOS=	orderDTO.getSecDTOList();
+		LinkedList<CodeOrderSecDTO> newSecDTOList=new LinkedList<>();
+		changeCodeOrderSecDTO(ruleVO,secDTOS,oldCode,newSecDTOList);//鏍规嵁瑕佹眰閲嶆柊绠楃爜娈电爜鍊�
+		if(!codeBZApplyDTO.isEditSeries()){//鍙樻洿涓烘爣鍑�
+			//if(!codeBZApplyDTO.isSeries()){//濡傛灉鏄〃鍑嗭紝鍒欓渶瑕佸皢绯诲垪濂芥祦姘寸疆涓簄ull
+				//鍥犱负鏄爣鍑嗗垯鎺у埗鐮佹涓殑绯诲垪娴佹按鐮佹鍊间负绌�
+				newSecDTOList.stream().forEach(codeOrderSecDTO -> {
+					if(codeCodeBasicSecMap.containsKey(codeOrderSecDTO.getSecOid())&&codeCodeBasicSecMap.get(codeOrderSecDTO.getSecOid()).getName().equals(secName)){
+						codeOrderSecDTO.setSecValue("");
+					}
+				});
+			//}
+			orderDTO.setSecDTOList(newSecDTOList);
+			return createDataBZ(orderDTO,ruleVO,authUser);
+		}else{//鍙樻洿涓虹郴鍒�.鍒欐寜鐓ч�昏緫鍘诲鐞�
+			orderDTO.setSecDTOList(newSecDTOList);
+			return createDataBZ(orderDTO,ruleVO,authUser);
+		}
+	}
+	private String createDataBZ(CodeOrderDTO orderDTO,	CodeRuleVO ruleVO,boolean authUser) throws Exception {
+		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+		CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+		//1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈�
+		checkSecValueOnOrder(ruleVO, orderDTO);
+		//2.鍒ゆ柇蹇呰緭椤�
+		checkRequiredAttrOnOrder(templateVO, orderDTO);
+		//3.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
+		switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
+		//4.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
+		switchComponentAttrOnOrder(templateVO, orderDTO);
+		//5.鏍¢獙瑙勫垯
+		checkVerifyOnOrder(templateVO, orderDTO);
+		//6.鍏抽敭灞炴��
+		checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
+		//7.鏋氫妇杞崲
+		checkEnumOnOrder(templateVO, orderDTO);
+		//8.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
+		switchDateAttrOnOrder(templateVO, orderDTO);
+		//9.鐢熸垚缂栫爜鐨勪俊鎭� 锛屽垵濮嬪寲涓氬姟绫诲瀷锛氱紦瀛樺厛鍙栨秷锛屽洜涓虹増鏈鍒欎細鍑虹幇鍙樺姩鐨勬儏鍐垫墍浠ユ棤娉曚娇鐢ㄧ紦瀛�
+		// BaseModel cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmTypeId());
+		BaseModel cbo = createBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId().trim().toLowerCase());
+		//榛樿鐨勫睘鎬ч兘涓嶇敤浠庡墠绔嫹璐�
+		//璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭
+		copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, false);
+		cbo.setOid(VciBaseUtil.getPk());
+		cbo.setRevisionOid(VciBaseUtil.getPk());
+		cbo.setNameOid(VciBaseUtil.getPk());
+		cbo.setCreateTime(new Date());
+		cbo.setLastModifyTime(new Date());
+		//cbo.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));銆�
+		if(authUser) {
+			// 瑕佹眰鏄剧ず璐﹀彿锛屾墍浠ュ仛浜嗘洿鏀�
+			cbo.setCreator(String.valueOf(AuthUtil.getUser().getAccount()));
+			cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount()));
+		}else{
+			cbo.setCreator(orderDTO.getCreator());
+			cbo.setLastModifier(orderDTO.getLastModifier());
+		}
+		cbo.setTenantId(AuthUtil.getTenantId());
+		if(StringUtils.isNotBlank(orderDTO.getLcStatus())||StringUtils.isNotBlank(orderDTO.getData().get("lcStatus"))){
+			cbo.setLcStatus(StringUtils.isNotBlank(orderDTO.getLcStatus())?orderDTO.getLcStatus():orderDTO.getData().get("lcStatus"));
+		}
+		//TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁�
+		cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName());
+		//end -- modify by lihang @20220407
+		List<BaseModel> cboList = new ArrayList<>();
+		//澶囨敞
+		cbo.setDescription(orderDTO.getDescription());
+		cboList.add(cbo);
+		List<String> codeList = productCodeService.productCodeAndSaveDataBZ(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), cboList);
+		batchSaveSelectChar(templateVO, cboList);
+		return codeList.size() > 0 ? codeList.get(0) : "";
+
+	}
+	/***
+	 * 鏍规嵁缂栧彿鑾峰彇鐮佹鐮佸��
+	 * @param secDTOList
+	 */
+	private void changeCodeOrderSecDTO(CodeRuleVO ruleVO,List<CodeOrderSecDTO> secDTOList,String oldCode,LinkedList<CodeOrderSecDTO> newSecDTOList) throws Exception {
+
+		//杩橀渶瑕佷慨鏀筧llCode鐨勭敓鍛藉懆鏈�
+		QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
+		allCodeWrapper.in("id", VciBaseUtil.str2List(oldCode));
+		Map<String,String> secDTOMap=secDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), t -> t.getSecValue(),(o1, o2)->o2));
+		List<CodeAllCode>codeAllcodeList=codeAllCodeService.selectByWrapper(allCodeWrapper);
+		if(!CollectionUtils.isEmpty(codeAllcodeList)){
+			String codeDelimit=codeAllcodeList.get(0).getCodeDelimit();
+			String[] secValues=StringUtils.splitByWholeSeparatorPreserveAllTokens(codeDelimit,SERIAL_VALUE_SPACE);
+			//VciBaseUtil.str2List()
+			for (int i=0; i<ruleVO.getSecVOList().size();i++){
+				CodeBasicSecVO codeBasicSecVO=ruleVO.getSecVOList().get(i);
+				CodeOrderSecDTO codeOrderSecDTO=new CodeOrderSecDTO();
+				String secValue=secValues[i];
+				boolean isRoman=VciBaseUtil.isRoman(secValue);
+				if(isRoman){
+					continue;
+				}
+				if(secDTOMap.containsKey(codeBasicSecVO.getOid())){
+					secValue=	secDTOMap.get(codeBasicSecVO.getOid())	;
+				}
+				if(StringUtils.isNotBlank(secValue)) {
+					codeOrderSecDTO.setSecOid(codeBasicSecVO.getOid());
+					codeOrderSecDTO.setSecValue(secValue);
+					newSecDTOList.add(codeOrderSecDTO);
+				}
+			}
+		}else{
+			throw new Exception("鏍规嵁鍘熸爣鍑嗙紪鍙凤紝鍦ㄧ郴缁熶腑鏈煡璇㈠埌鐩稿簲鐨勪俊鎭�");
+		}
+	}
+	/***
+	 * 鍒跺畾锛屽垯涓嶉渶瑕佷骇鐢熸洿鏀瑰崟鐩存帴鐢熸垚缂栫爜
+	 * @param codeBZApplyDTO
+	 * @param authUser
+	 * @return
+	 */
+	private String addsaveDataBZ(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception {
+		String code="";
+		CodeOrderDTO orderDTO=new CodeOrderDTO();
+		BeanUtil.convert(codeBZApplyDTO,orderDTO);
+		CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(codeBZApplyDTO.getCodeRuleOid());
+		Map<String, CodeBasicSecVO> codeCodeBasicSecMap = ruleVO.getSecVOList().stream().filter(s -> StringUtils.isNotBlank(s.getOid())).collect(Collectors.toMap(s -> s.getOid(), t -> t));
+		//鏄惁鏄爣鍑�,涓嶆槸鏍囧噯鐨勪笉浼氬幓绠�
+		if(!codeBZApplyDTO.isSeries()){
+			//鍥犱负鏄爣鍑嗗垯鎺у埗鐮佹涓殑绯诲垪娴佹按鐮佹鍊间负绌�
+			orderDTO.getSecDTOList().stream().forEach(codeOrderSecDTO -> {
+				if(codeCodeBasicSecMap.containsKey(codeOrderSecDTO.getSecOid())&&codeCodeBasicSecMap.get(codeOrderSecDTO.getSecOid()).getName().equals(secName)){
+					codeOrderSecDTO.setSecValue("");
+				}
+			});
+		}
+		VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭",
+			orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�");
+		return createDataBZ(orderDTO,ruleVO,authUser);
+	}
+
+	/***
+	 * 鏇存敼鍗曠殑鍒涘缓
+	 * @param code
+	 * @param codeBZApplyDTO
+	 * @param authUser
+	 * @return
+	 */
+	private String createChangeOder(String code,CodeBZApplyDTO codeBZApplyDTO, boolean authUser){
+
+		return "";
+
+	}
+	/***
+	 * 闆嗘垚鍙彉鐮佹鐢宠鎺ュ彛
+	 * @param codeBZApplyDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭
+	 * @param    authUser 鏄惁鐢ㄧ櫥褰曠敤鎴疯褰�
+	 * @return
+	 * @throws Exception
+	 */
+	@Override
+	public String addSaveBZCodeNotauthUser(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception {
+		return	addSaveBZCode(codeBZApplyDTO,authUser);
+	}
+
 	/**
      * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞
      *
@@ -850,13 +1194,13 @@
                     //涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
                     temp = "%s";
                 }
-                queryKey = String.format(temp, "t." + attrId);
-                queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'");
+                queryKey = String.format(temp, "nvl("+ "t." + attrId +",'/')");
+                queryValue = String.format(temp, "'" + (trim ? SpecialCharacterConverter.escapeSpecialCharacters(value.trim()):SpecialCharacterConverter.escapeSpecialCharacters(value)) + "'");
                 conditionMap.put(queryKey, queryValue);
             } else {
 				if(StringUtils.isNotBlank(value)) {
 					//涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅
-					conditionMap.put("t." + attrId, "'" + value + "'");
+					conditionMap.put("nvl("+ "t." + attrId+",'/')", "'" + SpecialCharacterConverter.escapeSpecialCharacters(value) + "'");
 				}else{
 					conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL);
 				}
@@ -956,10 +1300,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());
                 }
 
             }
@@ -974,7 +1318,6 @@
             logger.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e);
         }
     }
-
 
     /**
      * 鍒濆鍖栦笟鍔$被鍨�
@@ -1774,7 +2117,6 @@
         }
     }
 
-
     /**
      * 鏍规嵁妯℃澘灞炴�х敓鎴愮浉搴旂殑sql淇℃伅
      *
@@ -1940,6 +2282,8 @@
         String sqlHasPage = pageHelper.getLimit() > 0 ? ("select * from (select A.*,rownum RN from (" + sql + whereSubfixForPage) : sql;
         String sqlCount = "select count(1) from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE))
                 + (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
+		String sqlId = "select t.ID from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE))
+			+ (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
         CodeTemplateAttrSqlBO sqlBO = new CodeTemplateAttrSqlBO();
         sqlBO.setTableName(tableName);
         sqlBO.setJoinTable(joinTableList);
@@ -1948,9 +2292,9 @@
         sqlBO.setSqlHasPage(sqlHasPage);
         sqlBO.setSqlCount(sqlCount);
         sqlBO.setSqlUnPage(sql);
+		sqlBO.setSqlId(sqlId);
         return sqlBO;
     }
-
 
     /**
      * 缁勫悎鏌ヨ鏉′欢鐨剆ql
@@ -2130,7 +2474,6 @@
 				return getSqlByValue(key, value, attrVOMap,btmType);
 			}
 		}*/
-
     }
 
     /**
@@ -2387,6 +2730,7 @@
         cbo.setLastModifyTime(new Date());
         cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount()));
 		R r = updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), Collections.singletonList(cbo));
+
 		if(!r.isSuccess()){
 			throw new ServiceException(r.getMsg());
 		}
@@ -2754,17 +3098,25 @@
         cbo.setName(orderDTO.getName());
         //鏁版嵁鐨勬椂鍊欙紝缂栫爜鏄笉鍙樼殑
         cbo.setCreateTime(cbo.getCreateTime());
+		cbo.setCreator(cbo.getCreator());
         cbo.setLastModifyTime(cbo.getLastModifyTime());
 		cbo.setTenantId(AuthUtil.getTenantId());
 		oldCbo.setLastV("0");
 		oldCbo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount()));
 		oldCbo.setLastModifyTime(new Date());
         try {
+			// 淇敼鐗堟鍙�
 			updateBatchByBaseModel(oldCbo.getBtmname(), Collections.singletonList(oldCbo));
+			// 鎻掑叆鏂扮殑鏁版嵁
             insertBatchByType(cbo.getBtmname(), Collections.singletonList(cbo));
-        } catch (Exception vciError) {
-            throw new VciBaseException("鏁版嵁鏇存敼淇濆瓨鍑洪敊浜�", new String[0], vciError);
-        }
+			// 璁板綍鏁版嵁鏇存敼鏃ュ織
+			saveLogUtil.operateLog("鏁版嵁鏇存敼",false, StringUtil.format("{}\n淇敼涓�:\n{}",JSON.toJSONString(Collections.singletonList(oldCbo)),JSON.toJSONString(Collections.singletonList(cbo))));
+		} catch (Exception vciError) {
+			// 璁板綍鏁版嵁鏇存敼鎶ラ敊鏃剁殑鏃ュ織
+			saveLogUtil.operateLog("鏁版嵁鏇存敼",true,vciError.getMessage());
+			throw new VciBaseException("鏁版嵁鏇存敼淇濆瓨鍑洪敊浜�", new String[0], vciError);
+		}
+
         batchSaveSelectChar(templateVO, Collections.singletonList(cbo));
     }
 
@@ -3356,7 +3708,6 @@
         return getTableDefineByTemplateVO(templateService.getObjectHasAttrByOid(templateOid));
     }
 
-
     /**
      * 浣跨敤妯℃澘鏄剧ず瀵硅薄杞崲涓鸿〃鏍肩殑淇℃伅锛堝寘鍚墿灞曠殑鎸夐挳锛�
      *
@@ -3541,6 +3892,7 @@
 		}).collect(Collectors.toSet());
 		//灏哹ean杞负map,mybatis缁熶竴澶勭悊
         List<Map<String, String>> maps = new ArrayList<>();
+
         baseModels.stream().forEach(model -> {
             try {
                 maps.add(VciBaseUtil.convertBean2Map(model,existFild));
@@ -3548,8 +3900,69 @@
                 throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.toString());
             }
         });
-        return commonsMapper.insertByBaseModel(listR.getData().get(0).getTableName(), maps.get(0), maps);
+		// 鏄惁寮�鍚绾跨▼鎵ц鎻掑叆璇彞
+		if(IS_THREAD_IMPORT){
+			try {
+				threadBactchExecuteInsert(listR.getData().get(0).getTableName(),maps);
+			}catch (Exception e){
+				throw new ServiceException("鍒嗘壒鎵цinsert璇彞鎶ラ敊:"+e.getMessage());
+			}
+		}else {
+			bacthExcecuteInsert(listR.getData().get(0).getTableName(),maps);
+		}
+
+        return maps.size();
     }
+
+	/**
+	 * 澶氱嚎绋嬫柟寮忓垎鎵规墽琛宨nsert璇彞
+	 * @param tableName
+	 * @param maps
+	 * @throws ServiceException
+	 */
+	private void threadBactchExecuteInsert(String tableName, List<Map<String, String>> maps) throws ServiceException{
+		ExecutorService executor = Executors.newFixedThreadPool(THREAD_NUM); // 鍒涘缓涓�涓浐瀹氬ぇ灏忕殑绾跨▼姹�
+		List<Map<String, String>> threadSafeMaps = new CopyOnWriteArrayList<>(maps);
+
+		for (int i = 0; i < threadSafeMaps.size(); i += MAX_IMPORT_NUM) {
+			final int startIndex = i;
+			final int endIndex = Math.min(i + MAX_IMPORT_NUM, threadSafeMaps.size());
+			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());
+			}
+		}
+
+		// 鍏抽棴绾跨▼姹�
+		executor.shutdown();
+		try {
+			// 绛夊緟鎵�鏈変换鍔℃墽琛屽畬鎴�
+			executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
+		} catch (InterruptedException e) {
+			// 澶勭悊寮傚父
+			throw new ServiceException("澶氱嚎绋嬫柟寮忔墽琛屾壒閲忔彃鍏ユ椂浜х敓閿欒:"+e.getMessage());
+		}
+	}
+
+	/**
+	 * 鍗曠嚎绋嬫柟寮忓垎鎵规墽琛�
+	 * @param tableName
+	 * @param maps
+	 */
+	private void bacthExcecuteInsert(String tableName, List<Map<String, String>> maps){
+		for (int i = 0; i < maps.size(); i += MAX_IMPORT_NUM) {
+			final int startIndex = i;
+			final int endIndex = Math.min(i + MAX_IMPORT_NUM, maps.size());
+			List<Map<String, String>> subList = maps.subList(startIndex, endIndex);
+			// 璋冪敤鎻掑叆鏁版嵁搴撶殑鏂规硶
+			commonsMapper.insertByBaseModel(tableName, maps.get(0), subList);
+		}
+	}
 
 	/**
 	 * 浼犲叆涓氬姟绫诲瀷浠ュ強ID鏌ヨ涓氬姟琛ㄦ暟鎹槸鍚﹂噸澶�
@@ -4110,7 +4523,7 @@
         toBo.setLastV(String.valueOf(1));
 		// 鏁版嵁鍗囩増涓嶉渶瑕侀噸鏂拌缃垱寤轰汉锛屽彧瀵规渶鍚庝慨鏀逛汉鍋氭洿鏂板氨鍙互浜�
         //toBo.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));
-        toBo.setCreateTime(new Date());
+        toBo.setCreateTime(fromBo.getCreateTime());
         // toBo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
 		toBo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount()));
         toBo.setLastModifyTime(new Date());
@@ -4140,7 +4553,8 @@
         toBo.setVersionSeq(Integer.valueOf(nextRevision.get("VERSIONSEQ").toString()));
         toBo.setVersionValue(nextRevision.get("VERSIONVAL").toString());
         toBo.setLctid(fromBo.getLctid());
-        toBo.setLcStatus("Editing");
+        //toBo.setLcStatus("Editing");
+		toBo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
         toBo.setId(fromBo.getId());
         toBo.setName(fromBo.getName());
         toBo.setDescription(fromBo.getDescription());

--
Gitblit v1.9.3