ludc
2023-10-17 b1161ad21938f1fde021249b9c3dff6f884647b8
首页主数据统计功能接口实现
已修改11个文件
已添加6个文件
374 ■■■■■ 文件已修改
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/MdmCount.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/MdmCountConfig.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmCountController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IMdmCountService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmCountServiceImpl.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MdmCountConfigMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMdmCountConfigService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MdmCountConfigServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MdmCountConfigMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/MdmCount.java
@@ -1,6 +1,8 @@
package com.vci.ubcs.code.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@@ -10,6 +12,8 @@
 * @date 2023/10/16 16:04
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MdmCount implements Serializable {
    /**
@@ -38,8 +42,14 @@
    private String icon;
    /**
     * æ˜¯å¦é»˜è®¤æ˜¾ç¤º
     * æ˜¯å¦é»˜è®¤æ˜¾ç¤º:0默认不显示,1默认显示
     */
    private Integer isDefault;
    public MdmCount(String menuName, String menuRoute, String icon) {
        this.menuName = menuName;
        this.menuRoute = menuRoute;
        this.icon = icon;
    }
}
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/MdmCountConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.vci.ubcs.system.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.java.Log;
import java.io.Serializable;
import java.util.Date;
/**
 * ä¸»æ•°æ®ç»Ÿè®¡å¯¹è±¡
 * @author ludc
 * @date 2023/10/17 14:46
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("PL_SYS_MDMCOUNT_CONFIG")
public class MdmCountConfig implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ä¸»é”®
     */
    @TableId
    private Long id;
    /**
     * ç”¨æˆ·id
     */
    private Long  userId;
    /**
     * ä¸»æ•°æ®åç§°
     */
    private String mdmName;
}
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java
@@ -42,6 +42,8 @@
    String API_PREFIX = "/client";
    String MENU = API_PREFIX + "/menu";
    String MENU_BY_CODES = API_PREFIX + "/menu-by-codes";
    String MDM_COUNT_CONFIG = API_PREFIX + "/mdm-count-config";
    String MENU_BUTTON = API_PREFIX + "/menu-button";
    String DEPT = API_PREFIX + "/dept";
    String TREE = API_PREFIX + "/tree";
@@ -87,6 +89,22 @@
    R<Menu> getMenu(@RequestParam("id") Long id);
    /**
     * æ ¹æ®Code获取菜单信息
     * @param codes
     * @return
     */
    @GetMapping(MENU_BY_CODES)
    R<List<Menu>> getMenuByCodes(@RequestParam("codes") List<String> codes);
    /**
     * èŽ·å–ç”¨é…ç½®çš„ä¸»æ•°æ®ç»Ÿè®¡
      * @param userId
     * @return
     */
    @GetMapping(MDM_COUNT_CONFIG)
    R<MdmCountConfig> getMdmCountConfig (@RequestParam("userId") String userId);
    /**
     * èŽ·å–èœå•ä¸‹é¢çš„æŒ‰é’®
     *
     * @param btmType ä¸šåŠ¡ç±»åž‹
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java
@@ -38,6 +38,16 @@
    }
    @Override
    public R<List<Menu>> getMenuByCodes(List<String> codes) {
        return R.fail("获取数据失败");
    }
    @Override
    public R<MdmCountConfig> getMdmCountConfig(String userId) {
        return R.fail("获取数据失败");
    }
    @Override
    public R<List<Menu>> getMenuButtonByType(String btmType) {
        return R.fail("获取数据失败");
    }
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -868,7 +868,11 @@
    }
    public static String getTableName(String btmname) {
        return (VciQueryWrapperForDO.USER_TABLE_COMPATIBILITY ? "vcibt_" : "pl_code_") + btmname.trim().toLowerCase();
        return (VciQueryWrapperForDO.USER_TABLE_COMPATIBILITY ? "PLBT_CODE" : "PL_CODE_") + btmname.trim().toLowerCase();
    }
    public static String getTableName(String btmname,Boolean isMdmTable) {
        return (isMdmTable ? "PLBT_CODE_" : "PL_CODE_") + btmname.trim().toLowerCase();
    }
    public static Field getTsField(Class c) {
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmCountController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.vci.ubcs.code.controller;
import com.vci.ubcs.code.entity.MdmCount;
import com.vci.ubcs.code.service.IMdmCountService;
import com.vci.ubcs.code.service.MdmProductCodeService;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import org.apache.ibatis.annotations.Param;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * @author ludc
 * @date 2023/10/16 22:57
 */
@RestController
@AllArgsConstructor
@RequestMapping("/mdmCount")
@Api(value = "首页-主数据总数统计", tags = "首页-主数据总数统计接口")
public class MdmCountController {
    private final IMdmCountService mdmCountService;
    /**
     * æŸ¥è¯¢ä¸»æ•°æ®æ€»æ•°
     * @param userId
     * @return
     */
    @GetMapping("/getMdmCounts")
    public R<List<MdmCount>> getMdmCounts(@Param("userId") String userId)throws ServiceException {
        return R.data(mdmCountService.getMdmCounts(userId));
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
@@ -22,6 +22,8 @@
    int  queryCountBySql(@Param("inSql") String inSql);
    String queryCountStringBySql(@Param("inSql") String inSql);
    List<Map> selectBySql(@Param("inSql") String inSql);
    List<Map<String,String>> queryByOnlySqlForMap(@Param("inSql") String inSql);
@@ -34,6 +36,7 @@
     * @return æ’入成功的条数
     */
    Integer insertByBaseModel(String tableName,Map<String,String> columnMap,List<Map<String,String>> mapList);
    /**
     * ä¼ å…¥è¡¨åï¼Œmap,list<map>完成批量更新操作
     * @param tableName è¡¨å
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IMdmCountService.java
@@ -1,6 +1,7 @@
package com.vci.ubcs.code.service;
import com.vci.ubcs.code.entity.MdmCount;
import org.springblade.core.log.exception.ServiceException;
import java.util.List;
@@ -15,7 +16,6 @@
     * ç»Ÿè®¡ä¸»æ•°æ®æ€»æ•°
     * @return
     */
    List<MdmCount> getMdmCounts();
    List<MdmCount> getMdmCounts(String userId) throws ServiceException;
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmCountServiceImpl.java
@@ -4,15 +4,26 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.vci.ubcs.code.entity.CodeClassify;
import com.vci.ubcs.code.entity.MdmCount;
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.system.entity.MdmCountConfig;
import com.vci.ubcs.system.entity.Menu;
import com.vci.ubcs.system.feign.ISysClient;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import static com.vci.ubcs.starter.web.util.VciBaseUtil.getTableName;
/**
 * ä¸»æ•°æ®ç»Ÿè®¡æœåŠ¡
@@ -32,18 +43,80 @@
    @Resource
    private ICodeClassifyService codeClassifyService;
    @Resource
    private CommonsMapper commonsMapper;
    /**
     * æŸ¥è¯¢ä¸»æ•°æ®æ€»æ•°
     * @param userId
     * @return
     * @throws ServiceException
     */
    @Override
    public List<MdmCount> getMdmCounts() {
        // 1、需要先查询出分类下顶级节点有哪些主数据,拿到业务类型名称
    public List<MdmCount> getMdmCounts(String userId) throws ServiceException{
        /** 1、先查询出各分类顶层节点有哪些主数据,拿到业务类型名称,相当于拿到主数据表名
            é¡¶å±‚节点的btmtypeid还需要用作查询条件对应的菜单表的code字段
            ä½†æ˜¯ä¸ºäº†å‡å°‘查询次数,就需在查询是使用btmtypeid字段进行排序
         */
        LambdaQueryWrapper<CodeClassify> wrapper = Wrappers.<CodeClassify>query()
            .lambda()
            .isNull(CodeClassify::getParentCodeClassifyOid).select(CodeClassify::getBtmTypeId);
        Map<String, Object> map = codeClassifyService.getMap(wrapper);
        // 2、然后需要查询出菜单路由和图标
            .isNull(CodeClassify::getParentCodeClassifyOid).select(CodeClassify::getBtmTypeId)
            .orderByAsc(CodeClassify::getBtmTypeId);
        List<CodeClassify> codeClassifies = codeClassifyService.list(wrapper);
        List<String> btyTypeIds = codeClassifies.stream().map(CodeClassify::getBtmTypeId).collect(Collectors.toList());
        // 2、然后feign调用需要查询出菜单路由和图标
        R<List<Menu>> menuList = sysClient.getMenuByCodes(btyTypeIds);
        if(!menuList.isSuccess() && menuList.getData().isEmpty()){
            throw new ServiceException("获取主数据统计时,主数据菜单查询为空,原因:"+menuList.getMsg());
        }
        List<MdmCount> mdmCountList = new ArrayList<>();
        // 3、查询当前登录的用户配置了那些主数据统计项
        R<MdmCountConfig> mdmCountConfig = sysClient.getMdmCountConfig(userId);
        if(!mdmCountConfig.isSuccess()){
            throw new ServiceException("获取主数据统计项配置时出现错误,原因:"+mdmCountConfig.getMsg());
        }
        List<String> mdmNames = null;
        if(Func.isBlank(mdmCountConfig.getData().getMdmName())){
            AtomicInteger count = new AtomicInteger();
            mdmNames = menuList.getData().stream().map(item->{
                if(count.getAndIncrement() <5){
                    return item.getCode();
                }
                return null;
            }).collect(Collectors.toList());
        }else {
            mdmNames = Arrays.stream(mdmCountConfig.getData().getMdmName().split(",")).collect(Collectors.toList());
        }
        final List<String> mdmNamesFinal = mdmNames;
        // 4、然后set进对象中
        menuList.getData().stream().forEach(item->{
            Integer isDefault = mdmNamesFinal.contains(item.getCode()) ? 1:0;
            MdmCount mdmCount = new MdmCount(
                item.getName(),
                getCountByTableName(item.getCode()), /*查询主数据总数*/
                item.getPath(),
                item.getSource(),
                isDefault
            );
            mdmCountList.add(mdmCount);
        });
        return mdmCountList;
    }
        // 3、然后设置进
        return null;
    /**
     * æ‹¼æŽ¥è¡¨åæŸ¥è¯¢æ€»æ•°
     * @param tableName
     * @return
     */
    private String getCountByTableName(String tableName){
        String sql = "SELECT COUNT(*) FROM " + getTableName(tableName,true) +";";
        String count = "0";
        try {
            count = commonsMapper.queryCountStringBySql(sql);
        }catch (Exception e){
            throw new ServiceException("主数据总数查询失败,原因:"+e.getCause());
        }
        return count;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -13,7 +13,6 @@
          and w.LASTV = '1'
    </select>
    <select id="selectById" resultType="java.lang.String">
        ${inSql}
    </select>
@@ -26,6 +25,10 @@
        ${inSql}
    </select>
    <select id="queryCountStringBySql" resultType="java.lang.String">
        ${inSql}
    </select>
    <select id="queryByOnlySqlForMap" resultType="java.util.Map">
        ${inSql}
    </select>
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java
@@ -59,11 +59,25 @@
    private final ICombinationService combinationService;
    private final IMdmCountConfigService mdmCountConfigService;
    @Override
    @GetMapping(MENU)
    public R<Menu> getMenu(Long id) {
        return R.data(menuService.getById(id));
    }
    /**
     * æ ¹æ®code查询菜单信息
     * @param codes
     * @return
     */
    @Override
    @GetMapping(MENU_BY_CODES)
    public R<List<Menu>> getMenuByCodes(List<String> codes) {
        return R.data(menuService.getMenuByCodes(codes));
    }
    @Override
    @GetMapping(MENU_BUTTON)
    public R<List<Menu>> getMenuButtonByType(String btmType) {
@@ -241,5 +255,10 @@
        return R.data(combinationService.getRegexList(combinationIds));
    }
    @Override
    @GetMapping(MDM_COUNT_CONFIG)
    public R<MdmCountConfig> getMdmCountConfig (String userId) {
        return R.data(mdmCountConfigService.getMdmCountConfig(userId));
    }
}
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MdmCountConfigMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.vci.ubcs.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.vci.ubcs.system.entity.MdmCountConfig;
/**
 * @author ludc
 * @date 2023/10/17 14:53
 */
public interface MdmCountConfigMapper extends BaseMapper<MdmCountConfig> {
}
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMdmCountConfigService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.vci.ubcs.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.system.entity.MdmCountConfig;
import org.springblade.core.tool.api.R;
/**
 * ä¸»æ•°æ®ç»Ÿè®¡é¦–页配置服务
 * @author ludc
 * @date 2023/10/17 14:44
 */
public interface IMdmCountConfigService extends IService<MdmCountConfig> {
    /**
     * ä¿å­˜ç”¨æˆ·é…ç½®çš„主数据统计项
     * @param mdmCountConfig
     * @return
     */
    boolean saveMdmCountConfig(MdmCountConfig mdmCountConfig);
    /**
     * èŽ·å–å½“å‰ç”¨æˆ·æœ‰é‚£äº›ä¸»æ•°æ®ç»Ÿè®¡é…ç½®åœ¨é¦–é¡µ
     * @param userId
     * @return
     */
    MdmCountConfig getMdmCountConfig(String userId);
}
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
@@ -175,6 +175,13 @@
    List<Menu> getMenuButtonByType(String btmType);
    /**
     * æ ¹æ®code查询菜单信息
     * @param codes
     * @return
     */
    List<Menu> getMenuByCodes(List<String> codes);
    /**
     * å¯¹KeepAlive值转换成布尔类型进行封装
     *
     * @param childMenu
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MdmCountConfigServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
package com.vci.ubcs.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.system.entity.MdmCountConfig;
import com.vci.ubcs.system.mapper.MdmCountConfigMapper;
import com.vci.ubcs.system.service.IMdmCountConfigService;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.sql.Wrapper;
import java.util.Date;
/**
 * ä¸»æ•°æ®ç»Ÿè®¡é¦–页配置服务
 * @author ludc
 * @date 2023/10/17 14:45
 */
@Service
public class MdmCountConfigServiceImpl extends ServiceImpl<MdmCountConfigMapper, MdmCountConfig> implements IMdmCountConfigService {
    @Override
    public boolean saveMdmCountConfig(MdmCountConfig mdmCountConfig) throws ServiceException{
        if(Func.isEmpty(mdmCountConfig) || Func.isBlank(mdmCountConfig.getUserId().toString())){
            throw new ServiceException("主数据统计配置保存时缺少必填参数!");
        }
        boolean res = false;
        try {
            MdmCountConfig mdmCountConfigDB = getMdmCountConfig(mdmCountConfig.getUserId().toString());
            //新增
            if(Func.isBlank(mdmCountConfig.getId().toString())){
                Func.copy(mdmCountConfig,mdmCountConfigDB);
            }else {
                //修改
                mdmCountConfigDB.setMdmName(mdmCountConfig.getMdmName());
            }
            res = this.saveOrUpdate(mdmCountConfigDB);
        }catch (Exception e){
            throw new ServiceException("配置保存失败,原因:"+e.getCause());
        }
        return res;
    }
    @Override
    public MdmCountConfig getMdmCountConfig(String userId) {
        LambdaQueryWrapper<MdmCountConfig> wrapper = Wrappers.<MdmCountConfig>query().
            lambda().eq(MdmCountConfig::getUserId, userId);
        return this.getOne(wrapper);
    }
}
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
@@ -312,6 +312,22 @@
    }
    /**
     * æ ¹æ®code查询菜单信息
     * @param codes
     * @return
     */
    @Override
    public List<Menu> getMenuByCodes(List<String> codes) {
        LambdaQueryWrapper<Menu> wrapper = Wrappers.<Menu>query()
            .lambda()
            .in(Menu::getCode, codes)
            .eq(Menu::getIsDeleted,0) /*未被删除*/
            .eq(Menu::getCategory,1) /*菜单类型不能为按钮*/
            .orderByAsc(Menu::getCode);  /*根据code排序与classify的btmtypeid对应*/
        return this.list(wrapper);
    }
    /**
     * å¯¹KeepAlive值转换成布尔类型进行封装
     *
     * @param childMenu
Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MdmCountConfigMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.vci.ubcs.system.mapper.MdmCountConfigMapper">
</mapper>