From cb6efdef55c77da2bcc8dbd99a74e7e49c5ec067 Mon Sep 17 00:00:00 2001
From: lin <sbla5888@163.com>
Date: Tue, 05 Mar 2024 18:06:34 +0800
Subject: [PATCH] 邮件收件+bug修复+流程优化

---
 src/main/java/org/springblade/modules/email/service/IEmailAccountService.java                  |    4 
 src/main/java/org/springblade/modules/system/mapper/UserMapper.xml                             |    2 
 src/main/java/org/springblade/modules/email/entity/EmailEntity.java                            |    3 
 src/main/java/org/springblade/modules/messageRecord/controller/MessageRecordController.java    |   13 +
 src/main/java/org/springblade/modules/email/config/MailSenderConfig.java                       |   56 ++++++
 src/main/java/org/springblade/modules/messageRecord/service/IMessageRecordService.java         |    4 
 src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java          |   97 ++++++++++
 src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java                    |    1 
 src/main/java/org/springblade/common/utils/ParseMail.java                                      |  253 ++++++++++++++++++++++++++++
 src/main/java/org/springblade/flow/core/entity/BladeFlow.java                                  |   16 +
 src/main/java/org/springblade/modules/messageRecord/vo/MessageUserVO.java                      |    2 
 src/main/java/org/springblade/modules/messageRecord/service/impl/MessageRecordServiceImpl.java |   12 +
 src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java          |   40 ++++
 src/main/java/org/springblade/modules/email/entity/EmailTemplateEntity.java                    |   10 
 14 files changed, 502 insertions(+), 11 deletions(-)

diff --git a/src/main/java/org/springblade/common/utils/ParseMail.java b/src/main/java/org/springblade/common/utils/ParseMail.java
new file mode 100644
index 0000000..db2d2b5
--- /dev/null
+++ b/src/main/java/org/springblade/common/utils/ParseMail.java
@@ -0,0 +1,253 @@
+package org.springblade.common.utils;
+
+
+import javax.mail.*;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.internet.MimeUtility;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class ParseMail {
+	/**
+	 * 删除邮件
+	 *
+	 * @param messages 要解析的邮件列表
+	 */
+	public static void deleteMessage(Message... messages) throws MessagingException, IOException {
+		if (messages == null || messages.length < 1)
+			throw new MessagingException("未找到要解析的邮件!");
+
+		// 解析所有邮件
+		for (int i = 0, count = messages.length; i < count; i++) {
+
+			/**
+			 *   邮件删除
+			 */
+			Message message = messages[i];
+			String subject = message.getSubject();
+			// set the DELETE flag to true
+			message.setFlag(Flags.Flag.DELETED, true);
+			System.out.println("Marked DELETE for message: " + subject);
+
+
+		}
+	}
+
+	/**
+	 * 获得邮件主题
+	 *
+	 * @param msg 邮件内容
+	 * @return 解码后的邮件主题
+	 */
+	public static String getSubject(MimeMessage msg) throws UnsupportedEncodingException, MessagingException {
+		return MimeUtility.decodeText(msg.getSubject());
+	}
+
+	/**
+	 * 获得邮件发件人
+	 *
+	 * @param msg 邮件内容
+	 * @return 姓名 <Email地址>
+	 * @throws MessagingException
+	 * @throws UnsupportedEncodingException
+	 */
+	public static String getFrom(MimeMessage msg) throws MessagingException, UnsupportedEncodingException {
+		String from = "";
+		Address[] froms = msg.getFrom();
+		if (froms.length < 1)
+			throw new MessagingException("没有发件人!");
+
+		InternetAddress address = (InternetAddress) froms[0];
+		String person = address.getPersonal();
+		if (person != null) {
+			person = MimeUtility.decodeText(person) + " ";
+		} else {
+			person = "";
+		}
+		from = person + "<" + address.getAddress() + ">";
+
+		return from;
+	}
+
+	/**
+	 * 根据收件人类型,获取邮件收件人、抄送和密送地址。如果收件人类型为空,则获得所有的收件人
+	 * <p>Message.RecipientType.TO  收件人</p>
+	 * <p>Message.RecipientType.CC  抄送</p>
+	 * <p>Message.RecipientType.BCC 密送</p>
+	 *
+	 * @param msg  邮件内容
+	 * @param type 收件人类型
+	 * @return 收件人1 <邮件地址1>, 收件人2 <邮件地址2>, ...
+	 * @throws MessagingException
+	 */
+	public static String getReceiveAddress(MimeMessage msg, Message.RecipientType type) throws MessagingException {
+		StringBuffer receiveAddress = new StringBuffer();
+		Address[] addresss = null;
+		if (type == null) {
+			addresss = msg.getAllRecipients();
+		} else {
+			addresss = msg.getRecipients(type);
+		}
+
+		if (addresss == null || addresss.length < 1)
+			return null;
+		for (Address address : addresss) {
+			InternetAddress internetAddress = (InternetAddress) address;
+			receiveAddress.append(internetAddress.toUnicodeString()).append(",");
+		}
+
+		receiveAddress.deleteCharAt(receiveAddress.length() - 1); //删除最后一个逗号
+
+		return receiveAddress.toString();
+	}
+
+	/**
+	 * 获得邮件发送时间
+	 *
+	 * @param msg 邮件内容
+	 * @return yyyy年mm月dd日 星期X HH:mm
+	 * @throws MessagingException
+	 */
+	public static String getSentDate(MimeMessage msg, String pattern) throws MessagingException {
+		Date receivedDate = msg.getSentDate();
+		if (receivedDate == null)
+			return "";
+
+		if (pattern == null || "".equals(pattern))
+			pattern = "yyyy/MM/dd HH:mm ";
+
+		return new SimpleDateFormat(pattern).format(receivedDate);
+	}
+
+	/**
+	 * 判断邮件中是否包含附件
+	 *
+	 * @return 邮件中存在附件返回true,不存在返回false
+	 * @throws MessagingException
+	 * @throws IOException
+	 */
+	public static boolean isContainAttachment(Part part) throws MessagingException, IOException {
+		boolean flag = false;
+		if (part.isMimeType("multipart/*")) {
+			MimeMultipart multipart = (MimeMultipart) part.getContent();
+			int partCount = multipart.getCount();
+			for (int i = 0; i < partCount; i++) {
+				BodyPart bodyPart = multipart.getBodyPart(i);
+				String disp = bodyPart.getDisposition();
+				if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {
+					flag = true;
+				} else if (bodyPart.isMimeType("multipart/*")) {
+					flag = isContainAttachment(bodyPart);
+				} else {
+					String contentType = bodyPart.getContentType();
+					if (contentType.indexOf("application") != -1) {
+						flag = true;
+					}
+
+					if (contentType.indexOf("name") != -1) {
+						flag = true;
+					}
+				}
+
+				if (flag) break;
+			}
+		} else if (part.isMimeType("message/rfc822")) {
+			flag = isContainAttachment((Part) part.getContent());
+		}
+		return flag;
+	}
+
+	/**
+	 * 判断邮件是否已读
+	 *
+	 * @param msg 邮件内容
+	 * @return 如果邮件已读返回true, 否则返回false
+	 * @throws MessagingException
+	 */
+	public static boolean isSeen(MimeMessage msg) throws MessagingException {
+		return msg.getFlags().contains(Flags.Flag.SEEN);
+	}
+
+	/**
+	 * 判断邮件是否需要阅读回执
+	 *
+	 * @param msg 邮件内容
+	 * @return 需要回执返回true, 否则返回false
+	 * @throws MessagingException
+	 */
+	public static boolean isReplySign(MimeMessage msg) throws MessagingException {
+		boolean replySign = false;
+		String[] headers = msg.getHeader("Disposition-Notification-To");
+		if (headers != null)
+			replySign = true;
+		return replySign;
+	}
+
+	/**
+	 * 获得邮件的优先级
+	 *
+	 * @param msg 邮件内容
+	 * @return 1(High):紧急  3:普通(Normal)  5:低(Low)
+	 * @throws MessagingException
+	 */
+	public static String getPriority(MimeMessage msg) throws MessagingException {
+		String priority = "普通";
+		String[] headers = msg.getHeader("X-Priority");
+		if (headers != null) {
+			String headerPriority = headers[0];
+			if (headerPriority.indexOf("1") != -1 || headerPriority.indexOf("High") != -1)
+				priority = "紧急";
+			else if (headerPriority.indexOf("5") != -1 || headerPriority.indexOf("Low") != -1)
+				priority = "低";
+			else
+				priority = "普通";
+		}
+		return priority;
+	}
+
+
+
+	public static String getTextMultipart(Part part) throws Exception{
+		if(part.isMimeType("text/html")){
+			String content = (String) part.getContent();
+			return content;
+		}else if(part.isMimeType("text/plain")){
+			String content = (String) part.getContent();
+			return content;
+		}
+		return "";
+	}
+
+	/**
+	 * 获得邮件文本内容
+	 *
+	 * @param part    邮件体
+	 * @param content 存储邮件文本内容的字符串
+	 * @throws MessagingException
+	 * @throws IOException
+	 */
+	public static void getMailTextContent(Part part, StringBuffer content) throws MessagingException, IOException {
+		// 如果是文本类型的附件,通过getContent方法可以取到文本内容,但这不是我们需要的结果,所以在这里要做判断
+		boolean isContainTextAttach = part.getContentType().indexOf("name") > 0;
+		if (part.isMimeType("text/*") && !isContainTextAttach) {
+			content.append(part.getContent().toString());
+		} else if (part.isMimeType("message/rfc822")) {
+			getMailTextContent((Part) part.getContent(), content);
+		} else if (part.isMimeType("multipart/*")) {
+			Object mpart = part.getContent();
+			if (mpart instanceof Multipart) {
+				Multipart multipart = (Multipart) part.getContent();
+				int partCount = multipart.getCount();
+				for (int i = 0; i < partCount; i++) {
+					BodyPart bodyPart = multipart.getBodyPart(i);
+					getMailTextContent(bodyPart, content);
+				}
+			}
+		}
+	}
+}
+
diff --git a/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java b/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java
index d8d1bdd..d61a1bb 100644
--- a/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java
+++ b/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java
@@ -16,9 +16,12 @@
  */
 package org.springblade.flow.business.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateUtils;
 import org.flowable.engine.HistoryService;
 import org.flowable.engine.TaskService;
 import org.flowable.engine.history.HistoricProcessInstance;
@@ -39,6 +42,8 @@
 import org.springblade.flow.engine.constant.FlowEngineConstant;
 import org.springblade.flow.engine.entity.FlowProcess;
 import org.springblade.flow.engine.utils.FlowCache;
+import org.springblade.modules.district.entity.DistrictEntity;
+import org.springblade.modules.district.service.IDistrictService;
 import org.springblade.modules.property.entity.PropertyCapitalApplyEntity;
 import org.springblade.modules.property.service.IPropertyCapitalApplyService;
 import org.springframework.stereotype.Service;
@@ -46,6 +51,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 流程业务实现类
@@ -104,7 +110,7 @@
 		buildFlowTaskList(bladeFlow, flowList, todoQuery, FlowEngineConstant.STATUS_TODO);
 
 		// 计算总数
-		long count = todoQuery.count();
+		long count = flowList.size();
 		// 设置页数
 		page.setSize(count);
 		// 设置总数
@@ -323,6 +329,11 @@
 			if (capitalApplyEntity != null) {
 				flow.setName(capitalApplyEntity.getName());
 				flow.setDistrictId(capitalApplyEntity.getDistrictId());
+				IDistrictService bean1 = SpringUtils.getBean(IDistrictService.class);
+				DistrictEntity one = bean1.getOne(Wrappers.<DistrictEntity>lambdaQuery().eq(DistrictEntity::getId, capitalApplyEntity.getDistrictId()));
+				if (one != null) {
+					flow.setDistrictName(one.getName());
+				}
 				flow.setLinkman(capitalApplyEntity.getLinkman());
 				flow.setLinkPhone(capitalApplyEntity.getLinkPhone());
 			}
@@ -336,7 +347,32 @@
 			flow.setProcessDefinitionVersion(processDefinition.getVersion());
 			flow.setProcessInstanceId(task.getProcessInstanceId());
 			flow.setStatus(status);
-			flowList.add(flow);
+			Boolean districtNameFlag = false;
+			Boolean nameFlag = false;
+			Boolean dateFlag = false;
+			Boolean isFilter = false;
+
+			if (StringUtils.isNotBlank(bladeFlow.getDistrictName())) {
+				isFilter = true;
+				// 小区、项目名称、申请时间
+				districtNameFlag = flow.getDistrictName().contains(bladeFlow.getDistrictName());
+			} else if (StringUtils.isNotBlank(bladeFlow.getName())) {
+				isFilter = true;
+				// 小区、项目名称、申请时间
+				nameFlag = flow.getName().contains(bladeFlow.getName());
+			} else if (bladeFlow.getStartTimes() != null && bladeFlow.getEndTimes() != null) {
+				isFilter = true;
+				// 小区、项目名称、申请时间
+				dateFlag = flow.getCreateTime().after(bladeFlow.getStartTimes())
+					&& flow.getCreateTime().before(bladeFlow.getEndTimes());
+			}
+			if (isFilter ) {
+				if(districtNameFlag || nameFlag || dateFlag){
+					flowList.add(flow);
+				}
+			} else {
+				flowList.add(flow);
+			}
 		});
 	}
 
diff --git a/src/main/java/org/springblade/flow/core/entity/BladeFlow.java b/src/main/java/org/springblade/flow/core/entity/BladeFlow.java
index fcc57ec..8d65b24 100644
--- a/src/main/java/org/springblade/flow/core/entity/BladeFlow.java
+++ b/src/main/java/org/springblade/flow/core/entity/BladeFlow.java
@@ -16,6 +16,7 @@
  */
 package org.springblade.flow.core.entity;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.flow.core.constant.ProcessConstant;
@@ -36,10 +37,25 @@
 	// 小区id
 	private String districtId;
 
+	// 小区名称
+	private String districtName;
+
 	// 时间名称
 	private String name;
 
 	/**
+	 * 开始时间
+	 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private Date startTimes;
+
+	/**
+	 * 结束时间
+	 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private Date endTimes;
+
+	/**
 	 * 联系人姓名
 	 */
 	@ApiModelProperty(value = "联系人姓名")
diff --git a/src/main/java/org/springblade/modules/email/config/MailSenderConfig.java b/src/main/java/org/springblade/modules/email/config/MailSenderConfig.java
index ed9ba50..9491222 100644
--- a/src/main/java/org/springblade/modules/email/config/MailSenderConfig.java
+++ b/src/main/java/org/springblade/modules/email/config/MailSenderConfig.java
@@ -8,7 +8,10 @@
 import org.springframework.mail.javamail.JavaMailSenderImpl;
 import org.springframework.stereotype.Component;
 
+import javax.mail.*;
+import java.security.Security;
 import java.util.List;
+import java.util.Properties;
 
 @Slf4j
 @Component
@@ -34,6 +37,7 @@
 		//获取数据库中启用的邮件配置
 		EmailEntity params = new EmailEntity();
 		params.setStatus(2);
+		params.setEmailType("1");
 
 		EmailEntity email = emailMapper.selectOne(Condition.getQueryWrapper(params));
 		JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
@@ -61,6 +65,48 @@
 	}
 
 	/**
+	 *
+	 * @return
+	 * @throws MessagingException
+	 */
+	public Store buildMailReceive() throws MessagingException {
+		log.info("初始化mailReceive");
+
+		//获取数据库中启用的邮件配置
+		EmailEntity params = new EmailEntity();
+		params.setStatus(2);
+		params.setEmailType("2");
+
+		EmailEntity email = emailMapper.selectOne(Condition.getQueryWrapper(params));
+
+		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
+		final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";//ssl加密
+
+		//有些参数可能不需要
+		Properties props = new Properties();
+		props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);
+		props.setProperty("mail.imap.socketFactory.fallback", "false");
+		props.setProperty("mail.transport.protocol", email.getProtocol()); // 使用的协议
+		props.setProperty("mail.imap.port", email.getPort().toString());
+		props.setProperty("mail.imap.socketFactory.port", email.getPort().toString());
+
+		//创建会话
+		Session session = Session.getInstance(props, new Authenticator() {
+			@Override
+			protected PasswordAuthentication getPasswordAuthentication() {
+				return new PasswordAuthentication(email.getUsername(),email.getPassword());
+			}
+		});
+		//存储对象
+		Store store = session.getStore("imap");
+		//连接
+		store.connect("imap.qq.com",email.getPort(),email.getUsername(),email.getPassword());
+		return store;
+
+
+	}
+
+	/**
 	 * 获取MailSender
 	 *
 	 * @return CustomMailSender
@@ -68,4 +114,14 @@
 	public JavaMailSenderImpl getSender() {
 		return buildMailSender();
 	}
+
+
+	/**
+	 * 获取MailSender
+	 *
+	 * @return CustomMailSender
+	 */
+	public Store getReceive() throws MessagingException {
+		return buildMailReceive();
+	}
 }
diff --git a/src/main/java/org/springblade/modules/email/entity/EmailEntity.java b/src/main/java/org/springblade/modules/email/entity/EmailEntity.java
index a5451c0..2bc1591 100644
--- a/src/main/java/org/springblade/modules/email/entity/EmailEntity.java
+++ b/src/main/java/org/springblade/modules/email/entity/EmailEntity.java
@@ -72,4 +72,7 @@
 	@ApiModelProperty(value = "备注")
 	private String remark;
 
+	@ApiModelProperty(value = "1:发送配置 2:接收配置")
+	private String emailType;
+
 }
diff --git a/src/main/java/org/springblade/modules/email/entity/EmailTemplateEntity.java b/src/main/java/org/springblade/modules/email/entity/EmailTemplateEntity.java
index 02a20e0..2657390 100644
--- a/src/main/java/org/springblade/modules/email/entity/EmailTemplateEntity.java
+++ b/src/main/java/org/springblade/modules/email/entity/EmailTemplateEntity.java
@@ -16,8 +16,7 @@
  */
 package org.springblade.modules.email.entity;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import io.swagger.annotations.ApiModel;
@@ -43,7 +42,8 @@
 
 	/** id */
 	@ApiModelProperty(value = "主键ID", example = "")
-	private Integer id;
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
 
 	/** 标题 */
 	@ApiModelProperty(value = "标题", example = "")
@@ -58,13 +58,13 @@
 	/** 创建时间 */
 	@ApiModelProperty(value = "创建时间", example = "")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-	@TableField("create_time")
+	@TableField(value = "create_time",fill = FieldFill.INSERT)
 	private Date createTime;
 
 	/** 更新时间 */
 	@ApiModelProperty(value = "更新时间", example = "")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-	@TableField("update_time")
+	@TableField(value = "update_time",fill = FieldFill.UPDATE)
 	private Date updateTime;
 
 	/** 是否已删除 */
diff --git a/src/main/java/org/springblade/modules/email/service/IEmailAccountService.java b/src/main/java/org/springblade/modules/email/service/IEmailAccountService.java
index d7bb95f..06cddbc 100644
--- a/src/main/java/org/springblade/modules/email/service/IEmailAccountService.java
+++ b/src/main/java/org/springblade/modules/email/service/IEmailAccountService.java
@@ -2,7 +2,9 @@
 
 import org.springblade.modules.email.entity.EmailAccount;
 import org.springblade.modules.messageRecord.entity.MessageUser;
+import org.springblade.modules.messageRecord.vo.MessageRecordVO;
 
+import javax.mail.MessagingException;
 import java.util.List;
 
 public interface IEmailAccountService {
@@ -11,4 +13,6 @@
 	Boolean senderEmail(EmailAccount account);
 
 	Boolean sendMessageUserEmail(String title, String content, List<MessageUser> messageUserList);
+
+	List<MessageRecordVO> getUnreadList() throws MessagingException;
 }
diff --git a/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java b/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java
index 1bf4c3f..bec5ba0 100644
--- a/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java
+++ b/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java
@@ -1,15 +1,19 @@
 package org.springblade.modules.email.service.impl;
 
+import com.sun.mail.imap.IMAPFolder;
+import com.sun.mail.imap.IMAPStore;
 import com.xxl.job.core.util.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.common.utils.ParseMail;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.modules.email.config.MailProperties;
 import org.springblade.modules.email.config.MailSenderConfig;
 import org.springblade.modules.email.entity.EmailAccount;
 import org.springblade.modules.email.service.IEmailAccountService;
 import org.springblade.modules.messageRecord.entity.MessageUser;
+import org.springblade.modules.messageRecord.vo.MessageRecordVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mail.javamail.JavaMailSender;
 import org.springframework.mail.javamail.JavaMailSenderImpl;
@@ -17,9 +21,18 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import javax.mail.MessagingException;
+import javax.mail.*;
+import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeUtility;
+import javax.mail.search.FlagTerm;
 import java.io.File;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -79,6 +92,86 @@
 		emailAccount.setSubject(title);
 		emailAccount.setContent(content);
 
-		return  senderEmail(emailAccount);
+		return senderEmail(emailAccount);
+	}
+
+
+	@Override
+	public List<MessageRecordVO> getUnreadList() throws MessagingException {
+		Folder folder = null;
+		Store store = senderConfig.getReceive();
+		List<MessageRecordVO> MessageRecordVOList = new ArrayList<>();
+		try {
+			// 获得收件箱
+			folder = store.getFolder("INBOX");
+			// 以读写模式打开收件箱
+			folder.open(Folder.READ_WRITE);
+			//false 表示未读
+			FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
+			//获得收件箱的邮件列表
+			Message[] messages = folder.search(flagTerm);
+			// 打印不同状态的邮件数量
+			System.out.println("收件箱中共" + messages.length + "封邮件!");
+			System.out.println("收件箱中共" + folder.getUnreadMessageCount() + "封未读邮件!");
+			System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新邮件!");
+			System.out.println("收件箱中共" + folder.getDeletedMessageCount() + "封已删除邮件!");
+
+			System.out.println("------------------------开始解析邮件----------------------------------");
+//			ParseMail.getMailTextContent(messages.)
+			StringBuffer content = new StringBuffer(30);
+
+//			for (int i = 0; i < messages.length; i++) {
+//				System.out.println("消息:"+messages[i].getSubject());
+//				String from = MimeUtility.decodeText(messages[i].getFrom()[0].toString());
+//				InternetAddress internetAddress = new InternetAddress(from);
+//				System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')');
+//			}
+			for (Message message : messages) {
+
+				ParseMail.getMailTextContent(message, content);
+
+				MessageRecordVO messageRecordVO = new MessageRecordVO();
+				String from = MimeUtility.decodeText(message.getFrom()[0].toString());
+				InternetAddress ia = new InternetAddress(from);
+
+				System.out.println("发件人:" + ia.getPersonal() + '(' + ia.getAddress() + ')');
+				System.out.println("主题:" + message.getSubject());
+				System.out.println("主题fa:" + message.getFlags());
+				if (message.getSentDate() != null) {
+					System.out.println("邮件发送时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(message.getSentDate()));
+				}
+				System.out.println("-------------------------------------------\n");
+//				message.setFlag(Flags.Flag.SEEN, true);
+				messageRecordVO.setTitle(message.getSubject());
+				if (message.getSentDate() != null) {
+					messageRecordVO.setStartTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(message.getSentDate()));
+				}
+				messageRecordVO.setUserName(ia.getPersonal() + '(' + ia.getAddress() + ')');
+				messageRecordVO.setContent(String.valueOf(content));
+				MessageRecordVOList.add(messageRecordVO);
+			}
+			return MessageRecordVOList;
+
+		} catch (NoSuchProviderException e) {
+			e.printStackTrace();
+		} catch (MessagingException e) {
+			e.printStackTrace();
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally {
+			try {
+				if (folder != null) {
+					folder.close(false);
+				}
+				if (store != null) {
+					store.close();
+				}
+			} catch (MessagingException e) {
+				e.printStackTrace();
+			}
+		}
+		return null;
 	}
 }
diff --git a/src/main/java/org/springblade/modules/messageRecord/controller/MessageRecordController.java b/src/main/java/org/springblade/modules/messageRecord/controller/MessageRecordController.java
index 2bc6c04..57cbc6b 100644
--- a/src/main/java/org/springblade/modules/messageRecord/controller/MessageRecordController.java
+++ b/src/main/java/org/springblade/modules/messageRecord/controller/MessageRecordController.java
@@ -34,6 +34,8 @@
 import org.springblade.modules.messageRecord.service.IMessageRecordService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 消息记录表 控制器
  *
@@ -140,4 +142,15 @@
 		return R.status(messageRecordService.sendMessage(id));
 	}
 
+	/**
+	 * 消息记录表 分页
+	 */
+	@GetMapping("/getUnreadList")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入meseRecord")
+	public R<List<MessageRecordVO>> getUnreadList() {
+		List<MessageRecordVO> pages = messageRecordService.getUnreadList();
+		return R.data(pages);
+	}
+
 }
diff --git a/src/main/java/org/springblade/modules/messageRecord/service/IMessageRecordService.java b/src/main/java/org/springblade/modules/messageRecord/service/IMessageRecordService.java
index 562c558..f636433 100644
--- a/src/main/java/org/springblade/modules/messageRecord/service/IMessageRecordService.java
+++ b/src/main/java/org/springblade/modules/messageRecord/service/IMessageRecordService.java
@@ -21,6 +21,8 @@
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * 消息记录表 服务类
  *
@@ -42,4 +44,6 @@
 	Boolean customizeSave(MessageRecordVO messageRecord);
 
     Boolean sendMessage(String id);
+
+	List<MessageRecordVO> getUnreadList();
 }
diff --git a/src/main/java/org/springblade/modules/messageRecord/service/impl/MessageRecordServiceImpl.java b/src/main/java/org/springblade/modules/messageRecord/service/impl/MessageRecordServiceImpl.java
index 9d1d35a..5828949 100644
--- a/src/main/java/org/springblade/modules/messageRecord/service/impl/MessageRecordServiceImpl.java
+++ b/src/main/java/org/springblade/modules/messageRecord/service/impl/MessageRecordServiceImpl.java
@@ -37,6 +37,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.mail.MessagingException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -138,5 +139,14 @@
 		return true;
 	}
 
-
+	@Override
+	public List<MessageRecordVO> getUnreadList() {
+		try {
+			List<MessageRecordVO> aa = emailAccountService.getUnreadList();
+			return aa;
+		} catch (MessagingException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
 }
diff --git a/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java b/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java
index d8326a8..15b9e1f 100644
--- a/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java
+++ b/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java
@@ -32,6 +32,7 @@
 	private static final long serialVersionUID = 1L;
 
 	private String startTime;
+
 	private String endTime;
 
 	private String userName;
diff --git a/src/main/java/org/springblade/modules/messageRecord/vo/MessageUserVO.java b/src/main/java/org/springblade/modules/messageRecord/vo/MessageUserVO.java
index ba7b0e8..e61ea24 100644
--- a/src/main/java/org/springblade/modules/messageRecord/vo/MessageUserVO.java
+++ b/src/main/java/org/springblade/modules/messageRecord/vo/MessageUserVO.java
@@ -22,4 +22,6 @@
 	private String startTime;
 	private String endTime;
 
+	private Long sendUserId;
+
 }
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
index 27b1d17..cf451b7 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -245,7 +245,7 @@
         bu.birthday
         FROM
         blade_user bu
-        LEFT JOIN jczz_household jh ON bu.id = jh.associated_user_id
+        LEFT JOIN jczz_household jh ON bu.id = jh.associated_user_id and jh.is_deleted=0
         LEFT JOIN jczz_house jhe ON jhe.house_code = jh.house_code
         LEFT JOIN jczz_district jd on jd.aoi_code=jhe.district_code
         <where>

--
Gitblit v1.9.3