Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue
@@ -646,8 +646,9 @@ } this.btmType.attributes = this.btmType.attributes.filter(item => !item.isDefaultAttr); add(this.btmType, true).then(res => { // console.log(res) // 添加完成,回调父组件的刷新 this.$message.success('保存成功'); this.$message.success(res.data.msg); this.cancleSubmitBtmType(); this.$emit('refreshTable'); }) Source/UBCS-WEB/src/views/modeling/BusinessEdit.vue
@@ -682,8 +682,9 @@ } this.btmType.attributes = this.btmType.attributes.filter(item => !item.isDefaultAttr); add(this.btmType,true).then(res => { // console.log(res) // 添加完成,回调父组件的刷新 this.$message.success('保存成功'); this.$message.success(res.data.msg); this.cancleSubmitBtmType(); this.$emit('refreshTable'); }) Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmCountServiceImpl.java
@@ -7,6 +7,7 @@ import com.vci.ubcs.code.mapper.CommonsMapper; import com.vci.ubcs.code.service.ICodeClassifyService; import com.vci.ubcs.code.service.IMdmCountService; import com.vci.ubcs.starter.web.util.VciBaseUtil; import com.vci.ubcs.system.entity.MdmCountConfig; import com.vci.ubcs.system.entity.Menu; import com.vci.ubcs.system.feign.ISysClient; @@ -18,10 +19,9 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.stream.Collectors; import static com.vci.ubcs.starter.web.util.VciBaseUtil.getTableName; @@ -58,18 +58,24 @@ if(Func.isBlank(userId) && Func.isBlank(AuthUtil.getUserId().toString())){ throw new ServiceException("必传参数用户id不能为空"); } /** 1、先查询出各分类顶层节点有哪些主数据,拿到业务类型名称,相当于拿到主数据表名 顶层节点的btmtypeid还需要用作查询条件对应的菜单表的code字段 但是为了减少查询次数,就需在查询是使用btmtypeid字段进行排序 /** 1、先查询出各分类顶层节点有哪些主数据,拿到绑定的业务类型名称,相当于拿到主数据表名 顶层节点的btmtypeid(2024年1月31日的时候改成了用分类的id)去查询对应的菜单表的code字段 ,查询出主数据管理下面有哪些主数据的 但是为了减少查询次数,就需在查询是使用id字段进行排序 */ LambdaQueryWrapper<CodeClassify> wrapper = Wrappers.<CodeClassify>query() .lambda() .isNull(CodeClassify::getParentCodeClassifyOid).select(CodeClassify::getBtmTypeId) .orderByAsc(CodeClassify::getBtmTypeId); .isNull(CodeClassify::getParentCodeClassifyOid)/*顶层节点*/ .orderByAsc(CodeClassify::getId); // 加上租户查询条件 if(!VciBaseUtil.checkAdminTenant()){ wrapper.eq(CodeClassify::getTenantId,AuthUtil.getTenantId()); } List<CodeClassify> codeClassifies = codeClassifyService.list(wrapper); List<String> btmTypeIds = codeClassifies.stream().map(CodeClassify::getBtmTypeId).collect(Collectors.toList()); // List<String> btmTypeIds = codeClassifies.stream().map(CodeClassify::getBtmTypeId).collect(Collectors.toList()); List<String> classifyIds = codeClassifies.stream().map(CodeClassify::getId).collect(Collectors.toList()); // 2、然后feign调用需要查询出菜单路由和图标 R<List<Menu>> menuList = sysClient.getMenuByCodes(btmTypeIds,Func.toLong(userId)); R<List<Menu>> menuList = sysClient.getMenuByCodes(classifyIds,Func.toLong(userId)); if(!menuList.isSuccess()){ throw new ServiceException("获取主数据统计时,主数据菜单查询失败,原因:"+menuList.getMsg()); } @@ -80,6 +86,7 @@ throw new ServiceException("获取主数据统计项配置时出现错误,原因:"+mdmCountConfig.getMsg()); } List<String> mdmNames = null; //首页配置显示少于5个就默认显示前五个 if(Func.isBlank(mdmCountConfig.getData().getMdmName())){ AtomicInteger count = new AtomicInteger(); mdmNames = menuList.getData().stream().map(item->{ @@ -92,12 +99,29 @@ mdmNames = Arrays.stream(mdmCountConfig.getData().getMdmName().split(",")).collect(Collectors.toList()); } final List<String> mdmNamesFinal = mdmNames; // 4、然后set进对象中 /* 4、获取表名,当前未获取到表名,菜单的code值对应了分类的id, 未对应业务类型的id,所以需要通过菜单的id筛选出配置并且在使用的主数据分类, 然后通过分类信息查询到业务类型id,在通过业务类型接口查询出表名(这一步可以先省略因为分类上关联的业务类型id也可以拼接出表名) */ // 获取分类上的业务类型的id Map<String, String> btmTypeIdMaps = menuList.getData().stream() .filter(menu -> codeClassifies.stream() .anyMatch(codeClassify -> codeClassify.getId().equals(menu.getCode())) ).collect(Collectors.toMap( Menu::getCode, menu -> codeClassifies.stream() .filter(codeClassify -> codeClassify.getId().equals(menu.getCode())) .findFirst() .map(CodeClassify::getBtmTypeId) .orElse(null) )); // 5、然后set进对象中 menuList.getData().stream().forEach(item->{ Integer isDefault = mdmNamesFinal.contains(item.getCode()) ? 1:0; MdmCount mdmCount = new MdmCount( item.getName(), getCountByTableName(item.getCode()), /*查询主数据总数*/ getCountByTableName(btmTypeIdMaps.get(item.getCode())), /*查询主数据总数*/ item.getPath(), item.getSource(), item.getCode(), Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
@@ -108,7 +108,7 @@ <where> 1=1 <if test="oid != null and oid != ''"> and codeclassify0.parentcodeclassifyoid = ${oid} and codeclassify0.parentcodeclassifyoid = ${oid} </if> <if test="oid = null"> and codeclassify0.parentcodeclassifyoid is null @@ -117,7 +117,7 @@ and codeclassify0.tenant_id = #{tenantId} </if> </where> order by lastmodifytime asc order by id asc </select> <select id="selectAllLevelChildHasPath" resultMap="plCodeClassifyResultMap"> @@ -320,20 +320,13 @@ left join pl_code_resemblerule coderesembleruleoid on codeclassify0.codeResembleRuleOid = coderesembleruleoid.oid where codeclassify0.lcstatus = #{lcstatus} and codeclassify0.parentcodeclassifyoid in ( SELECT OID FROM PL_CODE_CLASSIFY WHERE parentcodeclassifyoid IS NULL AND id = #{id} ) or codeclassify0.parentcodeclassifyoid IS NULL and codeclassify0.id = #{id} <if test="tenantId != null and tenantId != ''"> and codeclassify0.tenant_id = #{tenantId} AND codeclassify0.tenant_id = #{tenantId} </if> START WITH codeclassify0.ID = #{id} CONNECT BY PRIOR codeclassify0.OID = codeclassify0.parentCodeClassifyOid order by id asc </select> @@ -611,6 +604,5 @@ and isparticipatecheck = 0 and oid != #{currentOid} </select> </mapper> Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java
@@ -43,7 +43,7 @@ @PostMapping("/submit") @ApiOperationSupport(order = 1) @ApiOperation(value = "新增或修改", notes = "业务类型链接类型传输对象") public R submitBtmType(@RequestBody BtmAndLinkTypeDdlDTO ddlDTO) { public R<List<ModifyAttributeInfo>> submitBtmType(@RequestBody BtmAndLinkTypeDdlDTO ddlDTO) { try { return ddlService.submit(ddlDTO); } catch (Throwable e) { @@ -112,4 +112,5 @@ Func.requireNotNull(addColumnDTO,"添加的对象"); return R.status(ddlService.addColumnForTable(addColumnDTO)); } } Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
@@ -10,6 +10,7 @@ import com.vci.ubcs.starter.exception.VciBaseException; import org.springblade.core.tool.api.R; import java.rmi.ServerException; import java.util.Collection; import java.util.List; @@ -195,7 +196,7 @@ * @param ddlDTO 业务类型传输对象 * @return 执行结果 */ R submit(BtmAndLinkTypeDdlDTO ddlDTO) throws Throwable; R submit(BtmAndLinkTypeDdlDTO ddlDTO) throws ServerException; /** * 按表名获取表信息 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
@@ -1,6 +1,5 @@ package com.vci.ubcs.ddl.service.impl; import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.nacos.shaded.com.google.protobuf.ServiceException; import com.vci.ubcs.ddl.bo.DdlTableBO; @@ -33,8 +32,8 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import javax.validation.constraints.NotNull; import java.rmi.ServerException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -81,25 +80,25 @@ private final Map<String, LinkTypeVO> idLinkMap = new ConcurrentHashMap<>(); private void putBtm(@NotNull BtmTypeVO... voList) throws Throwable { private void putBtm(@NotNull BtmTypeVO... voList) throws ServiceException { String collect = Arrays.stream(voList).map(BtmTypeVO::getId).filter(idBtmMap::containsKey).collect(Collectors.joining(",")); if (StringUtils.isBlank(collect)) { Arrays.stream(voList).forEach(vo -> { idBtmMap.put(vo.getId(), vo); }); } else { throw new Throwable("业务类型:[" + collect + "]正在被其他用户操作"); throw new ServiceException("业务类型:[" + collect + "]正在被其他用户操作"); } } private void putLink(@NotNull LinkTypeVO... voList) throws Throwable { private void putLink(@NotNull LinkTypeVO... voList) throws ServiceException { String collect = Arrays.stream(voList).map(LinkTypeVO::getId).filter(idLinkMap::containsKey).collect(Collectors.joining(",")); if (StringUtils.isBlank(collect)) { Arrays.stream(voList).forEach(vo -> { idLinkMap.put(vo.getId(), vo); }); } else { throw new Throwable("链接类型:[" + collect + "]正在被其他用户操作"); throw new ServiceException("链接类型:[" + collect + "]正在被其他用户操作"); } } @@ -765,9 +764,9 @@ if (StringUtils.isNotBlank(s.getModifyAttributes()) || StringUtils.isNotBlank(s.getDeleteAttributes())) { //需要去判断是否可以更改 if (checkTableHasDataByTableName(s.getTableName())) { //有数据的话,得需要判断属性是否可以修改 //有数据的话,得需要判断属性是否可以删除 if (StringUtils.isNotBlank(s.getDeleteAttributes())) { s.setHandleResult("表格存在数据,不允许删除字段"); s.setHandleResult("表格存在数据,不允许删除"+ s.getDeleteAttributes() +"字段"); return; } List<DdlTableInDataBaseBO> columnInDbList = selectTableColumnInfo(s.getTableName()); @@ -976,7 +975,7 @@ * @return 执行结果 */ @Override public R<List<ModifyAttributeInfo>> submit(BtmAndLinkTypeDdlDTO ddlDTO) throws Throwable { public R<List<ModifyAttributeInfo>> submit(BtmAndLinkTypeDdlDTO ddlDTO) throws ServerException { try { List<ModifyAttributeInfo> changedList = new ArrayList<>(); if (!CollectionUtils.isEmpty(ddlDTO.getBtmTypeList())) { @@ -991,8 +990,13 @@ changedList.addAll(checkDifferent(null,linkTypeList)); removeLink(linkTypeList.toArray(new LinkTypeVO[0])); } String msg = changedList.isEmpty() ? "数据库操作成功" : changedList.get(0).getHandleResult(); R<List<ModifyAttributeInfo>> result = R.success(msg); String msg = "数据库操作成功"; R<List<ModifyAttributeInfo>> result = new R<>(); if((!changedList.isEmpty())&&Func.isEmpty(changedList.get(0).getHandleResult())){ result = R.success(msg); }else { result = R.fail(changedList.get(0).getHandleResult()); } result.setData(changedList); return result; } catch (Exception e) { Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/AttributeController.java
@@ -87,7 +87,7 @@ @ApiOperation(value = "查询列表", notes = "传入查询") public R<IPage<AttributeVO>> pageList(@ApiIgnore @RequestParam Map<String, Object> condition, Query query) { IPage<AttributeVO> pageVO = new Page<>(); IPage<Attribute> page = attributeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getId)); IPage<Attribute> page = attributeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByDesc(Attribute::getCreateTime)); BeanUtil.copy(page,pageVO); pageVO.setRecords( AttributeWrapper.build().listEntityVO(page.getRecords())); return R.data(pageVO); @@ -118,12 +118,11 @@ return R.data(pageVO); } /** * 新增或修改 * @param dto 元数据页面传输对象 * @return 执行结果 */ /** * 新增或修改 * @param dto 元数据页面传输对象 * @return 执行结果 */ @PostMapping("/submit") @ApiOperationSupport(order = 3) @ApiOperation(value = "新增或修改", notes = "传入元数据对象") @@ -156,4 +155,5 @@ public R applyRange(String oid){ return R.data(attributeService.applyRange(oid)); } }