Browse Source

增加客户余额邮件

xusonglin 4 years ago
parent
commit
12312b34fe

+ 4 - 0
pom.xml

@@ -42,6 +42,10 @@
     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-mail</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-amqp</artifactId>
         </dependency>
         <dependency>

+ 3 - 0
src/main/java/com/jkcredit/invoice/hub/mapper/UserMapper.java

@@ -7,6 +7,7 @@ import com.jkcredit.invoice.hub.model.dto.user.UserDto;
 import com.jkcredit.invoice.hub.model.po.user.UserPo;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Optional;
 
 public interface UserMapper extends BaseMapper<UserPo> {
@@ -17,4 +18,6 @@ public interface UserMapper extends BaseMapper<UserPo> {
     UserPo getUserById(Long id);
 
     UserPo getUserByAppKey(String appKey);
+
+    List<UserPo> getUserBalance();
 }

+ 18 - 0
src/main/java/com/jkcredit/invoice/hub/model/dto/userBalance/UserBalanceForMailDto.java

@@ -0,0 +1,18 @@
+package com.jkcredit.invoice.hub.model.dto.userBalance;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Data
+public class UserBalanceForMailDto implements Serializable {
+
+    private static final long serialVersionUID = -7792133182109496919L;
+    private String appKey;
+    private String company;
+    private Double balance;
+}

+ 4 - 0
src/main/java/com/jkcredit/invoice/hub/service/user/UserService.java

@@ -3,9 +3,11 @@ package com.jkcredit.invoice.hub.service.user;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jkcredit.invoice.hub.model.dto.user.UserDto;
+import com.jkcredit.invoice.hub.model.dto.userBalance.UserBalanceForMailDto;
 import com.jkcredit.invoice.hub.model.po.user.UserPo;
 import com.jkcredit.invoice.hub.model.vo.user.UserVO;
 
+import java.util.List;
 import java.util.Optional;
 
 public interface UserService {
@@ -24,4 +26,6 @@ public interface UserService {
     UserPo getUserByAppKey(String appKey);
 
     UserDto getUser(Long id);
+
+    List<UserBalanceForMailDto> getUserBalance();
 }

+ 17 - 0
src/main/java/com/jkcredit/invoice/hub/service/user/UserServiceImpl.java

@@ -7,6 +7,7 @@ import com.jkcredit.invoice.hub.constant.CommonConstant;
 import com.jkcredit.invoice.hub.constant.ExceptionMessage;
 import com.jkcredit.invoice.hub.mapper.UserMapper;
 import com.jkcredit.invoice.hub.model.dto.user.UserDto;
+import com.jkcredit.invoice.hub.model.dto.userBalance.UserBalanceForMailDto;
 import com.jkcredit.invoice.hub.model.po.user.UserPo;
 import com.jkcredit.invoice.hub.model.vo.user.UserVO;
 import com.jkcredit.invoice.hub.service.base.BaseService;
@@ -26,7 +27,10 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 import java.util.Optional;
 
 /**
@@ -175,4 +179,17 @@ public class UserServiceImpl extends BaseService implements UserService {
         }
         return userDto;
     }
+
+    @Override
+    public List<UserBalanceForMailDto> getUserBalance() {
+        List<UserBalanceForMailDto> dtoList = new ArrayList<>();
+        List<UserPo> userPoList = userMapper.getUserBalance();
+        for (UserPo userPo : userPoList) {
+            UserBalanceForMailDto dto = new UserBalanceForMailDto();
+            BeanUtils.copyProperties(userPo, dto);
+            dto.setBalance(userPo.getBalance().setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+            dtoList.add(dto);
+        }
+        return dtoList;
+    }
 }

+ 88 - 0
src/main/java/com/jkcredit/invoice/hub/task/SendMailTask.java

@@ -0,0 +1,88 @@
+package com.jkcredit.invoice.hub.task;
+
+import com.jkcredit.invoice.hub.model.dto.userBalance.UserBalanceForMailDto;
+import com.jkcredit.invoice.hub.service.user.UserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Component
+@Slf4j
+public class SendMailTask {
+    @Value("${mail.host}")
+    private String host;
+    @Value("${mail.username}")
+    private String username;
+    @Value("${mail.password}")
+    private String password;
+    @Value("${mail.sendFrom}")
+    private String sendFrom;
+    @Value("${mail.sendTo}")
+    private String sendTo;
+    @Value("${mail.sendCc}")
+    private String sendCc;
+    @Value("${mail.authentication}")
+    private String authentication;
+
+    @Autowired
+    UserService userService;
+
+    @Scheduled(cron = "0 0 0 * * ?", zone = "Asia/Shanghai")
+    public void sendBalanceMail() {
+        List<UserBalanceForMailDto> userBalanceForMailDtoList = userService.getUserBalance();
+        //核心类
+        SimpleMailMessage message = new SimpleMailMessage();
+        //邮件发送方
+        message.setFrom(sendFrom);
+        //邮件接收方
+        message.setTo(sendTo);
+        //标题
+        message.setSubject("客户余额");
+        //静态网页
+        String text = getUserBalanceText(userBalanceForMailDtoList);
+        log.info(text);
+        message.setText(text);
+        message.setCc(sendCc);
+        try {
+            //JavaMailSender接口的实例化对象
+            JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
+            // 设置邮件服务主机
+            mailSender.setHost(host);
+            // 发送者邮箱的用户名
+            mailSender.setUsername(username);
+            // 发送者邮箱的密码 就是网站发给你的  授权码
+            mailSender.setPassword(authentication);
+            //发送邮件
+            mailSender.send(message);
+        } catch (Exception e) {
+            e.printStackTrace();
+
+        }
+    }
+
+    private String getUserBalanceText(List<UserBalanceForMailDto> userBalanceForMailDtoList) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        StringBuilder builder = new StringBuilder();
+        builder.append(format.format(new Date())).append("日客户余额").append(System.getProperty("line.separator")).append(System.getProperty("line.separator"));
+        for (UserBalanceForMailDto dto : userBalanceForMailDtoList) {
+            builder.append("公司:").append(dto.getCompany()).append("    ");
+            builder.append("appKey:").append(dto.getAppKey()).append("    ");
+            builder.append("余额:").append(dto.getBalance());
+            builder.append(",");
+            builder.append(System.getProperty("line.separator"));
+        }
+        return builder.toString();
+    }
+}

+ 8 - 0
src/main/resources/application-prod.yml

@@ -39,3 +39,11 @@ spring:
         max-concurrency: 10
       direct:
         acknowledge-mode: manual
+mail:
+  host: smtp.163.com
+  username: jkcredit2021@163.com
+  password: jkCredit@#!
+  authentication: EFIVTVVVAQYBOQIF
+  sendFrom: jkcredit2021@163.com
+  sendTo: liuliu@jkcredit.com
+  sendCc: wgj@jkcredit.com

+ 13 - 0
src/main/resources/mapper/UserMapper.xml

@@ -100,4 +100,17 @@
         where
             activated = 1 and status = 1 and app_key = #{appKey}
     </select>
+
+    <select id="getUserBalance" resultMap="baseResultMap">
+        select
+            user.app_key, user.company, balance.balance
+        from
+            h_user user
+        left join
+            h_user_balance balance
+        on
+            user.id = balance.user_id
+        where
+            activated = 1 and status = 1 and balance.balance is not null
+    </select>
 </mapper>