Source/UBCS-WEB/vue.config.js
@@ -22,11 +22,13 @@ }, //开发模式反向代理配置,生产模式请使用Nginx部署并配置反向代理 devServer: { //port: 8080, port: 38000, proxy: { '/api': { //本地服务接口地址 target: 'http://127.0.0.1:37000', //target: 'http://127.0.0.1', // target: 'http://192.168.1.51:37000', // target: 'http://dev.vci-tech.com:37000', //yxc Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/entity/DockingPreAttrMapping.java
@@ -34,6 +34,7 @@ * 默认值 */ @ApiModelProperty(value = "源系统的属性oid") @TableField(value = "metaListId") private String metaListId; /** Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feigh/MdmInterJtClient.java
@@ -14,6 +14,7 @@ import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil; import com.vci.ubcs.starter.util.MdmBtmTypeConstant; import com.vci.ubcs.starter.util.SaveLogUtil; import com.vci.ubcs.starter.web.util.VciBaseUtil; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -197,20 +198,34 @@ if (res) { //此处需要查询业务数据,去更改 R<List<BaseModel>> R = mdmEngineClient.selectByTypeAndOid(jdatabtmname,jdataid); // TODO:新增业务逻辑,需要根据集团返回的属性进行判断,如果集团对该属性进行了修改编码系统也就需要对属性进行修改 if(R.isSuccess()){ List<BaseModel> oldDatalist=new ArrayList<>(); List<BaseModel> newDatalist=R.getData(); if(!CollectionUtils.isEmpty(newDatalist)){ List<BaseModel> newDatalist=new ArrayList<>(); List<BaseModel> oldDatalist=R.getData(); if(!CollectionUtils.isEmpty(oldDatalist)){ if(editObjectMap.containsKey(jdatabtmname)){ oldDatalist=editObjectMap.getOrDefault(jdatabtmname,new ArrayList<>()); newDatalist=editObjectMap.getOrDefault(jdatabtmname,new ArrayList<>()); } BaseModel baseModel=oldDatalist.get(0); //DefaultAttrAssimtUtil.updateDefaultAttrAssimt(baseModel); baseModel.setLastModifyTime(new Date()); baseModel.getData().put("groupcode",customCoding); baseModel.getData().put("GROUPCODE",customCoding); // 1、取到集团返回的ViewInfos中编码视图中的属性 List<Map<String, Object>> viewValueList = mainData.getViewInfos().stream().filter(item -> item.getViewName().equals("编码视图")).map(DockingViewVO::getViewValue).findFirst().orElse(null); // 2、比对属性是否和oldDatalist属性一致,不一致就需要更改 if(Func.isNotEmpty(viewValueList)){ // 3、需要将集团属性转换为我们系统的属性,再和我们系统的现有属性比对 String codeclsfid = VciBaseUtil.getMapStrValueIgnoreCase(baseModel.getData(),"CODECLSFID"); // 3.1、通过该条数据的分类id,拿到集团属性映射配置,用来将集团的属性映射到我们系统的属性 List<DockingPreAttrMapping> dockingPreAttrMappings = dockingPreAttrMappingService.selectByWrapper(Wrappers.<DockingPreAttrMapping>query().lambda().eq(DockingPreAttrMapping::getTargetClassifyId, codeclsfid).eq(DockingPreAttrMapping::getViewName,"编码视图")); if(Func.isNotEmpty(dockingPreAttrMappings)){ //根据集团属性映射将集团转到我们系统,并修改不一致的到我们系统中对应的该条记录的值 sourceAttrKey2TargetKey(dockingPreAttrMappings, viewValueList.get(0), oldDatalist, baseModel); } } log.info("申请单:"+applyId+",集团码:"+customCoding+"编码:"+baseModel.getId()); oldDatalist.add(baseModel); editObjectMap.put(jdatabtmname,oldDatalist); newDatalist.add(baseModel); editObjectMap.put(jdatabtmname,newDatalist); } } } @@ -234,6 +249,37 @@ return R.success("集团码赋值成功"); } /** * 根据集团属性映射将集团转到我们系统 * @param dockingPreAttrMappings * @param viewValueMap * @param oldDatalist * @param baseModel */ private void sourceAttrKey2TargetKey(List<DockingPreAttrMapping> dockingPreAttrMappings,Map<String, Object> viewValueMap, List<BaseModel> oldDatalist,BaseModel baseModel){ Map<String, Object> targetKeyMap = new HashMap<>(); // 将集团属性转成我们系统属性的map dockingPreAttrMappings.stream().forEach(item->{ targetKeyMap.put(item.getTargetAttrKey(),viewValueMap.get(item.getSourceAttrKey())); }); // 比对baseModel的data中的属性是否和targetKeyMap不一致,不一致的话就需要将baseModel的data中的对应key的value值转成集团的 boolean isEdit = false; for (Map.Entry<String, Object> entry : targetKeyMap.entrySet()) { String key = entry.getKey(); Object targetValue = entry.getValue(); String dataValue = baseModel.getData().get(key); if (targetValue != null && !targetValue.equals(dataValue)) { baseModel.getData().put(key, targetValue.toString()); isEdit = true; } } // 集团对我们系统属性做了调整,我们需要对老的业务数据做记录 if (isEdit) { baseModel.getData().put("oldbusinessdata", JSON.toJSONString(oldDatalist)); } } /*** * 接受集团分类主模型数据 * @param dockingClassifyModelAttrVO Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -2,7 +2,6 @@ import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.shaded.com.google.protobuf.ServiceException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -28,7 +27,6 @@ import com.vci.ubcs.code.enumpack.CodeDefaultLC; import com.vci.ubcs.code.enumpack.CodeSecTypeEnum; import com.vci.ubcs.code.enumpack.SysIntegrationDataFlowTypeEnum; import com.vci.ubcs.code.feign.MdmSearchItemCodeProvider; import com.vci.ubcs.code.mapper.CommonsMapper; import com.vci.ubcs.code.service.*; import com.vci.ubcs.code.util.gennerAttrMapUtil; @@ -54,7 +52,6 @@ import com.vci.ubcs.starter.web.util.WebUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.map.CaseInsensitiveMap; import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; @@ -80,7 +77,6 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK; import static com.vci.ubcs.code.constant.MdmDuckingConstant.*; import static com.vci.ubcs.code.constant.MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST; import static com.vci.ubcs.code.enumpack.CodeSecTypeEnum.CODE_CLASSIFY_SEC; @@ -172,8 +168,8 @@ /*** * resdis缓存服务 */ @Resource private BladeRedis bladeRedis; //@Resource //private BladeRedis bladeRedis; @Resource private IDockingSysIntParamService dockingSysIntParamService; @@ -181,8 +177,8 @@ @Resource private IDockingSysIntHeaderService dockingSysIntHeaderService; @Autowired(required = false) private MdmSearchItemCodeProvider mdmSearchItemCodeProvider; //@Autowired(required = false) //private MdmSearchItemCodeProvider mdmSearchItemCodeProvider; @Resource private ICodeAllCodeService codeAllCodeService; @@ -738,12 +734,17 @@ initProperty("projectitem","",projectItem,propList); String materialCode=searchItemDataVO.getMATERIALCODE();//产品编码 initProperty("materialcode","",materialCode,propList); Date cretaeDon = searchItemDataVO.getCREATEDON();//创建日期 日期型,如:2023-09-08 19:24:11 initProperty("cretaedon", "", Func.formatDateTime(cretaeDon), propList); Date lastchangeDon = searchItemDataVO.getLASTCHANGEDON();//更改时间 日期型,如:2023-09-08 19:24:11 initProperty("lastchangedon", "", Func.formatDateTime(lastchangeDon), propList); //组合属性的处理 initProperty(attrKey,"",StringUtils.isNotBlank(projectItem)?projectItem:mmodelCode,propList); String creatBy=searchItemDataVO.getCREATBY();//创建者 Date cretaeDon= searchItemDataVO.getCREATEDON();//创建日期 日期型,如:2023-09-08 19:24:11 //Date cretaeDon = searchItemDataVO.getCREATEDON();//创建日期 日期型,如:2023-09-08 19:24:11 String lastchangeBy=searchItemDataVO.getLASTCHANGEDBY();//更改者 Date lastchangeDon=searchItemDataVO.getLASTCHANGEDON();//更改时间 日期型,如:2023-09-08 19:24:11 //Date lastchangeDon = searchItemDataVO.getLASTCHANGEDON();//更改时间 日期型,如:2023-09-08 19:24:11 String isenabled= searchItemDataVO.getISENABLED();//字符型,枚举值;停用:0;启用:1; applyDataVO.setOperate(operation); applyDataVO.setCode(code); @@ -961,11 +962,12 @@ String classifyoid = dockingTask.getClassifyOid(); //查询要推送的数据 String btmoid = dockingTask.getBtmOid();//数据btmid String code=dockingTask.getId();; String code = dockingTask.getId(); ; //表示是主数据 CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid); R<List<Map<String, String>>> r = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid()); log.info("推送人员数据,执行到查询主数据和模板属性阶段!!"); List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes(); Map<String/**英文名称**/, String/**中文名称**/> attrIdNameMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t.getName(), (o1, o2) -> o2)); Map<String, String> data = new HashMap<>(); @@ -995,12 +997,12 @@ data = r.getData().get(0); } List<NodeProDTO> nodeProDTOS = new ArrayList<>(); Map<String, String> finalData = data; AtomicReference<String> newItemId= new AtomicReference<>(""); final Map<String, String> finalData = data; List<String> newItemId = new ArrayList<>(); finalData.keySet().forEach(field -> { if(field.toLowerCase(Locale.ROOT).equals(itemId.toLowerCase(Locale.ROOT))){ String Value = finalData.get(field); newItemId.set(Value); newItemId.add(Value); } String outName = attrIdNameMap.get(field); if (finalData.containsKey(field)) { @@ -1037,7 +1039,7 @@ nodeObjectDTO.setCode(code);//设置编码 nodeObjectDTO.setClassCode(classCodeLeves[0]); nodeObjectDTO.setStatus(data.get("lcstatus")); nodeObjectDTO.setItemid(newItemId.get()); nodeObjectDTO.setItemid(newItemId.get(0)); nodeObjectDTO.setLibrary(classCodeLeves[classCodeLeves.length - 1]); nodeObjectDTO.setPro(nodeProDTOS); List<NodeObjectDTO> nodeObjectDTOS = new ArrayList<>(); @@ -1057,6 +1059,7 @@ xStream.autodetectAnnotations(true); sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO); } log.info("推送人员数据,执行到调用HR接口了!!"); //调用接口 callInterface(sendString,dockingSystemConfig, dockingTask,"pushData"); }catch (Throwable e){ @@ -1118,6 +1121,7 @@ for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) { headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue()); } log.info("推送人员数据,执行到调用接口了,地址:" + url); backString = HttpUtils.postByMediaType( url, params, @@ -1183,6 +1187,7 @@ resultNodeObjectDTOS.add(resultNodeObjectDTO); }finally { boolean isSend = false; log.info("推送人员数据,执行到final阶段了"); for (ResultNodeObjectDTO resultNodeObjectDTO:resultNodeObjectDTOS){ String erroid = resultNodeObjectDTO.getErroid(); msg = resultNodeObjectDTO.getMsg(); @@ -1271,6 +1276,7 @@ /** * dockingdata根据oid修改sendflag * * @param oid * @param sendflag * @return Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -67,6 +67,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import javax.xml.bind.ValidationEvent; import java.beans.BeanInfo; @@ -168,7 +169,8 @@ /** * 近义词规则查询服务 */ @Autowired ICodeSynonymService codeSynonymService; @Autowired ICodeSynonymService codeSynonymService; /** * 公式的服务 @@ -630,6 +632,7 @@ /** * 获取码段宽度 * * @param codeClassifyOid * @return */ @@ -733,6 +736,7 @@ /** * 计算码段长度加前后缀的长度 * * @param codeBasicSecVO * @param secWidth */ @@ -753,6 +757,7 @@ /** * 导出的时候封装必输和关键属性 * * @param attrVO 属性的显示对象 * @param text 单元格的值 */ @@ -1591,7 +1596,6 @@ columnVOList.add(errorMsgColumnVO); ColumnVO pathColumnVO=new ColumnVO(); pathColumnVO.setTitle("分类路径"); pathColumnVO.setField("codeclsfid"); @@ -1612,11 +1616,11 @@ /** * 错误信息返回excel * * @param rowDataList 所有的导入数据 * @param errorMap 错误的信息 * @param needRowIndexList 需要写入的数据的行号 * @param titleRowData 标题行 * * @return 错误的excel文件,没有错误会返回空 */ private String returnErrorToExcel(Collection<SheetRowData> rowDataList, @@ -1657,6 +1661,7 @@ /** * 校验模板是否为同步的 * * @param sheetDataSetList excel里的内容 * @param templateVO 模板的信息 */ @@ -1883,7 +1888,6 @@ } /** * * @param oid * @param redisOid * @return @@ -1891,7 +1895,8 @@ @Override public DataGrid<Map<String,String>> gridRowResemble(String oid,String redisOid){ VciBaseUtil.alertNotNull(redisOid,"导入相似数据",redisOid,"数据缓存主键"); List<DataResembleVO> codeImprotDataVOs = bladeRedis.get(redisOid);; List<DataResembleVO> codeImprotDataVOs = bladeRedis.get(redisOid); ; DataGrid<Map<String, String>> dataGrid = new DataGrid<>(); List<Map<String, String>> dataList = new ArrayList<>(); @@ -2048,6 +2053,7 @@ /** * 查询数据并导出到excel * * @param btmTypeId 业务类型 * @param conditionMap 查询条件 * @param pageHelper 分页 @@ -2132,6 +2138,7 @@ /** * 相似项查询出来之后再点击确认时调用的 * * @param codeImprotSaveDatVOList * @param classifyAttr * @param isImprot @@ -2357,6 +2364,7 @@ /** * 集成批量申请数据 * * @param orderDTO 分类的主键 * @param dataObjectVO 数据信息 * @param resultDataObjectDetailDOs 错误信息 @@ -3267,6 +3275,7 @@ log.error("设置默认的属性的值错误", e); } } /** * 设置新的值到申请对象上 * @@ -3396,6 +3405,7 @@ /** * 获取分类的全路径 * * @param classifyFullInfo 分类的全部信息 * @return 全路径 */ @@ -3412,6 +3422,7 @@ /** * 检查码段的长度是否符合要求 * * @param cboList 数据 * @param classifyVOMap 分类映射 * @param ruleVOMap 规则对象 @@ -3480,6 +3491,7 @@ /** * excel转换为cbo的对象 * * @param classifyFullInfo 分类的全部信息 * @param fieldIndexMap 字段的位置 * @param rowDataList excel里的行数据 @@ -3593,6 +3605,7 @@ /** * excel转换为cbo的对象 * * @param classifyFullInfo 分类的全部信息 * @param codeImprotDataVO: 分类对应的数据 * @param cboList 数据的列表 @@ -3643,6 +3656,7 @@ /** * excel转换为cbo的对象 * * @param classifyFullInfo 分类的全部信息 * @param fieldIndexMap 字段的位置 * @param rowDataList excel里的行数据 @@ -3705,6 +3719,7 @@ /** * excel转换为cbo的对象 * * @param fieldIndexMap 字段的位置 * @param rowDataList excel里的行数据 * @param orderDTO 整理的数据 @@ -3760,7 +3775,6 @@ } // Iterator<Map.Entry<String, String>> iterator = cbos.entrySet().iterator(); // // Map.Entry<String, String> entry; @@ -3805,6 +3819,7 @@ /** * 检查校验规则没有通过的内容 * * @param attrVOS 需要校验的属性 * @param dataList 数据的列表 * @param errorMap 错误的信息映射 @@ -3837,6 +3852,7 @@ /** * 批量转换时间都为指定的格式 * * @param attrVOS 模板属性 * @param cboList 数据的列表 * @param errorMap 错误的信息 @@ -3886,6 +3902,7 @@ /** * 系统模板中默认值设置 * * @param attrVOS 模板属性 * @param dataList excel的数据内容 */ @@ -3911,6 +3928,7 @@ /** * 转移boolean型的属性 * * @param attrVOS 属性的对象 * @param dataList 数据 */ @@ -3938,6 +3956,7 @@ /** * 处理组合规则 * * @param attrVOS 模板属性 * @param dataList excel的数据内容 */ @@ -3966,6 +3985,7 @@ /** * 转换参照的值 * * @param attrVOS 属性的显示对象 * @param dataList 数据列表 * @param errorMap 错误的信息 @@ -4064,6 +4084,7 @@ /** * 批量检查企业编码是否存在 * * @param templateVO 模板的显示对象 * @param cboList 数据的列表 * @param errorMap 错误的信息 @@ -4210,6 +4231,7 @@ /** * 从属性上获取参照的内容 * * @param attrVO 属性的信息 * @return 参照的内容 */ @@ -4228,6 +4250,7 @@ /** * 获取参照中的值的字段 * * @param referVO 参照的对象 * @return 默认为Oid,有多个的时候,获取第一个 */ @@ -4250,6 +4273,7 @@ /** * 获取参照中的显示内容的字段 * * @param referVO 参照的对象 * @return 默认为name,有多个的时候,获取第一个 */ @@ -4272,6 +4296,7 @@ /** * 处理枚举的显示对象 * * @param attrVOS 模板属性 * @param dataList excel的数据内容 * @param errorMap 错误信息的映射 @@ -4313,6 +4338,7 @@ /** * 批量校验数据的信息 * * @param templateVO 模板的显示对象 * @param cboList 数据的内容 */ @@ -4334,6 +4360,7 @@ /** * 处理分类注入 * * @param attrVOS 模板属性 * @param dataList excel的数据内容 * @param classifyFullInfo 分类的全路径 @@ -4391,6 +4418,7 @@ /** * 校验关键属性,和近义词查询规则 * * @param classifyFullInfo 分类的全部信息 * @param templateVO 模板的内容,必须包含模板属性 * @param cboList 批量的数据 @@ -4514,6 +4542,7 @@ /** * 检查分类的路径是否存在 * * @param cboList 业务数据 * @param errorMap 错误信息 * @param pathMap 路径和分类的映射 @@ -4545,6 +4574,7 @@ /** * 检查分类以及子分类是否都有编码规则 * * @param classifyVOMap 分类的显示对象映射 * @param ruleOidMap 规则的主键映射 * @param unExistRuleClassifyOidList 不存在编码规则的分类的主键 @@ -4569,8 +4599,10 @@ } log.info(";;;;"); } /** * 递归找编码规则 * * @param classifyVOMap 分类的显示对象映射 * @param classifyOid 分类的主键 * @param ruleOidList 规则的主键list @@ -4594,6 +4626,7 @@ /** * 获取子分类的路径 * * @param classifyFullInfo 分类全部信息 * @param fullPath 分类的全路径 * @return 子分类的路径,key是分类的主键 @@ -4618,6 +4651,7 @@ /** * 获取导入的内容中关键属性近义词转换后重复的行号 * * @param ketAttrMap 关键属性的映射 * @param dataList 导入的数据 * @param keyRuleVO 关键属性控制规则 @@ -4688,6 +4722,7 @@ /** * excel的标题上获取字段所在的位置 * * @param titleRowData 标题的内容 * @param attrNameIdMap 模板中属性名称和英文的映射 * @param fieldIndexMap 位置和英文字段的映射 @@ -4853,6 +4888,7 @@ /** * 正确错误数据redis缓存 * * @param uuid * @param templateVO * @param rowIndexCbo @@ -5118,6 +5154,7 @@ /** * 拷贝业务类型到map * * @param cbo 业务数据 * @param map map */ @@ -5129,6 +5166,7 @@ /** * 拷贝业务类型到map * * @param bo 业务数据 * @param map map */ @@ -5532,7 +5570,6 @@ } /** * * @param fieldIndexMap * @param rowDataList * @param cboList Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllDmMapperProcessor.java
@@ -70,7 +70,8 @@ DdlFieldMappingAttrBO mappingBO = getMappingBO(fieldType); if (mappingBO.getDataLength() != null) { //mappingBO用来做最后的校验,如果定义的BO没有字段长度,则说明这个类型生成的sql不应该指定长度。如果指定了长度,说明是字段长度的最大值,VARCHAR、CLOB除外 if (!(fieldType.equals(VciFieldTypeEnum.VTClob) || fieldType.equals(VciFieldTypeEnum.VTString)) // TODO:2024-4-23修改,这儿第一组判断条件取反了,但是这儿应该是不取反才对 if ((fieldType.equals(VciFieldTypeEnum.VTClob) || fieldType.equals(VciFieldTypeEnum.VTString)) && attributeVO.getAttributeLength() > mappingBO.getDataLength()) { mappingBO.setDataLength(attributeVO.getAttributeLength()); } Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java
@@ -88,47 +88,37 @@ return mapper.createViewBySql(viewCreateSql); } public int createTableBySql(String tableName, String attributeSql) { return mapper.createTableBySql(tableName, attributeSql); } public int commentTable(String tableName, String comment) { return mapper.commentTable(tableName, comment); } public int commentColumnTable(String tableName, String columnName, String comment) { return mapper.commentColumnTable(tableName, columnName, comment); } public int modifyTableBySql(String tableName, String attributeSql) { return mapper.modifyTableBySql(tableName, attributeSql); } public int addColumn2TableBySql(String tableName, String attributeSql) { return mapper.addColumn2TableBySql(tableName, attributeSql); } public int dropTable(String tableName) { return mapper.dropTable(tableName); } public int checkTableExist(String tableName) { return mapper.checkTableExist(tableName); } public int countAll(String tableName) { return mapper.countAll(tableName); } /** * 获取字段创建sql