Commit 49bf501e by chentianzhong

流式查询 优化sql

parent 11e11eb1
......@@ -82,7 +82,7 @@
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
<version>3.5.4</version>
</dependency>
<!--代码生成依赖 -->
......
......@@ -2,28 +2,17 @@ package com.zq.email.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import com.zq.common.annotation.rest.AnonymousGetMapping;
import com.zq.common.annotation.rest.AnonymousPostMapping;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.TokenUtils;
import com.zq.common.vo.CustomerUserVo;
import com.zq.common.vo.OnlineUserDto;
import com.zq.common.vo.ResultVo;
import com.zq.email.constants.EmailConstant;
import com.zq.email.entity.EmailContent;
import com.zq.email.entity.EmailPerson;
import com.zq.email.entity.SysLog;
import com.zq.email.enums.EmailDegreeEnum;
import com.zq.email.enums.EmailFolderEnum;
import com.zq.email.enums.SearchRangeEnum;
import com.zq.email.enums.WhetherEnum;
import com.zq.email.feign.AdminFeignClient;
import com.zq.email.service.IBusinessSystemService;
import com.zq.email.service.IEmailContentService;
import com.zq.email.service.IEmailPersonService;
import com.zq.email.service.ISysLogService;
import com.zq.email.utils.DateUtils;
......@@ -34,19 +23,10 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
/**
* <p>
......@@ -112,7 +92,7 @@ public class EmailApiController {
@ApiOperation("获取未读个人邮件")
@GetMapping("unReadEmailCount")
public ResultVo unReadEmailCount() {
EmailReqVo reqVo = new EmailReqVo();
EmailReqVo1 reqVo = new EmailReqVo1();
reqVo.setFolderId(EmailFolderEnum.FOLDER_INBOX.getKey());
reqVo.setPersonType(EmailConstant.TYPE_EMAIL_RECEIVE);
reqVo.setIsPerson(WhetherEnum.YES.getKey());
......
......@@ -5,8 +5,6 @@ import com.zq.common.utils.AssertUtils;
import com.zq.common.vo.ResultVo;
import com.zq.email.service.IEmailContentService;
import com.zq.email.vo.EmailDegreeVo;
import com.zq.email.vo.EmailDetailVo;
import com.zq.email.vo.EmailReqVo;
import com.zq.email.vo.EmailTaskVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......
......@@ -52,7 +52,7 @@ public class EmailController {
@ApiOperation("列表总数(文件夹未读总数也可以使用这个接口,注意参数)")
@PostMapping("total")
public ResultVo total(@RequestBody EmailReqVo vo) {
public ResultVo total(@RequestBody EmailReqVo1 vo) {
AssertUtils.notNull(vo.getSearchRange(), "缺少参数:searchRange");
AssertUtils.notNull(vo.getFolderId(), "缺少参数:folderId");
......@@ -65,7 +65,7 @@ public class EmailController {
@ApiOperation("列表分页")
@PostMapping("page")
public ResultVo page(@RequestBody EmailReqVo vo) {
public ResultVo page(@RequestBody EmailReqVo1 vo) {
OnlineUserDto adminContext = TokenUtils.getAdminContext();
AssertUtils.notNull(adminContext, "登录已失效,请重新登录后再次尝试!");
......
package com.zq.email.controller;
import cn.hutool.core.date.DateUtil;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.TokenUtils;
import com.zq.common.vo.OnlineUserDto;
import com.zq.common.vo.ResultVo;
import com.zq.email.service.IEmailContentService;
import com.zq.email.service.IEmailInboxService;
import com.zq.email.service.IEmailPersonService;
import com.zq.email.utils.DateUtils;
import com.zq.email.vo.EmailReqVo1;
import com.zq.email.vo.inbox.EmailInboxReqVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.Date;
/**
* <p>
*
* @author chentianzhong
* @since 1.0.0
*/
@Api(tags = "收件箱接口")
@RestController
@RequestMapping("/email/inbox")
@Slf4j
@RequiredArgsConstructor
public class EmailInboxController {
private final IEmailInboxService emailInboxService;
@ApiOperation("列表分页")
@PostMapping("page")
public ResultVo page(@RequestBody EmailInboxReqVo reqVo) {
OnlineUserDto adminContext = TokenUtils.getAdminContext();
AssertUtils.notNull(adminContext, "登录已失效,请重新登录后再次尝试!");
//默认最近一年(服务器时间)
reqVo.setSearchStartTime(DateUtil.offsetMonth(new Date(), -12).toLocalDateTime());
reqVo.setSearchStopTime(LocalDateTime.now());
return ResultVo.success(emailInboxService.inboxPage(reqVo));
}
}
package com.zq.email.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zq.email.dto.Person;
import com.zq.email.entity.EmailPerson;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zq.email.vo.EmailReqVo;
import com.zq.email.vo.EmailSearchReqVo;
import org.apache.ibatis.annotations.Param;
......@@ -25,4 +25,5 @@ public interface EmailPersonMapper extends BaseMapper<EmailPerson> {
Page<EmailPerson> selectSearchPage(Page<EmailPerson> page, @Param("s") EmailSearchReqVo vo);
List<Person> recentlyContacts(List<Long> recentlySendEmail, Integer personType, Integer isSend, Integer isPerson);
}
package com.zq.email.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zq.email.entity.EmailPerson;
import com.zq.email.vo.inbox.EmailInboxReqVo;
/**
* <p>
* 收件箱查询接口
* @author chentianzhong
* @since 1.0.0
*/
public interface IEmailInboxService {
Page<EmailPerson> inboxPage(EmailInboxReqVo reqVo);
}
......@@ -28,10 +28,10 @@ import java.util.List;
public interface IEmailPersonService extends IService<EmailPerson> {
//邮件分页总数
Integer emailCount(EmailReqVo vo);
Integer emailCount(EmailReqVo1 vo);
//邮件分页列表
Page<EmailPerson> emailPage(EmailReqVo vo);
Page<EmailPerson> emailPage(EmailReqVo1 vo);
//邮件分页总数
Integer emailManageCount(EmailSearchReqVo vo);
......
package com.zq.email.service.impl;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.IPage;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.TokenUtils;
import com.zq.common.vo.OnlineUserDto;
import com.zq.email.entity.EmailPerson;
import com.zq.email.enums.EmailFolderEnum;
import com.zq.email.enums.WhetherEnum;
import com.zq.email.mapper.EmailPersonMapper;
import com.zq.email.service.IEmailInboxService;
import com.zq.email.vo.inbox.EmailInboxReqVo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.sql.Wrapper;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
*
* @author chentianzhong
* @since 1.0.0
*/
@Service
@RequiredArgsConstructor
public class EmailInboxServiceImpl implements IEmailInboxService {
private static EmailPersonMapper emailPersonMapper;
@Override
public Page<EmailPerson> inboxPage(EmailInboxReqVo reqVo) {
OnlineUserDto adminContext = TokenUtils.getAdminContext();
AssertUtils.notNull(adminContext, "登录已失效,请重新登录后再次尝试!");
Page<EmailPerson> queryPage = new Page<>(reqVo.getPage(), reqVo.getSize());
LambdaQueryWrapper<EmailPerson> queryWrapper = Wrappers.lambdaQuery(EmailPerson.class)
.eq(EmailPerson::getUserId, adminContext.getUserId())
.eq(EmailPerson::getFolderId, EmailFolderEnum.FOLDER_INBOX.getKey())
.eq(EmailPerson::getPersonType,2)
.eq(EmailPerson::getIsPerson, WhetherEnum.YES.getKey())
.eq(EmailPerson::getIsSend, WhetherEnum.YES.getKey())
.eq(reqVo.getIsRead() != null, EmailPerson::getIsRead, reqVo.getIsRead())
.ge(reqVo.getSearchStartTime() != null, EmailPerson::getSendTime, reqVo.getSearchStartTime())
.le(reqVo.getSearchStopTime() != null, EmailPerson::getSendTime, reqVo.getSearchStopTime());
List<EmailPerson> inboxList = new ArrayList<>();
emailPersonMapper.selectList(queryPage, queryWrapper, resultContext ->{
int resultCount = resultContext.getResultCount();
queryPage.setTotal(resultCount);
System.out.println("当前处理第 " +resultCount +" 条数据");
EmailPerson emailPerson = resultContext.getResultObject();
System.out.println("数据输出:" + JSONUtil.toJsonStr(emailPerson));
inboxList.add(emailPerson);
});
queryPage.setRecords(inboxList);
return queryPage;
}
}
package com.zq.email.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zq.common.utils.AssertUtils;
......@@ -30,7 +27,6 @@ import com.zq.email.service.IEmailAttachService;
import com.zq.email.service.IEmailContentService;
import com.zq.email.service.IEmailPersonService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zq.email.utils.DateUtils;
import com.zq.email.utils.EmailUtil;
import com.zq.email.utils.MsgUtil;
import com.zq.email.utils.SmsUtil;
......@@ -74,7 +70,7 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
@Override
public Integer emailCount(EmailReqVo vo) {
public Integer emailCount(EmailReqVo1 vo) {
OnlineUserDto adminContext = TokenUtils.getAdminContext();
AssertUtils.notNull(adminContext, "登录已失效,请重新登录后再次尝试!");
LambdaQueryWrapper<EmailPerson> queryWrapper = new LambdaQueryWrapper<>();
......@@ -91,7 +87,7 @@ public class EmailPersonServiceImpl extends ServiceImpl<EmailPersonMapper, Email
}
@Override
public Page<EmailPerson> emailPage(EmailReqVo vo) {
public Page<EmailPerson> emailPage(EmailReqVo1 vo) {
OnlineUserDto adminContext = TokenUtils.getAdminContext();
AssertUtils.notNull(adminContext, "登录已失效,请重新登录后再次尝试!");
......
......@@ -2,88 +2,18 @@ package com.zq.email.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sun.org.apache.xpath.internal.operations.Bool;
import com.zq.common.vo.PageReqVo;
import com.zq.email.constants.EmailConstant;
import com.zq.email.enums.EmailFolderEnum;
import com.zq.email.enums.SearchRangeEnum;
import com.zq.email.enums.WhetherEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@ApiModel(description = "邮件列表参数")
@ApiModel(description = "邮件查询参数")
@Data
public class EmailReqVo extends PageReqVo {
/**
*
* 收件箱
* folderId = 1
* personType = 2
* isPerson =1
* isSend = 1
* searchRange = 0
* 部门邮件
* folderId = 2
* personType = 2
* isPerson =0
* isSend = 1
* searchRange = 0
* 草稿箱
* folderId = 3
* personType = 1
* isPerson =1
* isSend = 0
* searchRange = 0
* 已发送
* folderId = 4
* personType = 1
* isPerson =1
* isSend = 1
* searchRange = 0
* 回收站
* folderId = 5
* personType = 2
* isSend = 1
* searchRange = 0
* 其他文件夹
* folderId = 前端根据点击传入
* searchRange = 0
* isSend = 1
*/
@ApiModelProperty(value = "文件夹ID")
private Integer folderId;
@ApiModelProperty("人员类型")
private Integer personType;
@ApiModelProperty("是否个人邮件")
private Integer isPerson ;
@ApiModelProperty("是否已发送")
private Integer isSend;
@ApiModelProperty("查询范围,默认最近三个月")
private Integer searchRange = 0;
@ApiModelProperty("0未读 1已读")
private Integer isRead;
@ApiModelProperty("是否获取人员头像")
private Boolean isSenderPhoto = false;
@ApiModelProperty("发送人Id,邮件管理查询用。")
private Long sendUserId;
@ApiModelProperty("查询开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
......
package com.zq.email.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zq.common.vo.PageReqVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@ApiModel(description = "邮件列表参数")
@Data
public class EmailReqVo1 extends PageReqVo {
/**
*
* 收件箱
* folderId = 1
* personType = 2
* isPerson =1
* isSend = 1
* searchRange = 0
* 部门邮件
* folderId = 2
* personType = 2
* isPerson =0
* isSend = 1
* searchRange = 0
* 草稿箱
* folderId = 3
* personType = 1
* isPerson =1
* isSend = 0
* searchRange = 0
* 已发送
* folderId = 4
* personType = 1
* isPerson =1
* isSend = 1
* searchRange = 0
* 回收站
* folderId = 5
* personType = 2
* isSend = 1
* searchRange = 0
* 其他文件夹
* folderId = 前端根据点击传入
* searchRange = 0
* isSend = 1
*/
@ApiModelProperty(value = "文件夹ID")
private Integer folderId;
@ApiModelProperty("人员类型")
private Integer personType;
@ApiModelProperty("是否个人邮件")
private Integer isPerson ;
@ApiModelProperty("是否已发送")
private Integer isSend;
@ApiModelProperty("查询范围,默认最近三个月")
private Integer searchRange = 0;
@ApiModelProperty("0未读 1已读")
private Integer isRead;
@ApiModelProperty("是否获取人员头像")
private Boolean isSenderPhoto = false;
@ApiModelProperty("发送人Id,邮件管理查询用。")
private Long sendUserId;
@ApiModelProperty("查询开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime searchStartTime;
@ApiModelProperty("查询结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime searchStopTime;
}
package com.zq.email.vo.inbox;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zq.email.vo.EmailReqVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
/**
* <p>
*
* @author chentianzhong
* @since 1.0.0
*/
@ApiModel(description = "收件箱查询参数")
@Data
public class EmailInboxReqVo extends EmailReqVo {
@ApiModelProperty("是否获取人员头像")
private Boolean isSenderPhoto = true;
@ApiModelProperty("是否已读")
private Integer isRead ;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment