puzhibing
2023-10-20 11e778f72b830a4050c293d78694417d32055727
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1,5 +1,7 @@
package com.ruoyi.order.service.impl.order;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -39,6 +41,7 @@
import com.ruoyi.order.service.account.PaymentMessageService;
import com.ruoyi.order.service.account.ProfitSharingService;
import com.ruoyi.order.service.order.*;
import com.ruoyi.order.util.HuiFuTianXiaUtil;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.constant.DelayTaskEnum;
import com.ruoyi.system.api.constant.SecurityConstant;
@@ -60,12 +63,14 @@
import lombok.extern.log4j.Log4j2;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@@ -145,6 +150,9 @@
    @Resource
    private OrderRefundService orderRefundService;
    @Value("${wx.pay.callbackPath}")
    private String callbackPath;
    /**
@@ -781,8 +789,13 @@
            if (null != goodsNameList) {
                goodsName = String.join(",", goodsNameList);
            }
            // 小程序微信下单支付
            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo,
//            // 小程序微信下单支付
//            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo,
//                    orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
//                    appPlaceOrderDto.getSpbillCreateIp());
            // 小程序微信下单支付 TODO 更换支付渠道(汇付天下)
            createWxPayInfo1(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo,
                    orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
                    appPlaceOrderDto.getSpbillCreateIp());
            //生成自动取消订单延时任务
@@ -904,6 +917,70 @@
            throw new ServiceException(e.getMessage());
        }
    }
    /**
     * 小程序支付下单API
     * @param appPlaceOrderVo
     * @param userId
     * @param shopId
     * @param goodsName
     * @param outTradeNo
     * @param orderId
     * @param payMoney
     * @param openid
     * @param payerClientIp
     */
    private void createWxPayInfo1(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId,
                                 String goodsName, String outTradeNo,
                                 String orderId, BigDecimal payMoney,
                                 String openid, String payerClientIp){
        try {
            WxPayConfig config = wxService.getConfig();
            PartnerTransactionsRequest request = new PartnerTransactionsRequest();
            request.setSpAppid(config.getAppId());
            request.setSpMchid(config.getMchId());
            request.setSubMchid(config.getSubMchId());
            //  商品描述   body
            String description = goodsName + "-商品购买";
            request.setDescription(description);
            request.setOutTradeNo(outTradeNo);
            request.setNotifyUrl(callbackPath + "/order/app/notify/wechatPaymentCallback");
            R<com.alibaba.fastjson.JSONObject> r = HuiFuTianXiaUtil.weixinPayment(outTradeNo, description, payMoney.doubleValue(), openid, request.getNotifyUrl());
            if(r.getCode() != 200){
                throw new ServiceException(r.getMsg());
            }
            com.alibaba.fastjson.JSONObject data = r.getData();
            String mainMchId = WxPayConfiguration.getPlatformTyMacId();
            // 支付相关信息返回
            appPlaceOrderVo.setAppId(data.getString("appId"));
            appPlaceOrderVo.setMchId(config.getMchId());
            appPlaceOrderVo.setTimeStamp(data.getString("timeStamp"));
            appPlaceOrderVo.setNonceStr(data.getString("nonceStr"));
            appPlaceOrderVo.setPackageStr(data.getString("package"));
            appPlaceOrderVo.setSignType(data.getString("signType"));
            appPlaceOrderVo.setPaySign(data.getString("paySign"));
            // 保存支付订单统一下单日志
            paymentMessageService.savePaymentMessage("1", orderId, JSON.toJSONString(request), data.toJSONString());
            // 保存支付订单统一下单支付记录
            orderPaymentService.saveOrderPayment(userId, shopId, mainMchId, orderId, outTradeNo, payMoney,
                    appPlaceOrderVo.getEndTime(), "Y", openid,
                    goodsName, appPlaceOrderVo.getPackageStr());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
@@ -1211,9 +1288,9 @@
        if (appUserOrderPageVoList != null && !appUserOrderPageVoList.isEmpty()) {
            Long shopId;
            String activityId;
            Shop shop;
            HashSet<Long> shopSet = new HashSet<Long>();
            HashSet<String> activitySet = new HashSet<String>();
            // 遍历订单列表,获取店铺ID和活动ID
            for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
                shopId = appUserOrderPageVo.getShopId();
                shopSet.add(shopId);
@@ -1222,22 +1299,25 @@
                    activitySet.add(activityId);
                }
            }
            Map<Long, Shop> shopMap = new HashMap<>();
            shopSet.forEach(shopIdLong -> {
                Shop shopTemp = remoteShopService.getShop(shopIdLong).getData();
                shopMap.put(shopIdLong, shopTemp);
            });
            String shopJoinedString = String.join(",", shopSet.stream().map(Object::toString).collect(Collectors.toList()));
            MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
            mgtBaseBathDto.setIds(shopJoinedString);
            List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData();
            Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream()
                    .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
            MgtSimpleShopVo simpleShopVo;
            Integer delayTime = 30;
            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
            }
            //处理订单回显
            for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
                if(member.getBindingFlag()==0&&appUserOrderPageVo.getOrderFrom()==2){
                    appUserOrderPageVo.setShopName("全部店铺");
                }else{
                    shop = shopMap.get(appUserOrderPageVo.getShopId());
                    appUserOrderPageVo.setShopName(shop.getShopName());
                    appUserOrderPageVo.setShopServicePhone(shop.getShopServicePhone());
                    simpleShopVo = shopMap.get(appUserOrderPageVo.getShopId());
                    appUserOrderPageVo.setShopName(simpleShopVo.getShopName());
                    appUserOrderPageVo.setShopServicePhone(simpleShopVo.getShopServicePhone());
                    if (appUserOrderPageVo.getShopId().equals(appUserOrderPageDto.getShopId())) {
                        appUserOrderPageVo.setSameShop(1);
                    } else {
@@ -1818,7 +1898,9 @@
        this.saveOrUpdate(order);
        // 订单金额大于0时进行分账
        if (order.getOnlinePayMoney().compareTo(BigDecimal.ZERO)>0) {
            submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney(),order.getOrderFrom());
            // TODO: 2023/10/17  更换分账渠道(汇付天下)
//            submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney(),order.getOrderFrom());
            submitProfitSharing1(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney(),order.getOrderFrom());
        }
        //创建支付记录
        if(merVerifyOrderDto.getRelPayMoney().compareTo(BigDecimal.ZERO)>0){
@@ -1830,8 +1912,23 @@
            payRecord.setPayType(merVerifyOrderDto.getPayType());
            payRecordService.save(payRecord);
        }
        //更新用户消费统计
        //更新用户积分和消费统计
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setUserId(order.getUserId());
        // 如果存在积分兑换比例,则计算积分
        if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) {
            Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL);
            BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue);
            BigDecimal integralBig = moneyValueBig.multiply(order.getOnlinePayMoney()).setScale(0,BigDecimal.ROUND_HALF_UP);
            Integer integral = Integer.valueOf(integralBig.toString());
            if(integral>0){
                memberTotalChangeDto.setChangeIntegral(integral);
                memberTotalChangeDto.setTypeIntegral(1);
                memberTotalChangeDto.setOrderId(orderId);
                memberTotalChangeDto.setOrderNo(order.getOrderNo());
            }
        }
        //更新消费时间
        memberTotalChangeDto.setConsumeTime(nowTime);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        return merVerifyOrderVo;
@@ -1927,6 +2024,118 @@
        paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage);
    }
    /**
     * @description  分账实现
     * @author  jqs
     * @date    2023/9/8 11:56
     * @param orderId
     * @param orderNo
     * @param shopId
     * @param orderMoney
     * @param orderFrom
     * @return  void
     */
    private void submitProfitSharing1(String orderId, String orderNo, Long shopId, BigDecimal orderMoney, Integer orderFrom) {
        String sendMessage = "";
        String resultMessage = "";
        try {
            // 核销完成 开始分账(平台收取服务费)
            OrderPayment payment = orderPaymentService.getByOrderId(orderId);
            String transactionId = payment.getTransactionId();
            String outTradeNo = payment.getOutTradeNo();
            R<ShopAuthenticationHftxVo> resultMch = remoteShopService.getShopHFTXSubMchId(shopId);
            ShopAuthenticationHftxVo vo = resultMch.getData();
            if (StringUtils.isEmpty(vo.getHuifuId())) {
                throw new ServiceException("获取商户号失败");
            }
            // 平台特约商户号,用户平台收取服务费 2023-09-05改变分账方式
            String platformTyMacId = WxPayConfiguration.getPlatformTyMacId();
            if (!StringUtils.isEmpty(platformTyMacId)) {
                WxPayConfig config = wxService.getConfig();
                ShopProportionVo shopProportion = null;
                BigDecimal proportionPercent = null;
                //商户订单获取统一分成 活动订单获取活动分成
                if(orderFrom==1){
                    proportionPercent = new BigDecimal(vo.getShareRatio());
                }else{
                    R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(shopId);
                    shopProportion = resultShopProportion.getData();
                    proportionPercent = shopProportion.getProportionPercent();
                }
                if (null != proportionPercent) {
                    ProfitSharingRequest request = new ProfitSharingRequest();
                    request.setAppid(config.getAppId());
                    request.setSubMchid(platformTyMacId);
                    request.setTransactionId(transactionId);
                    request.setOutOrderNo(IdUtils.simpleUUID());
                    List<ProfitSharingRequest.Receiver> receiverList = new ArrayList<>();
                    String description = "订单:" + orderNo + " 平台分账";
                    //商户分成
                    if(proportionPercent.compareTo(BigDecimal.ZERO)>0){
                        PaymentDelaytransHFTXVo result = new PaymentDelaytransHFTXVo();
                        // 计算分成金额
                        int amount = orderMoney.multiply(proportionPercent).setScale(0, RoundingMode.UP).intValue();
                        BigDecimal multiply = orderMoney.multiply(proportionPercent.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_EVEN);
                        log.info("订单分账:{} 分账金额: {}", orderNo, amount);
                        if (amount > 0) {
                            // 分账创建
                            ProfitSharingRequest.Receiver receiver = new ProfitSharingRequest.Receiver();
                            receiver.setType("MERCHANT_ID");
                            receiver.setReceiverAccount(vo.getHuifuId());
                            receiver.setAmount(amount);
                            receiver.setDescription(description);
                            receiverList.add(receiver);
                            request.setReceivers(receiverList);
                            // 分账完成
                            request.setFinish(true);
                            //分账对象
                            JSONArray acctInfos = new JSONArray();
                            JSONObject jsonObject = new JSONObject();
                            jsonObject.put("div_amt", String.format("%.2f", multiply.doubleValue()));
                            jsonObject.put("huifu_id", vo.getHuifuId());
                            //平台商户
                            double pt_amount = orderMoney.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                            JSONObject jsonObject1 = new JSONObject();
                            jsonObject1.put("div_amt", String.format("%.2f", pt_amount));
                            jsonObject1.put("huifu_id", "6666000141216769");
                            acctInfos.add(jsonObject1);
                            R<PaymentDelaytransHFTXVo> hftxVoR = HuiFuTianXiaUtil.paymentDelaytrans(request.getOutOrderNo(), outTradeNo, acctInfos);
                            if(hftxVoR.getCode() != 200){
                                throw new ServiceException(hftxVoR.getMsg());
                            }
                            result = hftxVoR.getData();
                            // 创建分账记录
                            profitSharingService.saveProfitSharing1(shopId, orderId, orderMoney, vo.getHuifuId(), multiply.doubleValue(), result);
                        }
                        // 保存请求信息
                        sendMessage = JSONObject.toJSONString(request);
                        resultMessage = JSONObject.toJSONString(result);
                    }
                } else {
                    resultMessage = String.format("订单分账:%s 获取商户分成失败", orderNo);
                    log.info(resultMessage);
                }
            } else {
                resultMessage = String.format("订单分账:%s 获取微信商户号失败", orderNo);
                log.info(resultMessage);
            }
        } catch (Exception e) {
            resultMessage = String.format("订单分账:%s 分账失败:%s", orderNo, e.getMessage());
            log.info(resultMessage);
            throw new ServiceException(resultMessage);
        }
        // 保存分账信息
        paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage);
    }
    /**
     * @param merVerifyCouponDto
     * @return MerVerifyCouponVo
@@ -1970,30 +2179,37 @@
        MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo();
        // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象
        List<Goods> goodsList = verifyCouponGetVo.getGoodsList();
        String relGoodsIds = memberCoupon.getRelGoodsIds();
        String[] relGoodsIdArr = relGoodsIds.split(",");
        if(relGoodsIdArr.length!=goodsList.size()){
            throw new ServiceException(AppErrorConstant.GOODS_DOWN);
        }
        merVerifyCouponVo.setUserName(member.getRealName());
        merVerifyCouponVo.setUserMobile(member.getMobile());
        merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
        merVerifyCouponVo.setCouponName(memberCoupon.getCouponName());
        merVerifyCouponVo.setCreateTime(memberCoupon.getReceiveTime());
        // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性
        List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream()
                .map(goods -> {
                    MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo();
                    merCouponGoods.setGoodsId(goods.getGoodsId());
                    merCouponGoods.setGoodsName(goods.getGoodsName());
                    if (goods.getGoodsType() == 1) {
                        merCouponGoods.setGoodsType("周期");
                    } else if (goods.getGoodsType() == 2) {
                        merCouponGoods.setGoodsType("服务");
                    } else if (goods.getGoodsType() == 3) {
                        merCouponGoods.setGoodsType("体验");
                    } else if (goods.getGoodsType() == 4) {
                        merCouponGoods.setGoodsType("单品");
                    }
                    // 设置其他属性
                    return merCouponGoods;
                })
                .collect(Collectors.toList());
        List<MerCouponGoodsListVo> merCouponGoodsList = new ArrayList<>();
        MerCouponGoodsListVo merCouponGoods;
        for(Goods goods : goodsList){
            if(goods.getGoodsStatus()!=1){
                throw new ServiceException(AppErrorConstant.GOODS_DOWN);
            }
            merCouponGoods = new MerCouponGoodsListVo();
            merCouponGoods.setGoodsId(goods.getGoodsId());
            merCouponGoods.setGoodsName(goods.getGoodsName());
            if (goods.getGoodsType() == 1) {
                merCouponGoods.setGoodsType("周期");
            } else if (goods.getGoodsType() == 2) {
                merCouponGoods.setGoodsType("服务");
            } else if (goods.getGoodsType() == 3) {
                merCouponGoods.setGoodsType("体验");
            } else if (goods.getGoodsType() == 4) {
                merCouponGoods.setGoodsType("单品");
            }
            merCouponGoodsList.add(merCouponGoods);
        }
        // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
        merVerifyCouponVo.setGoodsList(merCouponGoodsList);
        //生成服务
@@ -2249,6 +2465,9 @@
            SysUser sysUser;
            if (member != null) {
                sysUser = remoteUserService.getSysUser(member.getUserId()).getData();
                if(member.getBindingFlag()==1&&!member.getRelationShopId().equals(merNewOrderDto.getShopId())){
                    throw new ServiceException(AppErrorConstant.USER_BINDING_ERROR);
                }
            } else {
                //创建新用户
                String memberId = IdUtils.simpleUUID();
@@ -4896,6 +5115,9 @@
        // 更新订单状态 outTradeNo
        String outTradeNo = transaction.getOutTradeNo();
        Order order = this.getByOutTradeNo(outTradeNo);
        if(order.getOrderStatus() != 1){
            return;
        }
        String orderId = order.getOrderId();
        order.setOrderStatus(2);
        order.setPayTime(new Date());
@@ -4963,17 +5185,19 @@
        // 初始化会员统计信息
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setUserId(order.getUserId());
        // 如果存在积分兑换比例,则计算积分
        if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) {
        // 如果存在积分兑换比例,则计算积分 2023-09-14改为核销后获取积分
        /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) {
            Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL);
            BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue);
            BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()).setScale(0,BigDecimal.ROUND_HALF_UP);
            Integer integral = Integer.valueOf(integralBig.toString());
            memberTotalChangeDto.setChangeIntegral(integral);
            memberTotalChangeDto.setTypeIntegral(1);
            memberTotalChangeDto.setOrderId(orderId);
            memberTotalChangeDto.setOrderNo(order.getOrderNo());
        }
            if(integral>0){
                memberTotalChangeDto.setChangeIntegral(integral);
                memberTotalChangeDto.setTypeIntegral(1);
                memberTotalChangeDto.setOrderId(orderId);
                memberTotalChangeDto.setOrderNo(order.getOrderNo());
            }
        }*/
        // 设置会员支付金额和支付时间
        memberTotalChangeDto.setPayMoney(order.getPayMoney());
        memberTotalChangeDto.setPayTime(new Date());
@@ -5003,6 +5227,7 @@
            activityTotalChangeDto.setChangeNum(1);
            activityTotalChangeDto.setMoney(order.getPayMoney());
            Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId());
            //判断用户是否下过单 如果只有当前订单则为1
            if (userActivityNum == 1) {
                activityTotalChangeDto.setPersonNum(1);
            } else {
@@ -5175,7 +5400,7 @@
        // 初始化会员统计信息
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setUserId(order.getUserId());
        // 如果存在积分兑换比例,则计算积分
        // 如果存在积分兑换比例,则计算积分 2023-09-14改为核销后获取积分
        /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) {
            Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL);
            BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue);
@@ -5202,7 +5427,6 @@
        // 更新会员统计信息
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        // 如果订单来源于活动,则更新活动统计信息
        //TODO 可考虑改成定时任务统一查询后增加 减少服务器压力但会增加延后性
        if (order.getOrderFrom() == 2) {
            ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto();
            activityTotalChangeDto.setActivityId(order.getActivityId());
@@ -5211,10 +5435,11 @@
            activityTotalChangeDto.setRefundNum(1);
            activityTotalChangeDto.setMoney(order.getPayMoney());
            Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId());
            //判断用户是否还有活动订单 无则减少人数
            if (userActivityNum > 0) {
                activityTotalChangeDto.setPersonNum(1);
            } else {
                activityTotalChangeDto.setPersonNum(0);
            } else {
                activityTotalChangeDto.setPersonNum(1);
            }
            activityTotalChangeDto.setUserId(order.getUserId());
            remoteActivityService.changeActivityTotal(activityTotalChangeDto);
@@ -5226,7 +5451,9 @@
        if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){
            log.info("订单支付金额大于0,可发起退款");
            // 订单支付金额大于0,可发起退款
            orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund);
//            orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund);
            // 订单支付金额大于0,可发起退款 todo 修改渠道(汇付天下)
            orderWxApplyRefund1(orderId, refundId, onlinePayMoney, orderRefund);
        }
        orderRefund.setRefundStatus(1);
@@ -5279,6 +5506,66 @@
            paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson);
        } catch (WxPayException e) {
            throw new ServiceException(e.getMessage());
        }
    }
    /**
     * 申请退款API
     */
    private void orderWxApplyRefund1(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){
        try {
            // 创建支付订单
            OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId);
            if (null == orderPayment) {
                return;
            }
            log.info("调用微信退款---发起退款");
            String subMchId = orderPayment.getSubMchId();
//            WxPayConfig config = wxService.getConfig();
            RefundsRequest request = new RefundsRequest();
//            request.setSpAppid(config.getAppId());
            request.setSubMchid(subMchId);
            request.setTransactionId(orderPayment.getTransactionId());
            request.setOutRefundNo(outRefundNo);
            request.setReason("用户取消订单");
            // 订单金额
            int total = orderPayment.getPayMoney().multiply(new BigDecimal(100)).intValue();
            RefundsRequest.Amount amount = RefundsRequest.Amount.builder().refund(total).total(total).currency("CNY").build();
            request.setAmount(amount);
            request.setNotifyUrl(callbackPath + "/order/app/notify/wechatPaymentRefundCallback");
//            RefundsResult result = wxService.getEcommerceService().refunds(request);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            String org_req_date = sdf.format(orderPayment.getCreateTime());
            String outTradeNo = orderPayment.getOutTradeNo();
            R<String> r = HuiFuTianXiaUtil.weixinPaymentRefund(outRefundNo, orderPayment.getPayMoney().doubleValue(), org_req_date, outTradeNo, request.getNotifyUrl());
            if(r.getCode() != 200){
                throw new ServiceException(r.getMsg());
            }
            // 微信退款id
            orderRefund.setWxRefundId(r.getData());
            // 请求参数
            Gson gson = new Gson();
            String refundRequestJson = gson.toJson(request);
            // 返回参数
//            String refundResponseJson = gson.toJson(result);
//            log.info("调用微信退款返回参数---{}", refundResponseJson);
            // 保存支付订单统一下单日志
//            paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson);
        } catch (Exception e) {
            throw new ServiceException(e.getMessage());
        }
    }
@@ -5834,30 +6121,39 @@
     */
    @Override
    public List<MerOrderPageVo> pageMerMemberPayOrder(Page page,MerMemberNoClearOrderDto merOrderPageDto){
        // 获取订单列表
        List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerMemberPayOrder(page, merOrderPageDto);
        // 如果订单列表不为空
        if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) {
            Long userId;
            BigDecimal zeroBig = new BigDecimal("0.00");
            StringJoiner userIdSj = new StringJoiner(",");
            // 遍历订单列表
            for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
                userId = merOrderPageVo.getUserId();
                userIdSj.add(userId.toString());
                if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){
                // 如果未支付金额小于零,则设置为零
                if (merOrderPageVo.getUnPaidMoney().compareTo(zeroBig) < 0) {
                    merOrderPageVo.setUnPaidMoney(zeroBig);
                }
            }
            // 获取用户列表
            MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
            mgtBaseBathDto.setIds(userIdSj.toString());
            List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData();
            // 将用户列表转换为Map,以便根据用户ID快速查找用户信息
            Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream()
                    .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity()));
            // 遍历订单列表
            for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
                if(merOrderPageVo.getUserId()!=null&&userMap.get(merOrderPageVo.getUserId())!=null){
                // 如果订单的用户ID不为空,并且用户Map中存在对应的用户信息
                if (merOrderPageVo.getUserId() != null && userMap.get(merOrderPageVo.getUserId()) != null) {
                    // 设置订单的用户名、昵称和手机号
                    merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName());
                    merOrderPageVo.setNickName(userMap.get(merOrderPageVo.getUserId()).getNickName());
                    merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile());
                }else{
                    log.debug("订单merOrderPageVo"+merOrderPageVo.getOrderId()+"缺少用户");
                } else {
                    log.debug("订单merOrderPageVo" + merOrderPageVo.getOrderId() + "缺少用户");
                }
            }
        }
@@ -5918,7 +6214,6 @@
    public ProfitSharingResult queryBill(String orderId) throws WxPayException {
        OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId);
        ProfitSharing profitSharing = profitSharingService.getByOrderId(orderId);
        ProfitSharingQueryRequest request = new ProfitSharingQueryRequest();
        request.setSubMchid("1650744551");
        request.setTransactionId(orderPayment.getTransactionId());