瀏覽代碼

feat:"更换退款提醒的短信模板,增加微信推送功能"

soobin 4 周之前
父節點
當前提交
a9304716cd

+ 7 - 0
src/main/java/com/szwl/constant/ConfigConsts.java

@@ -17,4 +17,11 @@ public class ConfigConsts {
      * token时效性
      */
     public static final Integer TOKEN_EXPIRE_MINUTE = 120;
+
+    /**
+     * 退款提醒消息ID
+     */
+    public static final String SZ_REFUND_MESSAGE_ID = "azhH_Uu86VnjWnN-FWqXcBUT6HSAwzqroKSxsW6Ss2E";
+
+    public static final String SC_REFUND_MESSAGE_ID = "ipgpO3M7yV9wjDgxUWl_E9qz0m9F9m5GUIRlflumsCw";
 }

+ 1 - 1
src/main/java/com/szwl/controller/RefundSendRecordController.java

@@ -71,7 +71,7 @@ public class RefundSendRecordController {
     public String callBack(String sms_status){
         try {
             String decode = URLDecoder.decode(sms_status, "UTF-8");
-            log.info("decode:{}", decode);
+            log.info("decode:{}", decode);  
             JSONArray jsonArray = new JSONArray(decode);
             for (int i = 0; i < jsonArray.length(); i++) {
                 JSONObject jsonObject = jsonArray.getJSONObject(i);

+ 2 - 2
src/main/java/com/szwl/controller/TOrderController.java

@@ -1818,11 +1818,11 @@ public class TOrderController {
 
     @ApiOperation("发送退款短信提醒")
     @GetMapping("/sentMessage")
-    public ResponseModel<?> sentMessage(Long id, String customerPhone, Long adminId) {
+    public ResponseModel<?> sentMessage(Long id, String customerPhone, Long adminId, String reason) {
         if (id == null) {
             return R.fail(ResponseCodesEnum.A0001);
         }
-        String result = orderService.setMessage(id, customerPhone, adminId);
+        String result = orderService.setMessage(id, customerPhone, adminId, reason);
         if ("发送成功".equals(result)) {
             return R.ok(result);
         } else {

+ 12 - 1
src/main/java/com/szwl/service/TOrderService.java

@@ -6,6 +6,8 @@ import com.szwl.model.bean.ChartColumn;
 import com.szwl.model.bean.OrderDaoChuDTO;
 import com.szwl.model.dto.OrderDto;
 import com.szwl.model.entity.TAdmin;
+import com.szwl.model.entity.TCoinOrder;
+import com.szwl.model.entity.TEquipment;
 import com.szwl.model.entity.TOrder;
 import com.szwl.model.excel.NewOrderTarget;
 import com.szwl.model.excel.OrderTarget;
@@ -38,7 +40,7 @@ public interface TOrderService extends IService<TOrder> {
 
     List<OrderStatisticsDTO> findByTime(String clientId, Date startTime, Date endTime, Integer unit);
 
-    String setMessage(Long id, String customerPhone, Long adminId);
+    String setMessage(Long id, String customerPhone, Long adminId, String reason);
 
     List<NewOrderTarget> exportOrderData(TAdmin admin, List<TOrder> list);
 
@@ -92,4 +94,13 @@ public interface TOrderService extends IService<TOrder> {
      * @param param
      */
     <T> void statisticsDayWeekExport(HttpServletResponse response, Class<T> clazz, StatisticsParam param) throws IOException;
+
+    /**
+     * 微信公众号退款提醒消息
+     * @param openId
+     * @param equipment
+     * @param order
+     * @param companyType
+     */
+    void WechatRefundMessage(String openId, TEquipment equipment, TOrder order, String companyType, String reason);
 }

+ 2 - 1
src/main/java/com/szwl/service/impl/TCoinOrderServiceImpl.java

@@ -25,6 +25,7 @@ import com.szwl.model.excel.NewCoinOrderTarget;
 import com.szwl.model.query.OrderDaoChuParam;
 import com.szwl.model.query.OrderStatisticsDTO;
 import com.szwl.service.TCoinOrderService;
+import com.szwl.util.WechatUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -417,7 +418,7 @@ public class TCoinOrderServiceImpl extends ServiceImpl<TCoinOrderMapper, TCoinOr
         } else {
             sendBody.put("template_id", NEW_SC_TEMPLATE_ID);
         }
-        sendMessage(accessToken, restTemplate, sendBody);
+        WechatUtils.sendMessage(accessToken, restTemplate, sendBody);
     }
 
     /**

+ 79 - 7
src/main/java/com/szwl/service/impl/TOrderServiceImpl.java

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.szwl.constant.ConfigConsts;
 import com.szwl.exception.MyException;
 import com.szwl.feign.SzwlFeign;
 import com.szwl.mapper.TCoinOrderMapper;
@@ -18,6 +19,7 @@ import com.szwl.mapper.TOrderMapper;
 import com.szwl.model.bean.ChartBean;
 import com.szwl.model.bean.ChartColumn;
 import com.szwl.model.bean.OrderDaoChuDTO;
+import com.szwl.model.bean.WeChatTemplateMsg;
 import com.szwl.model.bo.ChartType;
 import com.szwl.model.bo.R;
 import com.szwl.model.bo.ResponseModel;
@@ -35,11 +37,13 @@ import com.szwl.service.OrderStatisticsMonthService;
 import com.szwl.service.OrderStatisticsYearService;
 import com.szwl.service.RefundSendRecordService;
 import com.szwl.service.TOrderService;
+import com.szwl.util.WechatUtils;
 import com.szwl.util.YunPianSms;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -260,7 +264,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     }
 
     @Override
-    public String setMessage(Long id, String customerPhone, Long adminId) {
+    public String setMessage(Long id, String customerPhone, Long adminId, String reason) {
         TOrder order = tOrderMapper.selectById(id);
         String result = "";
         RefundSendRecord refundSendRecord = new RefundSendRecord();
@@ -323,11 +327,11 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
                     String clientId6 = clientId.substring(clientId.length() - 6);
                     if (StringUtils.isNotEmpty(companyType) && companyType.equals("1")) {
                         // 如果是七云科技的用户
-                        result = YunPianSms.sendSms(appid, getScMessage(sn, price, payTime,
+                        result = YunPianSms.sendSms(appid, YunPianSms.getScMessage(sn, price, payTime,
                                 equipment.getName(), clientId6, customerPhone), phone, uid, CALLBACK_URL);
                     } else {
                         // 如果是申泽智能的用户
-                        result = YunPianSms.sendSms(appid, getSzMessage(sn, price, payTime,
+                        result = YunPianSms.sendSms(appid, YunPianSms.getSzMessage(sn, price, payTime,
                                 equipment.getName(), clientId6, customerPhone), phone, uid, CALLBACK_URL);
                     }
                     refundSendRecord.setPhone(phone);
@@ -338,6 +342,21 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
                 result = "设备运营者手机号为空";
                 return result;
             }
+
+            try {
+                // 推送微信订单
+                // 判断是否开启订单推送功能
+                if (admin != null && StringUtils.isNotEmpty(admin.getOrderNotice()) && admin.getOrderNotice().equals("1")) {
+                    String openId = R.getDataIfSuccess(szwlFeign.getOpenId(admin.getId()));
+                    // 获取openId
+                    if (StringUtils.isNotEmpty(openId)) {
+                        this.WechatRefundMessage(openId, equipment, order, companyType, reason);
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
             refundSendRecord.setStatus(0);
             refundSendRecordService.save(refundSendRecord);
         }
@@ -685,7 +704,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
                 query.eq(OrderStatisticsMonth::getAdminId, admin.getId());
             }
         }
-        if (param.getAdminIds()!= null && !param.getAdminIds().isEmpty()) {
+        if (param.getAdminIds() != null && !param.getAdminIds().isEmpty()) {
             query.in(OrderStatisticsMonth::getAdminId, param.getAdminIds());
         }
         if (StringUtils.isNotEmpty(param.getIfForeign())) {
@@ -783,7 +802,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
                 query.eq(OrderStatisticsYear::getAdminId, admin.getId());
             }
         }
-        if (param.getAdminIds()!= null && !param.getAdminIds().isEmpty()) {
+        if (param.getAdminIds() != null && !param.getAdminIds().isEmpty()) {
             query.in(OrderStatisticsYear::getAdminId, param.getAdminIds());
         }
         if (StringUtils.isNotEmpty(param.getIfForeign())) {
@@ -1073,7 +1092,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
                 query.eq(OrderStatisticsYear::getAdminId, admin.getId());
             }
         }
-        if (param.getAdminIds()!= null && !param.getAdminIds().isEmpty()) {
+        if (param.getAdminIds() != null && !param.getAdminIds().isEmpty()) {
             query.in(OrderStatisticsYear::getAdminId, param.getAdminIds());
         }
         if (StringUtils.isNotEmpty(param.getIfForeign())) {
@@ -1168,7 +1187,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
                 query.eq(OrderStatisticsMonth::getAdminId, admin.getId());
             }
         }
-        if (param.getAdminIds()!= null && !param.getAdminIds().isEmpty()) {
+        if (param.getAdminIds() != null && !param.getAdminIds().isEmpty()) {
             query.in(OrderStatisticsMonth::getAdminId, param.getAdminIds());
         }
         if (StringUtils.isNotEmpty(param.getIfForeign())) {
@@ -1256,6 +1275,57 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         }
     }
 
+    @Override
+    public void WechatRefundMessage(String openId, TEquipment equipment, TOrder order, String companyType, String reason) {
+        String accessToken = "";
+        try {
+            if(StringUtils.isEmpty(companyType) || companyType.equals("0")) {
+                TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin("2738"));
+                accessToken = admin.getApiKey();
+            } else {
+                TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin("2739"));
+                accessToken = admin.getApiKey();
+            }
+
+            // 模板参数
+            Map<String, WeChatTemplateMsg> sendMag = new HashMap();
+            String clientId = equipment.getClientId();
+            // 模版参数
+            if(StringUtils.isNotEmpty(equipment.getName())) {
+                if(equipment.getName().length() > 20) {
+                    sendMag.put("thing11", new WeChatTemplateMsg(equipment.getName().substring(0, 15) + "..."));
+                } else {
+                    sendMag.put("thing11", new WeChatTemplateMsg(equipment.getName()));
+                }
+            } else {
+                sendMag.put("thing11", new WeChatTemplateMsg(clientId.substring(clientId.length() - 6)));
+            }
+
+            String sn = order.getSn();
+            if (sn.length() > 32) {
+                sendMag.put("character_string8", new WeChatTemplateMsg(sn.substring(0, 28) + "..."));
+            } else {
+                sendMag.put("character_string8", new WeChatTemplateMsg(sn));
+            }
+            sendMag.put("character_string10", new WeChatTemplateMsg(clientId.substring(clientId.length() - 6)));
+            sendMag.put("const5", new WeChatTemplateMsg(reason));
+            RestTemplate restTemplate = new RestTemplate();
+            Map<String, Object> sendBody = new HashMap<>();
+            sendBody.put("touser", openId);
+            sendBody.put("data", sendMag);
+            if(StringUtils.isEmpty(companyType) || companyType.equals("0")) {
+                sendBody.put("template_id", ConfigConsts.SZ_REFUND_MESSAGE_ID);
+                sendBody.put("url", "https://szwlh.sunzee.com.cn/shenze/#/login");
+            } else {
+                sendBody.put("template_id", ConfigConsts.SC_REFUND_MESSAGE_ID);
+                sendBody.put("url", "http://sevencloud.com.cn/sc/#/login");
+            }
+            WechatUtils.sendMessage(accessToken, restTemplate, sendBody);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     private List<StatisticsClientIdTarget> exportStatisticsByClientId(List<OrderDaoChuDTO> dataList) {
         List<StatisticsClientIdTarget> clientIdTargetList = new ArrayList<>();
         for (OrderDaoChuDTO orderDaoChuDTO : dataList) {
@@ -1275,6 +1345,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
 
     /**
      * 封装
+     *
      * @param dataList
      * @return
      */
@@ -1295,6 +1366,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
 
     /**
      * 分页查询
+     *
      * @param pageNo
      * @param param
      * @return

+ 31 - 0
src/main/java/com/szwl/util/WechatUtils.java

@@ -0,0 +1,31 @@
+package com.szwl.util;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Map;
+
+@Slf4j
+public class WechatUtils {
+
+    /**
+     * 发送微信消息
+     * @param accessToken
+     * @param restTemplate
+     * @param sendBody
+     * @return
+     */
+    public static String sendMessage(String accessToken, RestTemplate restTemplate, Map<String, Object> sendBody) {
+        String sendUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
+        ResponseEntity<String> forEntity = restTemplate.postForEntity(sendUrl, sendBody, String.class);
+        JSONObject jsonObject = JSONObject.parseObject(forEntity.getBody());
+        log.info("微信推送结果:{}", jsonObject);
+        String messageCode = jsonObject.getString("errcode");
+        String msgId = jsonObject.getString("msgid");
+        System.out.println("messageCode : " + messageCode + ", msgId: " +msgId);
+        log.info("微信推送结果:{}","messageCode : " + messageCode + ", msgId: " +msgId);
+        return messageCode;
+    }
+}

+ 39 - 10
src/main/java/com/szwl/util/YunPianSms.java

@@ -1,6 +1,7 @@
 package com.szwl.util;
 
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
@@ -213,22 +214,50 @@ public final class YunPianSms {
         return responseText;
     }
 
+    public static String getSzMessage(String sn, String price, String payTime, String equipmentName, String clientId, String customerPhone) {
+        if (StringUtils.isEmpty(equipmentName)) {
+            equipmentName = clientId;
+        }
+        String message = "【申泽智能】订单处理提醒\n" +
+                "订单号:" + sn +
+                "\n设备:" + equipmentName +
+                "\n事由:消费者投诉,请在24小时内完成退款。" +
+                "\n如需核实,请于群内沟通处理。" +
+                "\n如已退款,请立即向群内提交凭证,24小时后未处理,平台将介入完成退款流程。";
+        System.out.println(message);
+        return message;
+    }
+
+    public static String getScMessage(String sn, String price, String payTime, String equipmentName, String clientId, String customerPhone) {
+        if (StringUtils.isEmpty(equipmentName)) {
+            equipmentName = clientId;
+        }
+        String message = "【七云科技】订单处理提醒\n" +
+                "订单号:" + sn +
+                "\n设备:" + equipmentName +
+                "\n事由:消费者投诉,请在24小时内完成退款。" +
+                "\n如需核实,请于群内沟通处理。" +
+                "\n如已退款,请立即向群内提交凭证,24小时后未处理,平台将介入完成退款流程。";
+
+        return message;
+    }
+
     public static void main(String[] args) {
 
         try {
 
             //String content="【申泽智能】您好,机器二次取棍异常报警,机器名:MG301测试机,设备号:aaa863010031925055";
-            String tpl_value = URLEncoder.encode("#content#", ENCODING) + "=" +
-                    URLEncoder.encode("二次", ENCODING) + "&" + URLEncoder.encode(
-                    "#name#", ENCODING) + "=" + URLEncoder.encode("MG机",
-                    ENCODING) + "&" + URLEncoder.encode("#clientId#", ENCODING) + "=" + URLEncoder.encode("aaa8635", ENCODING);
-            //您好,机器#content#,机器名:#name#,设备号:#clientId#
-            System.out.println(tpl_value.length());
-            String content = "您好,机器二次取棍异常警告,机器名:MG301测试机,设备号:aaa863010031925055";
-            System.out.println(content.length());
+//            String tpl_value = URLEncoder.encode("#content#", ENCODING) + "=" +
+//                    URLEncoder.encode("二次", ENCODING) + "&" + URLEncoder.encode(
+//                    "#name#", ENCODING) + "=" + URLEncoder.encode("MG机",
+//                    ENCODING) + "&" + URLEncoder.encode("#clientId#", ENCODING) + "=" + URLEncoder.encode("aaa8635", ENCODING);
+//            //您好,机器#content#,机器名:#name#,设备号:#clientId#
+//            System.out.println(tpl_value.length());
+//            String content = "您好,机器二次取棍异常警告,机器名:MG301测试机,设备号:aaa863010031925055";
+//            System.out.println(content.length());
             //String result = tplSendSms("07784f5fedb508046c841b391005b7de", 2890698L, tpl_value, "15875317659");
-
-            String result = sendSms("07784f5fedb508046c841b391005b7de", content, "15875317659");
+            String content = getScMessage("67097276473620250724145653", "2", "2025/07/24 14:57:20", "123", "123", "123");
+            String result = sendSms("07784f5fedb508046c841b391005b7de", content, "15815278034");
             JSONObject resultJson = new JSONObject(result);
             System.out.println("短信发送结果:" + resultJson.get("msg"));
         } catch (IOException e) {