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