浏览代码

xwh增加清关成功短信通知

xwh 4 年之前
父节点
当前提交
9fbf2d9587

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/OrderProcessRecordDao.java

@@ -2,6 +2,9 @@ package com.kmall.admin.dao;
 
 
 import com.kmall.admin.entity.OrderProcessRecordEntity;
 import com.kmall.admin.entity.OrderProcessRecordEntity;
 import com.kmall.manager.dao.BaseDao;
 import com.kmall.manager.dao.BaseDao;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 /**
 /**
  * 订单流转过程记录表Dao
  * 订单流转过程记录表Dao
@@ -13,4 +16,6 @@ import com.kmall.manager.dao.BaseDao;
 public interface OrderProcessRecordDao extends BaseDao<OrderProcessRecordEntity> {
 public interface OrderProcessRecordDao extends BaseDao<OrderProcessRecordEntity> {
 
 
     OrderProcessRecordEntity queryObjectByOrderSn(String orderSn);
     OrderProcessRecordEntity queryObjectByOrderSn(String orderSn);
+
+    List<OrderProcessRecordEntity> queryListBySendSmsStatus(@Param("customsSendSmsStatus") String customsSendSmsStatus);
 }
 }

+ 22 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/OrderProcessRecordEntity.java

@@ -178,6 +178,28 @@ public class OrderProcessRecordEntity implements Serializable {
      */
      */
     private String shipmentSuccTimeStr;
     private String shipmentSuccTimeStr;
 
 
+    private String payMobile;
+
+
+    private String customsSendSmsStatus;
+
+
+    public String getCustomsSendSmsStatus() {
+        return customsSendSmsStatus;
+    }
+
+    public void setCustomsSendSmsStatus(String customsSendSmsStatus) {
+        this.customsSendSmsStatus = customsSendSmsStatus;
+    }
+
+    public String getPayMobile() {
+        return payMobile;
+    }
+
+    public void setPayMobile(String payMobile) {
+        this.payMobile = payMobile;
+    }
+
     public String getPayTransactionId() {
     public String getPayTransactionId() {
         return payTransactionId;
         return payTransactionId;
     }
     }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/service/OrderProcessRecordService.java

@@ -72,4 +72,6 @@ public interface OrderProcessRecordService {
     int deleteBatch(Integer[] ids);
     int deleteBatch(Integer[] ids);
 
 
     OrderProcessRecordEntity queryObjectByOrderSn(String orderSn);
     OrderProcessRecordEntity queryObjectByOrderSn(String orderSn);
+
+    void sendCustomsSuccessSms();
 }
 }

+ 33 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderProcessRecordServiceImpl.java

@@ -3,11 +3,15 @@ package com.kmall.admin.service.impl;
 import com.kmall.admin.dao.OrderProcessRecordDao;
 import com.kmall.admin.dao.OrderProcessRecordDao;
 import com.kmall.admin.entity.OrderProcessRecordEntity;
 import com.kmall.admin.entity.OrderProcessRecordEntity;
 import com.kmall.admin.service.OrderProcessRecordService;
 import com.kmall.admin.service.OrderProcessRecordService;
+import com.kmall.api.util.SendMsgUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 
 
 
 /**
 /**
@@ -61,4 +65,33 @@ public class OrderProcessRecordServiceImpl implements OrderProcessRecordService
     public OrderProcessRecordEntity queryObjectByOrderSn(String orderSn) {
     public OrderProcessRecordEntity queryObjectByOrderSn(String orderSn) {
         return orderProcessRecordDao.queryObjectByOrderSn(orderSn);
         return orderProcessRecordDao.queryObjectByOrderSn(orderSn);
     }
     }
+
+    @Override
+    public void sendCustomsSuccessSms() {
+        // 找到清关成功没发短信的订单
+        List <OrderProcessRecordEntity> recordList = orderProcessRecordDao.queryListBySendSmsStatus("0");
+        if (Objects.nonNull(recordList) && recordList.size()>0){
+            for (OrderProcessRecordEntity orderProcessRecordEntity : recordList) {
+                orderProcessRecordEntity.setCustomsSendSmsStatus("3");// 状态改成发送中
+                orderProcessRecordDao.update(orderProcessRecordEntity);
+            }
+            for (OrderProcessRecordEntity orderProcessRecordEntity : recordList) {
+                String sendTemplate = "【CW惠州门店】惠州港惠店 尊敬的CW会员,您购买的订单"
+                        +orderProcessRecordEntity.getOrderSn()+",已清关成功,感谢您的耐心等待。";
+                new Thread(()->{
+                    try {
+                        SendMsgUtil.sendMsg(orderProcessRecordEntity.getPayMobile(), sendTemplate);
+                        orderProcessRecordEntity.setCustomsSendSmsStatus("1");//如果发送失败更新表
+                        orderProcessRecordDao.update(orderProcessRecordEntity);
+                    }catch (Exception e){
+                        orderProcessRecordEntity.setCustomsSendSmsStatus("2");//如果发送失败更新表
+                        orderProcessRecordDao.update(orderProcessRecordEntity);
+                        e.printStackTrace();
+                    }
+                }).start();
+            }
+        }
+
+
+    }
 }
 }

+ 48 - 0
kmall-admin/src/main/java/com/kmall/admin/task/SendSmsTask.java

@@ -0,0 +1,48 @@
+package com.kmall.admin.task;
+
+import com.kmall.admin.service.OrderProcessRecordService;
+import com.kmall.admin.service.alarm.Mall2OrderingEarlyWarningRemindsService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 发送短信定时器
+ * @author 小问号
+ * @email 1076650290@qq.com
+ * @date 2020年11月5日15:15:23
+ */
+@Component("sendSmsTask")
+@EnableScheduling
+@EnableAsync
+public class SendSmsTask {
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private OrderProcessRecordService orderProcessRecordService;
+
+
+    /**
+     * 发送清关成功短信给用户
+     * 30秒刷一次
+     */
+    @Scheduled(cron = "0/30 * * * * ?")
+    public void sendCustomsSuccessSms() {
+        logger.info("发送清关成功短信定时器开始-----------------" );
+        try {
+            orderProcessRecordService.sendCustomsSuccessSms();
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger.info("发送清关成功短信定时器异常-----------------原因:"+e.getMessage() );
+        }
+
+        logger.info("发送清关成功短信定时器结束-----------" );
+
+    }
+
+}

+ 40 - 0
kmall-admin/src/main/resources/mybatis/mapper/OrderProcessRecordDao.xml

@@ -60,6 +60,7 @@
 			`shipment_start_time`,
 			`shipment_start_time`,
 			`shipment_succ_time`,
 			`shipment_succ_time`,
 			`process_content`,
 			`process_content`,
+			`customs_send_sms_status`,
 			r.`tstm`,
 			r.`tstm`,
 			o.ali_trade_no
 			o.ali_trade_no
 		from mall_order_process_record r inner join mall_order o on r.order_sn = o.order_sn
 		from mall_order_process_record r inner join mall_order o on r.order_sn = o.order_sn
@@ -93,6 +94,7 @@
 		`shipment_start_time`,
 		`shipment_start_time`,
 		`shipment_succ_time`,
 		`shipment_succ_time`,
 		`process_content`,
 		`process_content`,
+		`customs_send_sms_status`,
 		r.`tstm`,
 		r.`tstm`,
 		o.ali_trade_no as pay_transaction_id
 		o.ali_trade_no as pay_transaction_id
 		from mall_order_process_record r inner join mall_order o on r.order_sn = o.order_sn
 		from mall_order_process_record r inner join mall_order o on r.order_sn = o.order_sn
@@ -126,6 +128,7 @@
     		`shipment_start_time`,
     		`shipment_start_time`,
     		`shipment_succ_time`,
     		`shipment_succ_time`,
     		`process_content`,
     		`process_content`,
+    		`customs_send_sms_status`,
     		`tstm`
     		`tstm`
 		from mall_order_process_record
 		from mall_order_process_record
 		WHERE 1=1
 		WHERE 1=1
@@ -152,6 +155,40 @@
             AND name LIKE concat('%',#{name},'%')
             AND name LIKE concat('%',#{name},'%')
         </if>
         </if>
 	</select>
 	</select>
+	<select id="queryListBySendSmsStatus" resultType="com.kmall.admin.entity.OrderProcessRecordEntity">
+select
+		r.`id`,
+		r.`order_sn`,
+		r.`user_id`,
+		r.`order_biz_type`,
+		`add_order_start_time`,
+		`add_order_succ_time`,
+		`is_add_order_send`,
+		`pay_start_time`,
+		`pay_succ_time`,
+		`payment_start_time`,
+		`payment_succ_time`,
+		`is_payment_send`,
+		`ele_order_start_time`,
+		`ele_order_succ_time`,
+		`is_ele_order_send`,
+		`waybill_start_time`,
+		`waybill_succ_time`,
+		`logistics_no`,
+		`customs_start_time`,
+		`customs_succ_time`,
+		`invt_no`,
+		`is_customs_send`,
+		`shipment_start_time`,
+		`shipment_succ_time`,
+		`process_content`,
+		r.`tstm`,
+		o.ali_trade_no as pay_transaction_id,
+		o.pay_mobile as payMobile,
+		r.customs_send_sms_status as customsSendSmsStatus
+		from mall_order_process_record r inner join mall_order o on r.order_sn = o.order_sn
+		where r.is_customs_send='1' and r.customs_send_sms_status=#{customsSendSmsStatus}
+	</select>
 
 
 	<insert id="save" parameterType="com.kmall.admin.entity.OrderProcessRecordEntity" useGeneratedKeys="true" keyProperty="id">
 	<insert id="save" parameterType="com.kmall.admin.entity.OrderProcessRecordEntity" useGeneratedKeys="true" keyProperty="id">
 		insert into mall_order_process_record(
 		insert into mall_order_process_record(
@@ -179,6 +216,7 @@
 			`shipment_start_time`,
 			`shipment_start_time`,
 			`shipment_succ_time`,
 			`shipment_succ_time`,
 			`process_content`,
 			`process_content`,
+			`customs_send_sms_status`,
 			`tstm`)
 			`tstm`)
 		values(
 		values(
 			#{orderSn},
 			#{orderSn},
@@ -205,6 +243,7 @@
 			#{shipmentStartTime},
 			#{shipmentStartTime},
 			#{shipmentSuccTime},
 			#{shipmentSuccTime},
 			#{processContent},
 			#{processContent},
+			#{customsSendSmsStatus},
 			#{tstm})
 			#{tstm})
 	</insert>
 	</insert>
 
 
@@ -235,6 +274,7 @@
 			<if test="shipmentStartTime != null">`shipment_start_time` = #{shipmentStartTime}, </if>
 			<if test="shipmentStartTime != null">`shipment_start_time` = #{shipmentStartTime}, </if>
 			<if test="shipmentSuccTime != null">`shipment_succ_time` = #{shipmentSuccTime}, </if>
 			<if test="shipmentSuccTime != null">`shipment_succ_time` = #{shipmentSuccTime}, </if>
 			<if test="processContent != null">`process_content` = #{processContent}, </if>
 			<if test="processContent != null">`process_content` = #{processContent}, </if>
+			<if test="customsSendSmsStatus != null">`customs_send_sms_status` = #{customsSendSmsStatus}, </if>
 			<if test="tstm != null">`tstm` = #{tstm}</if>
 			<if test="tstm != null">`tstm` = #{tstm}</if>
 		</set>
 		</set>
 		where id = #{id}
 		where id = #{id}

+ 13 - 3
kmall-api/src/main/java/com/kmall/api/util/SendMsgUtil.java

@@ -24,6 +24,16 @@ import java.util.Map;
 public class SendMsgUtil {
 public class SendMsgUtil {
     //编码格式。发送编码格式统一用UTF-8
     //编码格式。发送编码格式统一用UTF-8
     private static String ENCODING = "UTF-8";
     private static String ENCODING = "UTF-8";
+
+
+    // 请求地址
+    private static String SMS_URL = "https://sms.yunpian.com/v2/sms/single_send.json";
+
+    // 中网cw apikey
+    private static String API_KEY = "1dd75986321871d706334e60b89c4021";
+
+
+
     /**
     /**
      * 发送短信消息
      * 发送短信消息
      * 方法说明
      * 方法说明
@@ -36,8 +46,8 @@ public class SendMsgUtil {
     @SuppressWarnings("deprecation")
     @SuppressWarnings("deprecation")
     public static String sendMsg(String phones,String text) {
     public static String sendMsg(String phones,String text) {
         System.out.println(text);
         System.out.println(text);
-        String apikey = CommonPropertiesBuilder.instance().getYunpianSmsApiKey();
-        String url = CommonPropertiesBuilder.instance().getYunpianSmsUrl();
+        String apikey = API_KEY;
+        String url = SMS_URL;
         if(apikey != null && url != null){
         if(apikey != null && url != null){
             Map<String, String> params = new HashMap<String, String>();
             Map<String, String> params = new HashMap<String, String>();
             params.put("apikey", apikey);
             params.put("apikey", apikey);
@@ -119,6 +129,6 @@ public class SendMsgUtil {
     public static void main(String[] args) {
     public static void main(String[] args) {
 //      System.out.println(SendMsgUtil.createRandomVcode());
 //      System.out.println(SendMsgUtil.createRandomVcode());
 //      System.out.println("&ecb=12".substring(1));
 //      System.out.println("&ecb=12".substring(1));
-        System.out.println(sendMsg("13530612313", "【前海电商】手机验证码为:" + SendMsgUtil.createRandomVcode()));
+        System.out.println(sendMsg("13229855975", "【CW惠州门店】惠州港惠店 尊敬的CW会员,您购买的订单56151,已清关成功,感谢您的耐心等待。"));
     }
     }
 }
 }

+ 1 - 1
kmall-manager/src/main/resources/conf/common.properties

@@ -1,7 +1,7 @@
 ##########  \u4E91\u7247\u77ED\u4FE1\u914D\u7F6E ##########
 ##########  \u4E91\u7247\u77ED\u4FE1\u914D\u7F6E ##########
 
 
 
 
-#\u6D4B\u8BD5apikey
+#\u4E2D\u7F51cw apikey
 yunpian.sms.apikey=1dd75986321871d706334e60b89c4021
 yunpian.sms.apikey=1dd75986321871d706334e60b89c4021
 #\u524D\u6D77\u7535\u5546apikey
 #\u524D\u6D77\u7535\u5546apikey
 #yunpian.sms.apikey=3084e52ffff6adb96a67995b43edfb93
 #yunpian.sms.apikey=3084e52ffff6adb96a67995b43edfb93