田源
2024-01-31 03ab24af158dba0d506569d7e7cf22929ae67296
Merge remote-tracking branch 'origin/master'
已修改14个文件
140 ■■■■■ 文件已修改
Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/BusinessEdit.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/UBCSCondition.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSynonymController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmCountServiceImpl.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/AttributeController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue
@@ -118,7 +118,7 @@
    return {
      // 对话框显示控制
      isShowDialog: this.visible,
      isLoading: false,
      isLoading: true,
      tableHeight: "calc(100vh - 550px)",
      classifyAuthData: [],
      //列头
@@ -374,6 +374,7 @@
    // 加载授权列表
    loadAuthPage() {
      return new Promise((resolve, reject) => {
        this.isLoading = true;
        getButtonByParentCode({ code: "classifyTree" })
          .then((res) => {
            // 记录按钮数据
@@ -441,6 +442,7 @@
            });
          }
        });
        this.isLoading = false;
      });
    },
  },
Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue
@@ -104,7 +104,7 @@
    return {
      // 对话框显示控制
      isShowDialog: this.visible,
      isLoading: false,
      isLoading: true,
      tableHeight: 'calc(100vh - 550px)',
      classifyAuthData: [],
      //列头
@@ -369,7 +369,7 @@
    },
    loadAuthPage() {
      return new Promise((resolve, reject) => {
        // console.log(this.classifyData);
        this.isLoading = true;
        getButtonByParentCode({code: this.classifyData.attributes.id}).then(res => {
          // 记录按钮数据
          this.classifyAuthButton = res.data.data;
@@ -431,6 +431,7 @@
            })
          }
        });
        this.isLoading = false;
      });
    },
  },
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-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/UBCSCondition.java
@@ -213,7 +213,7 @@
                    String field = UBCSSqlKeyword.getColumn(key, "_notin");
                    sql = VciBaseUtil.toInSql(field,value);
                }else{
                    sql = VciBaseUtil.toInSql(key,value);
                    sql = key + "='" + value + "'";
                }
                if(!sql.isEmpty()){
                    whereSqlList.add(sql);
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSynonymController.java
@@ -17,13 +17,13 @@
package com.vci.ubcs.code.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
import com.vci.ubcs.code.entity.CodeSynonym;
import com.vci.ubcs.code.service.ICodeSynonymService;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.code.vo.pagemodel.CodeSynonymVO;
import com.vci.ubcs.code.wrapper.CodeSynonymWrapper;
import com.vci.ubcs.starter.util.UBCSCondition;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -80,7 +80,7 @@
    @ApiOperationSupport(order = 2)
    @ApiOperation(value = "", notes = "传入codeSynonym")
    public R<IPage<CodeSynonymVO>> list(@ApiIgnore @RequestParam Map<String, Object> condition,Query query) {
        IPage<CodeSynonym> page = codeSynonymService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, CodeSynonym.class).lambda().orderByAsc(CodeSynonym::getCreateTime));
        IPage<CodeSynonym> page = codeSynonymService.page(Condition.getPage(query), UBCSCondition.getQueryWrapper(condition, CodeSynonym.class).lambda().orderByAsc(CodeSynonym::getCreateTime));
        return R.data(CodeSynonymWrapper.build().pageVO(page));
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -563,7 +563,7 @@
        }
        if(StringUtils.isNotBlank(id) || StringUtils.isNotBlank(lcStatus) ){
            //String tableName = this.getTableName(treeQueryObject.getConditionMap().get("btmTypeId"),treeQueryObject.getConditionMap().get("id"), treeQueryObject.getConditionMap().get("lcStatus"));
            // TODO: 2024-1-24 23:25我去掉了懒加载,因为会影响数据授权过滤,而且这儿感觉没必要做懒加载
            // TODO: 2024-1-24 23:25我去掉了懒加载,因为会影响数据授权过滤和分类搜索功能,而且这儿感觉没必要做懒加载
            doList = codeClassifyMapper
                .selectCodeClassifyDOByTree(
                    treeQueryObject.getConditionMap().get("id"),
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,7 +990,13 @@
                changedList.addAll(checkDifferent(null,linkTypeList));
                removeLink(linkTypeList.toArray(new LinkTypeVO[0]));
            }
            R<List<ModifyAttributeInfo>> result = R.success("数据库操作成功");
            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));
    }
}
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java
@@ -165,8 +165,10 @@
                classifyAuths = this.classifyAuthMapper.selectList(
                    Wrappers.<ClassifyAuth>query()
                        .lambda().eq(ClassifyAuth::getClassifyId, classifyOidList.get(i))
                        .eq(ClassifyAuth::getAuthType,authType)
                        .in(ClassifyAuth::getRoleId, roleIds)
                );
                //只要当前节点的上层节点中找到了分类授权信息就不再继续网上找了
                if(!classifyAuths.isEmpty()){
                    break;
                }