Browse Source

发送包材厂提醒邮件

tanzhongran 3 years ago
parent
commit
36f0d469b1

+ 6 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/mapper/QrPackageMapper.java

@@ -64,6 +64,12 @@ public interface QrPackageMapper extends BaseMapper<QrPackage> {
      */
     WxQrPackageDetailVO getWxQrPackageDetail(@Param("req") WxQrPackageDetailReq req);
 
+    /**
+     * 查询待提醒的邮件订单信息
+     * @return
+     */
+    List<QrPackageRemindOrderVO> listQrPackageRemind(@Param("beginTime") String beginTime);
+
 
     //    6.03已废弃
 //	/**

+ 33 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/QrPackageRemindOrderVO.java

@@ -0,0 +1,33 @@
+package com.abi.qms.platform.dao.vo.result;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author: fangxinjian
+ * @date: 2021/06/09 10:15
+ * @description:
+ */
+@Data
+@ApiModel
+public class QrPackageRemindOrderVO implements Serializable {
+
+    @ApiModelProperty(value = "订单类型")
+    private String orderType;
+
+    @ApiModelProperty(value = "订单")
+    private String orderNo;
+
+    @ApiModelProperty(value = "物料名称")
+    private String materialName;
+
+    @ApiModelProperty(value = "包材厂id")
+    private Long coverFactoryId;
+
+    @ApiModelProperty(value = "活动名称")
+    private String createTime;
+
+}

+ 34 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/task/XxlSendEmailForRemindAddQrPackage.java

@@ -0,0 +1,34 @@
+package com.abi.qms.platform.infrastructure.task;
+
+import com.abi.qms.platform.service.QrPackageService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author AndyTan
+ * @date 2021/7/2 17:48
+ * @Description:
+ */
+@Slf4j
+@Component
+public class XxlSendEmailForRemindAddQrPackage {
+
+    @Autowired
+    private QrPackageService qrPackageService;
+
+    @XxlJob(value = "xxlSendEmailForRemindAddQrPackage")
+    public ReturnT<String> xxlJobDemo(){
+        try {
+            log.info("====XxlSendEmailForRemindAddQrPackage====" + LocalDateTime.now());
+            qrPackageService.sendEmailForRemindAddQrPackage();
+        } catch (Exception e) {
+            log.error("tipRecordExpire execute error:", e);
+        }
+        return ReturnT.SUCCESS;
+    }
+}

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

@@ -155,4 +155,9 @@ public interface QrPackageService {
      */
     QrBoxMapping getPackeageActivation (QrCode qrCode);
 
+    /**
+     * 提醒包材厂下单还没下单的sap订单or预订单
+     */
+    void sendEmailForRemindAddQrPackage();
+
 }

+ 14 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/GenerateCodeServiceImpl.java

@@ -39,6 +39,8 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Service;
 import org.springframework.util.DigestUtils;
 import org.springframework.web.multipart.MultipartFile;
@@ -56,7 +58,7 @@ import java.util.stream.Collectors;
 
 @Slf4j
 @Service
-public class GenerateCodeServiceImpl implements GenerateCodeService {
+public class GenerateCodeServiceImpl implements GenerateCodeService, ApplicationRunner {
 
     @Autowired
     private QrPackageMapper qrPackageMapper;
@@ -119,6 +121,17 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
     /** 加密文件第二行揭秘开来的内容 */
     private static final String QR_PACKAGE_CHECK_LINE = "ABI I-QMS";
 
+    /**
+     * 初始化方法
+     * @param args
+     * @throws Exception
+     */
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        //URL大写,方便包材厂打印提高识别
+        qmsRouteUrl = qmsRouteUrl.toUpperCase();
+    }
+
     /**
      * 生成码
      */

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

@@ -1,6 +1,7 @@
 package com.abi.qms.platform.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
 import com.abi.base.foundation.util.RedisClient;
 import com.abi.qms.platform.dao.entity.BaseFactory;
 import com.abi.qms.platform.dao.entity.BaseMaterial;
@@ -61,6 +62,7 @@ import com.abi.task.common.api.exception.BusinessException;
 import com.abi.task.common.api.exception.ErrorCodeEnum;
 import com.abi.task.common.tablestore.TableStorePlusUtils;
 import com.abi.task.common.tablestore.TableStoreUtils;
+import com.abi.task.common.utils.IDateUtils;
 import com.abi.task.common.utils.IMathUtils;
 import com.abi.task.common.utils.PojoConverterUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -82,11 +84,7 @@ import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
 import javax.servlet.http.HttpServletResponse;
 import java.text.MessageFormat;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -1184,4 +1182,69 @@ public class QrPackageServiceImpl implements QrPackageService {
 
         return qrBoxMapping;
     }
+
+    /**
+     * 提醒包材厂下单还没下单的sap订单or预订单
+     */
+    @Override
+    public void sendEmailForRemindAddQrPackage() {
+        try {
+            //拿到freemarker模板
+            Template template = FreeMarkerUtils.getTemplate("remind_qr_package_order.ftl");
+
+            //查询需要发送的信息列表
+            LocalDateTime lastWeek = IDateUtils.offsetDay(LocalDateTime.now(), -7);
+            List<QrPackageRemindOrderVO> qrPackageRemindOrderVOList = qrPackageMapper.listQrPackageRemind(DateUtil.format(lastWeek, "yyyy-MM-dd"));
+
+            //根据包材厂分组
+            Map<Long,List<QrPackageRemindOrderVO>> coverRemindMap = new HashMap<>();
+            for(QrPackageRemindOrderVO remindVO:qrPackageRemindOrderVOList){
+                //拿到包材厂id
+                Long coverFactoryId = remindVO.getCoverFactoryId();
+                //如果首次放入,则新建列表
+                if(!coverRemindMap.containsKey(coverFactoryId)){
+                    coverRemindMap.put(coverFactoryId,new ArrayList<>());
+                }
+                //列表add订单明细
+                coverRemindMap.get(coverFactoryId).add(remindVO);
+            }
+
+            //frame maker的root 入参map
+            Map<String,Object> paramMap = new HashMap<>();
+
+            //循环发送email
+            for(Long coverFactoryId:coverRemindMap.keySet()){
+                try {
+                    //查询对应email
+                    BaseFactory coverFactory = baseFactoryMapper.selectById(coverFactoryId);
+                    if (coverFactory == null || StringUtils.isBlank(coverFactory.getEmail())) {
+                        continue;
+                    }
+                    String targetEmail = coverFactory.getEmail();
+                    //构造邮件内容
+                    List<Map<String, Object>> itemParamMapList = new ArrayList<>();
+                    List<QrPackageRemindOrderVO> remindOrderVOList = coverRemindMap.get(coverFactoryId);
+                    for (QrPackageRemindOrderVO remindOrderVO : remindOrderVOList) {
+                        //填充的内容
+                        Map<String, Object> itemMap = new HashMap<>();
+                        itemMap.put("orderType", remindOrderVO.getOrderType());
+                        itemMap.put("orderNo", remindOrderVO.getOrderNo());
+                        itemMap.put("materialName", remindOrderVO.getMaterialName());
+                        itemParamMapList.add(itemMap);
+                    }
+                    paramMap.put("orderItemList", itemParamMapList);
+                    //生成需要发送的内容
+                    String emailContent = FreeMarkerTemplateUtils.processTemplateIntoString(template, paramMap);
+                    log.info(emailContent);
+                    sendmailUtil.doSendHtmlEmail("ABI I-QMS系统通知", emailContent, targetEmail);
+                }catch (Exception e){
+                    log.error("发送通知邮件失败coverFactoryId="+coverFactoryId,e);
+                }
+            }
+
+        } catch (Exception e) {
+            log.info("发送码包通知邮件异常", e);
+            throw new BusinessException("发送码包通知邮件异常");
+        }
+    }
 }

+ 32 - 0
abi-cloud-qr-platform-server/src/main/resources/dao/mapper/QrPackageMapper.xml

@@ -245,6 +245,38 @@
         group by qp.id
     </select>
 
+    <select id="listQrPackageRemind" resultType="com.abi.qms.platform.dao.vo.result.QrPackageRemindOrderVO">
+
+        SELECT *
+        FROM(
+            SELECT
+                'SAP订单' as order_type,sap_item.sap_order_no as order_no,
+                sap_item.sap_material_name as material_name,f.id as cover_factory_id,sap_item.create_time
+            FROM qr_package_sap_order_item sap_item
+                left join qr_package p on sap_item.sap_order_no=p.sap_order_no and p.is_delete=0
+                inner join base_factory f on f.factory_code=sap_item.sap_cover_factory_id and f.is_delete=0
+            where
+                sap_item.create_time >= #{beginTime}
+                and sap_item.is_delete = 0
+                and p.id is null
+
+            UNION ALL
+
+            SELECT
+                '预订单' as order_type,book_order.booking_order as order_no,
+                book_order.material_name,f.id as cover_factory_id,book_order.create_time
+            FROM qr_package_booking_order as book_order
+                left join qr_package p on book_order.booking_order=p.booking_order and p.is_delete=0
+                inner join base_factory f on f.id=book_order.factory_cover_id
+            where
+                book_order.create_time >= #{beginTime}
+                and book_order.is_delete = 0
+                and p.id is null
+        ) temp
+        order by temp.cover_factory_id,temp.create_time
+
+    </select>
+
     <!--6.03已废弃-->
     <!--通过码活动id查询关联码包列表-->
     <!--    <select id="listPackageById" resultType="com.abi.qms.platform.dao.vo.result.ActivePackageVO">-->

+ 8 - 0
abi-cloud-qr-platform-server/src/main/resources/templates/remind_qr_package_order.ftl

@@ -0,0 +1,8 @@
+
+
+
+您好:此邮件为系统邮件请勿回复,您有以下订单还未申请码包,请及时进行码包申请。
+
+<#list orderItemList as temp>
+    订单类型:${temp.orderType} , 订单号:${temp.orderNo} , 需打码物料: ${temp.materialName}
+</#list>

+ 9 - 0
abi-cloud-qr-platform-server/src/test/java/com/abi/qms/platform/GenerateCodeTest.java

@@ -4,6 +4,7 @@ import com.abi.qms.platform.dao.entity.QrData;
 import com.abi.qms.platform.dao.entity.QrInnerData;
 import com.abi.qms.platform.dao.entity.QrPackage;
 import com.abi.qms.platform.dao.mapper.QrPackageMapper;
+import com.abi.qms.platform.service.QrPackageService;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
 import org.springframework.amqp.core.AmqpTemplate;
@@ -31,6 +32,8 @@ public class GenerateCodeTest {
 	@Autowired
 	private QrPackageMapper qrPackageMapper;
 
+	@Autowired
+	private QrPackageService qrPackageService;
 
 	@Test
 	public void uniqueTest() {
@@ -62,4 +65,10 @@ public class GenerateCodeTest {
 
 //		mongoTemplate.insert(qrDataList, QrData.class);
 	}
+
+	@Test
+	public void sendEmailForRemindAddQrPackageTest(){
+		qrPackageService.sendEmailForRemindAddQrPackage();
+	}
+
 }