From 367c66e0ab339e15d6ad881ace683cec7e11f2f7 Mon Sep 17 00:00:00 2001
From: yuxc <653031404@qq.com>
Date: 星期二, 30 五月 2023 17:34:36 +0800
Subject: [PATCH] 1、主要完成传入业务类型与basemodel进行插入。 2、完成传入业务类型、oid进行查询返回list<basemodel>

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeService.java          |    4 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/IMdmEngineClient.java         |   69 ++++
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/MdmEngineClient.java                  |   84 ++++++
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java                   |    9 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java        |  118 ++++++++
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java    |   10 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java   |    5 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java               |   33 ++
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/IMdmEngineFallback.java       |   45 +++
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java      |  332 ++++++++++++++++++-----
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml                                 |   14 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java         |   13 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java |   58 +++
 13 files changed, 693 insertions(+), 101 deletions(-)

diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/IMdmEngineClient.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/IMdmEngineClient.java
new file mode 100644
index 0000000..5b56de6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/IMdmEngineClient.java
@@ -0,0 +1,69 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.code.feign;
+
+import com.vci.ubcs.code.entity.CodeWupin;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.support.BladePage;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.beans.IntrospectionException;
+import java.lang.reflect.InvocationTargetException;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * 缂栫爜淇℃伅 Feign鎺ュ彛绫�
+ *
+ * @author yuxc
+ * @since 2023-05-05
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_NAME_CODE,
+	fallback = IMdmEngineFallback.class
+)
+public interface IMdmEngineClient {
+
+    String API_PREFIX = "/mdmEngineClient";
+    String SELECT_BY_TYPE_OID = API_PREFIX + "/selectByTypeAndOid";
+    String INSERT_BATCH_BY_TYPE = API_PREFIX + "/insertBatchByType";
+
+	/**
+	 * 浼犲叆涓氬姟绫诲瀷浠ュ強鐩竜id闆嗗悎鏌ヨ鏁版嵁杩涜杩斿洖
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param oids      闇�瑕佹煡璇㈢殑oid闆嗗悎 閫楀彿鍒嗗紑
+	 * @return 鏌ヨ鍑虹殑鏁版嵁
+	 */
+    @GetMapping(SELECT_BY_TYPE_OID)
+	R<List<BaseModel>> selectByTypeAndOid(@RequestParam("btmType") String btmType, @RequestParam("oids") String oids) throws SQLException, IntrospectionException, NoSuchFieldException, InvocationTargetException, IllegalAccessException, InstantiationException;
+
+
+	/**
+	 * 浼犲叆涓氬姟绫诲瀷浠ュ強鐩稿叧鏁版嵁杩涜鎵归噺鎻掑叆鎿嶄綔
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param baseModels      澶勭悊鏁版嵁
+	 * @return 澶勭悊鎴愬姛鏁版嵁鏉℃暟
+	 */
+	@GetMapping(INSERT_BATCH_BY_TYPE)
+	R<Integer> insertBatchByType(String btmType, List<BaseModel> baseModels) throws Exception;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/IMdmEngineFallback.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/IMdmEngineFallback.java
new file mode 100644
index 0000000..490de26
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/IMdmEngineFallback.java
@@ -0,0 +1,45 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.code.feign;
+
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+import java.beans.IntrospectionException;
+import java.lang.reflect.InvocationTargetException;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * Feign澶辫触閰嶇疆
+ *
+ * @author Chill
+ */
+@Component
+public class IMdmEngineFallback implements IMdmEngineClient {
+
+	@Override
+	public R<List<BaseModel>> selectByTypeAndOid(String btmType, String oids) throws SQLException, IntrospectionException, NoSuchFieldException, InvocationTargetException, IllegalAccessException, InstantiationException {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Integer> insertBatchByType(String btmType, List<BaseModel> baseModels) throws Exception {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
index 9252a9a..6384c7c 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
@@ -26,6 +26,8 @@
 	private String id;
 
 	private String name;
+	//闆嗗洟鐮�
+	private String groupcode;
 
 	private String description;
 
@@ -340,6 +342,14 @@
 		this.lctid = lctid;
 	}
 
+	public String getGroupcode() {
+		return this.groupcode;
+	}
+
+	public void setGroupcode(String groupcode) {
+		this.groupcode = groupcode;
+	}
+
 	public Map<String, String> getData() {
 		return this.data;
 	}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
index a4e1111..7bf4b8b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -7,6 +7,7 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
@@ -19,7 +20,9 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ResourceUtils;
 
+import java.beans.BeanInfo;
 import java.beans.IntrospectionException;
+import java.beans.Introspector;
 import java.beans.PropertyDescriptor;
 import java.io.File;
 import java.io.IOException;
@@ -32,6 +35,8 @@
 import java.math.BigInteger;
 import java.net.InetAddress;
 import java.net.NetworkInterface;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -1244,5 +1249,118 @@
 
 	}
 
+	/**
+	 * 灏� JavaBean瀵硅薄杞寲涓� Map
+	 * @author wyply115
+	 * @param bean 瑕佽浆鍖栫殑绫诲瀷
+	 * @return Map瀵硅薄
+	 * @version 2016骞�3鏈�20鏃� 11:03:01
+	 */
+	public static Map convertBean2Map(Object bean) throws Exception {
+		Class type = bean.getClass();
+		Map returnMap = new HashMap();
+		BeanInfo beanInfo = Introspector.getBeanInfo(type);
+		PropertyDescriptor[] propertyDescriptors = beanInfo
+			.getPropertyDescriptors();
+		Field[] declaredFields = type.getDeclaredFields();
+		String existField = "";
+		for (Field declaredField : declaredFields) {
+			declaredField.setAccessible(true);
+
+			// 鑾峰彇瀛楁鐨勫��
+			boolean isTableField = declaredField.isAnnotationPresent(TableField.class);
+			if (isTableField) {
+				TableField tableField = declaredField.getAnnotation(TableField.class);
+				Boolean fieldValue = tableField.exist();
+				if(fieldValue == false){
+					existField += declaredField.getName().toLowerCase()+",";
+				}
+			}
+		}
+
+		for (int i = 0, n = propertyDescriptors.length; i <n ; i++) {
+			PropertyDescriptor descriptor = propertyDescriptors[i];
+			String propertyName = descriptor.getName();
+
+			if (!propertyName.equals("class") &&
+				((!"".equals(existField) && !existField.contains(propertyName.toLowerCase()+","))||"data".equals(propertyName))) {
+				Method readMethod = descriptor.getReadMethod();
+				Object result = readMethod.invoke(bean, new Object[0]);
+
+				if (result != null) {
+					if ("data".equals(propertyName)){
+						returnMap.putAll((Map) result);
+					}else {
+						returnMap.put(propertyName, result);
+					}
+				} else {
+					returnMap.put(propertyName, "");
+				}
+			}
+		}
+		return returnMap;
+	}
+
+	public static <T> List<T> mapToBean(List<Map> maps, Class<T> tClass) {
+		List<T> beanList = new ArrayList<>();
+		try {
+			for (Map map : maps) {
+					T t = tClass.newInstance();
+					BeanInfo beanInfo = Introspector.getBeanInfo(tClass);
+					PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+
+					for (PropertyDescriptor property : propertyDescriptors) {
+
+						String key = property.getName();
+						if ("class".equals(key)) {
+							continue;
+						}
+
+//						String sqlField = camelToUnderscore(key);
+
+
+						if (map.containsKey(key.toUpperCase())) {
+							try {
+								Object value = map.get(key.toUpperCase());
+								// 寰楀埌property瀵瑰簲鐨剆etter鏂规硶
+								Method setter = property.getWriteMethod();
+								Class<?> type = property.getPropertyType();
+								// 寮鸿浆涓哄瓧娈电殑绫诲瀷锛屼笉闇�瑕佹椂鍙互鍘婚櫎锛屼緷璧朿ommons-beanutilss-beanutils
+								//Object convert = ConvertUtils.convert(String.valueOf(value), type);
+								//setter.invoke(t, convert);
+								setter.invoke(t, value);
+							} catch (Exception e) {
+								throw new RuntimeException("銆愯祴鍊煎紓甯搞��", e);
+							}
+						}
+
+					}
+					beanList.add(t);
+			}
+		} catch (Exception e) {
+			throw new RuntimeException("銆怣ap杞崲瀹炰綋寮傚父銆�", e);
+		}
+		return beanList;
+}
+
+	public static String camelToUnderscore(String name) {
+		if (name == null && name.length() <= 0) {
+			return name;
+		}
+		StringBuilder sb = new StringBuilder();
+		String lowerName = name.toLowerCase();
+		for (int i = 0; i < lowerName.length(); i++) {
+			String nameChar = name.substring(i, i + 1);
+			String lowerChar = lowerName.substring(i, i + 1);
+			if (!nameChar.equals(lowerChar)) {
+				sb.append("_").append(lowerChar);
+			} else {
+				sb.append(nameChar);
+			}
+		}
+
+		return sb.toString();
+	}
+
 }
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
index e99c9da..87aa4dd 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -11,6 +11,7 @@
 import com.vci.ubcs.code.service.MdmIOService;
 import com.vci.ubcs.code.vo.pagemodel.*;
 import com.vci.ubcs.starter.annotation.VciBusinessLog;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import com.vci.ubcs.starter.util.LocalFileUtil;
 import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
 import com.vci.ubcs.starter.web.pagemodel.DataGrid;
@@ -19,7 +20,6 @@
 import com.vci.ubcs.starter.web.util.LangBaseUtil;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import io.swagger.annotations.Api;
-import lombok.AllArgsConstructor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springblade.core.tool.api.R;
@@ -31,6 +31,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -148,7 +149,7 @@
 	 */
 	@PostMapping("/addSaveCode")
 	@VciBusinessLog(operateName = "鐢宠鍗曚釜缂栫爜")
-	public R addSaveCode(@RequestBody CodeOrderDTO orderDTO){
+	public R addSaveCode(@RequestBody CodeOrderDTO orderDTO) throws Exception {
 		return R.success(engineService.addSaveCode(orderDTO));
 	}
 
@@ -469,4 +470,12 @@
 	public MdmUIInfoVO getUIInfoByClassifyOid(String codeClassifyOid,String functionId){
 		return engineService.getUIInfoByClassifyOid(codeClassifyOid,functionId);
 	}
+
+
+	@GetMapping("/thisistest")
+	@ResponseBody
+	public List<BaseModel> thisistest(String codeClassifyOid, String functionId) throws Exception {
+		return engineService.selectByTypeAndOid("wupin", "b1511bb3-a773-43e2-ac85-a7fde7314a0f,3e08970024835e69f6c2b2ecd90c48c3,582ff205-0dfb-43e0-8223-e772ff1851ab,db0400fe-cc90-4d9d-8da7-1edf06b1481b");
+//		return engineService.getUIInfoByClassifyOid(codeClassifyOid,functionId);
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/MdmEngineClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/MdmEngineClient.java
new file mode 100644
index 0000000..1695aca
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/MdmEngineClient.java
@@ -0,0 +1,84 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.code.feign;
+
+
+import com.vci.ubcs.code.service.MdmEngineService;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.beans.IntrospectionException;
+import java.lang.reflect.InvocationTargetException;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * 缂栫爜淇℃伅 Feign瀹炵幇绫�
+ *
+ * @author yuxc
+ * @since 2023-05-05
+ */
+@ApiIgnore()
+@RestController
+@AllArgsConstructor
+public class MdmEngineClient implements IMdmEngineClient {
+	private final MdmEngineService mdmEngineService;
+
+	/**
+	 * 浼犲叆涓氬姟绫诲瀷浠ュ強鐩竜id闆嗗悎鏌ヨ鏁版嵁杩涜杩斿洖
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param oids      闇�瑕佹煡璇㈢殑oid闆嗗悎 閫楀彿鍒嗗紑
+	 * @return 鏌ヨ鍑虹殑鏁版嵁
+	 */
+	@Override
+	@GetMapping(SELECT_BY_TYPE_OID)
+	public R<List<BaseModel>> selectByTypeAndOid(String btmType, String oids) throws SQLException, IntrospectionException, NoSuchFieldException, InvocationTargetException, IllegalAccessException, InstantiationException {
+		return R.data(mdmEngineService.selectByTypeAndOid(btmType,oids));
+	}
+
+	/**
+	 * 浼犲叆涓氬姟绫诲瀷浠ュ強鐩稿叧鏁版嵁杩涜鎵归噺鎻掑叆鎿嶄綔
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param baseModels      澶勭悊鏁版嵁
+	 * @return 澶勭悊鎴愬姛鏁版嵁鏉℃暟
+	 */
+	@Override
+	@GetMapping(INSERT_BATCH_BY_TYPE)
+	public R<Integer> insertBatchByType(String btmType, List<BaseModel> baseModels) throws Exception {
+		return R.data(mdmEngineService.insertBatchByType(btmType,baseModels));
+	}
+
+//    private final CodeWupinMapper codeWupinMapper;
+
+//    @Override
+//    @GetMapping(TOP)
+//    public BladePage<CodeWupin> top(Integer current, Integer size) {
+//        Query query = new Query();
+//        query.setCurrent(current);
+//        query.setSize(size);
+//        IPage<CodeWupin> page = codeWupinMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());//service.page(Condition.getPage(query));
+//        return BladePage.of(page);
+//    }
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
index e0354b9..039a162 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
@@ -21,4 +21,13 @@
 
 	List<Map> selectBySql(@Param("inSql") String inSql);
 
+	/**
+	 * 浼犲叆琛ㄦ槑锛宮ap锛宭ist<map>瀹屾垚鎵归噺鏇存柊鎿嶄綔
+	 * @param tableName 琛ㄥ悕
+	 * @param columnMap 鍗曟潯map鐢ㄤ簬鑾峰彇key浣滀负瀛楁
+	 * @param mapList 闇�瑕佹彃鍏ョ殑鎵�鏈夎褰�
+	 * @return 鎻掑叆鎴愬姛鐨勬潯鏁�
+	 */
+	Integer insertByBaseModel(String tableName,Map<String,String> columnMap,List<Map<String,String>> mapList);
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
index 36a3acf..78843da 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
@@ -9,12 +9,18 @@
 import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
 import com.vci.ubcs.code.entity.CodeWupin;
 import com.vci.ubcs.code.vo.CodeKeyAttrRepeatVO;
-import com.vci.ubcs.code.vo.pagemodel.*;
 import com.vci.ubcs.code.vo.pagemodel.UITableFieldVO;
+import com.vci.ubcs.code.vo.pagemodel.*;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import com.vci.ubcs.starter.web.pagemodel.*;
 import org.springblade.core.tool.api.R;
 
-import java.util.*;
+import java.beans.IntrospectionException;
+import java.lang.reflect.InvocationTargetException;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 涓绘暟鎹紩鎿庢湇鍔�
@@ -55,7 +61,7 @@
 	 * @param orderDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭
 	 * @return 杩斿洖缂栫爜鐨勫唴瀹�
 	 */
-	String addSaveCode(CodeOrderDTO orderDTO);
+	String addSaveCode(CodeOrderDTO orderDTO) throws Exception;
 
 	/**
 	 * 鍒ゆ柇缂栫爜鐨勭爜娈垫槸鍚﹁緭鍏ユ垨鑰呴�夋嫨浜嗙爜鍊�
@@ -84,9 +90,9 @@
 	 * 鍒濆鍖栦笟鍔$被鍨�
 	 * --鍒涘缓浜洪粯璁や负褰撳墠鐢ㄦ埛锛屽鏋滈渶瑕佷慨鏀癸紝鍙互鍦ㄨ幏鍙栧悗鑷澶勭悊
 	 * @param btmName 涓氬姟绫诲瀷鐨勫悕绉帮紝浼氳嚜鍔ㄥ彉鎴愬皬鍐�
-	 * @return CodeWupinEntity
+	 * @return BaseModel
 	 */
-	CodeWupin createCBOByBtmName(String btmName);
+	BaseModel createCBOByBtmName(String btmName);
 
 	/**
 	 * 淇濆瓨鍙緭鍙�夌殑淇℃伅
@@ -363,4 +369,21 @@
 	 * @return UI鐩稿叧鐨勫唴瀹�
 	 */
 	MdmUIInfoVO getUIInfoByClassifyOid(String codeClassifyOid, String functionId);
+
+	/**
+	 * 浼犲叆涓氬姟绫诲瀷浠ュ強鐩稿叧鏁版嵁杩涜鎵归噺鎻掑叆鎿嶄綔
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param baseModels      澶勭悊鏁版嵁
+	 * @return 澶勭悊鎴愬姛鏁版嵁鏉℃暟
+	 */
+	Integer insertBatchByType(String btmType, List<BaseModel> baseModels) throws Exception;
+	/**
+	 * 浼犲叆涓氬姟绫诲瀷浠ュ強鐩竜id闆嗗悎鏌ヨ鏁版嵁杩涜杩斿洖
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param oids      闇�瑕佹煡璇㈢殑oid闆嗗悎 閫楀彿鍒嗗紑
+	 * @return 鏌ヨ鍑虹殑鏁版嵁
+	 */
+	List<BaseModel> selectByTypeAndOid(String btmType, String oids) throws IllegalAccessException, NoSuchFieldException, InstantiationException, InvocationTargetException, IntrospectionException, SQLException;
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeService.java
index d912ffb..a3c91a0 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeService.java
@@ -2,9 +2,9 @@
 
 import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
 import com.vci.ubcs.code.dto.CodeOrderSecDTO;
-import com.vci.ubcs.code.entity.CodeWupin;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 
 import java.util.Collection;
 import java.util.List;
@@ -19,7 +19,7 @@
 	 * @param dataCBOList 涓氬姟鏁版嵁
 	 */
 	List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO,
-										CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<CodeWupin> dataCBOList);
+										CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList) throws Exception;
 
 	/**
 		* 鍥炴敹鐮佸��
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
index f5be509..a71680d 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -25,6 +25,9 @@
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
+import com.vci.ubcs.core.log.exception.ServiceException;
+import com.vci.ubcs.omd.feign.IBtmTypeClient;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
 import com.vci.ubcs.starter.bo.WriteExcelData;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.poi.bo.ReadExcelOption;
@@ -46,7 +49,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.launch.constant.AppConstant;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
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 2058eb7..61d5c0e 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
@@ -4,10 +4,10 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.fasterxml.jackson.databind.ObjectMapper;
 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.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.CodeDeleteBatchDTO;
 import com.vci.ubcs.code.dto.CodeOrderDTO;
 import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
@@ -18,13 +18,17 @@
 import com.vci.ubcs.code.mapper.CommonsMapper;
 import com.vci.ubcs.code.service.*;
 import com.vci.ubcs.code.vo.CodeKeyAttrRepeatVO;
-import com.vci.ubcs.code.vo.pagemodel.*;
 import com.vci.ubcs.code.vo.pagemodel.UITableFieldVO;
 import com.vci.ubcs.code.vo.pagemodel.UITablePageVO;
+import com.vci.ubcs.code.vo.pagemodel.*;
+import com.vci.ubcs.omd.feign.IBtmTypeClient;
 import com.vci.ubcs.omd.feign.IEnumClient;
-import com.vci.ubcs.omd.feign.IEnumItemClient;
+import com.vci.ubcs.omd.feign.IRevisionRuleClient;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
 import com.vci.ubcs.omd.vo.EnumVO;
+import com.vci.ubcs.omd.vo.RevisionRuleVO;
 import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
 import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
@@ -37,21 +41,32 @@
 import com.vci.ubcs.starter.web.util.*;
 import com.vci.ubcs.system.entity.DictBiz;
 import com.vci.ubcs.system.feign.IDictBizClient;
-import net.logstash.logback.encoder.org.apache.commons.lang3.ObjectUtils;
 import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
+import oracle.sql.TIMESTAMP;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
-import org.springframework.beans.BeanUtils;
+import org.springblade.core.tool.utils.StringPool;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cglib.beans.BeanMap;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.beans.BeanInfo;
 import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
@@ -120,6 +135,16 @@
 	 */
 	@Autowired
 	private ICodePhaseAttrService phaseAttrService;
+	/**
+	 * 涓氬姟绫诲瀷鐨勬湇鍔�
+	 */
+	@Autowired
+	private IBtmTypeClient btmTypeClient;
+	/**
+	 * 鐗堟湰瑙勫垯鐨勬湇鍔�
+	 */
+	@Resource
+	private IRevisionRuleClient revisionRuleClient;
 //
 	/**
 	 * 閫氱敤鏌ヨ
@@ -180,6 +205,14 @@
 	 * 绌烘牸
 	 */
 	public static final String SPACE = " ";
+	/**
+	 * 缂撳瓨锝嬶絽锝�
+	 */
+	public static final String BTM_INIT_CACHE = "ubcs-code:btm";
+	/**
+	 *
+	 */
+	public static final String BTM_NAME = "btm:name";
 
 	/**
 	 * 瀵嗙骇鐨勫瓧娈�
@@ -316,7 +349,7 @@
 	 * @return 杩斿洖缂栫爜鐨勫唴瀹�
 	 */
 	@Override
-	public String addSaveCode(CodeOrderDTO orderDTO) {
+	public String addSaveCode(CodeOrderDTO orderDTO) throws Exception {
 		VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭",
 			orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�");
 		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
@@ -340,14 +373,14 @@
 		switchDateAttrOnOrder(templateVO, orderDTO);
 		//9.鐢熸垚缂栫爜鐨勪俊鎭�
 //		ClientBusinessObject cbo = boService.createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
-		CodeWupin cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
+		BaseModel cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
 //		//榛樿鐨勫睘鎬ч兘涓嶇敤浠庡墠绔嫹璐�
 //		//璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭
 		copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, false);
 //		//TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁�
 		cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName());
 //		//end -- modify by lihang @20220407
-		List<CodeWupin> cboList = new ArrayList<>();
+		List<BaseModel> cboList = new ArrayList<>();
 
 		//澶囨敞
 		cbo.setDescription(orderDTO.getDescription());
@@ -358,8 +391,8 @@
 
 
 		List<String> charList = new ArrayList<>();
-		for (CodeWupin wupinEntity : cboList) {
-			charList.add(wupinEntity.getId());
+		for (BaseModel baseModel : cboList) {
+			charList.add(baseModel.getId());
 		}
 		batchSaveSelectChar(templateVO, charList);
 		return codeList.size() > 0 ? codeList.get(0) : "";
@@ -709,7 +742,7 @@
 	 * @param templateVO       妯℃澘鐨勬樉绀哄璞�
 	 * @param edit             鏄惁涓轰慨鏀�
 	 */
-	private void copyValueToCBO(CodeClassifyFullInfoBO classifyFullInfo, CodeWupin cbo,
+	private void copyValueToCBO(CodeClassifyFullInfoBO classifyFullInfo, BaseModel cbo,
 								CodeOrderDTO orderDTO, CodeClassifyTemplateVO templateVO,
 								boolean edit)  {
 		String fullPath = "";
@@ -738,14 +771,18 @@
 
 		try {
 
-			BeanUtilForVCI.copyPropertiesIgnoreNull(BeanUtilForVCI.convertMap(CodeWupin.class,orderDTO.getData()),cbo);
-
-			cbo.setCodeclsfid(classifyFullInfo.getCurrentClassifyVO().getOid());
-			cbo.setCodetemplateoid(templateVO.getOid());
-			cbo.setCodeclsfpath(fullPath);
+			BeanUtilForVCI.copyPropertiesIgnoreNull(BeanUtilForVCI.convertMap(BaseModel.class,orderDTO.getData()),cbo);
+			Map<String,String> data = new HashMap<>();
+			data.put(CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid());
+			data.put(CODE_TEMPLATE_OID_FIELD,templateVO.getOid());
+			data.put(CODE_FULL_PATH_FILED,fullPath);
+			cbo.setData(data);
+//			cbo.setCodeclsfid(classifyFullInfo.getCurrentClassifyVO().getOid());
+//			cbo.setTemplateOid(templateVO.getOid());
+//			cbo.setCodeclsfpath(fullPath);
 			cbo.setTs(new Date());
 			if (!edit && StringUtils.isBlank(orderDTO.getLcStatus())) {
-				//鎵剧敓鍛藉懆鏈熺殑璧峰鐘舵�侊紝鎻掍釜鐐癸紝鐢熷懡鍛ㄦ湡鏄惁闇�瑕佸垱寤�
+				//鍏堝啓鍥哄畾锛屽悗闈㈢敓鍛藉懆鏈熷ソ浜嗗湪缂栧啓
 				if (StringUtils.isNotBlank(cbo.getLctid())) {
 //					OsLifeCycleVO lifeCycleVO = lifeCycleService.getLifeCycleById(cbo.getLctid());
 //					if (lifeCycleVO != null) {
@@ -782,72 +819,65 @@
 	 * @throws VciBaseException 鍒濆鍖栧嚭閿欑殑鏄細鎶涘嚭寮傚父
 	 */
 	@Override
-	public CodeWupin createCBOByBtmName(String btmName)
+	public BaseModel createCBOByBtmName(String btmName)
 		throws VciBaseException {
 		if(btmName!=null){
 			btmName = btmName.trim().toLowerCase();
 		}
-		String userid = AuthUtil.getUser().getUserName();
-//		if(!hasCreatedCbos.containsKey(btmName)){
-//			if(StringUtils.isEmpty(userid)){
-//				throw new VciBaseException(msgCodePrefix +"noHasUserid");
-//			}
-//			try {
-//				hasCreatedCbos.put(btmName, createBusinessObject(btmName));
-//			} catch (Exception e) {
-//				logger.error("鍒涘缓涓氬姟绫诲瀷瀵硅薄",e);
-//				throw new VciBaseException(msgCodePrefix + "initBoError",new String[]{btmName});
-//			}
-//		}
-//		ClientBusinessObject cbo = cloneClientBusinessObject(hasCreatedCbos.get(btmName));
-
-//		QueryWrapper<CodeOsbtmtypeEntity> btmWrapper = new QueryWrapper<>();
-//		btmWrapper.eq("ID",btmName);
-//		CodeOsbtmtypeEntity btmTypeVO = codeOsbtmtypeMapper.selectOne(btmWrapper);
-//		OsBtmTypeVO btmTypeVO = btmService.getBtmById(boName);
-		String userName = AuthUtil.getUser().getUserName();
-		CodeWupin wupinEntity = new CodeWupin();
-		wupinEntity.setOid(VciBaseUtil.getPk());
-//		bo.setRevisionid((new ObjectUtility()).getNewObjectID36());
-//		bo.setNameoid((new ObjectUtility()).getNewObjectID36());
-		wupinEntity.setBtmname(btmName);
-		wupinEntity.setLastR(String.valueOf(1));
-		wupinEntity.setFirstR(String.valueOf(1));
-		wupinEntity.setFirstV(String.valueOf(1));
-		wupinEntity.setLastV(String.valueOf(1));
-		wupinEntity.setCreator(userName);
-		wupinEntity.setCreateTime(new Date());
-		wupinEntity.setLastModifier(userName);
-		wupinEntity.setLastModifyTime(new Date());
-		wupinEntity.setRevisionRule("numberversionrule");
-		wupinEntity.setVersionRule("0");
-//		if(StringUtils.isNotBlank(btmTypeVO.getRevisionruleid())){
-			//
-//			OsRevisionRuleVO revisionRuleVO = revisionRuleService.getRevisionRuleById(btmTypeVO.getRevisionruleid());
-		wupinEntity.setRevisionValue("1");
-//		}
-
-		wupinEntity.setRevisionSeq(1);
-		wupinEntity.setVersionSeq(1);
-		//鎻掍釜鐐癸紝闇�瑕侀棶鍕囧摜鐗堟湰闂锛屽睍绀洪粯璁や负1
-		wupinEntity.setVersionValue("1");
-		wupinEntity.setLctid("wupinLC");
-		wupinEntity.setLcStatus("Editing");
-		wupinEntity.setId("");
-		wupinEntity.setName("");
-		wupinEntity.setDescription("");
-		wupinEntity.setOwner(userName);
-		wupinEntity.setCheckinby(userName);
-		wupinEntity.setCopyFromVersion("");
-		wupinEntity.setMaterialtype(1001);
-		wupinEntity.setCaigouwl("true");
-		wupinEntity.setShifoupihaoguanli("true");
-		wupinEntity.setKucunwl("true");
-		wupinEntity.setXiaoshouwl("false");
-		wupinEntity.setPassing("true");
+		try {
+			String keyPrefix = BTM_NAME.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+			String finalBtmName = btmName;
+			return CacheUtil.get(BTM_INIT_CACHE, keyPrefix, btmName, () -> {
+				BaseModel baseModel = createBaseModel(finalBtmName);
+				return baseModel;
+			});
+		} catch (Exception e) {
+			logger.error("鍒涘缓涓氬姟绫诲瀷瀵硅薄",e);
+			throw new VciBaseException("initBtmError",new String[]{btmName});
+		}
+//		String userName = AuthUtil.getUser().getUserName();
+//		CodeWupin wupinEntity = new CodeWupin();
+//		wupinEntity.setOid(VciBaseUtil.getPk());
+////		bo.setRevisionid((new ObjectUtility()).getNewObjectID36());
+////		bo.setNameoid((new ObjectUtility()).getNewObjectID36());
+//		wupinEntity.setBtmname(btmName);
+//		wupinEntity.setLastR(String.valueOf(1));
+//		wupinEntity.setFirstR(String.valueOf(1));
+//		wupinEntity.setFirstV(String.valueOf(1));
+//		wupinEntity.setLastV(String.valueOf(1));
+//		wupinEntity.setCreator(userName);
+//		wupinEntity.setCreateTime(new Date());
+//		wupinEntity.setLastModifier(userName);
+//		wupinEntity.setLastModifyTime(new Date());
+//		wupinEntity.setRevisionRule("numberversionrule");
+//		wupinEntity.setVersionRule("0");
+////		if(StringUtils.isNotBlank(btmTypeVO.getRevisionruleid())){
+//			//
+////			OsRevisionRuleVO revisionRuleVO = revisionRuleService.getRevisionRuleById(btmTypeVO.getRevisionruleid());
+//		wupinEntity.setRevisionValue("1");
+////		}
+//
+//		wupinEntity.setRevisionSeq(1);
+//		wupinEntity.setVersionSeq(1);
+//		//鎻掍釜鐐癸紝闇�瑕侀棶鍕囧摜鐗堟湰闂锛屽睍绀洪粯璁や负1
+//		wupinEntity.setVersionValue("1");
+//		wupinEntity.setLctid("wupinLC");
+//		wupinEntity.setLcStatus("Editing");
+//		wupinEntity.setId("");
+//		wupinEntity.setName("");
+//		wupinEntity.setDescription("");
+//		wupinEntity.setOwner(userName);
+//		wupinEntity.setCheckinby(userName);
+//		wupinEntity.setCopyFromVersion("");
+//		wupinEntity.setMaterialtype(1001);
+//		wupinEntity.setCaigouwl("true");
+//		wupinEntity.setShifoupihaoguanli("true");
+//		wupinEntity.setKucunwl("true");
+//		wupinEntity.setXiaoshouwl("false");
+//		wupinEntity.setPassing("true");
 
 //		this.initTypeAttributeValue(wupinEntity,btmTypeVO);
-		return wupinEntity;
+//		return wupinEntity;
 
 
 //		return cbo;
@@ -1236,8 +1266,8 @@
 		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
 		if (!CollectionUtils.isEmpty(conditionMap)) {
 			Map<String, String> andConditionMap = new HashMap<>();
-			andConditionMap.put("islastr", "1");
-			andConditionMap.put("islastv", "1");
+			andConditionMap.put("lastr", "1");
+			andConditionMap.put("lastv", "1");
 			if (StringUtils.isNotBlank(orderDTO.getOid())) {
 				andConditionMap.put("oid", QueryOptionConstant.NOTEQUAL + orderDTO.getOid());
 			}
@@ -2883,4 +2913,146 @@
 		}
 		return buttonVOList;
 	}
+
+	/**
+	 * 浼犲叆涓氬姟绫诲瀷浠ュ強鐩稿叧鏁版嵁杩涜鎵归噺鎻掑叆鎿嶄綔
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param baseModels      澶勭悊鏁版嵁
+	 * @return 澶勭悊鎴愬姛鏁版嵁鏉℃暟
+	 */
+	@Override
+	public Integer insertBatchByType(String btmType, List<BaseModel> baseModels) throws Exception {
+		//浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
+		R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
+		if(listR.getData().size() == 0){
+			throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+		}
+		//灏哹ean杞负map,mybatis缁熶竴澶勭悊
+		List<Map<String,String>> maps = new ArrayList<>();
+		baseModels.stream().forEach(model-> {
+			try {
+				maps.add(VciBaseUtil.convertBean2Map(model));
+			} catch (Exception e) {
+				throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.toString());
+			}
+		});
+		return commonsMapper.insertByBaseModel(listR.getData().get(0).getTableName(), maps.get(0), maps);
+	}
+
+	/**
+	 * 浼犲叆涓氬姟绫诲瀷浠ュ強鐩竜id闆嗗悎鏌ヨ鏁版嵁杩涜杩斿洖
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param oids      闇�瑕佹煡璇㈢殑oid闆嗗悎 閫楀彿鍒嗗紑
+	 * @return 鏌ヨ鍑虹殑鏁版嵁
+	 */
+	@Override
+	public List<BaseModel> selectByTypeAndOid(String btmType, String oids) throws IllegalAccessException, NoSuchFieldException, InstantiationException, InvocationTargetException, IntrospectionException, SQLException {
+
+		//浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
+		R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
+		if(listR.getData().size() == 0){
+			throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+		}
+		//鏌ヨ鏁版嵁
+		List<Map> maps = commonsMapper.selectBySql("select * from " + listR.getData().get(0).getTableName() + " where oid in ("
+			+ VciBaseUtil.toInSql(oids.toString()) + ")");
+
+		List<BaseModel> baseModels = new ArrayList<>();
+		//灏嗘煡璇㈠埌鐨勬暟鎹浆鎹负basemodel锛屼娇鐢ㄧ殑鍙嶅皠鏂瑰紡鏉ヨ繘琛屽垱寤虹殑
+		for (Map map : maps) {
+			Object obj = BaseModel.class.newInstance();
+			BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
+			PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+			for (PropertyDescriptor property : propertyDescriptors) {
+				Method setter = property.getWriteMethod();
+				if (setter != null) {
+					//oracle鐨勬椂闂翠负TIMESTAMP鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚data锛屽惁鍒欏皢鎶ラ敊
+					if(map.get(property.getName().toUpperCase()) instanceof TIMESTAMP){
+						LocalDateTime localDateTime = ((TIMESTAMP) map.get(property.getName().toUpperCase())).toLocalDateTime();
+						ZoneId zoneId = ZoneId.systemDefault();
+						ZonedDateTime zdt = localDateTime.atZone(zoneId);
+						Date date = Date.from(zdt.toInstant());
+						setter.invoke(obj,date);
+						map.remove(property.getName().toUpperCase());
+					} //oracle鐨勬暟瀛椾负BigDecimal鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚Integer锛屽惁鍒欏皢鎶ラ敊
+					else if (map.get(property.getName().toUpperCase()) instanceof BigDecimal
+						&& ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())){
+						setter.invoke(obj, ((BigDecimal)map.get(property.getName().toUpperCase())).intValue());
+						map.remove(property.getName().toUpperCase());
+					}else if(map.get(property.getName().toUpperCase()) != null){
+						setter.invoke(obj, map.get(property.getName().toUpperCase()));
+						map.remove(property.getName().toUpperCase());
+					}
+				}
+			}
+			((BaseModel) obj).setData(map);
+			baseModels.add((BaseModel) obj);
+		}
+		return baseModels;
+	}
+
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鍚嶇О鍒涘缓涓氬姟鏁版嵁婧愬璞�
+	 * @param boName 涓氬姟绫诲瀷鍚嶇О
+	 * @return 涓氬姟鏁版嵁瀵硅薄
+	 */
+	public BaseModel createBaseModel(String boName)  {
+		R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(boName));
+		String userName = AuthUtil.getUser().getUserName();
+		BaseModel bo = new BaseModel();
+		bo.setOid(VciBaseUtil.getPk());
+//		bo.setRevisionid(VciBaseUtil.getPk());
+//		bo.setNameoid(VciBaseUtil.getPk());
+		bo.setBtmname(boName);
+		bo.setLastR("1");
+		bo.setFirstR("1");
+		bo.setFirstV("1");
+		bo.setLastV("1");
+		bo.setCreator(userName);
+		bo.setCreateTime(new Date());
+		bo.setLastModifier(userName);
+		bo.setLastModifyTime(new Date());
+		bo.setRevisionRule(listR.getData().get(0).getRevisionRuleId());
+		bo.setVersionRule(String.valueOf(listR.getData().get(0).getVersionRule()));
+		if(StringUtils.isNotBlank(listR.getData().get(0).getRevisionRuleId())){
+			R<List<RevisionRuleVO>> revisionRuleVO = revisionRuleClient
+				.selectByIdCollection(Collections.singletonList(listR.getData().get(0).getRevisionRuleId()));
+			bo.setRevisionValue(revisionRuleVO.getData().get(0).getStartCode());
+		}
+		bo.setRevisionSeq(1);
+		bo.setVersionSeq(1);
+		bo.setVersionValue(getVersionValue(WebUtil.getInt(listR.getData().get(0).getVersionRule())));
+		bo.setLctid(listR.getData().get(0).getLifeCycleId());
+//		if(StringUtils.isNotBlank(listR.getData().get(0).getLifeCycleId())){
+//			OsLifeCycleVO lifeCycleVO = lifeService.getLifeCycleById(listR.getData().get(0).getLifeCycleId());
+			bo.setLcStatus("Editing");
+//		}
+		bo.setId("");
+		bo.setName("");
+		bo.setDescription("");
+		bo.setOwner(userName);
+//		bo.setCheckinby(userName);
+		bo.setCopyFromVersion("");
+//		this.initTypeAttributeValue(bo,btmTypeVO);
+		return bo;
+	}
+
+	/**
+	 * 鑾峰彇鐗堟鐨勫��
+	 * @param verRuleName 鐗堟鐨勮鍒�
+	 * @return 鐗堟鐨勫�硷紝娌℃湁瑙勫垯鍒欎负绌�
+	 */
+	private String getVersionValue(int verRuleName) {
+		if (verRuleName == 0) {
+			return "1";
+		} else if (verRuleName == 1) {
+			return "a";
+		} else if (verRuleName == 2) {
+			return "0";
+		}
+		return "";
+	}
 }
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 6a785bc..f199450 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,11 +2,11 @@
 
 import com.alibaba.nacos.common.utils.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
 import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
 import com.vci.ubcs.code.dto.CodeOrderSecDTO;
 import com.vci.ubcs.code.entity.CodeAllCode;
 import com.vci.ubcs.code.entity.CodeSerialValue;
-import com.vci.ubcs.code.entity.CodeWupin;
 import com.vci.ubcs.code.enumpack.CodeCutTypeEnum;
 import com.vci.ubcs.code.enumpack.CodeGetValueTypeEnum;
 import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
@@ -14,18 +14,22 @@
 import com.vci.ubcs.code.lifecycle.CodeAllCodeLC;
 import com.vci.ubcs.code.mapper.CodeSerialValueMapper;
 import com.vci.ubcs.code.service.ICodeWupinService;
+import com.vci.ubcs.code.service.MdmEngineService;
 import com.vci.ubcs.code.service.MdmProductCodeService;
 import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
 import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
 import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
 import com.vci.ubcs.starter.web.constant.RegExpConstant;
 import com.vci.ubcs.starter.web.enumpck.OsCodeFillTypeEnum;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import com.vci.ubcs.starter.web.util.VciDateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -55,12 +59,24 @@
 	 */
 	@Resource
 	private ICodeWupinService iCodeWupinService;
+	/**
+	 * 鎵�鏈夌殑缂栫爜鐨勫唴瀹�
+	 */
+	@Resource
+	@Lazy
+	private MdmEngineService mdmEngineService;
+
+	/**
+	 * 鍏紡鐨勬湇鍔�
+	 */
+	@Autowired
+	private FormulaServiceImpl formulaService;
 
 	@Override
-	public List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<CodeWupin> dataCBOList) {
+	public List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList) throws Exception {
 //		BatchCBO batchCBO = new BatchCBO();
 //		WebUtil.setPersistence(false);
-//		dataCBOList = dataCBOList.stream().sorted(((o1, o2) -> o1.getCreateTime().compareTo(o2.getCreateTime()))).collect(Collectors.toList());
+		dataCBOList = dataCBOList.stream().sorted(((o1, o2) -> o1.getCreateTime().compareTo(o2.getCreateTime()))).collect(Collectors.toList());
 //		batchCBO.getCreateCbos().addAll(dataCBOList);
 		List<String> codeList = new ArrayList<>();
 
@@ -82,7 +98,7 @@
 //				VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
 				String code = cbo.getId();
 				List<String> serialUnitList = new ArrayList<>();
-				String[] secLengths = cbo.getCodeSecLengthField().split("#");
+				String[] secLengths = cbo.getData().get(CODE_SEC_LENGTH_FIELD).split("#");
 				List<CodeBasicSecVO> secVOList = ruleVO.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));
@@ -266,7 +282,7 @@
 			Map<String/**鐮佹鐨勪富閿�**/, Map<String, CodeSerialValue>> maxSerialValueMap = new HashMap<>();
 
 			for (int i = 0; i < dataCBOList.size(); i++) {
-				CodeWupin cbo = dataCBOList.get(i);
+				BaseModel cbo = dataCBOList.get(i);
 				List<String> thisSecValueList = new LinkedList<>();
 				for (int j = 0; j < secValueList.size(); j++) {
 					thisSecValueList.add(secValueList.get(j));
@@ -303,13 +319,17 @@
 			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()));
-
 			});
+
+
 			allCodeDOList.stream().forEach(
 				allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");}
 			);
+
 			codeAllCodeService.saveBatch(allCodeDOList);
-			iCodeWupinService.saveBatch(dataCBOList);
+//			iCodeWupinService.saveBatch(dataCBOList);
+			mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
+
 //			batchCBO.getCreateCbos().stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmName())).forEach(s -> {
 //				s.setLcStatus(statusMap.get(s.getOid()));
 //				try {
@@ -332,7 +352,7 @@
 	 * @param serialUnitList 娴佹按渚濇嵁鐨勫唴瀹�
 	 *                       杩橀渶瑕佸悗缁殑涓�涓Щ妞嶅皢浼氭秹鍙婂埌鍏朵粬鐨勬湇鍔�
 	 */
-	private void switchAttrSecValue(List<CodeBasicSecVO> attrSecVOList, CodeWupin cbo,
+	private void switchAttrSecValue(List<CodeBasicSecVO> attrSecVOList, BaseModel cbo,
                                     List<String> thisSecValueList, boolean attrSevIsSerialDepend,
                                     List<String> serialUnitList){
 		if (!CollectionUtils.isEmpty(attrSecVOList)) {
@@ -340,9 +360,9 @@
 				String value = "";
 				if (StringUtils.isNotBlank(attrSevVO.getGetValueClass())) {
 					//浣跨敤缁勫悎瑙勫垯鏉ュ鐞嗙殑
-//					value = getValueByFormulaForCBO(cbo, attrSevVO.getGetValueClass());
+					value = getValueByFormulaForCBO(cbo, attrSevVO.getGetValueClass());
 				} else {
-//					value = cbo.getAttributeValue(attrSevVO.getReferAttributeId());
+					value = cbo.getData().get(attrSevVO.getReferAttributeId());
 				}
 				if (value == null) {
 					value = "";
@@ -591,7 +611,7 @@
 	 * @param allCodeDOList 鎵�鏈夌殑鐮佸�肩殑瀵硅薄鍒楄〃
 	 */
 	private void wrapperAllCode(CodeClassifyFullInfoBO classifyFullInfoBO, CodeRuleVO ruleVO,
-                                CodeWupin cbo, CodeClassifyTemplateVO templateVO,
+                                BaseModel cbo, CodeClassifyTemplateVO templateVO,
                                 List<CodeAllCode> allCodeDOList, String serialUnitString, String serialValueString){
 		CodeAllCode allCodeDO = new CodeAllCode();
 		allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid());
@@ -746,4 +766,20 @@
 //		WebUtil.setPersistence(oldPersistence);
 		return updateFlag.get();
 	}
+
+	/**
+	 * 浣跨敤CBO澶勭悊缁勫悎瑙勫垯鐨勫唴瀹�
+	 * @param cbo 鏁版嵁鐨勫唴瀹�
+	 * @param rule 瑙勫垯鐨勫唴瀹�
+	 * @return 杞崲鍚庣殑
+	 */
+	private String getValueByFormulaForCBO(BaseModel cbo,String rule){
+		Map<String, Object> dataMap = BeanUtils.beanToMap(cbo);
+		Map<String, String> map = new HashMap<String, String>();
+		for (String i : dataMap.keySet()) {
+			map.put(i, String.valueOf(dataMap.get(i)));
+		}
+//		WebUtil.copyValueToMapFromCbos(cbo,dataMap);
+		return formulaService.getValueByFormula(map,rule);
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
index 4cbd321..7aee99d 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -22,5 +22,19 @@
         ${inSql}
     </select>
 
+    <insert id="insertByBaseModel" parameterType="java.util.Map">
+        insert into ${tableName}
+        (
+        <foreach collection="columnMap" item="value" index="key" separator=",">
+            ${key}
+        </foreach>
+        )
+        <foreach collection="mapList" item="columnMap" separator=" union all ">
+            select  <foreach collection="columnMap" item="value" index="key" separator=",">
+                       #{value}
+                    </foreach>
+            from dual
+        </foreach>
+    </insert>
 
 </mapper>

--
Gitblit v1.9.3