双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

JAVA Map 返回与接受自定义格式

patsxy patsxy 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

package com.igapm.generic.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.igapm.common.enums.InputTypeEnum;
import com.igapm.common.mybatis.core.page.PageQuery;
import com.igapm.common.mybatis.core.page.TableDataInfo;
import com.igapm.common.util.DictSelect;
import com.igapm.generic.domain.CommonConfig;
import com.igapm.generic.domain.CommonConfigPlan;
import com.igapm.generic.domain.dto.CommonConfigDTO;
import com.igapm.generic.domain.query.CommonConfigQuery;
import com.igapm.generic.domain.vo.CommonConfigVO;
import com.igapm.generic.enums.ConfigPlanStatusEnum;
import com.igapm.generic.mapper.CommonConfigMapper;
import com.igapm.generic.mapper.CommonConfigPlanMapper;
import com.igapm.generic.service.ICommonConfigService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**

  • 通用查询字段配置Service业务层处理

  • @author igapm

  • @date 2023-03-16

  • /
    @RequiredArgsConstructor
    @Service
    public class CommonConfigServiceImpl implements ICommonConfigService {

    private final CommonConfigMapper baseMapper;

    private final CommonConfigPlanMapper configPlanMapper;

    /**

    • 通用查询字段配置动态列分页列表
    • /
      @Override
      public TableDataInfo<Map<String, Object>> getDyColPageList(CommonConfigQuery pageQuery) {
      //根据前端路由获取配置生效的方案
      LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
      wrapper.eq(CommonConfigPlan::getPageRoute, pageQuery.getPageRoute());
      wrapper.eq(CommonConfigPlan::getStatus, ConfigPlanStatusEnum.YES.getCode());
      CommonConfigPlan commonConfigPlan = configPlanMapper.selectOne(wrapper);
      if (commonConfigPlan == null) {
        return TableDataInfo.pageFail("该模块路由没有配置方案!");
      
      }
      //根据方案ID获取配置的字段集合
      LambdaQueryWrapper configWrapper = Wrappers.lambdaQuery();
      configWrapper.eq(CommonConfig::getCommonConfigPlanId, commonConfigPlan.getId());
      List commonConfigs = baseMapper.selectList(configWrapper);
      if (CollectionUtils.isEmpty(commonConfigs)) {
        return TableDataInfo.pageFail("该模块路由没有配置方案字段!");
      
      }
      //转换要返回的动态列的表头信息
      List titleList = commonConfigs.stream().map(commonConfig -> {
        Map<String, Object> beanToMap = BeanUtil.beanToMap(commonConfig, true, true);
        beanToMap.put("column" , StrUtil.toCamelCase(commonConfig.getColumnName(), '_'));
        beanToMap.put("name" , commonConfig.getColumnComment());
        beanToMap.put("type" , commonConfig.getInputType());
        return beanToMap;
      
      }).collect(Collectors.toList());
      //处理表头集合中存在的下拉字段,动态添加option下拉集合数据
      titleList = DictSelect.setFormOptionList(titleList, null);
      String inputTypeCode = String.valueOf(InputTypeEnum.SELECT.getCode());
      //过滤下拉的字段集合,用于区分普通字典下拉和人员下拉
      List filerStrList = titleList.stream().filter(f -> f.get("type").toString()
            .equals(inputTypeCode)).map(map -> {
                Map hashMap = new HashMap();
                hashMap.put("column",map.get("column"));
                hashMap.put("select_source",map.get("select_source"));
                return hashMap;
            }).collect(Collectors.toList());
      
      //转换动态列方案信息为SQL
      StringBuffer sb = new StringBuffer();
      sb.append("select ");
      commonConfigs.stream().forEach(commonConfig -> {
        sb.append(commonConfig.getTableName() + "." + commonConfig.getColumnName()
                + " AS `" + StrUtil.toCamelCase(commonConfig.getColumnName(), '_') + "` , ");
      
      });
      String subStr = sb.toString().substring(0, sb.toString().length() - 2);
      String sql = subStr + "from " + commonConfigs.get(0).getTableName();
      Page<List<Map<String, Object>>> result = baseMapper.getDynamicColumn(pageQuery.build(), sql);
      //处理数据集合中的下拉字段,动态转换,添加Text后缀
      List<List<Map<String, Object>>> lists = DictSelect.setValueListMap(result.getRecords(), filerStrList);
      result.setRecords(lists);
      TableDataInfo<Map<String, Object>> rspData = TableDataInfo.pageOk(titleList, result);
      return rspData;
      }

    /**

    • 通用查询字段配置(根据ID)
    • /
      @Override
      public CommonConfigVO queryById(Long id) {
      return baseMapper.selectVoById(id);
      }

    /**

    • 通用查询字段配置列表
    • /
      @Override
      public TableDataInfo queryPageList(CommonConfigDTO dto, PageQuery pageQuery) {
      LambdaQueryWrapper lqw = buildQueryWrapper(dto);
      Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
      return TableDataInfo.build(result);
      }

    /**

    • 查询通用查询字段配置列表
    • /
      @Override
      public List queryList(CommonConfigDTO dto) {
      LambdaQueryWrapper lqw = buildQueryWrapper(dto);
      return baseMapper.selectVoList(lqw);
      }

    private LambdaQueryWrapper buildQueryWrapper(CommonConfigDTO dto) {

      Map<String, Object> params = dto.getParams();
      LambdaQueryWrapper<CommonConfig> lqw = Wrappers.lambdaQuery();
      lqw.eq(dto.getCommonConfigPlanId() != null, CommonConfig::getCommonConfigPlanId, dto.getCommonConfigPlanId());
      lqw.like(StringUtils.isNotBlank(dto.getTableComment()), CommonConfig::getTableComment, dto.getTableComment());
      lqw.like(StringUtils.isNotBlank(dto.getTableName()), CommonConfig::getTableName, dto.getTableName());
      lqw.eq(StringUtils.isNotBlank(dto.getTableAlias()), CommonConfig::getTableAlias, dto.getTableAlias());
      lqw.like(StringUtils.isNotBlank(dto.getColumnName()), CommonConfig::getColumnName, dto.getColumnName());
      lqw.like(StringUtils.isNotBlank(dto.getColumnComment()), CommonConfig::getColumnComment, dto.getColumnComment());
      lqw.eq(StringUtils.isNotBlank(dto.getColumnType()), CommonConfig::getColumnType, dto.getColumnType());
      lqw.eq(StringUtils.isNotBlank(dto.getAdvanceOperatorCode()), CommonConfig::getAdvanceOperatorCode, dto.getNormalOperatorCode());
      lqw.eq(StringUtils.isNotBlank(dto.getNormalOperatorCode()), CommonConfig::getNormalOperatorCode, dto.getNormalOperatorCode());
      lqw.eq(StringUtils.isNotBlank(dto.getInputType()), CommonConfig::getInputType, dto.getInputType());
      lqw.eq(StringUtils.isNotBlank(dto.getDateFrom()), CommonConfig::getDateFrom, dto.getDateFrom());
      lqw.eq(StringUtils.isNotBlank(dto.getSelectSource()), CommonConfig::getSelectSource, dto.getSelectSource());
      lqw.eq(dto.getDispDefault() != null, CommonConfig::getDispDefault, dto.getDispDefault());
      lqw.eq(dto.getQueryDefault() != null, CommonConfig::getQueryDefault, dto.getQueryDefault());
      lqw.eq(StringUtils.isNotBlank(dto.getUserId()), CommonConfig::getUserId, dto.getUserId());
      lqw.eq(StringUtils.isNotBlank(dto.getTenantId()), CommonConfig::getTenantId, dto.getTenantId());
      return lqw;
    

    }

    /**

    • 新增通用查询字段配置
    • /
      @Override
      public Boolean insertByDTO(CommonConfigDTO dto) {
      CommonConfig add = BeanUtil.toBean(dto, CommonConfig.class);
      validEntityBeforeSave(add);
      boolean flag = baseMapper.insert(add) > 0;
      if (flag) {
        dto.setId(add.getId());
      
      }
      return flag;
      }

    /**

    • 修改通用查询字段配置

    • /
      @Override
      public Boolean updateByDTO(CommonConfigDTO dto) {
      CommonConfig update = BeanUtil.toBean(dto, CommonConfig.class);
      validEntityBeforeSave(update);
      return baseMapper.updateById(update) > 0;
      }
      /**

    • 修改通用批量添加字段配置

    • /
      @Override
      public Boolean updateByDTOList(List dto) {
      for(CommonConfigDTO commonConfigDTO:dto) {

        CommonConfig update = BeanUtil.toBean(commonConfigDTO, CommonConfig.class);
        //validEntityBeforeSave(update);
        if(update.getId()==null){
            baseMapper.insert(update);
        }else {
            baseMapper.updateById(update);
        }
      

      }
      return true;
      }

    /**

    • 保存前的数据校验
    • /
      private void validEntityBeforeSave(CommonConfig entity) {
      //做一些数据校验,如唯一约束
      }

    /**

    • 批量删除通用查询字段配置
    • /
      @Override
      public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
      if (isValid) {
        //做一些业务上的校验,判断是否需要校验
      
      }
      return baseMapper.deleteBatchIds(ids) > 0;
      }
      }
      package com.igapm.common.core.domain;

/**

  • 自定义Jackson反序列化日期类型时应用的类型转换器,一般用于@RequestBody接受参数时使用
    • 次类是借用网上别的人的,增加了一个日期格式化的类型
  • @author: songyong
  • @date: 2023-03-29 15:53
  • /
    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.JsonDeserializer;
    import org.apache.commons.lang3.StringUtils;
    import org.apache.commons.lang3.time.DateUtils;

import java.io.IOException;
import java.text.ParseException;
import java.util.Date;

public class DateJacksonConverter extends JsonDeserializer {
//此处尤为重要,请查找自己控制台报错的日期格式化类型是啥样的
//我的是2020-04-29T16:23:44.999Z 所以我在下面的数组中添加了 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 格式;如果下面数组中没有你要的格式化类型,其他的可自行根据自己的情况去添加即可
private static String[] pattern =
new String[]{"yyyy-MM-dd", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm:ss.S",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm:ss.S",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss.S", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"};

@Override
public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {

    Date targetDate = null;
    String originDate = p.getText();
    if (StringUtils.isNotEmpty(originDate)) {
        try {
            long longDate = Long.valueOf(originDate.trim());
            targetDate = new Date(longDate);
        } catch (NumberFormatException e) {
            try {
                targetDate = DateUtils.parseDate(originDate, DateJacksonConverter.pattern);
            } catch (ParseException pe) {
                throw new IOException(String.format(
                        "'%s' can not convert to type 'java.util.Date',just support timestamp(type of long) and following date format(%s)",
                        originDate,
                        StringUtils.join(pattern, ",")));
            }
        }
    }
    return targetDate;
}




@Override
public Class<?> handledType() {
    return Date.class;
}

// public static void main(String[] args) {
// String ll="2023-03-28 17:35:53";
// Date targetDate=null;
// try {
// targetDate= DateUtils.parseDate(ll, DateJacksonConverter.pattern);
// } catch (ParseException pe){
// System.out.println(pe);
// }
// System.out.println(targetDate);
// }

}

...全文

相关推荐

读取Excel文件将数据存入map集合

一个读取Excel文档,将数据存入map集合的方法

liuxiangkui5

java.util.Date到Json日期

java.util.Date到Json日期的转换

hungrydee

Java中快速把map转成json格式的方法

主要介绍了Java中快速把map转成json格式的方法,本文使用json-lib.jar中的JSONSerializer.toJSON方法实现快速把map转换成json,需要的朋友可以参考下

weixin_38526612

java中map集合的用法

java.util 中的集合类包含 Java 中某些最常用的类。 最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。 List 适用于按数值索引访问元素的情形。 Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。 从概念上而言,您可以将 List 看作是具有数值键的 Map。 而实际上,除了 List 和 Map 都在定义 java.util 中外,两者并没有直接的联系。本文将着重介绍核心 Java 发行套件中附带的 Map,同时还将介绍如何采用或实现更适用于您应用程序特定数据的专用 Map。

lx76939412

让JPA的Query查询接口返回Map对象的方法

下面小编就为大家分享一篇让JPA的Query查询接口返回Map对象的方法,具有很的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

weixin_38693419
评论
收藏 已收藏
分享
返回顶部