Browse Source

用户账号重复发邮件

njs 2 years ago
parent
commit
1cbafffba2

+ 1 - 1
pom.xml

@@ -33,7 +33,7 @@
 		<poi.version>3.17</poi.version>
 		<poi.version>3.17</poi.version>
 		<velocity.version>1.7</velocity.version>
 		<velocity.version>1.7</velocity.version>
         <lombok.version>1.16.10</lombok.version>
         <lombok.version>1.16.10</lombok.version>
-
+		<mail.version>1.4.7</mail.version>
 	</properties>
 	</properties>
 	
 	
     <!-- 依赖声明 -->
     <!-- 依赖声明 -->

+ 19 - 1
suishenbang-admin/src/main/resources/application-dev.yml

@@ -94,7 +94,25 @@ spring:
     restart:
     restart:
       # 热部署开关
       # 热部署开关
       enabled: true
       enabled: true
-
+  mail:
+    #邮件服务器地址
+    host: mail.dgtis.com
+    #端口号
+    port: 25
+    #发送者邮箱地址
+    username: dgtmail@dgtis.com
+    #邮箱的授权码
+    password: DGT.1111
+    #默认编码格式
+    default-encoding: UTF-8
+    properties:
+      mail:
+        #启动debug调试
+        debug: true
+        smtp:
+          socketFactory:
+            #SSL连接配置
+            class: javax.net.ssl.SSLSocketFactory
 # MyBatis
 # MyBatis
 mybatis:
 mybatis:
     # 搜索指定包别名
     # 搜索指定包别名

+ 19 - 0
suishenbang-admin/src/main/resources/application-prod.yml

@@ -92,6 +92,25 @@ spring:
     restart:
     restart:
       # 热部署开关
       # 热部署开关
       enabled: true
       enabled: true
+  mail:
+    #邮件服务器地址
+    host: mail.dgtis.com
+    #端口号
+    port: 25
+    #发送者邮箱地址
+    username: dgtmail@dgtis.com
+    #邮箱的授权码
+    password: DGT.1111
+    #默认编码格式
+    default-encoding: UTF-8
+    properties:
+      mail:
+        #启动debug调试
+        debug: true
+        smtp:
+          socketFactory:
+            #SSL连接配置
+            class: javax.net.ssl.SSLSocketFactory
 
 
 # MyBatis
 # MyBatis
 mybatis:
 mybatis:

+ 20 - 0
suishenbang-admin/src/main/resources/application-test.yml

@@ -70,6 +70,26 @@ spring:
     date-format: yyyy-MM-dd HH:mm:ss
     date-format: yyyy-MM-dd HH:mm:ss
   profiles:
   profiles:
     include: test-druid
     include: test-druid
+
+  mail:
+    #邮件服务器地址
+    host: mail.dgtis.com
+    #端口号
+    port: 25
+    #发送者邮箱地址
+    username: dgtmail@dgtis.com
+    #邮箱的授权码
+    password: DGT.1111
+    #默认编码格式
+    default-encoding: UTF-8
+    properties:
+      mail:
+        #启动debug调试
+        debug: true
+        smtp:
+          socketFactory:
+            #SSL连接配置
+            class: javax.net.ssl.SSLSocketFactory
   # 文件上传
   # 文件上传
   servlet:
   servlet:
      multipart:
      multipart:

+ 19 - 0
suishenbang-admin/src/main/resources/application-uat.yml

@@ -87,6 +87,25 @@ spring:
        max-file-size:  10MB
        max-file-size:  10MB
        # 设置总上传的文件大小
        # 设置总上传的文件大小
        max-request-size:  20MB
        max-request-size:  20MB
+  mail:
+    #邮件服务器地址
+    host: mail.dgtis.com
+    #端口号
+    port: 25
+    #发送者邮箱地址
+    username: dgtmail@dgtis.com
+    #邮箱的授权码
+    password: DGT.1111
+    #默认编码格式
+    default-encoding: UTF-8
+    properties:
+      mail:
+        #启动debug调试
+        debug: true
+        smtp:
+          socketFactory:
+            #SSL连接配置
+            class: javax.net.ssl.SSLSocketFactory
   # 服务模块
   # 服务模块
   devtools:
   devtools:
     restart:
     restart:

+ 19 - 0
suishenbang-admin/src/main/resources/application.yml

@@ -1,4 +1,23 @@
 spring:
 spring:
   profiles: 
   profiles: 
     active: dev
     active: dev
+  mail:
+    #邮件服务器地址
+    host: mail.dgtis.com
+    #端口号
+    port: 25
+    #发送者邮箱地址
+    username: dgtmail@dgtis.com
+    #邮箱的授权码
+    password: DGT.1111
+    #默认编码格式
+    default-encoding: UTF-8
+    properties:
+      mail:
+        #启动debug调试
+        debug: true
+        smtp:
+          socketFactory:
+            #SSL连接配置
+            class: javax.net.ssl.SSLSocketFactory
 #开发环境dev 测试环境test 正式环境prod  启动时可以设置参数Java -jar xxxxxx.jar spring.profiles.actiove=prod
 #开发环境dev 测试环境test 正式环境prod  启动时可以设置参数Java -jar xxxxxx.jar spring.profiles.actiove=prod

+ 7 - 0
suishenbang-quartz/src/main/java/com/dgtly/quartz/task/RyTask.java

@@ -94,4 +94,11 @@ public class RyTask
     public void updateCustomers()throws Exception {
     public void updateCustomers()throws Exception {
         sysUserOrderAuthorService.updateCustomers();
         sysUserOrderAuthorService.updateCustomers();
     }
     }
+
+    /**
+     * 用户账号重复通知邮件
+     * **/
+    public void sendmailUnionUser()throws Exception{
+        sysUserOrderAuthorService.sendmailUnionUser();
+    }
 }
 }

+ 7 - 2
suishenbang-system/pom.xml

@@ -8,7 +8,7 @@
         <version>4.0.0</version>
         <version>4.0.0</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
-    
+
     <artifactId>suishenbang-system</artifactId>
     <artifactId>suishenbang-system</artifactId>
     
     
     <description>
     <description>
@@ -38,7 +38,12 @@
             <groupId>com.dgtly</groupId>
             <groupId>com.dgtly</groupId>
             <artifactId>suishenbang-common</artifactId>
             <artifactId>suishenbang-common</artifactId>
         </dependency>
         </dependency>
-
+        <!--mail-->
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+            <version>${mail.version}</version>
+        </dependency>
 
 
 
 
 
 

+ 21 - 0
suishenbang-system/src/main/java/com/dgtly/system/domain/Mail.java

@@ -0,0 +1,21 @@
+package com.dgtly.system.domain;
+
+import lombok.Data;
+
+@Data
+public class Mail {
+    private String from;
+    private String to;
+    private String subject;
+    private String content ;
+
+    public Mail(){}
+    public Mail(String from,String to,String subject,String content){
+        this.from = from;
+        this.to = to;
+        this.subject = subject ;
+        this.content = content;
+    }
+
+
+}

+ 44 - 0
suishenbang-system/src/main/java/com/dgtly/system/domain/UserVO.java

@@ -0,0 +1,44 @@
+package com.dgtly.system.domain;
+
+import com.dgtly.common.annotation.Excel;
+import com.dgtly.common.annotation.Excel.ColumnType;
+import com.dgtly.common.annotation.Excel.Type;
+import com.dgtly.common.annotation.Excels;
+import com.dgtly.common.core.domain.BaseEntity;
+import com.dgtly.common.core.domain.Ztree;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 用户重复对象 VO
+ * 
+ *
+ */
+@Data
+public class UserVO
+{
+    private static final long serialVersionUID = 1L;
+
+
+    /** 登录名称 */
+    @Excel(name = "登录名称")
+    private String loginName;
+
+    /** 用户名称 */
+    @Excel(name = "用户名称")
+    private String userName;
+
+    /** 手机号码 */
+    @Excel(name = "手机号码")
+    private String phonenumber;
+
+
+}

+ 3 - 0
suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserMapper.java

@@ -5,6 +5,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.Set;
 
 
 import com.dgtly.system.domain.SysUser;
 import com.dgtly.system.domain.SysUser;
+import com.dgtly.system.domain.UserVO;
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
@@ -214,4 +215,6 @@ public interface SysUserMapper
     int deleteByLoginName(@Param("loginName") String loginName);
     int deleteByLoginName(@Param("loginName") String loginName);
 
 
     List<SysUser> selectUser();
     List<SysUser> selectUser();
+
+    List<UserVO> sendmailUnionUser();
 }
 }

+ 2 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserOrderAuthorService.java

@@ -96,4 +96,6 @@ public interface ISysUserOrderAuthorService
     void quitUser();
     void quitUser();
 
 
     void updateCustomers();
     void updateCustomers();
+
+    void sendmailUnionUser();
 }
 }

+ 100 - 1
suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserOrderAuthorServiceImpl.java

@@ -9,12 +9,22 @@ import com.dgtly.common.utils.StringUtils;
 import com.dgtly.common.utils.UserIdentityUtil;
 import com.dgtly.common.utils.UserIdentityUtil;
 import com.dgtly.system.domain.*;
 import com.dgtly.system.domain.*;
 import com.dgtly.system.mapper.*;
 import com.dgtly.system.mapper.*;
+import com.dgtly.system.service.ISysDictDataService;
+import com.dgtly.system.util.MailUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import com.dgtly.system.service.ISysUserOrderAuthorService;
 import com.dgtly.system.service.ISysUserOrderAuthorService;
 import com.dgtly.common.core.text.Convert;
 import com.dgtly.common.core.text.Convert;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import javax.mail.MessagingException;
+import javax.mail.NoSuchProviderException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.MimeMessage;
+
 /**
 /**
  * 权限Service业务层处理
  * 权限Service业务层处理
  * 
  * 
@@ -22,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
  * @date 2022-03-22
  * @date 2022-03-22
  */
  */
 @Service
 @Service
+@Component
 public class SysUserOrderAuthorServiceImpl implements ISysUserOrderAuthorService 
 public class SysUserOrderAuthorServiceImpl implements ISysUserOrderAuthorService 
 {
 {
     @Autowired
     @Autowired
@@ -32,15 +43,25 @@ public class SysUserOrderAuthorServiceImpl implements ISysUserOrderAuthorService
 
 
     @Autowired
     @Autowired
     private SysUserExtMapper userExtMapper;
     private SysUserExtMapper userExtMapper;
-
+    @Autowired
+    private ISysDictDataService sysDictDataService;
     @Autowired
     @Autowired
     private SysUserMapper userMapper;
     private SysUserMapper userMapper;
     @Autowired
     @Autowired
     private SysUserQuitMapper userQuitMapper;
     private SysUserQuitMapper userQuitMapper;
     @Autowired
     @Autowired
     private AssRelcustomerinfoMapper relcustomerinfoMapper;
     private AssRelcustomerinfoMapper relcustomerinfoMapper;
+    @Autowired
+    private MailUtils mailUtils;
+
     @Autowired
     @Autowired
     private CustomerMapper customersMapper;
     private CustomerMapper customersMapper;
+    @Value(value = "${spring.mail.username}")
+    private String myEmailAccount;
+    @Value(value = "${spring.mail.password}")
+    public  String myEmailPassword;
+    @Value(value = "${spring.mail.host}")
+    public  String myEmailSMTPHost;
 
 
     /**
     /**
      * 查询权限
      * 查询权限
@@ -390,5 +411,83 @@ public class SysUserOrderAuthorServiceImpl implements ISysUserOrderAuthorService
             }
             }
     }
     }
 
 
+    @Override
+    public void sendmailUnionUser() {
+        List<UserVO> userList = userMapper.sendmailUnionUser();
+        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
+        Properties props = new Properties();                    // 参数配置
+        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
+        props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
+        props.setProperty("mail.smtp.port", "25");
+        props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
+        props.setProperty("mail.smtp.starttls.enable", "false");            // 需要请求认证
+        props.setProperty("mail.smtp.ssl.enable", "false");            // 需要请求认证
+        Set<String> sendEmailUser = getConfigValueSet("sendmailUnionUser");
+        Session session = Session.getDefaultInstance(props);
+        session.setDebug(true);
+
+        for (String email : sendEmailUser
+        ) {
+            Mail mail = new Mail();
+            try {
+                mail.setFrom(myEmailSMTPHost);
+                mail.setTo(email);
+                mail.setSubject("用户账号重复");
+                mail.setContent(getHtmlUserContextList(userList));
+                //mailUtils.sendMailHtml(mailFromUsername, email, "用户账号重复通知", "您好,重复用户信息如下<br>" + userList);
+                MimeMessage message = mailUtils.createMimeMessage(session, myEmailAccount, email, mail);
+
+                // 4. 根据 Session 获取邮件传输对象
+                Transport transport = session.getTransport();
+
+                transport.connect(myEmailAccount, myEmailPassword);
+
+                // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
+                transport.sendMessage(message, message.getAllRecipients());
+
+                // 7. 关闭连接
+                transport.close();
+            } catch (NoSuchProviderException e) {
+                e.printStackTrace();
+            } catch (MessagingException e) {
+                e.printStackTrace();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public Set<String> getConfigValueSet(String dictType){
+            Set<String> res = new HashSet<>();
+            List<SysDictData> dictDatas = sysDictDataService.selectSimpleDictDataByType(dictType);
+            for(SysDictData d: dictDatas){
+                res.add(d.getDictValue());
+            }
+            return res;
+    }
+
+    public String getHtmlUserContextList(List<UserVO> userList) {
+
+            String str = "";
+            for (UserVO u : userList) {
+                str += "<tr>" +
+                        "   <td>" + u.getUserName()
+                        + "   </td><td>" + u.getLoginName()
+                        + "   </td><td>" + u.getPhonenumber()
+                        + "   </td>" +
+                        "</tr>";
+            }
+
+            String html = "<table border='1'  Cellspacing='0'>" +
+                    "    <tr>" +
+                    "        <th>用户昵称</th>" +
+                    "        <th>用户登录名</th>" +
+                    "        <th>用户手机号</th>" +
+                    "    </tr>" +
+                    str +
+                    "</table>";
+
+            return html;
+        }
 }
 }
 
 

+ 96 - 0
suishenbang-system/src/main/java/com/dgtly/system/util/MailUtils.java

@@ -0,0 +1,96 @@
+package com.dgtly.system.util;
+
+import com.dgtly.system.domain.Mail;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.MimeMessageHelper;
+import org.springframework.stereotype.Component;
+
+import javax.mail.Session;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import java.io.File;
+import java.util.Date;
+
+@Component
+public class MailUtils {
+    @Autowired
+    JavaMailSender javaMailSender;
+  /*  public void  sendMail(String from,String to,String subject,String text){
+        SimpleMailMessage smm = new SimpleMailMessage();
+        smm.setFrom(from);//发送者
+        smm.setTo(to);//收件人
+//        smm.setCc(cc);//抄送人
+        smm.setSubject(subject);//邮件主题
+        smm.setText(text);//邮件内容
+        javaMailSender.send(smm);//发送邮件
+    }
+
+    public void sendMailHtml(String from,String to,String subject,String text) {
+        MimeMessage mailMessage=javaMailSender.createMimeMessage();
+        //需要借助Helper类
+        MimeMessageHelper helper=new MimeMessageHelper(mailMessage);
+
+        try {
+            helper.setFrom(from);
+            helper.setTo(to);
+//            helper.setBcc(cc);
+            helper.setSubject(subject);
+            helper.setSentDate(new Date());//发送时间
+            helper.setText(text,true);//第一个参数要发送的内容,第二个参数是不是Html格式。
+
+            javaMailSender.send(mailMessage);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void sendFileMail(String from, String to, String subject, String text, File file){
+        try {
+            MimeMessage mm = javaMailSender.createMimeMessage();
+            MimeMessageHelper mmh = new MimeMessageHelper(mm,true);
+            mmh.setFrom(from);
+            mmh.setTo(to);
+            mmh.setSubject(subject);
+            mmh.setText(text);
+            mmh.addAttachment(file.getName(), file);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }*/
+    public  MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail, Mail mail) throws Exception {
+        // 1. 创建一封邮件
+        MimeMessage message = new MimeMessage(session);
+
+        // 2. From: 发件人
+        message.setFrom(new InternetAddress(sendMail, mail.getFrom(), "UTF-8"));
+
+        // 3. To: 收件人(可以增加多个收件人、抄送、密送)
+        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, mail.getTo(), "UTF-8"));
+
+        // 4. Subject: 邮件主题
+        message.setSubject(mail.getSubject(), "UTF-8");
+
+        // 5. Content: 邮件正文(可以使用html标签)
+        message.setContent(mail.getContent(), "text/html;charset=UTF-8");
+
+        // 6. 设置发件时间
+        message.setSentDate(new Date());
+
+        // 7. 保存设置
+        message.saveChanges();
+
+        return message;
+    }
+
+
+    /*@Test
+    public void sendFileMailTest(){
+        String context="<b>尊敬的用户:</b><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;您好,管理员已为你申请了新的账号,"+
+                "请您尽快通过<a href=\"http://www.liwz.top/\">链接</a>登录系统。"
+                +"<br>修改密码并完善你的个人信息。<br><br><br><b>员工管理系统<br>Li,Wan Zhi</b>";
+//        sendFileMail("1447151459@qq.com","qiaoxm@dgtis.com","发送带附件的邮件","邮件发送成功啦!",new File("D:\\test.png"));
+        sendMailHtml("1447151459@qq.com","13323710223@189.cn","发送html的邮件",context);
+    }*/
+}

+ 16 - 0
suishenbang-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -506,4 +506,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			   u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.quit
 			   u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.quit
 		from sys_user u where quit is null
 		from sys_user u where quit is null
 	</select>
 	</select>
+
+	<select id="sendmailUnionUser" resultType="com.dgtly.system.domain.UserVO"  >
+		select  u.user_name as userName,u.phonenumber,u.login_name as loginName
+		from sys_user u WHERE
+				( u.phonenumber, u.user_name ) IN (
+				SELECT
+					phonenumber,
+					user_name
+				FROM
+					sys_user
+				GROUP BY
+					phonenumber,
+					user_name
+				HAVING
+					count(*) > 1) order by user_name
+	</select>
 </mapper> 
 </mapper> 

+ 1 - 1
suishenbang-system/src/main/resources/mapper/system/SysUserQuitMapper.xml

@@ -123,7 +123,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
         </foreach>
     </delete>
     </delete>
 
 
-    <select id="selectAllUserSapEmployeeId"  resultType="String">
+    <select id="selectAllUserSapEmployeeId"  resultType="java.lang.String">
         select u.SapEmployeeId
         select u.SapEmployeeId
         from sys_user_quit u
         from sys_user_quit u
     </select>
     </select>