Browse Source

发送码包邮件代码
发送短信功能

tanzhongran 3 years ago
parent
commit
19b307438f
18 changed files with 353 additions and 22 deletions
  1. 21 0
      abi-cloud-qr-platform-server/pom.xml
  2. 1 1
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/entity/BaseMaterial.java
  3. 9 3
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/enums/MaterialTypeEnum.java
  4. 1 1
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/MaterialVO.java
  5. 1 1
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/AddMaterialReq.java
  6. 1 1
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ListMaterialReq.java
  7. 1 1
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/UpdateMaterialReq.java
  8. 1 1
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/GetMaterialRes.java
  9. 1 1
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListMaterialRes.java
  10. 17 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/feign/SmsClient.java
  11. 51 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/util/FreeMarkerUtils.java
  12. 109 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/util/SendmailUtil.java
  13. 50 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/util/SmsUtil.java
  14. 11 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/QrPackageService.java
  15. 7 8
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/MaterialServiceImpl.java
  16. 40 3
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrPackageServiceImpl.java
  17. 25 1
      abi-cloud-qr-platform-server/src/main/resources/application.yml
  18. 6 0
      abi-cloud-qr-platform-server/src/main/resources/templates/factory.ftl

+ 21 - 0
abi-cloud-qr-platform-server/pom.xml

@@ -47,6 +47,27 @@
             <artifactId>jedis</artifactId>
             <version>2.9.3</version>
         </dependency>
+        <!--sendmail-->
+        <dependency>
+            <groupId>com.sun.mail</groupId>
+            <artifactId>javax.mail</artifactId>
+            <version>1.6.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.abi.sms</groupId>
+            <artifactId>sms-center-client</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.abi.bees</groupId>
+            <artifactId>sms-center-api</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <!--freemarker template-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-freemarker</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-openfeign</artifactId>

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/entity/BaseMaterial.java

@@ -30,7 +30,7 @@ public class BaseMaterial {
 	@Schema(name = "物料名称")
     private String materialName;
 
-	@Schema(name = "物料类型 1-瓶&罐盖 2-成品酒")
+	@Schema(name = "物料类型: 1-瓶子 2-PET 3-罐子 4-瓶盖 5-纸板箱 6-塑箱 7-小桶&叉子 8-托盘")
     private Integer materialType;
 
 	@Schema(name = "描述")

+ 9 - 3
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/enums/MaterialTypeEnum.java

@@ -17,9 +17,15 @@ import java.util.Set;
 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
 public enum MaterialTypeEnum {
 
-	//物料类型: 1-瓶&罐盖 2-成品酒
-	COVER(1,"瓶&罐盖"),
-	BEER(2,"成品酒");
+	//物料类型: 1-瓶子 2-PET 3-罐子 4-瓶盖 5-纸板箱 6-塑箱 7-小桶&叉子 8-托盘
+	BOTTLE(1,"瓶子"),
+	PET(2,"PET"),
+	JAR(3,"罐子"),
+	BOTTLE_CAP(4,"瓶盖"),
+	CARTON(5,"纸板箱"),
+	PLASTIC_BOX(6,"塑箱"),
+	BUCKET_FORK(7,"小桶&叉子"),
+	TRAY(8,"托盘");
 
 	@EnumValue
 	private Integer code;

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/MaterialVO.java

@@ -24,7 +24,7 @@ public class MaterialVO {
     @Schema(name = "物料名称")
     private String materialName;
 
-    @Schema(name = "物料类型 1-瓶&罐盖 2-成品酒")
+    @Schema(name = "物料类型: 1-瓶子 2-PET 3-罐子 4-瓶盖 5-纸板箱 6-塑箱 7-小桶&叉子 8-托盘")
     private Integer materialType;
 
     @Schema(name = "描述")

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/AddMaterialReq.java

@@ -24,7 +24,7 @@ public class AddMaterialReq implements Serializable {
     private String materialName;
 
     @NotNull
-    @Schema(name = "物料类型 1-瓶&罐盖 2-成品酒")
+    @Schema(name = "物料类型: 1-瓶子 2-PET 3-罐子 4-瓶盖 5-纸板箱 6-塑箱 7-小桶&叉子 8-托盘")
     private Integer materialType;
 
     @Schema(name = "描述")

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ListMaterialReq.java

@@ -20,7 +20,7 @@ public class ListMaterialReq extends PageReq implements Serializable {
     @Schema(name = "物料名称")
     private String materialName;
 
-    @Schema(name = "物料类型 1-瓶&罐盖 2-成品酒")
+    @Schema(name = "物料类型: 1-瓶子 2-PET 3-罐子 4-瓶盖 5-纸板箱 6-塑箱 7-小桶&叉子 8-托盘")
     private Integer materialType;
 
     @Schema(name = "是否有效 0-无效 1-有效")

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/UpdateMaterialReq.java

@@ -18,7 +18,7 @@ public class UpdateMaterialReq implements Serializable {
     @Schema(name = "物料名称")
     private String materialName;
 
-    @Schema(name = "物料类型 1-瓶&罐盖 2-成品酒")
+    @Schema(name = "物料类型: 1-瓶子 2-PET 3-罐子 4-瓶盖 5-纸板箱 6-塑箱 7-小桶&叉子 8-托盘")
     private Integer materialType;
 
     @Schema(name = "品牌")

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/GetMaterialRes.java

@@ -26,7 +26,7 @@ public class GetMaterialRes implements Serializable {
     @Schema(name = "物料名称")
     private String materialName;
 
-    @Schema(name = "物料类型 1-瓶&罐盖 2-成品酒")
+    @Schema(name = "物料类型: 1-瓶子 2-PET 3-罐子 4-瓶盖 5-纸板箱 6-塑箱 7-小桶&叉子 8-托盘")
     private Integer materialType;
 
     @Schema(name = "描述")

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListMaterialRes.java

@@ -44,7 +44,7 @@ public class ListMaterialRes extends PageResp implements Serializable {
         @Schema(name = "物料名称")
         private String materialName;
 
-        @Schema(name = "物料类型 1-瓶&罐盖 2-成品酒")
+        @Schema(name = "物料类型: 1-瓶子 2-PET 3-罐子 4-瓶盖 5-纸板箱 6-塑箱 7-小桶&叉子 8-托盘")
         private Integer materialType;
 
         @Schema(name = "描述")

+ 17 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/feign/SmsClient.java

@@ -0,0 +1,17 @@
+package com.abi.qms.platform.feign;
+
+import com.abi.smscenter.outfeign.SendSmsFeignService;
+import org.springframework.cloud.openfeign.FeignClient;
+
+/**
+ * The interface Cart feign service.
+ *
+ * @author congcong
+ */
+@FeignClient(
+        value = "sms-center-service",
+        url = "${sms-center-service.url}")
+public interface SmsClient extends SendSmsFeignService {
+
+
+}

+ 51 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/util/FreeMarkerUtils.java

@@ -0,0 +1,51 @@
+// +----------------------------------------------------------------------
+// | JavaWeb_Cloud_Pro微服务旗舰版框架 [ JavaWeb ]
+// +----------------------------------------------------------------------
+// | 版权所有 2019~2020 南京JavaWeb研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.javaweb.vip/
+// +----------------------------------------------------------------------
+// | 作者: 鲲鹏 <1175401194@qq.com>
+// +----------------------------------------------------------------------
+
+package com.abi.qms.platform.infrastructure.util;
+
+import freemarker.cache.ClassTemplateLoader;
+import freemarker.cache.NullCacheStorage;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateExceptionHandler;
+
+import java.io.IOException;
+
+/**
+ * FreeMarker工具类
+ */
+public class FreeMarkerUtils {
+
+    private FreeMarkerUtils() {
+    }
+
+    private static final Configuration CONFIGURATION = new Configuration(Configuration.VERSION_2_3_22);
+
+    static {
+        //这里比较重要,用来指定加载模板所在的路径
+        CONFIGURATION.setTemplateLoader(new ClassTemplateLoader(FreeMarkerUtils.class, "/templates"));
+        CONFIGURATION.setDefaultEncoding("UTF-8");
+        CONFIGURATION.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+        CONFIGURATION.setCacheStorage(NullCacheStorage.INSTANCE);
+    }
+
+    public static Template getTemplate(String templateName) throws IOException {
+        try {
+            return CONFIGURATION.getTemplate(templateName);
+        } catch (IOException e) {
+            throw e;
+        }
+    }
+
+    public static void clearCache() {
+        CONFIGURATION.clearTemplateCache();
+    }
+
+}

+ 109 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/util/SendmailUtil.java

@@ -0,0 +1,109 @@
+package com.abi.qms.platform.infrastructure.util;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.mail.*;
+import javax.mail.internet.AddressException;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import java.util.Properties;
+
+@Component
+@Slf4j
+public class SendmailUtil {
+
+    /**
+     * 设置服务器
+     */
+    @Value(value = "${smtp.host}")
+    private String smtp_host;
+    @Value(value = "${smtp.port}")
+    private String smtp_port;
+
+    /**
+     * 服务器验证
+     */
+    @Value(value = "${smtp.auth}")
+    private boolean value_props;
+
+    /**
+     * 发件人用户名、密码
+     */
+    @Value(value = "${mail.send.user}")
+    private String send_user;
+    @Value(value = "${mail.send.username}")
+    private String send_uname;
+    @Value(value = "${mail.send.authcode}")
+    private String authcode;
+
+    private Properties props;
+    private Session s;
+
+    /**
+     * 初始化方法
+     * @return
+     */
+    private void initProps() {
+        if(props!=null){
+            return;
+        }
+
+        props.setProperty("mail.smtp.host", smtp_host);
+        props.put("mail.smtp.auth", "true");
+        props.put("mail.smtp.port", smtp_port);
+        props.put("mail.smtp.starttls.enable", true);
+    }
+
+    /**
+     * 发送邮件
+     *
+     * @param headName    邮件头文件名
+     * @param sendHtml    邮件内容
+     * @param receiveUser 收件人地址
+     */
+    public void doSendHtmlEmail(String headName, String sendHtml,
+                                String receiveUser) {
+        //懒加载props
+        initProps();
+        //获取session
+        Session s = Session.getDefaultInstance(props, new Authenticator() {
+            @Override
+            protected PasswordAuthentication getPasswordAuthentication() {
+                return new PasswordAuthentication(send_uname, authcode);
+            }
+        });
+        s.setDebug(true);
+        MimeMessage message = new MimeMessage(s);
+
+        try {
+            // 发件人
+            InternetAddress from = new InternetAddress(send_user);
+            message.setFrom(from);
+            // 收件人
+            InternetAddress to = new InternetAddress(receiveUser);
+            message.setRecipient(Message.RecipientType.TO, to);
+            // 邮件标题
+            message.setSubject(headName);
+            String content = sendHtml.toString();
+            // 邮件内容,也可以使纯文本"text/plain"
+            message.setContent(content, "text/html;charset=GBK");
+            message.saveChanges();
+            Transport transport = s.getTransport("smtp");
+            // smtp验证,就是你用来发邮件的邮箱用户名密码
+            transport.connect(smtp_host, send_uname, authcode);
+            // 发送
+            transport.sendMessage(message, message.getAllRecipients());
+            transport.close();
+            log.info("send success!");
+        } catch (AddressException e) {
+
+            e.printStackTrace();
+        } catch (MessagingException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+}

+ 50 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/util/SmsUtil.java

@@ -0,0 +1,50 @@
+package com.abi.qms.platform.infrastructure.util;
+
+import com.abi.qms.platform.feign.SmsClient;
+import com.abi.smscenter.dto.SmsTemplateMsgDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 发送短信工具类
+ * @author AndyTan
+ */
+@Component
+public class SmsUtil {
+
+    @Autowired
+    private SmsClient smsClient;
+
+    @Value("${qms.sms.requestId}")
+    private String requestId;
+    @Value("${qms.sms.source}")
+    private String source;
+    @Value("${qms.sms.templateCode}")
+    private String templateCode;
+    @Value("${qms.sms.signName}")
+    private String signName;
+
+    public void sendCode(String mobile, String code) {
+        SmsTemplateMsgDto smsDto = new SmsTemplateMsgDto();
+        smsDto.setPhones(mobile);
+        //uuid
+        smsDto.setRequestId(String.valueOf(UUID.randomUUID()));
+        //qms-codepackage
+        smsDto.setSource(source);
+        //模板code
+        smsDto.setTemplateCode(templateCode);
+        //签名-酒先锋
+        smsDto.setSignName(signName);
+        //短信内容
+        Map<String, Object> map = new HashMap<>();
+        map.put("code", code);
+        smsDto.setParamMap(map);
+        smsClient.sendTemplateMsg(smsDto);
+    }
+
+}

+ 11 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/QrPackageService.java

@@ -64,4 +64,15 @@ public interface QrPackageService {
 	 * 码生成失败回滚
 	 */
 	void failedRollback(QrPackage qrPackage);
+
+	/**
+	 * 码包生成完成后发送邮件给码包厂负责人邮箱
+	 * @param targetEmail
+	 * @param sapOrderNo
+	 * @param filename
+	 * @param password
+	 */
+	void sendEmailForQrPackageCreated(String targetEmail,String sapOrderNo,String filename,String password);
+
+
 }

+ 7 - 8
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/MaterialServiceImpl.java

@@ -1,6 +1,5 @@
 package com.abi.qms.platform.service.impl;
 
-import com.abi.qms.platform.dao.entity.BaseBrand;
 import com.abi.qms.platform.dao.entity.BaseMaterial;
 import com.abi.qms.platform.dao.enums.FactoryTypeEnum;
 import com.abi.qms.platform.dao.enums.MaterialTypeEnum;
@@ -9,26 +8,26 @@ import com.abi.qms.platform.dao.mapper.BaseBrandMapper;
 import com.abi.qms.platform.dao.mapper.BaseMaterialMapper;
 import com.abi.qms.platform.dao.vo.result.MaterialVO;
 import com.abi.qms.platform.dto.req.*;
-import com.abi.qms.platform.dto.res.*;
+import com.abi.qms.platform.dto.res.ExcelImportRes;
+import com.abi.qms.platform.dto.res.GetMaterialRes;
+import com.abi.qms.platform.dto.res.ListMaterialForSelectRes;
+import com.abi.qms.platform.dto.res.ListMaterialRes;
 import com.abi.qms.platform.infrastructure.util.AssertUtil;
 import com.abi.qms.platform.infrastructure.util.PageUtil;
 import com.abi.qms.platform.service.MaterialService;
 import com.abi.task.common.api.exception.BusinessException;
 import com.abi.task.common.api.exception.ErrorCodeEnum;
-import com.abi.task.common.excel.preperties.DepartmentProperty;
 import com.abi.task.common.excel.preperties.MaterialProperty;
 import com.abi.task.common.utils.PojoConverterUtils;
-import com.baomidou.mybatisplus.core.conditions.query.Query;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.redisson.misc.Hash;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
@@ -249,7 +248,7 @@ public class MaterialServiceImpl implements MaterialService {
             errorMessage.append("物料类型").append("为空,");
         }
         if (StringUtils.isNotBlank(materialProperty.getMaterialType())
-                && FactoryTypeEnum.getCode(materialProperty.getMaterialType()) == null) {
+                && MaterialTypeEnum.getCode(materialProperty.getMaterialType()) == null) {
             errorMessage.append("物料类型").append("枚举值不正确,");
         }
         if (StringUtils.isBlank(materialProperty.getMaterialCode())) {

+ 40 - 3
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrPackageServiceImpl.java

@@ -16,9 +16,7 @@ import com.abi.qms.platform.dto.req.*;
 import com.abi.qms.platform.dto.res.GetQrPackageDetailRes;
 import com.abi.qms.platform.dto.res.ListQrPackageRes;
 import com.abi.qms.platform.infrastructure.mq.GenerateCodeConsumer;
-import com.abi.qms.platform.infrastructure.util.AssertUtil;
-import com.abi.qms.platform.infrastructure.util.PageUtil;
-import com.abi.qms.platform.infrastructure.util.UserUtil;
+import com.abi.qms.platform.infrastructure.util.*;
 import com.abi.qms.platform.service.QrDataService;
 import com.abi.qms.platform.service.QrPackageService;
 import com.abi.task.common.api.exception.BusinessException;
@@ -27,17 +25,22 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import freemarker.template.Template;
 import lombok.extern.slf4j.Slf4j;
+import org.redisson.misc.Hash;
 import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.net.URLEncoder;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 码包 Service业务层处理
@@ -61,6 +64,9 @@ public class QrPackageServiceImpl implements QrPackageService {
 	@Autowired
 	private QrPackageDownloadRecordMapper qrPackageDownloadRecordMapper;
 
+	@Autowired
+	private SendmailUtil sendmailUtil;
+
 	/**
 	 * 保存码包
 	 */
@@ -282,4 +288,35 @@ public class QrPackageServiceImpl implements QrPackageService {
 		QrPackage qrPackageUpdate = new QrPackage().setId(qrPackage.getId()).setGenerateStatus(QrPackageGenerateStatusEnum.GENERATE_FAIL.getCode());
 		qrPackageMapper.updateById(qrPackageUpdate);
 	}
+
+	/**
+	 * 码包生成完成后发送邮件给码包厂负责人邮箱
+	 * @param targetEmail
+	 * @param sapOrderNo
+	 * @param filename
+	 * @param password
+	 */
+	@Override
+	public void sendEmailForQrPackageCreated(String targetEmail,String sapOrderNo,String filename,String password){
+		try{
+			//拿到freemarker模板
+			Template template = FreeMarkerUtils.getTemplate("factory.ftl");
+
+			//填充的内容
+			Map paramMap = new HashMap<>();
+			paramMap.put("sapOrderNo", sapOrderNo);
+			paramMap.put("filename", filename);
+			paramMap.put("password", password);
+
+			//生成需要发送的内容
+			String emailContent = FreeMarkerTemplateUtils.processTemplateIntoString(template, paramMap);
+
+			sendmailUtil.doSendHtmlEmail("QMS系统通知",emailContent,targetEmail);
+
+		}catch(Exception e){
+			log.info("发送码包通知邮件异常",e);
+			throw new BusinessException("发送码包通知邮件异常");
+		}
+	}
+
 }

+ 25 - 1
abi-cloud-qr-platform-server/src/main/resources/application.yml

@@ -85,4 +85,28 @@ tableStore:
 
 # 系统url
 system:
-  url: http://system_url/
+  url: http://system_url/
+
+# 发送email
+smtp:
+  host: smtp.office365.com
+  port: 587
+  auth: true
+mail:
+  send:
+    user: APAC.budtech.sales@Budweiserapac.com
+    username: APAC.budtech.sales@Budweiserapac.com
+    authcode: 3edc4rfvT!@#
+
+# 短信
+qms:
+  sms:
+    requestId: 1213dsdsds15sd15tgh
+    source: codepacket-service
+    templateCode: SMS_206560232
+    signName: 百威QMS
+
+
+
+
+

+ 6 - 0
abi-cloud-qr-platform-server/src/main/resources/templates/factory.ftl

@@ -0,0 +1,6 @@
+
+
+
+您好:
+    此邮件为系统邮件请勿回复.
+    您的码包 SAP采购订单号${sapOrderNo} , ${filename} 已生成,解压密码为 :  ${password} ,请妥善保管密码,若造成泄露,百威有权进行追责。