Browse Source

支付发起用户小程序openId增加获取方式

Long 2 weeks ago
parent
commit
7eae3f005b

+ 26 - 12
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseOrderServiceImpl.java

@@ -6,6 +6,8 @@ import java.util.*;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
@@ -24,10 +26,7 @@ import com.fs.his.domain.*;
 import com.fs.his.dto.PayConfigDTO;
 import com.fs.his.enums.FsPackageOrderStatusEnum;
 import com.fs.his.enums.FsUserIntegralLogTypeEnum;
-import com.fs.his.mapper.FsStorePaymentErrorMapper;
-import com.fs.his.mapper.FsStorePaymentMapper;
-import com.fs.his.mapper.FsUserIntegralLogsMapper;
-import com.fs.his.mapper.FsUserMapper;
+import com.fs.his.mapper.*;
 import com.fs.his.param.FsPackageOrderDoPayParam;
 import com.fs.his.param.FsUserAddIntegralTemplateParam;
 import com.fs.his.service.IFsCouponService;
@@ -128,6 +127,8 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
     private TzBankService tzBankService;
     @Autowired
     private IFsUserIntegralLogsService userIntegralLogsService;
+    @Autowired
+    private FsUserWxMapper fsUserWxMapper;
 
 
 
@@ -372,13 +373,26 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
             return R.error("非法操作");
         }
         FsUser user=fsUserMapper.selectFsUserByUserId(param.getUserId());
-        if(user!=null&& StringUtils.isNotEmpty(user.getMaOpenId())) {
+
+        String json = configService.selectConfigByKey("his.pay");
+        PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
+
+        String openId = Objects.isNull(user) ? "" : user.getMaOpenId();
+        if (StringUtils.isBlank(openId)){
+            Wrapper<FsUserWx> queryWrapper = Wrappers.<FsUserWx>lambdaQuery()
+                    .eq(FsUserWx::getFsUserId, param.getUserId())
+                    .eq(FsUserWx::getAppId, payConfigDTO.getAppId());
+            FsUserWx fsUserWx = fsUserWxMapper.selectOne(queryWrapper);
+            if (Objects.nonNull(fsUserWx)){
+                openId = fsUserWx.getOpenId();
+            }
+        }
+
+        if(user!=null&& StringUtils.isNotEmpty(openId)) {
             if (order.getPayMoney().compareTo(new BigDecimal(0)) == 0) {
                 this.payConfirm(order.getOrderCode(), "", "", "", 2);
                 return R.ok().put("isPay", 1);
             } else {
-                String json = configService.selectConfigByKey("his.pay");
-                PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
                 String payCode =  OrderCodeUtils.getOrderSn();
                 if(StringUtils.isEmpty(payCode)){
                     return R.error("订单生成失败,请重试");
@@ -393,7 +407,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                 storePayment.setPayTypeCode("weixin");
                 storePayment.setBusinessType(4);
                 storePayment.setRemark("课程订单支付");
-                storePayment.setOpenId(user.getMaOpenId());
+                storePayment.setOpenId(openId);
                 storePayment.setUserId(user.getUserId());
                 storePayment.setBusinessId(order.getOrderId().toString());
                 if (storePaymentService.insertFsStorePayment(storePayment) > 0) {
@@ -411,7 +425,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                         payConfig.setNotifyUrl(wxPayProperties.getNotifyUrl());
                         wxPayService.setConfig(payConfig);
                         WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
-                        orderRequest.setOpenid(user.getMaOpenId());//公众号支付提供用户openid
+                        orderRequest.setOpenid(openId);//公众号支付提供用户openid
                         orderRequest.setBody("课程订单支付");
                         orderRequest.setOutTradeNo("course-" + storePayment.getPayCode());
                         orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(storePayment.getPayMoney().toString()));//测试
@@ -433,7 +447,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                         p.setLowOrderId("course-" + storePayment.getPayCode());
                         p.setBody("课程订单支付");
                         p.setIsMinipg("1");
-                        p.setOpenId(user.getMaOpenId());
+                        p.setOpenId(openId);
                         p.setAttach("");
                         p.setStoreid("0");
                         CreateWxOrderResult wxOrder = payService.createWxOrder(p);
@@ -457,7 +471,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                         }
                         o.setPayerName("微信用户" + phone);
                         o.setGoodsInfo("课程订单支付"); // 订单信息
-                        o.setOpenId(user.getMaOpenId());
+                        o.setOpenId(openId);
                         o.setOrderType(4);
                         o.setOrderId(order.getOrderId().toString());
                         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
@@ -469,7 +483,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                     } else if (payConfigDTO.getType().equals("hf")) {
                         HuiFuCreateOrder o = new HuiFuCreateOrder();
                         o.setTradeType("T_MINIAPP");
-                        o.setOpenid(user.getMaOpenId());
+                        o.setOpenid(openId);
                         o.setReqSeqId("course-" + storePayment.getPayCode());
                         o.setTransAmt(storePayment.getPayMoney().toString());
                         o.setGoodsDesc("课程订单支付");

+ 28 - 12
fs-service/src/main/java/com/fs/course/service/impl/FsUserVipOrderServiceImpl.java

@@ -6,9 +6,12 @@ import java.time.ZoneId;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
@@ -24,14 +27,12 @@ import com.fs.course.param.FsUserVipOrderCreateUParam;
 import com.fs.course.param.FsUserVipOrderParam;
 import com.fs.course.param.FsUserVipOrderPayUParam;
 import com.fs.course.vo.FsUserVipOrderListPVO;
-import com.fs.his.domain.FsPayConfig;
-import com.fs.his.domain.FsStorePayment;
-import com.fs.his.domain.FsStorePaymentError;
-import com.fs.his.domain.FsUser;
+import com.fs.his.domain.*;
 import com.fs.his.dto.PayConfigDTO;
 import com.fs.his.mapper.FsStorePaymentErrorMapper;
 import com.fs.his.mapper.FsStorePaymentMapper;
 import com.fs.his.mapper.FsUserMapper;
+import com.fs.his.mapper.FsUserWxMapper;
 import com.fs.his.service.IFsStorePaymentService;
 import com.fs.huifuPay.domain.HuiFuCreateOrder;
 import com.fs.huifuPay.domain.HuifuCreateOrderResult;
@@ -111,6 +112,8 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
 
     @Autowired
     private IPayService payService;
+    @Autowired
+    private FsUserWxMapper fsUserWxMapper;
 
 
     /**
@@ -229,13 +232,26 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
             return R.error("非法操作");
         }
         FsUser user = userMapper.selectFsUserByUserId(param.getUserId());
-        if(user!=null&& StringUtils.isNotEmpty(user.getMaOpenId())) {
+
+        String json = configService.selectConfigByKey("his.pay");
+        PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
+
+        String openId = Objects.isNull(user) ? "" : user.getMaOpenId();
+        if (StringUtils.isBlank(openId)){
+            Wrapper<FsUserWx> queryWrapper = Wrappers.<FsUserWx>lambdaQuery()
+                    .eq(FsUserWx::getFsUserId, param.getUserId())
+                    .eq(FsUserWx::getAppId, payConfigDTO.getAppId());
+            FsUserWx fsUserWx = fsUserWxMapper.selectOne(queryWrapper);
+            if (Objects.nonNull(fsUserWx)){
+                openId = fsUserWx.getOpenId();
+            }
+        }
+
+        if(user!=null&& StringUtils.isNotEmpty(openId)) {
             if (order.getPayMoney().compareTo(new BigDecimal(0)) == 0) {
                 this.payConfirm(order.getOrderCode(), "", "", "", 2);
                 return R.ok().put("isPay", 1);
             } else {
-                String json = configService.selectConfigByKey("his.pay");
-                PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
                 String payCode =  OrderCodeUtils.getOrderSn();
                 if(StringUtils.isEmpty(payCode)){
                     return R.error("订单生成失败,请重试");
@@ -250,7 +266,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                 storePayment.setPayTypeCode("weixin");
                 storePayment.setBusinessType(5);
                 storePayment.setRemark("会员开通订单支付");
-                storePayment.setOpenId(user.getMaOpenId());
+                storePayment.setOpenId(openId);
                 storePayment.setUserId(user.getUserId());
                 storePayment.setBusinessId(order.getOrderId().toString());
                 if (storePaymentService.insertFsStorePayment(storePayment) > 0) {
@@ -268,7 +284,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                         payConfig.setNotifyUrl(wxPayProperties.getNotifyUrl());
                         wxPayService.setConfig(payConfig);
                         WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
-                        orderRequest.setOpenid(user.getMaOpenId());//公众号支付提供用户openid
+                        orderRequest.setOpenid(openId);//公众号支付提供用户openid
                         orderRequest.setBody("会员开通订单支付");
                         orderRequest.setOutTradeNo("appvip-" + storePayment.getPayCode());
                         orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(storePayment.getPayMoney().toString()));//测试
@@ -290,7 +306,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                         p.setLowOrderId("appvip-" + storePayment.getPayCode());
                         p.setBody("会员开通订单支付");
                         p.setIsMinipg("1");
-                        p.setOpenId(user.getMaOpenId());
+                        p.setOpenId(openId);
                         p.setAttach("");
                         p.setStoreid("0");
                         CreateWxOrderResult wxOrder = payService.createWxOrder(p);
@@ -314,7 +330,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                         }
                         o.setPayerName("微信用户" + phone);
                         o.setGoodsInfo("会员开通订单支付"); // 订单信息
-                        o.setOpenId(user.getMaOpenId());
+                        o.setOpenId(openId);
                         o.setOrderType(5);
                         o.setOrderId(order.getOrderId().toString());
                         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
@@ -326,7 +342,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                     } else if (payConfigDTO.getType().equals("hf")) {
                         HuiFuCreateOrder o = new HuiFuCreateOrder();
                         o.setTradeType("T_MINIAPP");
-                        o.setOpenid(user.getMaOpenId());
+                        o.setOpenid(openId);
                         o.setReqSeqId("appvip-" + storePayment.getPayCode());
                         o.setTransAmt(storePayment.getPayMoney().toString());
                         o.setGoodsDesc("会员开通订单支付");

+ 1 - 1
fs-service/src/main/java/com/fs/his/dto/PayConfigDTO.java

@@ -15,7 +15,7 @@ public class PayConfigDTO implements Serializable {
     private String tzAppKey;
     private String tzPlatformPublicKey;
     private String tzPrivateKey;
-
+    private String appId;
 
 
 }

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

@@ -14,6 +14,8 @@ import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.common.constant.FsConstants;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
@@ -160,6 +162,8 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
     private IPayService ybPayService;
     @Autowired
     private IFsUserService fsUserService;
+    @Autowired
+    private FsUserWxMapper fsUserWxMapper;
 
     /**
      * 查询套餐订单
@@ -878,10 +882,23 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         }
 
         FsUser user=userService.selectFsUserByUserId(param.getUserId());
-        if(user!=null&& StringUtils.isNotEmpty(user.getMaOpenId())){
+
+        String json = configService.selectConfigByKey("his.pay");
+        PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
+
+        String openId = Objects.isNull(user) ? "" : user.getMaOpenId();
+        if (StringUtils.isBlank(openId)){
+            Wrapper<FsUserWx> queryWrapper = Wrappers.<FsUserWx>lambdaQuery()
+                    .eq(FsUserWx::getFsUserId, param.getUserId())
+                    .eq(FsUserWx::getAppId, payConfigDTO.getAppId());
+            FsUserWx fsUserWx = fsUserWxMapper.selectOne(queryWrapper);
+            if (Objects.nonNull(fsUserWx)){
+                openId = fsUserWx.getOpenId();
+            }
+        }
+
+        if(user!=null&& StringUtils.isNotEmpty(openId)){
             if(fsPackageOrder.getPayMoney().compareTo(new BigDecimal(0))==1){
-                String json = configService.selectConfigByKey("his.pay");
-                PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
                 String payCode =  OrderCodeUtils.getOrderSn();
                 if(StringUtils.isEmpty(payCode)){
                     return R.error("订单生成失败,请重试");
@@ -898,7 +915,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                 storePayment.setCompanyId(fsPackageOrder.getCompanyId());
                 storePayment.setCompanyUserId(fsPackageOrder.getCompanyUserId());
                 storePayment.setRemark("套餐包订单支付");
-                storePayment.setOpenId(user.getMaOpenId());
+                storePayment.setOpenId(openId);
                 storePayment.setUserId(user.getUserId());
                 storePayment.setStoreId(fsPackageOrder.getStoreId());
                 storePayment.setBusinessId(fsPackageOrder.getOrderId().toString());
@@ -917,7 +934,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                         payConfig.setNotifyUrl(wxPayProperties.getNotifyUrl());
                         wxPayService.setConfig(payConfig);
                         WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
-                        orderRequest.setOpenid(user.getMaOpenId());//公众号支付提供用户openid
+                        orderRequest.setOpenid(openId);//公众号支付提供用户openid
                         orderRequest.setBody("套餐包订单支付");
                         orderRequest.setOutTradeNo("package-" + storePayment.getPayCode());
                         orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(storePayment.getPayMoney().toString()));//测试
@@ -939,7 +956,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                         p.setLowOrderId("package-" + storePayment.getPayCode());
                         p.setBody("套餐包订单支付");
                         p.setIsMinipg("1");
-                        p.setOpenId(user.getMaOpenId());
+                        p.setOpenId(openId);
                         p.setAttach("");
                         p.setStoreid("0");
                         CreateWxOrderResult wxOrder = payService.createWxOrder(p);
@@ -969,7 +986,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                         }
                         o.setPayerName("微信用户"+phone);
                         o.setGoodsInfo("套餐包订单支付"); // 订单信息
-                        o.setOpenId(user.getMaOpenId());
+                        o.setOpenId(openId);
                         o.setOrderType(3);
                         o.setOrderId(fsPackageOrder.getOrderId().toString());
                         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
@@ -982,7 +999,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                         logger.info("创建汇付订单");
                         HuiFuCreateOrder o = new HuiFuCreateOrder();
                         o.setTradeType("T_MINIAPP");
-                        o.setOpenid(user.getMaOpenId());
+                        o.setOpenid(openId);
                         o.setReqSeqId("package-"+storePayment.getPayCode());
                         o.setTransAmt(storePayment.getPayMoney().toString());
                         o.setGoodsDesc("套餐包订单支付");

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

@@ -6,6 +6,8 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.exception.CustomException;
@@ -252,6 +254,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
     private IFsPrescribeService fsPrescribeService;
     @Autowired
     private FsStoreOrderDfMapper fsStoreOrderDfMapper;
+    @Autowired
+    private FsUserWxMapper fsUserWxMapper;
 
     @Value("${express.omsCode}")
     private String expressOmsCode;
@@ -2567,15 +2571,28 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
         }
 
         FsUser user = userService.selectFsUserByUserId(param.getUserId());
-        if (user != null && StringUtils.isNotEmpty(user.getMaOpenId())) {
+
+        //在线支付
+        String json = configService.selectConfigByKey("his.pay");
+        PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
+
+        String openId = Objects.isNull(user) ? "" : user.getMaOpenId();
+        if (StringUtils.isBlank(openId)){
+            Wrapper<FsUserWx> queryWrapper = Wrappers.<FsUserWx>lambdaQuery()
+                    .eq(FsUserWx::getFsUserId, param.getUserId())
+                    .eq(FsUserWx::getAppId, payConfigDTO.getAppId());
+            FsUserWx fsUserWx = fsUserWxMapper.selectOne(queryWrapper);
+            if (Objects.nonNull(fsUserWx)){
+                openId = fsUserWx.getOpenId();
+            }
+        }
+
+        if (user != null && StringUtils.isNotEmpty(openId)) {
 
             if (order.getPayMoney().compareTo(new BigDecimal(0)) == 0) {
                 this.payConfirm(order.getOrderCode(), "", "", "", 2);
                 return R.ok().put("data", param.getOrderId()).put("isPay", "1");
             } else {
-                //在线支付
-                String json = configService.selectConfigByKey("his.pay");
-                PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
                 String payCode = OrderCodeUtils.getOrderSn();
                 if (StringUtils.isEmpty(payCode)) {
                     return R.error("订单生成失败,请重试");
@@ -2590,7 +2607,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                 storePayment.setPayTypeCode("weixin");
                 storePayment.setBusinessType(2);
                 storePayment.setRemark("药品订单支付");
-                storePayment.setOpenId(user.getMaOpenId());
+                storePayment.setOpenId(openId);
                 storePayment.setUserId(user.getUserId());
                 storePayment.setCompanyId(order.getCompanyId());
                 storePayment.setCompanyUserId(order.getCompanyUserId());
@@ -2612,7 +2629,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                         payConfig.setNotifyUrl(wxPayProperties.getNotifyUrl());
                         wxPayService.setConfig(payConfig);
                         WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
-                        orderRequest.setOpenid(user.getMaOpenId());//公众号支付提供用户openid
+                        orderRequest.setOpenid(openId);//公众号支付提供用户openid
                         orderRequest.setBody("药品订单支付");
                         orderRequest.setOutTradeNo("store-" + storePayment.getPayCode());
                         orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(storePayment.getPayMoney().toString()));//测试
@@ -2634,7 +2651,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                         p.setLowOrderId("store-" + storePayment.getPayCode());
                         p.setBody("药品订单支付");
                         p.setIsMinipg("1");
-                        p.setOpenId(user.getMaOpenId());
+                        p.setOpenId(openId);
                         p.setAttach("");
                         p.setStoreid("0");
                         CreateWxOrderResult wxOrder = payService.createWxOrder(p);
@@ -2663,7 +2680,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                         }
                         o.setPayerName("微信用户" + phone);
                         o.setGoodsInfo("药品订单支付"); // 订单信息
-                        o.setOpenId(user.getMaOpenId());
+                        o.setOpenId(openId);
                         o.setOrderType(2);
                         o.setOrderId(order.getOrderId().toString());
                         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
@@ -2675,7 +2692,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                     } else if (payConfigDTO.getType().equals("hf")) {
                         HuiFuCreateOrder o = new HuiFuCreateOrder();
                         o.setTradeType("T_MINIAPP");
-                        o.setOpenid(user.getMaOpenId());
+                        o.setOpenid(openId);
                         o.setReqSeqId("store-" + storePayment.getPayCode());
                         o.setTransAmt(storePayment.getPayMoney().toString());
                         o.setGoodsDesc("药品订单支付");

+ 45 - 28
fs-service/src/main/java/com/fs/his/service/impl/FsStorePaymentServiceImpl.java

@@ -8,6 +8,8 @@ import java.util.*;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.common.annotation.DataScope;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.domain.AjaxResult;
@@ -30,15 +32,13 @@ import com.fs.course.service.IFsCourseRedPacketLogService;
 import com.fs.course.service.IFsUserCourseOrderService;
 import com.fs.course.service.IFsUserVipOrderService;
 import com.fs.erp.dto.ErpRefundUpdateRequest;
-import com.fs.his.domain.FsExportTask;
-import com.fs.his.domain.FsPayConfig;
-import com.fs.his.domain.FsStorePayment;
-import com.fs.his.domain.FsUser;
+import com.fs.his.domain.*;
 import com.fs.his.dto.PayConfigDTO;
 import com.fs.his.enums.PaymentMethodEnum;
 import com.fs.his.mapper.FsExportTaskMapper;
 import com.fs.his.mapper.FsStorePaymentMapper;
 import com.fs.his.mapper.FsUserMapper;
+import com.fs.his.mapper.FsUserWxMapper;
 import com.fs.his.param.FsStoreOrderParam;
 import com.fs.his.param.FsStorePaymentParam;
 import com.fs.his.param.PayOrderParam;
@@ -149,6 +149,8 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
     private CompanyConfigMapper companyConfigMapper;
     @Autowired
     private FsUserMapper userMapper;
+    @Autowired
+    private FsUserWxMapper userWxMapper;
 
     /**
      * 查询支付明细
@@ -824,17 +826,17 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
             throw new CustomException("用户不存在");
         }
 
+        String json = configService.selectConfigByKey("his.pay");
+        logger.debug("支付配置 his.pay: {}", json);
+        FsPayConfig payConfig = JSONUtil.toBean(json, FsPayConfig.class);
+
         if (isWechatPayment(payOrderParam.getPaymentMethod())) {
-            String openId = getOpenIdForPaymentMethod(user, payOrderParam.getPaymentMethod());
+            String openId = getOpenIdForPaymentMethod(user, payOrderParam.getPaymentMethod(), payConfig);
             if (StringUtils.isBlank(openId)){
                 throw new CustomException("用户OPENID不存在");
             }
         }
 
-        String json = configService.selectConfigByKey("his.pay");
-        logger.debug("支付配置 his.pay: {}", json);
-        FsPayConfig payConfig = JSONUtil.toBean(json, FsPayConfig.class);
-
         // 创建记录
         FsStorePayment storePayment = createStorePayment(payConfig, user, payOrderParam);
 
@@ -848,13 +850,13 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
     private R createThirdPartyPayment(FsPayConfig payConfig, FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam) {
         switch (payConfig.getType()) {
             case "wx":
-                return createWxPayment(payConfig, storePayment, user, payOrderParam);
+                return createWxPayment(storePayment, user, payOrderParam, payConfig);
             case "yb":
-                return createYbPayment(storePayment, user, payOrderParam);
+                return createYbPayment(storePayment, user, payOrderParam, payConfig);
             case "tz":
-                return createTzPayment(storePayment, user, payOrderParam);
+                return createTzPayment(storePayment, user, payOrderParam, payConfig);
             case "hf":
-                return createHfPayment(storePayment, user, payOrderParam);
+                return createHfPayment(storePayment, user, payOrderParam, payConfig);
             default:
                 throw new CustomException("不支持的支付方式");
         }
@@ -863,7 +865,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
     /**
      * 汇付
      */
-    private R createHfPayment(FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam) {
+    private R createHfPayment(FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam, FsPayConfig payConfig) {
         logger.debug("创建汇付订单");
 
         HuiFuCreateOrder order = new HuiFuCreateOrder();
@@ -874,7 +876,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
 
         // 微信支付需要设置openid
         if (isWechatPayment(payOrderParam.getPaymentMethod())) {
-            order.setOpenid(getOpenIdForPaymentMethod(user, payOrderParam.getPaymentMethod()));
+            order.setOpenid(getOpenIdForPaymentMethod(user, payOrderParam.getPaymentMethod(), payConfig));
         }
 
         HuifuCreateOrderResult result = huiFuService.createOrder(order);
@@ -904,8 +906,8 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
     /**
      * 台州银行
      */
-    private R createTzPayment(FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam) {
-        PayCreateOrder payOrder = buildTzPayOrder(storePayment, user, payOrderParam);
+    private R createTzPayment(FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam, FsPayConfig payConfig) {
+        PayCreateOrder payOrder = buildTzPayOrder(storePayment, user, payOrderParam, payConfig);
         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(payOrder);
 
         updateStorePaymentTradeNo(storePayment.getPaymentId(), result.getBody().getOrderFlowNo());
@@ -915,7 +917,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
     /**
      * 构建台州银行支付
      */
-    private PayCreateOrder buildTzPayOrder(FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam) {
+    private PayCreateOrder buildTzPayOrder(FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam, FsPayConfig payConfig) {
         PayCreateOrder payOrder = new PayCreateOrder();
         payOrder.setOrderNo(payOrderParam.getBusinessType().getPrefix() + "-" + storePayment.getPayCode());
         payOrder.setTrxAmt(storePayment.getPayMoney().doubleValue());
@@ -936,7 +938,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
         }
 
         if (isWechatPayment(payOrderParam.getPaymentMethod())) {
-            payOrder.setOpenId(getOpenIdForPaymentMethod(user, payOrderParam.getPaymentMethod()));
+            payOrder.setOpenId(getOpenIdForPaymentMethod(user, payOrderParam.getPaymentMethod(), payConfig));
         }
 
         return payOrder;
@@ -987,7 +989,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
     /**
      * 易宝支付
      */
-    private R createYbPayment(FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam) {
+    private R createYbPayment(FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam, FsPayConfig payConfig) {
         PaymentMethodEnum paymentMethod = payOrderParam.getPaymentMethod();
         if (paymentMethod == PaymentMethodEnum.ALIPAY || paymentMethod == PaymentMethodEnum.H5_ALIPAY
                 || paymentMethod == PaymentMethodEnum.H5_WECHAT) {
@@ -999,7 +1001,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
         payDto.setLowOrderId(payOrderParam.getBusinessType().getPrefix() + "-" + storePayment.getPayCode());
         payDto.setBody(payOrderParam.getBusinessType().getDesc());
         payDto.setIsMinipg("1");
-        payDto.setOpenId(getOpenIdForPaymentMethod(user, paymentMethod));
+        payDto.setOpenId(getOpenIdForPaymentMethod(user, paymentMethod, payConfig));
         payDto.setAttach("");
         payDto.setStoreid("0");
 
@@ -1027,7 +1029,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
     /**
      * 微信支付
      */
-    private R createWxPayment(FsPayConfig payConfig, FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam) {
+    private R createWxPayment(FsStorePayment storePayment, FsUser user, PayOrderParam payOrderParam, FsPayConfig payConfig) {
         PaymentMethodEnum paymentMethod = payOrderParam.getPaymentMethod();
         if (paymentMethod != PaymentMethodEnum.MINIAPP_WECHAT) {
             logger.debug("微信支付 PaymentMethod: {}", paymentMethod.name());
@@ -1038,7 +1040,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
         wxPayService.setConfig(wxPayConfig);
 
         WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
-        orderRequest.setOpenid(getOpenIdForPaymentMethod(user, paymentMethod));
+        orderRequest.setOpenid(getOpenIdForPaymentMethod(user, paymentMethod, payConfig));
         orderRequest.setBody(payOrderParam.getBusinessType().getDesc());
         orderRequest.setOutTradeNo(payOrderParam.getBusinessType().getPrefix() + "-" + storePayment.getPayCode());
         orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(storePayment.getPayMoney().toString()));
@@ -1081,15 +1083,30 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
     /**
      * 根据支付方式获取对应的openId
      */
-    private String getOpenIdForPaymentMethod(FsUser user, PaymentMethodEnum method) {
+    private String getOpenIdForPaymentMethod(FsUser user, PaymentMethodEnum method, FsPayConfig payConfig) {
+        String openId;
         switch (method) {
             case MINIAPP_WECHAT:
-                return user.getMaOpenId();
+                openId = user.getMaOpenId();
+                break;
             case H5_WECHAT:
-                return user.getMpOpenId();
+                openId = user.getMpOpenId();
+                break;
             default:
-                return null;
+                openId = null;
         }
+
+        if (StringUtils.isBlank(openId)) {
+            Wrapper<FsUserWx> queryWrapper = Wrappers.<FsUserWx>lambdaQuery()
+                    .eq(FsUserWx::getFsUserId, user.getUserId())
+                    .eq(FsUserWx::getAppId, payConfig.getAppId());
+            FsUserWx fsUserWx = userWxMapper.selectOne(queryWrapper);
+            if (Objects.nonNull(fsUserWx)) {
+                openId = fsUserWx.getOpenId();
+            }
+        }
+
+        return openId;
     }
 
     /**
@@ -1119,7 +1136,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
 
         // 设置openId(如果是微信支付)
         if (isWechatPayment(payOrderParam.getPaymentMethod())) {
-            storePayment.setOpenId(getOpenIdForPaymentMethod(user, payOrderParam.getPaymentMethod()));
+            storePayment.setOpenId(getOpenIdForPaymentMethod(user, payOrderParam.getPaymentMethod(), payConfig));
         }
 
         if (fsStorePaymentMapper.insertFsStorePayment(storePayment) <= 0) {

+ 26 - 5
fs-user-app/src/main/java/com/fs/app/controller/InquiryOrderController.java

@@ -3,6 +3,8 @@ package com.fs.app.controller;
 
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.app.annotation.Login;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.domain.R;
@@ -18,6 +20,7 @@ import com.fs.his.domain.*;
 import com.fs.his.dto.FsInquiryOrderPatientDTO;
 import com.fs.his.dto.PayConfigDTO;
 import com.fs.his.enums.FsInquiryOrderStatusEnum;
+import com.fs.his.mapper.FsUserWxMapper;
 import com.fs.his.param.*;
 import com.fs.his.service.*;
 import com.fs.his.utils.PhoneUtil;
@@ -103,6 +106,8 @@ public class InquiryOrderController extends  AppBaseController {
     Logger logger= LoggerFactory.getLogger(getClass());
     @Autowired
     private ICompanyService companyService;
+    @Autowired
+    private FsUserWxMapper fsUserWxMapper;
 
     @Autowired
     private ISysConfigService configService;
@@ -244,6 +249,22 @@ public class InquiryOrderController extends  AppBaseController {
         FsInquiryOrder order=inquiryOrderService.selectFsInquiryOrderByOrderId(param.getOrderId());
 
         FsUser user=userService.selectFsUserByUserId(Long.parseLong(getUserId()));
+
+        String openId = Objects.isNull(user) ? "" : user.getMaOpenId();
+        if (StringUtils.isBlank(openId)){
+            Wrapper<FsUserWx> queryWrapper = Wrappers.<FsUserWx>lambdaQuery()
+                    .eq(FsUserWx::getFsUserId, Long.parseLong(getUserId()))
+                    .eq(FsUserWx::getAppId, payConfigDTO.getAppId());
+            FsUserWx fsUserWx = fsUserWxMapper.selectOne(queryWrapper);
+            if (Objects.nonNull(fsUserWx)){
+                openId = fsUserWx.getOpenId();
+            }
+        }
+
+        if (StringUtils.isBlank(openId)){
+            return R.error("用户OPENID不存在");
+        }
+
         if(order.getPayMoney().compareTo(new BigDecimal(0))==0){
             inquiryOrderService.payConfirm(order.getOrderSn(),"","","",2);
             return R.ok().put("isPay",1);
@@ -265,7 +286,7 @@ public class InquiryOrderController extends  AppBaseController {
             storePayment.setPayTypeCode("weixin");
             storePayment.setBusinessType(1);
             storePayment.setRemark("问诊订单支付");
-            storePayment.setOpenId(user.getMaOpenId());
+            storePayment.setOpenId(openId);
             storePayment.setUserId(user.getUserId());
             storePayment.setBusinessId(order.getOrderId().toString());
             if(storePaymentService.insertFsStorePayment(storePayment)>0){
@@ -283,7 +304,7 @@ public class InquiryOrderController extends  AppBaseController {
                     payConfig.setNotifyUrl(wxPayProperties.getNotifyUrl());
                     wxPayService.setConfig(payConfig);
                     WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
-                    orderRequest.setOpenid(user.getMaOpenId());//公众号支付提供用户openid
+                    orderRequest.setOpenid(openId);//公众号支付提供用户openid
                     orderRequest.setBody("问诊订单支付");
                     orderRequest.setOutTradeNo("inquiry-"+storePayment.getPayCode());
                     orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(storePayment.getPayMoney().toString()));//测试
@@ -306,7 +327,7 @@ public class InquiryOrderController extends  AppBaseController {
                     p.setLowOrderId("inquiry-"+storePayment.getPayCode());
                     p.setBody("问诊订单支付");
                     p.setIsMinipg("1");
-                    p.setOpenId(user.getMaOpenId());
+                    p.setOpenId(openId);
                     p.setAttach("");
                     p.setStoreid("0");
                     CreateWxOrderResult wxOrder = payService.createWxOrder(p);
@@ -337,7 +358,7 @@ public class InquiryOrderController extends  AppBaseController {
                     }
                     o.setPayerName("微信用户"+phone);
                     o.setGoodsInfo("问诊订单支付"); // 订单信息
-                    o.setOpenId(user.getMaOpenId());
+                    o.setOpenId(openId);
                     o.setOrderType(1);
                     o.setOrderId(order.getOrderId().toString());
                     TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
@@ -349,7 +370,7 @@ public class InquiryOrderController extends  AppBaseController {
                 }else if(payConfigDTO.getType().equals("hf")){
                     HuiFuCreateOrder o = new HuiFuCreateOrder();
                     o.setTradeType("T_MINIAPP");
-                    o.setOpenid(user.getMaOpenId());
+                    o.setOpenid(openId);
                     o.setReqSeqId("inquiry-"+storePayment.getPayCode());
                     o.setTransAmt(storePayment.getPayMoney().toString());
                     o.setGoodsDesc("问诊订单支付");