Explorar el Código

增加邮件和短信

houweiyu hace 5 años
padre
commit
f1766e3ffe

+ 7 - 0
fdkanfang-application/src/main/resources/application-dev.properties

@@ -87,3 +87,10 @@ verticle.queue=verticalQueue
 
 #垂直校验远程调用脚本路径
 verticle.remote.call.path=bash /home/algorithm/HorizonNet.sh 
+
+#房源制作完成短信模板id和签名
+scene.finish.sms.template.id=SMS_201717882
+sms.common.sign=四维看看Sketch
+
+#用户上传全景图通知的管理员的邮箱账号
+admin.email.account=service@4dage.com

+ 8 - 1
fdkanfang-application/src/main/resources/application-prod.properties

@@ -76,4 +76,11 @@ spring.rabbitmq.password=4dagecui2019$
 verticle.queue=verticalQueue
 
 #垂直校验远程调用脚本路径
-verticle.remote.call.path=bash /home/algorithm/HorizonNet.sh 
+verticle.remote.call.path=bash /home/algorithm/HorizonNet.sh 
+
+#房源制作完成短信模板id和签名
+scene.finish.sms.template.id=SMS_201717882
+sms.common.sign=四维看看Sketch
+
+#用户上传全景图通知的管理员的邮箱账号
+admin.email.account=service@4dage.com

+ 8 - 1
fdkanfang-application/src/main/resources/application-test.properties

@@ -76,4 +76,11 @@ spring.rabbitmq.password=guest
 verticle.queue=verticalQueue
 
 #垂直校验远程调用脚本路径
-verticle.remote.call.path=bash /home/algorithm/HorizonNet.sh 
+verticle.remote.call.path=bash /home/algorithm/HorizonNet.sh 
+
+#房源制作完成短信模板id和签名
+scene.finish.sms.template.id=SMS_201717882
+sms.common.sign=四维看看Sketch
+
+#用户上传全景图通知的管理员的邮箱账号
+admin.email.account=service@4dage.com

+ 10 - 1
fdkanfang-common/pom.xml

@@ -162,7 +162,16 @@
             <artifactId>jackson-smile</artifactId>
             <version>1.9.12</version>
         </dependency>
-
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context-support</artifactId>
+            <version>5.2.4.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.mail</groupId>
+            <artifactId>javax.mail</artifactId>
+            <version>1.6.2</version>
+        </dependency>
 
 
         <!--<dependency>-->

+ 46 - 2
fdkanfang-common/src/main/java/com/fdkanfang/common/sms/SmsService.java

@@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 
 @Log4j2
-@Component
+//@Component
 public class SmsService {
 
     //初始化ascClient需要的几个参数
@@ -24,6 +24,46 @@ public class SmsService {
     private static final String accessKeySecret = "JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4";//你的accessKeySecret,参考本文档步骤2
     private static final String signName = "四维看房";
 
+    public static boolean sendSmsWithSignName(String phoneNum, String templateParam,
+                                              String templateCode , String tmpSignName) {
+        // 可自助调整超时时间
+        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
+        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
+        boolean result = false;
+        try {
+            // 初始化acsClient,暂不支持region化
+            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
+            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
+            IAcsClient acsClient = new DefaultAcsClient(profile);
+
+            // 组装请求对象-具体描述见控制台-文档部分内容
+            SendSmsRequest request = new SendSmsRequest();
+
+            // 必填:待发送手机号
+            request.setPhoneNumbers(phoneNum);
+            // 必填:短信签名-可在短信控制台中找到
+            request.setSignName(tmpSignName);
+            // 必填:短信模板-可在短信控制台中找到
+            request.setTemplateCode(templateCode);
+
+            // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
+            request.setTemplateParam(templateParam);
+
+
+            // hint 此处可能会抛出异常,注意catch
+            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
+            if (sendSmsResponse != null
+                    && !StringUtils.isEmpty(sendSmsResponse.getCode())
+                    && "OK".equals(sendSmsResponse.getCode())){
+                log.debug("阿里云短信发送成功");
+                result = true;
+            }
+        }catch (ClientException e){
+            log.error("阿里云短信发送成功:" + e);
+        }
+        return result;
+    }
+
     public static boolean sendSms(String phoneNum, String templateParam, String templateCode) {
         // 可自助调整超时时间
         System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
@@ -131,10 +171,14 @@ public class SmsService {
         String code = String.valueOf((int)((Math.random()*9+1)*100000));
         System.out.println(code);
 
+        String sceneNum = "sk-uyvpOD4vK";
         /**
          * 四维看看:SMS_126461520
          * 四维看房:SMS_184616399
          */
-        sendSms("15015980188","{\"code\":\"" + code + "\"}", "SMS_184616399");
+        //sendSms("18718487619","{\"code\":\"" + code + "\"}", "SMS_184616399");
+
+//        System.out.println(sendSmsWithSignName("18819272208"  , "{\"sceneNum\":\"" + sceneNum + "\"}" ,
+//                "SMS_201717882","四维看看Sketch"));
     }
 }

+ 81 - 0
fdkanfang-common/src/main/java/com/fdkanfang/common/util/MailUtils.java

@@ -0,0 +1,81 @@
+package com.fdkanfang.common.util;
+
+import lombok.extern.log4j.Log4j2;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
+import org.springframework.mail.javamail.MimeMessageHelper;
+import org.springframework.messaging.MessagingException;
+import org.springframework.stereotype.Service;
+
+import javax.mail.internet.MimeMessage;
+import java.io.UnsupportedEncodingException;
+import java.util.Properties;
+
+/**
+ * @author abnerhou
+ * @date 2020/8/24 15:27
+ * @desciption
+ */
+@Service
+@Log4j2
+public class MailUtils {
+    private static final String HOST = "smtp.exmail.qq.com";
+    private static final Integer PORT = 587;
+
+
+    private static final String USERNAME = "sketch@cgaii.com";
+    private static final String PASSWORD = "Admin123!";
+    private static final String EMAILFORM = "sketch@cgaii.com";
+    private static JavaMailSenderImpl mailSender = createMailSender();
+    /**
+     * 邮件发送器
+     *
+     * @return 配置好的工具
+     */
+    private static JavaMailSenderImpl createMailSender() {
+        JavaMailSenderImpl sender = new JavaMailSenderImpl();
+        sender.setHost(HOST);
+        sender.setPort(PORT);
+        sender.setUsername(USERNAME);
+        sender.setPassword(PASSWORD);
+        sender.setDefaultEncoding("Utf-8");
+        Properties p = new Properties();
+        p.setProperty("mail.smtp.timeout", "25000");
+        p.setProperty("mail.smtp.auth", "false");
+        sender.setJavaMailProperties(p);
+        return sender;
+    }
+
+    /**
+     * 发送邮件
+     *
+     * @param to 接受人
+     * @param subject 主题
+     * @param html 发送内容
+     * @throws MessagingException 异常
+     * @throws UnsupportedEncodingException 异常
+     */
+    public static void sendHtmlMail(String to, String subject, String html) throws MessagingException, UnsupportedEncodingException, javax.mail.MessagingException {
+        if(null == mailSender){
+            mailSender = createMailSender();
+        }
+        MimeMessage mimeMessage = mailSender.createMimeMessage();
+        // 设置utf-8或GBK编码,否则邮件会有乱码
+        MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
+        messageHelper.setFrom(EMAILFORM, "四维看看Sketch");
+        messageHelper.setTo(to);
+        messageHelper.setSubject(subject);
+        messageHelper.setText(html, true);
+        mailSender.send(mimeMessage);
+    }
+
+   /* public static void main(String[] args){
+        try {
+            sendHtmlMail("352105932@qq.com" , "测试邮件1" , "测试内容1");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        } catch (javax.mail.MessagingException e) {
+            e.printStackTrace();
+        }
+    }*/
+
+}

+ 18 - 0
fdkanfang-web/src/main/java/com/fdkanfang/web/backend/HouseController.java

@@ -36,9 +36,11 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.mail.MessagingException;
 import javax.validation.Valid;
 import java.io.File;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -66,6 +68,9 @@ public class HouseController extends BaseController {
     @Value("${4dkankan.host}")
     private String KankanHost;
 
+    @Value("${admin.email.account}")
+    private String adminEmailAccount;
+
     @Autowired
     private HouseService2 houseService2;
 
@@ -236,6 +241,19 @@ public class HouseController extends BaseController {
                 //发消息到mq
                 rabbitTemplate.convertAndSend(RabbitConfig.VERTICAL_EXCHANGE, RabbitConfig.VERTICAL_QUEUE_ROUTING, mqMap);
             }
+            //新增这里,给管理员发送邮件
+            String emailContent = "【四维看看 Sketch】温馨提示:用户上传了新的房源,请尽快完成制作。点击立即登录查看:https://sk.4dkankan.com";
+            String subject = "四维看看sketch通知";
+
+            try {
+                MailUtils.sendHtmlMail(adminEmailAccount,subject,emailContent);
+            } catch (UnsupportedEncodingException e) {
+                log.error("发送邮件给管理员出错");
+                e.printStackTrace();
+            } catch (MessagingException e) {
+                log.error("发送邮件给管理员出错");
+                e.printStackTrace();
+            }
         }
         return new R(MsgCode.SUCCESS_CODE, house);
     }

+ 31 - 0
fdkanfang-web/src/main/java/com/fdkanfang/web/mq/listener/PanoListener.java

@@ -1,15 +1,19 @@
 package com.fdkanfang.web.mq.listener;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkanfang.common.sms.SmsService;
 import com.fdkanfang.common.util.DataUtils;
 import com.fdkanfang.domain.backend.HouseEntity;
+import com.fdkanfang.domain.backend.UserEntity;
 import com.fdkanfang.service.backend.HouseService2;
+import com.fdkanfang.service.backend.UserService2;
 import com.fdkanfang.web.mq.config.RabbitConfig;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
@@ -28,6 +32,16 @@ public class PanoListener {
     @Autowired
     private HouseService2 houseService2;
 
+    @Autowired
+    private UserService2 userService2;
+
+
+    @Value("${scene.finish.sms.template.id}")
+    private String smsTemplateId;
+
+    @Value("${sms.common.sign}")
+    private String smsCommonSign;
+
     /**
      * 结果监听
      */
@@ -67,6 +81,23 @@ public class PanoListener {
         if(result.compareTo(1) == 0){
             log.info("看看返回建模计算成功");
             houseEntity.setStatus(4);
+            if(null != houseEntity.getUserId()){
+                UserEntity user = userService2.findById(houseEntity.getUserId());
+                if(null != user){
+                    //发送短信给用户
+                    String param = "{\"sceneNum\":\"" + houseEntity.getSceneCode() + "\"}";
+                    boolean smsResult = SmsService.sendSmsWithSignName(user.getPhone() , param , smsTemplateId , smsCommonSign);
+                    if(smsResult){
+                        log.info("给用户[{}]发送房源[{}]构建完成的短信成功" , user.getPhone() , houseEntity.getSceneCode());
+                    }else{
+                        log.info("给用户[{}]发送房源[{}]构建完成的短信失败" , user.getPhone() , houseEntity.getSceneCode());
+                    }
+                }else{
+                    log.info("房源[{}]的传用户id为空,无法给他发短信" , houseEntity.getSceneCode());
+                }
+
+            }
+
         }else{
             log.info("看看返回建模计算非成功:{}" , result);
             houseEntity.setStatus(5);