当前位置: 首页 > article >正文

云岚到家 即刻体检 优惠卷管理 总结不熟练的点

 

多个条件的分页查询 

public PageResult<ActivityInfoResDTO> queryPage(ActivityQueryForPageReqDTO reqDTO) {

        Page<Activity> pagequery = new Page<>(reqDTO.getPageNo(),reqDTO.getPageSize());
        LambdaQueryWrapper<Activity> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(reqDTO.getId()!=null,Activity::getId,reqDTO.getId())
                .eq(reqDTO.getName()!=null&&reqDTO.getName()!="",Activity::getName,reqDTO.getName())
                .eq(reqDTO.getType()!=null,Activity::getType,reqDTO.getType())
                .eq(reqDTO.getStatus()!=null,Activity::getStatus,reqDTO.getStatus());

//        pagequery.addOrder()
        // 添加排序条件(如果提供了排序字段和排序方向)
        if (reqDTO.getOrderBy1() != null && !reqDTO.getOrderBy1().isEmpty()) {
            if (reqDTO.getIsAsc1()!= null && reqDTO.getIsAsc1()) {
                // todo 这样的话就不转为下划线了
//                wrapper.orderByAsc();
                pagequery.addOrder(OrderItem.asc(reqDTO.getOrderBy1()));  //这个asc里面填的直接是列名
            } else {
                pagequery.addOrder(OrderItem.desc(reqDTO.getOrderBy1()));
            }
        }
        if (reqDTO.getOrderBy2() != null && !reqDTO.getOrderBy2().isEmpty()) {
            if (reqDTO.getIsAsc2()!= null && reqDTO.getIsAsc2()) {
                pagequery.addOrder(OrderItem.asc(reqDTO.getOrderBy2()));
            } else {
                pagequery.addOrder(OrderItem.desc(reqDTO.getOrderBy2()));
            }
        }
        Page<Activity> page = this.page(pagequery, wrapper);
        List<Activity> records = page.getRecords();
        List<ActivityInfoResDTO> list = BeanUtils.copyToList(records, ActivityInfoResDTO.class);
        PageResult<ActivityInfoResDTO> pageResult = new PageResult<>();
        pageResult.setPages(page.getPages());
        pageResult.setTotal(page.getTotal());
        pageResult.setList(list);
        return pageResult;
    }

 

设置比较复杂的mp 语句 setsql apply

 LambdaUpdateWrapper<ReservationSetting> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(ReservationSetting::getOrderDate,placeOrderReqDTO.getReservationDate())
                .setSql("reservations = reservations+1")
                .apply("number > reservations + 1");

 取得当月第一天

date 是string类型的

 YearMonth yearMonth = YearMonth.parse(date, DateTimeFormatter.ofPattern("yyyy-MM"));
        LocalDate firstDay = yearMonth.atDay(1); // 获取当前月的第一天
        LocalDate lastDay = yearMonth.atEndOfMonth();

 读取excel文件进行批量操作

@RequestPart

  • @RequestPart这个注解用在multipart/form-data表单提交请求的方法上。
  • 支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的。
  • @RequestParam也同样支持multipart/form-data请求。
  • 他们最大的不同是,当请求方法的请求参数类型不再是String类型的时候。@RequestParam适用于name-value “String”类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)例如:key = user, value = {“name”:“aaa”,“xx”:“xx”}。
  • @RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)
 @PostMapping("/upload")
    @ApiOperation("上传文件批量预约设置")
    public void upload(@RequestPart("file") MultipartFile file) {
        reservationSettingService.editNumberByExcel(file);
    }

 

  public void editNumberByExcel(MultipartFile file) {
        try {
            EasyExcel.read(file.getInputStream(), ReservationImportData.class, new ReservationSettingListener(owner)).sheet().doRead();
        } catch (IOException e) {
            throw new BadRequestException("格式存在错误");
        }
    }

实现方式

使用阿里的easyexcel  ,直接查看官方文档即可

读的时候 首先写一个监听器,每读到一行数据都会触发invoke方法。读的时候都是都是以string 读入的,然后自己进行转换

public class ReservationSettingListener implements ReadListener<ReservationImportData> {
    /**
     * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
     */
    private static final int BATCH_COUNT = 100;
    /**
     * 缓存的数据
     */
    private List<ReservationSetting> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
    /**
     * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。
     */
    private IReservationSettingService settingService;

    /**
     * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
     */
    public ReservationSettingListener(IReservationSettingService settingService) {
        this.settingService = settingService;
    }

    /**
     * 这个每一条数据解析都会来调用
     * 每解析一条数据都会调用
     */

    @Override
    public void invoke(ReservationImportData importData, AnalysisContext analysisContext) {
        ReservationSetting reservationSetting = new ReservationSetting();
        reservationSetting.setNumber(importData.getNumber());
        reservationSetting.setOrderDate(LocalDate.parse(importData.getDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        cachedDataList.add(reservationSetting);
        // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
        if (cachedDataList.size() >= BATCH_COUNT) {
            saveData();
            // 存储完成清理 list
            cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
        }
    }

    /**
     * 所有数据解析完成了 都会来调用
     *
     * @param context
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 这里也要保存数据,确保最后遗留的数据也存储到数据库
        saveData();
    }

    /**
     * 加上存储数据库
     */
    private void saveData() {
        if (cachedDataList.size() > 0){
            settingService.saveBatch(cachedDataList);
        }
    }
}

统计订单状态

最好定义一个实体类来接收,否则难转化,map的话 需要用list<map> 因为会死多行 两列,map的话 key就是列名,值才是数据 map.get(status)  map.get(count)  这样比较麻烦 ,定义一个实体类接受比较好

 last一般与limit配合

 


http://www.kler.cn/news/367930.html

相关文章:

  • js纯操作dom版购物车(实现购物车功能)
  • 深入解析 OceanBase 数据库中的局部索引和全局索引
  • 实验04while(简单循环)---7-2 整数的立方和
  • KAN原作论文github阅读(readme)
  • 【CUDA代码实践02】矩阵加法运算程序
  • Linux -- 共享内存(2)
  • 51c~目标检测~合集1
  • 循序渐进丨openGauss / MogDB 数据库内存占用相关SQL
  • 力扣每日一题打卡 684. 冗余连接
  • ReactNative TurboModule(3)
  • Spring Boot实战:构建全功能论坛平台
  • IllegalMonitorStateException:Illegal Monitor Operation 完美解决方法 ⚙️
  • 接口测试 —— Postman 变量了解一下!
  • Apache Commons Collections4 的详细指南
  • Android简单控件实现简易计算器
  • 详细且系统的Spring Boot应用开发
  • 还没想好说什么
  • 【负二进制】个人练习-Leetcode-1073. Adding Two Negabinary Numbers
  • 从零开始:用Spring Boot搭建厨艺分享网站
  • Linux:指令再认识
  • 使用 Python 实现智能地震预警系统
  • Python画笔案例-094 绘制 神奇彩条动画
  • 【报错】FastGPT本地部署通义千问,报错undefined 当前分组 default 下对于模型 qwen:7b 无可用渠道 【搭建企业级知识库问答系统】
  • 视觉工具与C#联合开发图片格式转换
  • 猫头虎 分享已解决Bug || RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED 解决方案
  • 第十一部分 Java 数据结构及集合