LAPTOP-KB9HII50\70708 1 rok pred
rodič
commit
31e8f931f7

+ 151 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/resource/dao/ResourceBrowseDao.java

@ -15,6 +15,7 @@ import com.yihu.jw.mysql.sqlparser.ParserSql;
import com.yihu.jw.profile.core.ResourceCore;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
@ -801,6 +802,156 @@ public class ResourceBrowseDao {
        return new PageImpl<>(list, PageRequest.of(page - 1, size), count);
    }
    //参数处理
    public String transforParam(String paramSql,String tableSql){
        if(StringUtils.isBlank(paramSql)){
            return tableSql;
        }
        String params[] = paramSql.split(",");
        for (int i=0;i<params.length;i++){
            String param = params[i];
            String key = "";
            String str[] = param.split("-");
            if(str.length>1){
                key = str[1];
            }else {
                key = str[0];
            }
            tableSql = tableSql.replaceAll(param,getDefaultValue(key));
        }
        return tableSql;
    }
    //获取默认值
    public String getDefaultValue(String key){
        if(StringUtils.isBlank(key)){
            return "";
        }
        String result = "";
        switch (key){
            case "dateTimeStart":
                result = "2023-06-26 00:00:00";
                break;
            case "dateTimeEnd":
                result = DateUtil.getStringDateShort() +" 23:59:59";
                break;
            case "dateTimeStartShort":
                result = "2023-06-26 00:00:00".replaceAll("-","");
                break;
            case "dateTimeEndShort":
                result = DateUtil.getStringDate().replaceAll("-","");
                break;
            case "dateStart":
                result = "2023-06-26";
                break;
            case "dateEnd":
                result = DateUtil.getStringDateShort();
                break;
            case "dateStartShort":
                result = "2023-06-26".replaceAll("-","");
                break;
            case "dateEndShort":
                result = DateUtil.getStringDateShort().replaceAll("-","");
                break;
            case "year_months":
                result = DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM);
                break;
            default:
                break;
        }
        return result;
    }
    /**
     * 获取Mysql配置库 指标统计数据
     * getMysqlStatistics
     * @param resourcesCode
     * @param page
     * @param size
     * @return
     * @throws Exception
     */
    public Page<Map<String, Object>> getMysqlStatistics(String resourcesCode, Integer page, Integer size) throws Exception {
        String sql ="";
        String sortOrder = "";
        String sortOrderSql = "";
        String tableSql = "";
        String paramSql = "";//入参
        //通过资源代码获取默认参数
        List<RsResourceDefaultParam> paramsList = resourceDefaultParamDao.findByResourcesCode(resourcesCode);
        for (RsResourceDefaultParam param : paramsList) {
            if (param.getParamKey().equals("sort")) {
                Map<String, String> temp = objectMapper.readValue(param.getParamValue(), Map.class);
                for (Map.Entry<String, String> entry:temp.entrySet()){
                    String key = entry.getKey();
                    String value = entry.getValue();
                    sortOrder ="T."+key+" "+ value+",";
                }
            }else if (param.getParamKey().equals("table")){
                tableSql = "("+param.getParamValue()+") T ";
            }else if (param.getParamKey().equals("param")){
                paramSql = param.getParamValue();
            }
        }
        if (StringUtils.isNoneBlank(sortOrder)){
            sortOrderSql +=" order by "+sortOrder.substring(0,sortOrder.length()-1);
        }
        tableSql = transforParam(paramSql,tableSql);
        //判定是否完整sql语句
        sql = "select T.* from " + tableSql +sortOrderSql;
        //查询总条数
        ParserSql parser = ParserFactory.getParserSql();
        String sqlCount = parser.getCountSql(sql);
        long count = jdbcTemplate.queryForObject(sqlCount, Long.class);
        //默认第一页
        if (page == null) {
            page = defaultPage;
        }
        //默认行数
        if (size == null) {
            size = defaultSize;
        }
        //分页查询
        List<Map<String, Object>> list;
        if (count > size) {
            String sqlList = parser.getPageSql(sql, page, size);
            list = jdbcTemplate.queryForList(sqlList);
        } else {
            list = jdbcTemplate.queryForList(sql);
        }
        if(list.size()>0){
            //字典翻译
            List<DtoResourceMetadata> resourceMetadataList = resourceBrowseMetadataDao.getResourceMetadataHasDict(resourcesCode);
            if(resourceMetadataList.size()>0){
                Map<String,String> fieldDictMap = resourceMetadataList.stream().collect(Collectors.toMap(DtoResourceMetadata::getStdCode,DtoResourceMetadata::getDictCode));
                Map<String,Map<String,String>> dictMap = new HashMap<>();
                String dictSql = "select * from rs_dictionary_entry where DICT_CODE = ?";
                for (DtoResourceMetadata metadata:resourceMetadataList){
                    String dictCode = metadata.getDictCode();
                    if(!dictMap.containsKey(dictCode)){
                        List<RsDictionaryEntry> dictionaryEntries = jdbcTemplate.query(dictSql,new Object[]{dictCode},new BeanPropertyRowMapper<>(RsDictionaryEntry.class));
                        Map<String,String> tmpMap = dictionaryEntries.stream().collect(Collectors.toMap(RsDictionaryEntry::getCode,RsDictionaryEntry::getName));
                        dictMap.put(dictCode,tmpMap);
                    }
                }
                for (Map<String, Object> map:list){
                    for (Map.Entry<String, String> entry : fieldDictMap.entrySet()) {
                        String key = entry.getKey();
                        String value = entry.getValue();
                        if(map.get(key)!=null){
                            String dictValue =  dictMap.get(value).get(map.get(key));
                            map.put(key,dictValue);
                        }
                    }
                }
            }
        }
        return new PageImpl<>(list, PageRequest.of(page - 1, size), count);
    }
    /**
     * 获取Mysql配置库数据

+ 6 - 1
svr/svr-basic/src/main/java/com/yihu/jw/basic/resource/service/ResourceBrowseService.java

@ -327,11 +327,16 @@ public class ResourceBrowseService extends BaseJpaService {
            }
            String method = rsResources.getRsInterface();
            Class clazz = resourceBrowseDao.getClass();
            if(method.equalsIgnoreCase("getMysqlData")){
                Method _method = clazz.getMethod(method, new Class[]{ String.class, Integer.class, Integer.class});
                _method.setAccessible(true);
                return _method.invoke(resourceBrowseDao, rsResources.getCode(), page, size);
            }{
            }else if(method.equalsIgnoreCase("getMysqlStatistics")){
                Method _method = clazz.getMethod(method, new Class[]{ String.class, Integer.class, Integer.class});
                _method.setAccessible(true);
                return _method.invoke(resourceBrowseDao, rsResources.getCode(), page, size);
            }else {
                Method _method = clazz.getMethod(method, new Class[]{String.class, String.class, String.class, String.class, Integer.class, Integer.class});
                _method.setAccessible(true);
                return _method.invoke(resourceBrowseDao, resourcesCode, roleId, saas.toString(), queryParams, page, size);