Procházet zdrojové kódy

回调发送消息

15376779826 před 1 měsícem
rodič
revize
17626f0063

+ 8 - 2
fs-company/src/main/java/com/fs/company/controller/wechat/WeChatBindController.java

@@ -1,7 +1,10 @@
 package com.fs.company.controller.wechat;
 
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.utils.ServletUtils;
 import com.fs.company.service.WechatService;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.service.TokenService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -17,10 +20,13 @@ public class WeChatBindController {
 
     @Autowired
     private WechatService wechatService;
+    @Autowired
+    private TokenService tokenService;
     @GetMapping("/qrcode")
     public AjaxResult getBindQrcode() throws UnsupportedEncodingException {
-        String sceneId = "companyUserId_9415";
-        String qrcodeUrl = wechatService.createTempQrcode("9415", 300); // 5分钟有效
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String sceneId = "companyUserId_"+loginUser.getUser().getUserId();
+        String qrcodeUrl = wechatService.createTempQrcode(loginUser.getUser().getUserId().toString(), 300); // 5分钟有效
         wechatService.cacheScene(sceneId); // 缓存sceneId用于轮询
         Map<String, Object> result = new HashMap<>();
         result.put("qrcodeUrl", qrcodeUrl);

+ 41 - 18
fs-service/src/main/java/com/fs/company/util/WechatApi.java

@@ -10,11 +10,13 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestClientException;
 import org.springframework.web.client.RestTemplate;
 
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
@@ -93,30 +95,51 @@ public class WechatApi {
     }
 
     //发送模板消息
-    @Async
+    //@Async
     public void sendTemplateMessage(String accessToken, String openId, Date payTime, String userName, BigDecimal payPrice,String orderCode) {
-        //accessToken = "97_AWdZem-aCEBY8bt8vlQV0Hz1OmJnXGCRwWZiiUAuVxZmwYtIJbxP13ADoqZ5p8cFBef2JrF8lo3wMUjvGCUTsXuhA0hrlG-RYhPzuoRFHh8o4Iwxj0Ai4TDWvGcWEQhAFAEMY";
-        String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
+       // accessToken = "97_suqOMLamU1WOJpore5R1QABi9uqjZQZ8MwzOl_RwVLnIbyROkuSGNVx8M-qgiCnMqh9Ee0oROPAt7pxJROxxYcE2zm35fCD46mjKZPp7ClWwN5S9_AXgzjI21b0FELgAAARQX";
+        log.info("进入 sendTemplateMessage 方法");
+        try {
+            String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
 
-        // 消息体
-        Map<String, Object> data = new HashMap<>();
-        data.put("touser", openId);
-        data.put("template_id", "phVk0BLSeFZOw9f3vNlWGGvqvzICkOvjZJiI7wgpNyg");
+            // 格式化时间
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
+            String payTimeStr = sdf.format(payTime);
 
-        // 模板参数
-        Map<String, Object> payloadData = new HashMap<>();
-        payloadData.put("time3", payTime);
-        payloadData.put("thing4", userName);
-        payloadData.put("amount8", payPrice);
-        payloadData.put("character_string9", orderCode);
+            // 构造模板参数(Java 8 写法)
+            Map<String, Object> time3 = new HashMap<>();
+            time3.put("value", payTimeStr);
 
-        data.put("data", payloadData);
+            Map<String, Object> thing4 = new HashMap<>();
+            thing4.put("value", userName);
 
-        RestTemplate restTemplate = new RestTemplate();
+            Map<String, Object> amount8 = new HashMap<>();
+            amount8.put("value", payPrice.toPlainString() + "元");
 
-        Map<String, Object> result = restTemplate.postForObject(url, data, Map.class);
+            Map<String, Object> character_string9 = new HashMap<>();
+            character_string9.put("value", orderCode);
+
+            // 组合模板字段
+            Map<String, Object> payloadData = new HashMap<>();
+            payloadData.put("time3", time3);
+            payloadData.put("thing4", thing4);
+            payloadData.put("amount8", amount8);
+            payloadData.put("character_string9", character_string9);
+
+            // 组合整体消息体
+            Map<String, Object> data = new HashMap<>();
+            data.put("touser", openId);
+            data.put("template_id", "phVk0BLSeFZOw9f3vNlWGGvqvzICkOvjZJiI7wgpNyg");
+            data.put("data", payloadData);
 
-        log.info("微信返回结果:{}" , result);
+            // 发送请求
+            RestTemplate restTemplate = new RestTemplate();
+            Map<String, Object> result = restTemplate.postForObject(url, data, Map.class);
+
+            log.info("微信返回结果:{}" , result);
+        } catch (Exception e) {
+            log.error("发送模板消息失败", e);
+        }
     }
 
     private static Map<String, String> createValue(String value) {
@@ -173,6 +196,6 @@ public class WechatApi {
     }
 
 //    public static void main(String[] args) {
-//        sendTemplateMessage("","ooWg-6u1yGLDT9xlmV4lvwjLZV5o");
+//        sendTemplateMessage("","ooWg-6u1yGLDT9xlmV4lvwjLZV5o",new Date(),"fcj",new BigDecimal(100),"2025123456");
 //    }
 }

+ 2 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsInquiryOrderServiceImpl.java

@@ -836,7 +836,8 @@ public class FsInquiryOrderServiceImpl implements IFsInquiryOrderService
                     String mpOpenId = companyUserService.selectMpOpenIdByCompanyUserId(companyUserId);
                     if (StringUtils.isNotEmpty(mpOpenId)) {
                         FsUser user = fsUserService.selectFsUserByUserId(order.getUserId());
-                        wechatApi.sendTemplateMessage(wechatApi.getAccessToken(), mpOpenId,order.getPayTime(),user.getUsername(),order.getPayMoney(),order.getOrderSn());
+                        String userName = user.getUsername() != null?user.getUsername():user.getNickName();
+                        wechatApi.sendTemplateMessage(wechatApi.getAccessToken(), mpOpenId,map.getPayTime(),userName,order.getPayMoney(),order.getOrderSn());
                         log.info("支付成功模板消息已发送给销售: {}", companyUserId);
                     } else {
                         log.warn("未找到 companyUserId={} 的 openId,跳过模板消息发送", companyUserId);

+ 18 - 17
fs-service/src/main/java/com/fs/his/service/impl/FsIntegralOrderServiceImpl.java

@@ -581,23 +581,6 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
                 }
                 log.info("更新支付记录");
                 storePaymentService.updateFsStorePayment(paymentMap);
-                try {
-                    Long companyUserId = order.getCompanyUserId();
-                    if (companyUserId != null) {
-                        // 从company_user表查出openid
-                        String mpOpenId = companyUserService.selectMpOpenIdByCompanyUserId(companyUserId);
-                        if (StringUtils.isNotEmpty(mpOpenId)) {
-                            FsUser user = userService.selectFsUserByUserId(order.getUserId());
-                            Date payTime = Date.from(order.getPayTime().atZone(ZoneId.systemDefault()).toInstant());
-                            wechatApi.sendTemplateMessage(wechatApi.getAccessToken(), mpOpenId,payTime,user.getUsername(),order.getPayMoney(),order.getOrderCode());
-                            log.info("支付成功模板消息已发送给销售: {}", companyUserId);
-                        } else {
-                            log.warn("未找到 companyUserId={} 的 openId,跳过模板消息发送", companyUserId);
-                        }
-                    }
-                } catch (Exception msgEx) {
-                    log.error("支付成功后发送模板消息失败,订单号:{},原因:{}", order.getOrderCode(), msgEx.getMessage());
-                }
                 order = fsIntegralOrderMapper.selectFsIntegralOrderByOrderId(Long.parseLong(storePayment.getBusinessId()));
             }
         }
@@ -621,6 +604,24 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
         order.setStatus(1);
         order.setPayTime(LocalDateTime.now());
         fsIntegralOrderMapper.updateFsIntegralOrder(order);
+        try {
+            Long companyUserId = order.getCompanyUserId();
+            if (companyUserId != null) {
+                // 从company_user表查出openid
+                String mpOpenId = companyUserService.selectMpOpenIdByCompanyUserId(companyUserId);
+                if (StringUtils.isNotEmpty(mpOpenId)) {
+                    FsUser user = userService.selectFsUserByUserId(order.getUserId());
+                    String userName = user.getUsername() != null?user.getUsername():user.getNickName();
+                    Date payTime = Date.from(order.getPayTime().atZone(ZoneId.systemDefault()).toInstant());
+                    wechatApi.sendTemplateMessage(wechatApi.getAccessToken(), mpOpenId,payTime,userName,order.getPayMoney(),order.getOrderCode());
+                    log.info("支付成功模板消息已发送给销售: {}", companyUserId);
+                } else {
+                    log.warn("未找到 companyUserId={} 的 openId,跳过模板消息发送", companyUserId);
+                }
+            }
+        } catch (Exception msgEx) {
+            log.error("支付成功后发送模板消息失败,订单号:{},原因:{}", order.getOrderCode(), msgEx.getMessage());
+        }
         return R.ok();
     }
 

+ 17 - 17
fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java

@@ -752,22 +752,6 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                     }
                     logger.info("更新支付记录");
                     fsStorePaymentMapper.updateFsStorePayment(paymentMap);
-                    try {
-                        Long companyUserId = order.getCompanyUserId();
-                        if (companyUserId != null) {
-                            // 从company_user表查出openid
-                            String mpOpenId = companyUserService.selectMpOpenIdByCompanyUserId(companyUserId);
-                            if (StringUtils.isNotEmpty(mpOpenId)) {
-                                FsUser user = fsUserService.selectFsUserByUserId(order.getUserId());
-                                wechatApi.sendTemplateMessage(wechatApi.getAccessToken(), mpOpenId,order.getPayTime(),user.getUsername(),order.getPayMoney(),order.getOrderSn());
-                                log.info("支付成功模板消息已发送给销售: {}", companyUserId);
-                            } else {
-                                log.warn("未找到 companyUserId={} 的 openId,跳过模板消息发送", companyUserId);
-                            }
-                        }
-                    } catch (Exception msgEx) {
-                        log.error("支付成功后发送模板消息失败,订单号:{},原因:{}", order.getOrderSn(), msgEx.getMessage());
-                    }
                     order=fsPackageOrderMapper.selectFsPackageOrderByOrderId(Long.parseLong(storePayment.getBusinessId()));
                 }
             }
@@ -803,7 +787,23 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         map.setPayTime(new Date());
         map.setPrescribePrice(order.getTotalPrice());
         fsPackageOrderMapper.updateFsPackageOrder(map);
-
+        try {
+            Long companyUserId = order.getCompanyUserId();
+            if (companyUserId != null) {
+                // 从company_user表查出openid
+                String mpOpenId = companyUserService.selectMpOpenIdByCompanyUserId(companyUserId);
+                if (StringUtils.isNotEmpty(mpOpenId)) {
+                    FsUser user = fsUserService.selectFsUserByUserId(order.getUserId());
+                    String userName = user.getUsername() != null?user.getUsername():user.getNickName();
+                    wechatApi.sendTemplateMessage(wechatApi.getAccessToken(), mpOpenId,map.getPayTime(),userName,order.getPayMoney(),order.getOrderSn());
+                    log.info("支付成功模板消息已发送给销售: {}", companyUserId);
+                } else {
+                    log.warn("未找到 companyUserId={} 的 openId,跳过模板消息发送", companyUserId);
+                }
+            }
+        } catch (Exception msgEx) {
+            log.error("支付成功后发送模板消息失败,订单号:{},原因:{}", order.getOrderSn(), msgEx.getMessage());
+        }
 
         logger.info("更改套餐包订单记录");
         //写入药品订单 写入问诊订单

+ 1 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -1662,7 +1662,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                     // 从company_user表查出openid
                     String mpOpenId = companyUserService.selectMpOpenIdByCompanyUserId(companyUserId);
                     if (StringUtils.isNotEmpty(mpOpenId)) {
-                        wechatApi.sendTemplateMessage(wechatApi.getAccessToken(), mpOpenId,order.getPayTime(),order.getUserName(),order.getPayPrice(),order.getOrderCode());
+                        wechatApi.sendTemplateMessage(wechatApi.getAccessToken(), mpOpenId,storeOrder.getPayTime(),order.getUserName(),order.getPayPrice(),order.getOrderCode());
                         log.info("支付成功模板消息已发送给销售: {}", companyUserId);
                     } else {
                         log.warn("未找到 companyUserId={} 的 openId,跳过模板消息发送", companyUserId);