Browse Source

回调发送消息

15376779826 2 days ago
parent
commit
359ae253e3

+ 3 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java

@@ -14,6 +14,7 @@ import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.QwOptionsVO;
 import com.fs.qw.vo.QwUserVO;
 import com.fs.wxUser.domain.CompanyWxUser;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -246,4 +247,6 @@ public interface ICompanyUserService {
     R updateBatchUserRoles(BatchUserRolesVO batchUserRolesVO);
 
     List<Long> selectCompanyQwUserByDept(List<Long> deptList,String userType);
+
+    String selectMpOpenIdByCompanyUserId(Long companyUserId);
 }

+ 5 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -1066,4 +1066,9 @@ public class CompanyUserServiceImpl implements ICompanyUserService
     public List<Long> selectCompanyQwUserByDept(List<Long> deptList,String userType) {
         return companyUserMapper.selectCompanyQwUserByDept(deptList,userType);
     }
+
+    @Override
+    public String selectMpOpenIdByCompanyUserId(Long companyUserId) {
+        return companyUserMapper.selectMpOpenIdByCompanyUserId(companyUserId);
+    }
 }

+ 15 - 12
fs-service/src/main/java/com/fs/company/util/WechatApi.java

@@ -2,6 +2,7 @@ package com.fs.company.util;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fs.common.core.redis.RedisCache;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
@@ -11,11 +12,13 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
 import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
-
+@Slf4j
 @Component
 public class WechatApi {
 
@@ -62,7 +65,7 @@ public class WechatApi {
     }
 
     public static void sendSubscribeMessage(String accessToken, String openId) {
-        accessToken = "97_AWdZem-aCEBY8bt8vlQV0Hz1OmJnXGCRwWZiiUAuVxZmwYtIJbxP13ADoqZ5p8cFBef2JrF8lo3wMUjvGCUTsXuhA0hrlG-RYhPzuoRFHh8o4Iwxj0Ai4TDWvGcWEQhAFAEMY";
+        //accessToken = "97_AWdZem-aCEBY8bt8vlQV0Hz1OmJnXGCRwWZiiUAuVxZmwYtIJbxP13ADoqZ5p8cFBef2JrF8lo3wMUjvGCUTsXuhA0hrlG-RYhPzuoRFHh8o4Iwxj0Ai4TDWvGcWEQhAFAEMY";
         String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/bizsend?access_token=" + accessToken;
 
         // 消息体
@@ -87,8 +90,8 @@ public class WechatApi {
         System.out.println("微信返回结果:" + result);
     }
 
-    public static void sendTemplateMessage(String accessToken, String openId) {
-        accessToken = "97_AWdZem-aCEBY8bt8vlQV0Hz1OmJnXGCRwWZiiUAuVxZmwYtIJbxP13ADoqZ5p8cFBef2JrF8lo3wMUjvGCUTsXuhA0hrlG-RYhPzuoRFHh8o4Iwxj0Ai4TDWvGcWEQhAFAEMY";
+    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;
 
         // 消息体
@@ -98,10 +101,10 @@ public class WechatApi {
 
         // 模板参数
         Map<String, Object> payloadData = new HashMap<>();
-        payloadData.put("time3", createValue("2025年10月30日 14:00"));
-        payloadData.put("thing4", createValue("张三"));
-        payloadData.put("amount8", createValue("10.00"));
-        payloadData.put("character_string9", createValue("123456789"));
+        payloadData.put("time3", payTime);
+        payloadData.put("thing4", userName);
+        payloadData.put("amount8", payPrice);
+        payloadData.put("character_string9", orderCode);
 
         data.put("data", payloadData);
 
@@ -109,7 +112,7 @@ public class WechatApi {
 
         Map<String, Object> result = restTemplate.postForObject(url, data, Map.class);
 
-        System.out.println("微信返回结果:" + result);
+        log.info("微信返回结果:{}" , result);
     }
 
     private static Map<String, String> createValue(String value) {
@@ -165,7 +168,7 @@ public class WechatApi {
         return map;
     }
 
-    public static void main(String[] args) {
-        sendTemplateMessage("","ooWg-6u1yGLDT9xlmV4lvwjLZV5o");
-    }
+//    public static void main(String[] args) {
+//        sendTemplateMessage("","ooWg-6u1yGLDT9xlmV4lvwjLZV5o");
+//    }
 }

+ 12 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsCourseProductOrderServiceImpl.java

@@ -2,6 +2,7 @@ package com.fs.course.service.impl;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.time.ZoneId;
 import java.util.*;
 
 import cn.hutool.core.util.ObjectUtil;
@@ -16,6 +17,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.ip.IpUtils;
+import com.fs.company.service.ICompanyUserService;
+import com.fs.company.util.WechatApi;
 import com.fs.core.config.WxPayProperties;
 import com.fs.core.utils.OrderCodeUtils;
 import com.fs.course.domain.FsCourseProduct;
@@ -65,6 +68,7 @@ import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.WxPayService;
 import com.google.common.collect.Maps;
 import com.google.gson.Gson;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -83,6 +87,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
  * @author fs
  * @date 2025-07-28
  */
+@Slf4j
 @Service
 public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProductOrderMapper, FsCourseProductOrder> implements IFsCourseProductOrderService {
     Logger logger= LoggerFactory.getLogger(getClass());
@@ -124,6 +129,13 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
     @Autowired
     private IPayService ybPayService;
 
+    @Autowired
+    private ICompanyUserService companyUserService;
+
+    @Autowired
+    private WechatApi wechatApi;
+
+
     private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
 
     private static final int CODE_LENGTH = 12;

+ 18 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsInquiryOrderServiceImpl.java

@@ -79,6 +79,7 @@ import com.github.binarywang.wxpay.service.WxPayService;
 import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
 import lombok.Synchronized;
+import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.slf4j.Logger;
@@ -109,6 +110,7 @@ import static com.fs.his.utils.PhoneUtil.encryptPhone;
  * @author fs
  * @date 2023-06-12
  */
+@Slf4j
 @Service
 public class FsInquiryOrderServiceImpl implements IFsInquiryOrderService
 {
@@ -827,6 +829,22 @@ public class FsInquiryOrderServiceImpl implements IFsInquiryOrderService
                 map.setIsAudit(1);
             }
             fsInquiryOrderMapper.updateFsInquiryOrder(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());
+                        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());
+            }
             // 木易华康特殊处理(支付成功医生自动接单)
             if (CloudHostUtils.hasCloudHostName("木易华康")&&order.getDoctorId()!=null) {
                 Integer orderCount=fsInquiryOrderMapper.checkAcceptOrder(order.getDoctorId(),order.getUserId());

+ 28 - 4
fs-service/src/main/java/com/fs/his/service/impl/FsIntegralOrderServiceImpl.java

@@ -20,6 +20,8 @@ import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.company.service.ICompanyUserService;
+import com.fs.company.util.WechatApi;
 import com.fs.core.utils.OrderCodeUtils;
 import com.fs.his.domain.*;
 import com.fs.his.enums.BusinessTypeEnum;
@@ -27,10 +29,7 @@ import com.fs.his.enums.FsUserIntegralLogTypeEnum;
 import com.fs.his.enums.PaymentMethodEnum;
 import com.fs.his.mapper.*;
 import com.fs.his.param.*;
-import com.fs.his.service.IFsIntegralCartService;
-import com.fs.his.service.IFsIntegralOrderService;
-import com.fs.his.service.IFsStorePaymentService;
-import com.fs.his.service.IFsUserIntegralLogsService;
+import com.fs.his.service.*;
 import com.fs.his.utils.PhoneUtil;
 import com.fs.his.vo.FsIntegralOrderListUVO;
 import com.fs.his.vo.FsIntegralOrderListVO;
@@ -52,6 +51,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 
@@ -94,6 +94,13 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
     private IFsStorePaymentService storePaymentService;
     @Autowired
     private IFsIntegralCartService cartService;
+    @Autowired
+    private ICompanyUserService companyUserService;
+
+    @Autowired
+    private WechatApi wechatApi;
+    @Autowired
+    private IFsUserService userService;
 
     /**
      * 查询积分商品订单
@@ -574,6 +581,23 @@ 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()));
             }
         }

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

@@ -28,6 +28,8 @@ import com.fs.common.utils.ip.IpUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.company.service.ICompanyUserService;
+import com.fs.company.util.WechatApi;
 import com.fs.config.cloud.CloudHostProper;
 import com.fs.core.config.WxMaConfiguration;
 import com.fs.core.config.WxPayProperties;
@@ -76,6 +78,7 @@ import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.WxPayService;
 import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
+import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -92,6 +95,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
  * @author fs
  * @date 2023-08-25
  */
+@Slf4j
 @Service
 public class FsPackageOrderServiceImpl implements IFsPackageOrderService
 {
@@ -168,6 +172,12 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
     @Autowired
     private CloudHostProper cloudHostProper;
 
+    @Autowired
+    private ICompanyUserService companyUserService;
+
+    @Autowired
+    private WechatApi wechatApi;
+
     /**
      * 查询套餐订单
      *
@@ -742,6 +752,22 @@ 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()));
                 }
             }

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

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