From b879982d29cb2dbfe72482b46c8f6f2064d663a2 Mon Sep 17 00:00:00 2001
From: zhanglin8526 <852614290@qq.com>
Date: 星期六, 26 八月 2023 15:27:29 +0800
Subject: [PATCH] 支付调整

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 1765 +++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 1,256 insertions(+), 509 deletions(-)

diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
index d69f88e..0971266 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -5,6 +5,15 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.binarywang.wxpay.bean.ecommerce.*;
+import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum;
+import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult;
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.google.common.base.Joiner;
+import com.google.gson.Gson;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -15,12 +24,19 @@
 import com.ruoyi.order.domain.dto.*;
 import com.ruoyi.order.domain.pojo.account.OrderPayment;
 import com.ruoyi.order.domain.pojo.account.OrderRefund;
+import com.ruoyi.order.domain.pojo.account.ProfitSharing;
 import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
 import com.ruoyi.order.domain.pojo.order.Order;
 import com.ruoyi.order.domain.pojo.order.OrderGoods;
 import com.ruoyi.order.domain.pojo.order.PayRecord;
 import com.ruoyi.order.domain.vo.*;
+import com.ruoyi.order.enums.RefundStatusEnum;
+import com.ruoyi.order.enums.dict.IDict;
 import com.ruoyi.order.mapper.order.OrderMapper;
+import com.ruoyi.order.service.account.OrderPaymentService;
+import com.ruoyi.order.service.account.OrderRefundService;
+import com.ruoyi.order.service.account.PaymentMessageService;
+import com.ruoyi.order.service.account.ProfitSharingService;
 import com.ruoyi.order.service.order.*;
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.constant.DelayTaskEnum;
@@ -31,6 +47,7 @@
 import com.ruoyi.system.api.domain.poji.goods.Goods;
 import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
 import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
+import com.ruoyi.system.api.domain.poji.member.BirthdayCard;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
 import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
@@ -38,10 +55,9 @@
 import com.ruoyi.system.api.domain.poji.sys.SysUser;
 import com.ruoyi.system.api.domain.vo.*;
 import com.ruoyi.system.api.service.*;
-import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
+import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -63,6 +79,7 @@
  * @since 2023-04-25
  */
 @Service
+@Slf4j
 public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
 
     @Resource
@@ -107,25 +124,23 @@
     @Resource
     private PayRecordService payRecordService;
 
-    @Autowired
+    @Resource
     private RedissonClient redissonClient;
 
-    /** 商户号 */
-    public static String merchantId = "";
-    /** 商户API私钥路径 */
-    public static String privateKeyPath = "";
-    /** 商户证书序列号 */
-    public static String merchantSerialNumber = "";
-    /** 微信支付平台证书路径 */
-    public static String wechatPayCertificatePath = "";
-    /** 微信支付 APIv3 密钥 */
-    public static String apiV3Key = "";
-    /** 微信支付APPID */
-    public static String appId="";
-    /** 微信支付商户ID */
-    public static String mchId="";
-    /** 通知地址 */
-    public static String notifyUrl="";
+    @Resource
+    private WxPayService wxService;
+
+    @Resource
+    private PaymentMessageService paymentMessageService;
+
+    @Resource
+    private OrderPaymentService orderPaymentService;
+
+    @Resource
+    private ProfitSharingService profitSharingService;
+
+    @Resource
+    private OrderRefundService orderRefundService;
 
     /**
      * @description: buyGoods
@@ -153,8 +168,8 @@
         Map<String, Goods> goodsMap = goodsList.stream()
                 .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
         Boolean haveDeposit = false;
-        for(Goods goods : goodsList){
-            if(goods.getSubscription()!=null&&goods.getSubscription().compareTo(BigDecimal.ZERO)>0){
+        for (Goods goods : goodsList) {
+            if (goods.getSubscriptionFlag()==1&&goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) {
                 haveDeposit = true;
             }
         }
@@ -174,7 +189,7 @@
 
         // 将优惠券列表转换为Map,以优惠券ID为键
         Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>();
-        if(appMemberCouponVoList!=null&&!appMemberCouponVoList.isEmpty()){
+        if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
             appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
         }
         AppMemberCouponVo appMemberCouponVo;
@@ -201,7 +216,7 @@
             memberCouponId = appBuyGoodsDto.getMemberCouponId();
             // 获取商品信息
             goods = goodsMap.get(goodsId);
-            if(goods.getGoodsStatus()!=1){
+            if (goods.getGoodsStatus() != 1) {
                 throw new ServiceException(AppErrorConstant.GOODS_DOWN);
             }
             // 设置订单商品信息
@@ -209,6 +224,7 @@
             appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
             appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction());
             appSureOrderGoodsVo.setGoodsType(goods.getGoodsType());
+            appSureOrderGoodsVo.setGoodsTag(goods.getGoodsTags());
             // 获取商品图片
             goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData();
             appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl());
@@ -234,7 +250,7 @@
                     if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) {
                         moneyThreshold = appMemberCouponVo.getMoneyThreshold();
                         discountMoney = appMemberCouponVo.getDiscountMoney();
-                        if (goodsTotalPrice.compareTo(moneyThreshold) >= 0 && goodsTotalPrice.compareTo(discountMoney)>0) {
+                        if (goodsTotalPrice.compareTo(moneyThreshold) >= 0 && goodsTotalPrice.compareTo(discountMoney) > 0) {
                             goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
                             useCoupon = 1;
                             userCouponIdSet.add(memberCouponId);
@@ -242,16 +258,16 @@
                         }
                     } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) {
                         discountPercent = appMemberCouponVo.getDiscountPercent();
-                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN,2,BigDecimal.ROUND_HALF_UP);
+                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP);
                         discountMoney = goodsTotalPrice.subtract(goodsRealPrice);
                         useCoupon = 1;
                         userCouponIdSet.add(memberCouponId);
                         appSureOrderGoodsVo.setMemberCouponId(memberCouponId);
                     } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) {
                         discountMoney = appMemberCouponVo.getDiscountMoney();
-                        if(goodsTotalPrice.compareTo(discountMoney)>0){
+                        if (goodsTotalPrice.compareTo(discountMoney) > 0) {
                             goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
-                            if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){
+                            if (goodsRealPrice.compareTo(BigDecimal.ZERO) < 0) {
                                 goodsRealPrice = BigDecimal.ZERO;
                             }
                             useCoupon = 1;
@@ -265,14 +281,14 @@
             appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
             appSureOrderGoodsVo.setCouponDiscount(discountMoney);
             appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
-            // 获取商品押金
+            // 获取商品订金
             goodsDeposit = goods.getSubscription();
-            if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) {
+            if (goods.getSubscriptionFlag()==1 && goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO) > 0) {
                 goodsDeposit = goodsDeposit.multiply(buyNumBig);
-            }else{
-                if(haveDeposit){
+            } else {
+                if (haveDeposit) {
                     goodsDeposit = goodsRealPrice;
-                }else{
+                } else {
                     goodsDeposit = new BigDecimal("0.00");
                 }
             }
@@ -287,9 +303,9 @@
         //处理优惠券列表
         if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
             for (AppMemberCouponVo entity : appMemberCouponVoList) {
-                if(userCouponIdSet!=null&&userCouponIdSet.contains(entity.getMemberCouponId())){
+                if (userCouponIdSet != null && userCouponIdSet.contains(entity.getMemberCouponId())) {
                     entity.setUseFlag(1);
-                }else{
+                } else {
                     entity.setUseFlag(0);
                 }
 
@@ -297,20 +313,24 @@
             }
             // 过滤商品优惠券列表
             List<AppMemberCouponVo> appGoodsMemberCouponVoList;
-            for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) {
+            for (AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) {
                 appGoodsMemberCouponVoList = new ArrayList<>();
-                for(AppMemberCouponVo entity : appMemberCouponVoList){
-                    if(StringUtils.isBlank(entity.getRelGoodsIds())||entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())){
-                        if(entity.getCouponType()==1){
-                            if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0&&entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){
+                for (AppMemberCouponVo entity : appMemberCouponVoList) {
+                    if (StringUtils.isBlank(entity.getRelGoodsIds()) || entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())) {
+                        if (entity.getCouponType() == 1) {
+                            if (entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) <= 0) {
                                 appGoodsMemberCouponVoList.add(entity);
                             }
-                        }else if(entity.getCouponType()==2){
+                            /*if (entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0 && entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0) {
+                                appGoodsMemberCouponVoList.add(entity);
+                            }*/
+                        } else if (entity.getCouponType() == 2) {
                             appGoodsMemberCouponVoList.add(entity);
-                        }else if(entity.getCouponType()==3){
-                            if(entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){
+                        } else if (entity.getCouponType() == 3) {
+                            appGoodsMemberCouponVoList.add(entity);
+                            /*if (entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0) {
                                 appGoodsMemberCouponVoList.add(entity);
-                            }
+                            }*/
                         }
 
                     }
@@ -415,8 +435,8 @@
         if (activityGoodsGetVo.getActivityStatus() == 2) {
             throw new ServiceException(AppErrorConstant.ACTIVITY_END);
         }
-        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId);
-        if(surpNum==null||surpNum<1){
+        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId);
+        if (surpNum == null || surpNum < 1) {
             throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
         }
         if (activityGoodsGetVo.getAvailableBuyNum() < 1) {
@@ -426,7 +446,7 @@
             throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND);
         }
         Goods goods = remoteGoodsService.getGoods(goodsId).getData();
-        if(goods.getGoodsStatus()!=1){
+        if (goods.getGoodsStatus() != 1) {
             throw new ServiceException(AppErrorConstant.GOODS_DOWN);
         }
         appPanicBuyVo.setActivityId(activityId);
@@ -434,6 +454,7 @@
         appPanicBuyVo.setGoodsName(goods.getGoodsName());
         appPanicBuyVo.setGoodsIntroduction(goods.getGoodsIntroduction());
         appPanicBuyVo.setGoodsType(goods.getGoodsType());
+        appPanicBuyVo.setGoodsTag(goods.getGoodsTags());
         //商品图片
         goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData();
         appPanicBuyVo.setGoodsPicture(goodsFile.getFileUrl());
@@ -456,9 +477,9 @@
         appPanicBuyVo.setGoodsTotalPrice(goodsTotalPrice);
         appPanicBuyVo.setGoodsRealPrice(goodsRealPrice);
         goodsDeposit = activityGoodsGetVo.getActivitySubscription();
-        if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) {
+        if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) {
             goodsDeposit = new BigDecimal("0.00");
-        }else{
+        } else {
             goodsDeposit = goodsDeposit.multiply(buyNumBig);
         }
         appPanicBuyVo.setGoodsDeposit(goodsDeposit);
@@ -498,8 +519,8 @@
         Map<String, Goods> goodsMap = goodsList.stream()
                 .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
         Boolean haveDeposit = false;
-        for(Goods goods : goodsList){
-            if(goods.getSubscription()!=null&&goods.getSubscription().compareTo(BigDecimal.ZERO)>0){
+        for (Goods goods : goodsList) {
+            if (goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) {
                 haveDeposit = true;
             }
         }
@@ -510,7 +531,7 @@
         Integer serviceNum;
         Integer goodsNum = 0;
         String memberCouponId;
-        Goods goods;
+        Goods goods = null;
         GoodsFile goodsFile;
         BigDecimal goodsPrice;
         BigDecimal goodsTotalPrice;
@@ -535,6 +556,7 @@
         BigDecimal orderPayMoney = new BigDecimal("0.00");
         // 创建订单ID和订单号
         String orderId = IdUtils.simpleUUID();
+
         String orderNo = CodeFactoryUtil.getShopOrderNo();
         OrderGoods orderGoods;
         String orderGoodsId;
@@ -542,6 +564,7 @@
         HashSet<String> goodsTypeSet = new HashSet<>();
         //使用优惠券
         StringJoiner memberCouponSJ = new StringJoiner(",");
+        List<String> goodsNameList = new ArrayList<>();
         // 遍历购买的商品列表
         for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
             appSureOrderGoodsVo = new AppSureOrderGoodsVo();
@@ -551,6 +574,7 @@
             memberCouponId = appBuyGoodsDto.getMemberCouponId();
             // 获取商品信息
             goods = goodsMap.get(goodsId);
+            goodsNameList.add(goods.getGoodsName());
             // 设置商品信息
             appSureOrderGoodsVo.setGoodsId(goodsId);
             appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
@@ -596,13 +620,17 @@
                         }
                     } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) {
                         discountPercent = appMemberCouponVo.getDiscountPercent();
-                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN,2, BigDecimal.ROUND_HALF_UP);
+                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP);
                         discountMoney = goodsTotalPrice.subtract(goodsRealPrice);
                         useCoupon = 1;
                     } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) {
                         discountMoney = appMemberCouponVo.getDiscountMoney();
                         goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
                         useCoupon = 1;
+                    }
+                    if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){
+                        goodsRealPrice = BigDecimal.ZERO;
+                        discountMoney = goodsTotalPrice;
                     }
                 }
                 memberCouponSJ.add(memberCouponId);
@@ -613,12 +641,12 @@
             appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
             // 获取商品押金
             goodsDeposit = goods.getSubscription();
-            if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) {
+            if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO) > 0) {
                 goodsDeposit = goodsDeposit.multiply(buyNumBig);
-            }else{
-                if(haveDeposit){
+            } else {
+                if (haveDeposit) {
                     goodsDeposit = goodsRealPrice;
-                }else{
+                } else {
                     goodsDeposit = new BigDecimal("0.00");
                 }
             }
@@ -683,13 +711,14 @@
         order.setDiscountMoney(couponDiscount);
         order.setReceivableMoney(orderPayMoney);
         order.setReceivableDeposit(orderPayDeposit);
-        order.setChangeReceivableMoney(orderPayMoney);
+        order.setOfflinePayMoney(BigDecimal.ZERO);
         // 根据支付类型计算支付金额
         if (appPlaceOrderDto.getPayType() == 1) {
             order.setPayMoney(orderPayMoney);
             order.setOnlinePayMoney(orderPayMoney);
             appPlaceOrderVo.setPayMoney(orderPayMoney);
             appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
+            order.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount));
             order.setPayType(1);
             order.setCloseFlag(1);
         } else if (appPlaceOrderDto.getPayType() == 2) {
@@ -697,12 +726,16 @@
             order.setOnlinePayMoney(orderPayDeposit);
             appPlaceOrderVo.setPayMoney(orderPayDeposit);
             appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
+            order.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount).subtract(orderPayDeposit));
             order.setPayType(2);
             order.setCloseFlag(0);
         }
         order.setOrderRemark(appPlaceOrderDto.getOrderRemark());
         order.setGoodsNum(goodsNum);
         order.setCreateTime(new Date());
+        if(appPlaceOrderDto.getNewMemberFlag()!=null&&appPlaceOrderDto.getNewMemberFlag()==1){
+            order.setNewMemberFlag(1);
+        }
         // 保存订单
         this.save(order);
         // 更新用户商品类型
@@ -714,53 +747,139 @@
         }
         appPlaceOrderVo.setOrderId(orderId);
         appPlaceOrderVo.setOrderNo(orderNo);
-        // 调用支付
-       /* CombineTransactionsJsRequest request=new CombineTransactionsJsRequest();
-        request.setCombineAppid();
-        request.setCombineMchid();
-        profitsSharingService.combineTransactions(request);*/
 
-       //构建预下单支付对象
-        /*PrepayRequest request = new PrepayRequest();
-        Amount amount = new Amount();
-        amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString()));
-        request.setAmount(amount);
-        request.setAppid(this.appId);
-        request.setMchid(this.mchId);
-        request.setDescription(order.getGoodsInfo());
-        request.setNotifyUrl(this.notifyUrl);
-        request.setOutTradeNo(order.getOrderId());
-        Payer payer = new Payer();
-        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
-        request.setPayer(payer);*/
-        //返回前端唤醒支付结果信息
-        /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
-        appPlaceOrderVo.setAppId(this.appId);
-        appPlaceOrderVo.setTimeStamp(res.getTimeStamp());
-        appPlaceOrderVo.setNonceStr(res.getNonceStr());
-        appPlaceOrderVo.setPackageStr(res.getPackageVal());
-        appPlaceOrderVo.setTradeType(res.getSignType());
-        appPlaceOrderVo.setPaySign(res.getPaySign());*/
+        String goodsName = "";
+        if (null != goodsNameList) {
+            goodsName = String.join(",", goodsNameList);
+        }
 
+        if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){
+            String outTradeNo = IdUtils.simpleUUID();
+
+            // 保存订单 交易流水
+            order.setOutTradeNo(outTradeNo);
+            this.saveOrUpdate(order);
+
+            // 小程序微信下单支付
+            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo,
+                    orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
+                    appPlaceOrderDto.getSpbillCreateIp(), goodsNameList,1);
+        }
 
         //减去优惠券
-        if(memberCouponSJ!=null&&StringUtils.isNotBlank(memberCouponSJ.toString())){
+        if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
             remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
         }
         //生成自动取消订单延时任务
         Integer delayTime = 30;
-        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
+        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
             delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
         }
         redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES);
         DelayTask delayTask = new DelayTask();
         delayTask.setDelFlag(0);
         delayTask.setCreateTime(new Date());
-        delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime));
+        delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
         delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
         remoteConfigService.addDelayTask(delayTask);
-        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
+        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
+
         return appPlaceOrderVo;
+    }
+
+    /**
+     * 小程序支付下单API
+     * @param appPlaceOrderVo
+     * @param userId
+     * @param shopId
+     * @param goodsName
+     * @param outTradeNo
+     * @param orderId
+     * @param payMoney
+     * @param openid
+     * @param payerClientIp
+     * @param goodsNameList
+     */
+    public void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId,
+                                 String goodsName, String outTradeNo,
+                                 String orderId, BigDecimal payMoney,
+                                 String openid, String payerClientIp, List<String> goodsNameList,Integer orderFrom){
+        try {
+            // 创建支付订单
+            R<String> resultMch = remoteShopService.getShopSubMchId(shopId);
+            String subMchId = resultMch.getData();
+            if (StringUtils.isEmpty(subMchId)) {
+                throw new ServiceException("获取微信商户号失败");
+            }
+            WxPayConfig config = wxService.getConfig();
+            config.setSubMchId(subMchId);
+
+            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(config.getNotifyUrl());
+            // 结算信息
+            PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo();
+            if(orderFrom==2){
+                settleInfo.setProfitSharing(true);
+            }else{
+                settleInfo.setProfitSharing(false);
+            }
+            settleInfo.setSubsidyAmount(BigDecimal.ZERO);
+            request.setSettleInfo(settleInfo);
+
+            // 订单总金额
+            Integer totalFee = payMoney.multiply(new BigDecimal(100)).intValue();
+            PartnerTransactionsRequest.Amount amount = new PartnerTransactionsRequest.Amount();
+            amount.setTotal(totalFee);
+            amount.setCurrency("CNY");
+            request.setAmount(amount);
+
+            // 支付者
+            PartnerTransactionsRequest.Payer payer = new PartnerTransactionsRequest.Payer();
+            payer.setSpOpenid(openid);
+            request.setPayer(payer);
+
+            // 场景信息
+            PartnerTransactionsRequest.SceneInfo sceneInfo = new PartnerTransactionsRequest.SceneInfo();
+            sceneInfo.setPayerClientIp(payerClientIp);
+            request.setSceneInfo(sceneInfo);
+
+            TransactionsResult.JsapiResult result = wxService.getEcommerceService().partnerTransactions(TradeTypeEnum.JSAPI, request);
+
+            // 请求参数
+            Gson gson = new Gson();
+            String payRequestJson = gson.toJson(request);
+            // 返回参数
+            String payResponseJson = gson.toJson(result);
+
+            // 支付相关信息返回
+            appPlaceOrderVo.setAppId(result.getAppId());
+            appPlaceOrderVo.setMchId(config.getMchId());
+            appPlaceOrderVo.setTimeStamp(result.getTimeStamp());
+            appPlaceOrderVo.setNonceStr(result.getNonceStr());
+            appPlaceOrderVo.setPackageStr(result.getPackageValue());
+            appPlaceOrderVo.setSignType(result.getSignType());
+            appPlaceOrderVo.setPaySign(result.getPaySign());
+            appPlaceOrderVo.setPrepayId(result.getPackageValue());
+
+            // 保存支付订单统一下单日志
+            paymentMessageService.savePaymentMessage("1", orderId, payRequestJson, payResponseJson);
+
+            // 保存支付订单统一下单支付记录
+            orderPaymentService.saveOrderPayment(userId, shopId, subMchId, orderId, outTradeNo, payMoney,
+                    appPlaceOrderVo.getEndTime(), "Y", openid,
+                    Joiner.on(";").join(goodsNameList), result.getPackageValue());
+
+        } catch (WxPayException e) {
+            throw new ServiceException(e.getMessage());
+        }
     }
 
 
@@ -784,17 +903,17 @@
         String goodsId = appPlaceActivityDto.getGoodsId();
         Integer buyNum = appPlaceActivityDto.getBuyNum();
         //redis库存控制极简版
-        String goodsLock = "goods_lock_"+activityId+"_"+goodsId;
+        String goodsLock = "goods_lock_" + activityId + "_" + goodsId;
         RLock redissonLock = redissonClient.getLock(goodsLock);
-        try{
+        try {
             redissonLock.lock(30, TimeUnit.SECONDS);
-            Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId);
-            if(surpNum==null||surpNum<buyNum){
+            Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId);
+            if (surpNum == null || surpNum < buyNum) {
                 throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
-            }else{
-                redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId,surpNum-buyNum);
+            } else {
+                redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId, surpNum - buyNum);
             }
-        }finally{
+        } finally {
             redissonLock.unlock();
         }
         // 定义购买数量,服务数量,商品数量
@@ -874,9 +993,9 @@
         appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
         // 获取商品押金
         goodsDeposit = activityGoodsGetVo.getActivitySubscription();
-        if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) {
+        if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) {
             goodsDeposit = new BigDecimal("0.00");
-        }else{
+        } else {
             goodsDeposit = goodsDeposit.multiply(buyNumBig);
         }
         appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
@@ -923,9 +1042,9 @@
             goodsTypeSet.add("单品");
         }
         String goodsNurse = goods.getGoodsNurses();
-        if(StringUtils.isNotBlank(goodsNurse)){
+        if (StringUtils.isNotBlank(goodsNurse)) {
             String[] goodsNurseArr = goodsNurse.split(",");
-            for(String str : goodsNurseArr){
+            for (String str : goodsNurseArr) {
                 goodsNurseSet.add(str);
             }
         }
@@ -943,9 +1062,9 @@
         order.setDiscountMoney(couponDiscount);
         order.setReceivableMoney(orderPayMoney);
         order.setReceivableDeposit(orderPayDeposit);
-        order.setChangeReceivableMoney(orderPayMoney);
         order.setActivityId(activityId);
         order.setActivityName(activityGoodsGetVo.getActivityName());
+        order.setOfflinePayMoney(BigDecimal.ZERO);
         // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志
         if (appPlaceActivityDto.getPayType() == 1) {
             order.setPayMoney(orderPayMoney);
@@ -954,6 +1073,7 @@
             appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
             order.setPayType(1);
             order.setCloseFlag(1);
+            order.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount));
         } else if (appPlaceActivityDto.getPayType() == 2) {
             order.setPayMoney(orderPayDeposit);
             order.setOnlinePayMoney(orderPayDeposit);
@@ -961,15 +1081,19 @@
             appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
             order.setPayType(2);
             order.setCloseFlag(0);
+            order.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount).subtract(orderPayDeposit));
         }
         // 设置订单备注,商品数量,创建时间
         order.setOrderRemark(appPlaceActivityDto.getOrderRemark());
         order.setGoodsNum(goodsNum);
         order.setCreateTime(new Date());
+        if(appPlaceActivityDto.getNewMemberFlag()!=null&&appPlaceActivityDto.getNewMemberFlag()==1){
+            order.setNewMemberFlag(1);
+        }
         // 保存订单
         this.save(order);
         // 更新用户商品类型
-        if (goodsTypeSet != null || goodsNurseSet!= null) {
+        if (goodsTypeSet != null || goodsNurseSet != null) {
             AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
             appMemberGoodsTypeDto.setUserId(userId);
             appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet);
@@ -1021,7 +1145,25 @@
         appPlaceOrderVo.setPackageStr(res.getPackageVal());
         appPlaceOrderVo.setTradeType(res.getSignType());
         appPlaceOrderVo.setPaySign(res.getPaySign());
+
 */
+        List<String> goodsNameList = new ArrayList<>();
+        goodsNameList.add(orderGoods.getGoodsName());
+
+
+        if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){
+
+            String outTradeNo = IdUtils.simpleUUID();
+
+            // 保存订单 交易流水
+            order.setOutTradeNo(outTradeNo);
+            this.saveOrUpdate(order);
+
+            // 小程序微信下单支付
+            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), orderNo,
+                    orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(),
+                    appPlaceActivityDto.getSpbillCreateIp(), goodsNameList,2);
+        }
         //生成活动参加记录
         ActivityRecord activityRecord = new ActivityRecord();
         activityRecord.setDelFlag(0);
@@ -1037,17 +1179,17 @@
         remoteActivityService.addActivityRecord(activityRecord);
         //生成自动取消订单延时任务
         Integer delayTime = 30;
-        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
+        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
             delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
         }
         redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES);
         DelayTask delayTask = new DelayTask();
         delayTask.setDelFlag(0);
         delayTask.setCreateTime(new Date());
-        delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime));
+        delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
         delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
         remoteConfigService.addDelayTask(delayTask);
-        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
+        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
         return appPlaceOrderVo;
     }
 
@@ -1076,7 +1218,7 @@
                 shopMap.put(shopIdLong, shopTemp);
             });
             Integer delayTime = 30;
-            if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
+            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
                 delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
             }
             for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
@@ -1089,7 +1231,7 @@
                     appUserOrderPageVo.setSameShop(0);
                 }
                 appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId());
-                appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(),delayTime));
+                appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(), delayTime));
             }
         }
         return appUserOrderPageVoList;
@@ -1130,10 +1272,10 @@
         appUserOrderGetVo.setVerifyCode("1-" + orderId);
         //生成自动取消订单延时任务
         Integer delayTime = 30;
-        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
+        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
             delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
         }
-        appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
+        appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
         return appUserOrderGetVo;
     }
 
@@ -1145,13 +1287,15 @@
     @Override
     public void cancelOrder(String orderId) {
         Order order = this.getById(orderId);
+        // 订单状态-1.删除 0.已取消 1.待支付 2.待核销 3.已完成
         if (order.getOrderStatus() == 0) {
             throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER);
-        }else if (order.getOrderStatus() == 1) {
+        } else if (order.getOrderStatus() == 1) {
             this.autoCancelOrder(orderId);
-        }else if(order.getOrderStatus() == 2){
+        } else if (order.getOrderStatus() == 2) {
+            // 2.待核销 -> 订单退款
             this.refundOrder(orderId);
-        }else{
+        } else {
             throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER);
         }
     }
@@ -1185,9 +1329,15 @@
     @Override
     public MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo) {
         Long shopId = merHomeShopTotalVo.getShopId();
+        //获取今日到店
         Integer todayShop = userServiceRecordService.countShopServicePerson(shopId);
+        //获取待处理订单和营业额
         merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId);
+        //获取服务统计
+        MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId);
         merHomeShopTotalVo.setTodayShop(todayShop);
+        merHomeShopTotalVo.setCycleSurp(serviceTotalVo.getCycleSurp());
+        merHomeShopTotalVo.setExplorationSurp(serviceTotalVo.getExplorationSurp());
         return merHomeShopTotalVo;
     }
 
@@ -1201,6 +1351,9 @@
     public MerVerifyOrderVo verifyOrder(String orderId, Long shopId) {
         // 创建返回对象
         MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
+        if(orderId.contains("+")){
+            orderId = orderId.substring(0, orderId.indexOf("+"));
+        }
         // 根据订单ID获取订单信息
         Order order = this.getById(orderId);
         if (order.getOrderStatus() != 2) {
@@ -1219,15 +1372,32 @@
         merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney());
         merVerifyOrderVo.setCouponDiscount(order.getCouponMoney());
         merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit());
-        merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney());
+        if(order.getPayType()==1){
+            merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney());
+        }else{
+            merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit()));
+        }
         merVerifyOrderVo.setPayMoney(order.getPayMoney());
         merVerifyOrderVo.setOrderRemark(order.getOrderRemark());
         merVerifyOrderVo.setCreateTime(order.getCreateTime());
         merVerifyOrderVo.setPayTime(order.getPayTime());
         merVerifyOrderVo.setUseTime(order.getUseTime());
         merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
+        merVerifyOrderVo.setPayType(order.getPayType());
+        merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney());
+        if(order.getPayType()==1){
+            merVerifyOrderVo.setReceiveMoney(order.getPayMoney());
+        }else{
+            if(order.getOfflinePayMoney()!=null){
+                merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney());
+            }else{
+                merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO);
+            }
+        }
+        merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney()));
         // 根据订单用户ID获取用户信息
         Member member = remoteMemberService.getMember(order.getUserId()).getData();
+        merVerifyOrderVo.setUserId(order.getUserId());
         merVerifyOrderVo.setUserName(member.getRealName());
         merVerifyOrderVo.setUserMobile(member.getMobile());
         merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
@@ -1255,7 +1425,7 @@
         }
 
         ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyOrderDto.getUserId()).getData();
-        if(!shopRelUserVo.getShopId().equals(order.getShopId())){
+        if (!shopRelUserVo.getShopId().equals(order.getShopId())) {
             throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
         }
         order.setOrderStatus(3);
@@ -1265,9 +1435,9 @@
         order.setOffPayTime(nowTime);
         order.setPayMoney(order.getPayMoney().add(relPayMoney));
         order.setChangeReceivableMoney(relReceiveMoney);
-        if(order.getPayMoney().compareTo(order.getChangeReceivableMoney())>=0){
+        if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) {
             order.setCloseFlag(1);
-        }else{
+        } else {
             order.setCloseFlag(0);
         }
         this.saveOrUpdate(order);
@@ -1287,7 +1457,7 @@
         List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
         for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) {
             Integer buyNum = appUserOrderGoodsPageVo.getBuyNum();
-            if(appUserOrderGoodsPageVo.getCycleNumFlag()==0){
+            if (appUserOrderGoodsPageVo.getCycleNumFlag() == 0) {
                 consumerGoods = new ConsumerGoods();
                 goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId());
                 consumerGoodsId = IdUtils.simpleUUID();
@@ -1312,8 +1482,8 @@
                 consumerGoods.setSourceFrom(1);
                 consumerGoods.setSureNum(buyNum);
                 consumerGoodsList.add(consumerGoods);
-            }else{
-                for(int i=0;i<buyNum;i++){
+            } else {
+                for (int i = 0; i < buyNum; i++) {
                     consumerGoods = new ConsumerGoods();
                     goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId());
                     consumerGoodsId = IdUtils.simpleUUID();
@@ -1350,34 +1520,130 @@
         merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney());
         merVerifyOrderVo.setCouponDiscount(order.getCouponMoney());
         merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit());
-        merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney());
+        if(order.getPayType()==1){
+            merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getPayMoney()));
+        }else{
+            merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit()));
+        }
         merVerifyOrderVo.setPayMoney(order.getPayMoney());
         merVerifyOrderVo.setOrderRemark(order.getOrderRemark());
         merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
         merVerifyOrderVo.setCreateTime(order.getCreateTime());
         merVerifyOrderVo.setPayTime(order.getPayTime());
         merVerifyOrderVo.setUseTime(order.getUseTime());
+        merVerifyOrderVo.setPayType(order.getPayType());
+        merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney());
+        if(order.getPayType()==1){
+            merVerifyOrderVo.setReceiveMoney(order.getPayMoney());
+        }else{
+            if(order.getOfflinePayMoney()!=null){
+                merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney());
+            }else{
+                merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO);
+            }
+        }
+        merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney()));
         Member member = remoteMemberService.getMember(order.getUserId()).getData();
+        merVerifyOrderVo.setUserId(order.getUserId());
         merVerifyOrderVo.setUserName(member.getRealName());
         merVerifyOrderVo.setUserMobile(member.getMobile());
         merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
         //
-        if(order.getOrderFrom()==2){
-
-            //profitsSharingService.applyProfitSharing();
+        if (order.getOrderFrom() == 2) {
+            // profitsSharingService.applyProfitSharing();
         }
 
         //创建支付记录
-        PayRecord payRecord = new PayRecord();
-        payRecord.setDelFlag(0);
-        payRecord.setOrderId(order.getOrderId());
-        payRecord.setPayMoney(merVerifyOrderDto.getRelPayMoney());
-        payRecord.setPayTime(new Date());
-        payRecord.setPayType(2);
-        payRecordService.save(payRecord);
-        return merVerifyOrderVo;
+        if(merVerifyOrderDto.getRelPayMoney().compareTo(BigDecimal.ZERO)>0){
+            PayRecord payRecord = new PayRecord();
+            payRecord.setDelFlag(0);
+            payRecord.setOrderId(order.getOrderId());
+            payRecord.setPayMoney(merVerifyOrderDto.getRelPayMoney());
+            payRecord.setPayTime(new Date());
+            payRecord.setPayType(merVerifyOrderDto.getPayType());
+            payRecordService.save(payRecord);
+        }
+        //submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney());
 
+        return merVerifyOrderVo;
     }
+
+    /*private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney) {
+        String sendMessage = "";
+        String resultMessage = "";
+        try {
+            // 核销完成 开始分账(平台收取服务费)
+            OrderPayment payment = orderPaymentService.getByOrderId(orderId);
+            String transactionId = payment.getTransactionId();
+
+            // 平台特约商户号,用户平台收取服务费
+            String platformTyMacId = WxPayConfiguration.getPlatformTyMacId();
+
+            R<String> resultMch = remoteShopService.getShopSubMchId(shopId);
+            String subMchId = resultMch.getData();
+            if (!StringUtils.isEmpty(subMchId)) {
+
+
+                R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(shopId);
+                ShopProportionVo shopProportion = resultShopProportion.getData();
+                if (null != shopProportion) {
+                    ProfitSharingRequest request = new ProfitSharingRequest();
+                    request.setSubMchid(subMchId);
+                    request.setTransactionId(transactionId);
+                    request.setOutOrderNo(orderNo);
+                    List<Receiver> receiverList = new ArrayList<>();
+
+                    String description = "订单:" + orderNo + " 平台抽取佣金";
+                    BigDecimal proportionPercent = shopProportion.getProportionPercent();
+                    if (null == proportionPercent) {
+                        proportionPercent = BigDecimal.ZERO;
+                    }
+
+                    ProfitSharingResult result = new ProfitSharingResult();
+                    result.setOutOrderNo(orderNo);
+                    result.setStatus("FINISHED");
+
+                    // 计算分成金额
+                    int amount = orderMoney.multiply(proportionPercent).setScale(0, RoundingMode.UP).intValue();
+                    log.info("订单分账:{} 分账金额: {}", orderNo, amount);
+                    if (amount > 0) {
+                        // 分账创建
+                        Receiver receiver = new Receiver();
+                        receiver.setType("MERCHANT_ID");
+                        receiver.setReceiverAccount(platformTyMacId);
+                        receiver.setAmount(amount);
+                        receiver.setDescription(description);
+
+                        receiverList.add(receiver);
+                        request.setReceivers(receiverList);
+                        // 分账完成
+                        request.setFinish(true);
+                        result = wxService.getEcommerceService().profitSharing(request);
+                    }
+
+                    // 创建分账记录
+                    profitSharingService.saveProfitSharing(shopId, orderId, orderMoney, 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 (WxPayException e) {
+            resultMessage = String.format("订单分账:%s 分账失败:%s", orderNo, e.getMessage());
+            log.info(resultMessage);
+            e.printStackTrace();
+        }
+
+        // 保存分账信息
+        paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage);
+    }*/
 
     /**
      * @param merVerifyCouponDto
@@ -1390,22 +1656,42 @@
     @Transactional
     public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) {
         MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData();
+        MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon();
         ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyCouponDto.getUserId()).getData();
-        if(!shopRelUserVo.getShopId().equals(verifyCouponGetVo.getMemberCoupon().getShopId())){
-            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+        Long userId = verifyCouponGetVo.getUserId();
+        Long shopId = shopRelUserVo.getShopId();
+        Shop shop = remoteShopService.getShop(shopId).getData();
+        // 调用remoteMemberService的getMember方法获取Member对象
+        Member member = remoteMemberService.getMember(userId).getData();
+        //如果是商户优惠券,验证商户一致
+        if (memberCoupon.getCouponFrom() == 2) {
+            if(!memberCoupon.getShopId().equals(member.getRelationShopId())){
+                throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR);
+            }
+            if(!memberCoupon.getShopId().equals(shopId)){
+                throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+            }
         }
+        //如果是平台优惠券,当用户绑定商户时验证商户一致
+        if (memberCoupon.getCouponFrom() == 1 && member.getBindingFlag() == 1) {
+            /*if(!memberCoupon.getShopId().equals(member.getRelationShopId())){
+                throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR);
+            }*/
+            //判断绑定商户是否和核销商户一致
+            if(!member.getRelationShopId().equals(shopId)){
+                throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+            }
+        }
+        memberCoupon.setShopId(shopId);
         // 创建MerVerifyCouponVo对象
         MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo();
         // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象
         List<Goods> goodsList = verifyCouponGetVo.getGoodsList();
-        Long userId = verifyCouponGetVo.getUserId();
-        // 调用remoteMemberService的getMember方法获取Member对象
-        Member member = remoteMemberService.getMember(userId).getData();
         merVerifyCouponVo.setUserName(member.getRealName());
         merVerifyCouponVo.setUserMobile(member.getMobile());
         merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
-        merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName());
-        merVerifyCouponVo.setCreateTime(verifyCouponGetVo.getMemberCoupon().getReceiveTime());
+        merVerifyCouponVo.setCouponName(memberCoupon.getCouponName());
+        merVerifyCouponVo.setCreateTime(memberCoupon.getReceiveTime());
         // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性
         List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream()
                 .map(goods -> {
@@ -1427,7 +1713,6 @@
                 .collect(Collectors.toList());
         // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
         merVerifyCouponVo.setGoodsList(merCouponGoodsList);
-        MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon();
         //生成服务
         ConsumerGoods consumerGoods;
         String consumerGoodsId;
@@ -1454,7 +1739,7 @@
             appShopGoodsGetDto.setShopId(memberCoupon.getShopId());
             //获取商户服务次数
             shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
-            if(shopGoods!=null){
+            if (shopGoods != null) {
                 consumerGoods.setServiceNum(shopGoods.getServiceNum());
             }
             consumerGoods.setUsedNum(0);
@@ -1468,43 +1753,78 @@
             consumerGoods.setSourceFrom(1);
             consumerGoodsList.add(consumerGoods);
         }
+        MerVerifyMemberCouponDto merVerifyMemberCouponDto = new MerVerifyMemberCouponDto();
+        merVerifyMemberCouponDto.setCouponId(memberCoupon.getId());
+        merVerifyMemberCouponDto.setShopId(shopId);
+        remoteCouponService.sureMemberCoupon(merVerifyMemberCouponDto);
         consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
+        if (member.getBindingFlag() != 1) {
+            AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
+            appMemberBindingDto.setBindingFlag(1);
+            appMemberBindingDto.setBindingType(4);
+            appMemberBindingDto.setShopId(shop.getShopId());
+            appMemberBindingDto.setShopName(shop.getShopName());
+            appMemberBindingDto.setUserId(memberCoupon.getUserId());
+            remoteMemberService.updateMemberBinding(appMemberBindingDto);
+        }
         merVerifyCouponVo.setVerifyStatus(2);
         return merVerifyCouponVo;
     }
 
 
     /**
-     * @description  确认核销奖品
-     * @author  jqs
-     * @date    2023/7/9 9:54
      * @param merVerifyPrizeDto
-     * @return  MerVerifyAwardVo
+     * @return MerVerifyAwardVo
+     * @description 确认核销奖品
+     * @author jqs
+     * @date 2023/7/9 9:54
      */
     @Override
     @Transactional
-    public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto){
+    public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto) {
         MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
         MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData();
-        if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){
+        if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) {
             throw new ServiceException(AppErrorConstant.COUPON_USED);
         }
         ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyPrizeDto.getUserId()).getData();
-        if(!shopRelUserVo.getShopId().equals(memberGiftRecord.getShopId())){
+        Long shopId = shopRelUserVo.getShopId();
+        Shop shop = remoteShopService.getShop(shopId).getData();
+        //平台奖品判断
+        if (memberGiftRecord.getGiftFrom() == 1) {
+            BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData();
+            //判断生日活动状态
+            if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){
+                shop = remoteShopService.getShop(shopId).getData();
+                //判断指定区域全部店铺
+                if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){
+                    throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+                }
+                //判断指定店铺
+                if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){
+                    throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+                }
+            }else{
+                throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR);
+            }
+        }
+        //商户奖品判断
+        if (memberGiftRecord.getGiftFrom() == 2 && !memberGiftRecord.getShopId().equals(shopId)) {
             throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
         }
         Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
+
         merVerifyAwardVo.setUserName(member.getRealName());
         merVerifyAwardVo.setUserMobile(member.getMobile());
-        if(memberGiftRecord.getGiftFrom()==1){
+        if (memberGiftRecord.getGiftFrom() == 1) {
             merVerifyAwardVo.setGiftFrom("平台生日卡");
-        }else{
+        } else {
             merVerifyAwardVo.setGiftFrom("商户生日卡");
         }
         merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
         List<BirthdayGiftSendDto> giftSendDtoList = new ArrayList<>();
         BirthdayGiftSendDto birthdayGiftSendDto = new BirthdayGiftSendDto();
-        switch(memberGiftRecord.getGiftType()){
+        switch (memberGiftRecord.getGiftType()) {
             case 1:
                 merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                 merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
@@ -1551,15 +1871,17 @@
                 break;
         }
         merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime());
-        memberGiftRecord.setVerifyStatus(2);
-        memberGiftRecord.setVerifyTime(new Date());
-        if(member.getBindingFlag()!=1){
+        MerVerifyPrizeFinalDto merVerifyPrizeFinalDto = new MerVerifyPrizeFinalDto();
+        merVerifyPrizeFinalDto.setPrizeId(memberGiftRecord.getPrizeId());
+        merVerifyPrizeFinalDto.setShopId(shop.getShopId());
+        remoteMemberService.verifyPrize(merVerifyPrizeFinalDto);
+        if (member.getBindingFlag() != 1) {
             AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
             appMemberBindingDto.setBindingFlag(1);
-            appMemberBindingDto.setShopId(merVerifyPrizeDto.getShopId());
-            Shop shop = remoteShopService.getShop(merVerifyPrizeDto.getShopId()).getData();
+            appMemberBindingDto.setBindingType(5);
+            appMemberBindingDto.setShopId(shop.getShopId());
             appMemberBindingDto.setShopName(shop.getShopName());
-            appMemberBindingDto.setUserId(merVerifyPrizeDto.getUserId());
+            appMemberBindingDto.setUserId(memberGiftRecord.getUserId());
             remoteMemberService.updateMemberBinding(appMemberBindingDto);
         }
         merVerifyAwardVo.setPrizeId(merVerifyPrizeDto.getPrizeId());
@@ -1578,15 +1900,17 @@
     @Override
     public List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) {
         List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberNoClearOrder(page, merMemberNoClearOrderDto.getMemberUserId());
-        /*if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) {
+        if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) {
             BigDecimal zeroBig = new BigDecimal("0.00");
             for (MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) {
-                merMemberNoClearOrderVo.setUnPaidMoney(merMemberNoClearOrderVo.getReceivableMoney().subtract(merMemberNoClearOrderVo.getPayMoney()));
                 if (merMemberNoClearOrderVo.getUnPaidMoney() == null) {
                     merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                 }
+                if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){
+                    merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
+                }
             }
-        }*/
+        }
         return merMemberNoClearOrderVoList;
     }
 
@@ -1601,10 +1925,10 @@
         order.setOfflinePayMoney(order.getOfflinePayMoney().add(merCloseOrderDto.getPayMoney()));
         order.setOffPayTime(new Date());
         order.setPayMoney(order.getPayMoney().add(merCloseOrderDto.getPayMoney()));
-        if(order.getPayMoney().compareTo(order.getChangeReceivableMoney())>=0){
-            order.setCloseFlag(0);
-        }else{
+        if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) {
             order.setCloseFlag(1);
+        } else {
+            order.setCloseFlag(0);
         }
         this.saveOrUpdate(order);
         //创建支付记录
@@ -1613,7 +1937,7 @@
         payRecord.setOrderId(order.getOrderId());
         payRecord.setPayMoney(merCloseOrderDto.getPayMoney());
         payRecord.setPayTime(new Date());
-        payRecord.setPayType(2);
+        payRecord.setPayType(merCloseOrderDto.getPayType());
         payRecordService.save(payRecord);
     }
 
@@ -1647,7 +1971,6 @@
                 sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
                 String password = "hongruitang";
                 sysUser.setPassword(SecurityUtils.encryptPassword(password));
-                log.debug("sysUser" + sysUser.toString());
                 sysUser = remoteUserService.registerUser(sysUser).getData();
                 member = new Member();
                 member.setMemberId(memberId);
@@ -1656,6 +1979,7 @@
                 member.setRealName(name);
                 member.setNickName(name);
                 member.setBindingFlag(1);
+                member.setBindingType(3);
                 member.setRelationShopId(shopId);
                 member.setRelationShopName(shop.getShopName());
                 remoteMemberService.createNewMember(member);
@@ -1701,6 +2025,12 @@
         BigDecimal experienceMoney = new BigDecimal("0.00");
         BigDecimal serviceMoney = new BigDecimal("0.00");
         BigDecimal goodsMoney = new BigDecimal("0.00");
+        List<OrderGoods> orderGoodsList = new ArrayList<>();
+        ConsumerGoods consumerGoods;
+        String consumerGoodsId;
+        List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
+        //使用优惠券
+        StringJoiner memberCouponSJ = new StringJoiner(",");
         for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
             goodsId = appBuyGoodsDto.getGoodsId();
             memberCouponId = appBuyGoodsDto.getMemberCouponId();
@@ -1734,19 +2064,23 @@
                         }
                     } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) {
                         discountPercent = appMemberCouponVo.getDiscountPercent();
-                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN,2, BigDecimal.ROUND_HALF_UP);
-                        discountMoney = goodsRealPrice.subtract(goodsTotalPrice);
+                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP);
+                        discountMoney = goodsTotalPrice.subtract(goodsRealPrice);
                     } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) {
                         discountMoney = appMemberCouponVo.getDiscountMoney();
                         goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
                     }
+                    if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){
+                        goodsRealPrice = BigDecimal.ZERO;
+                        discountMoney = goodsTotalPrice.subtract(goodsRealPrice);
+                    }
+                    memberCouponSJ.add(memberCouponId);
                 }
             }
-
             goodsDeposit = goods.getSubscription();
-            if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) {
+            if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) {
                 goodsDeposit = new BigDecimal("0.00");
-            }else{
+            } else {
                 goodsDeposit = goodsDeposit.multiply(buyNumBig);
             }
             goodsNum = goodsNum + buyNum;
@@ -1754,6 +2088,7 @@
             couponDiscount = couponDiscount.add(discountMoney);
             orderPayDeposit = orderPayDeposit.add(goodsDeposit);
             orderPayMoney = orderPayMoney.add(goodsRealPrice);
+
             //创建OrderGoods
             orderGoods = new OrderGoods();
             orderGoodsId = IdUtils.simpleUUID();
@@ -1775,7 +2110,63 @@
             orderGoods.setGoodsName(goods.getGoodsName());
             orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
             orderGoods.setGoodsPicture(goodsFile.getFileUrl());
-            orderGoodsService.save(orderGoods);
+            orderGoodsList.add(orderGoods);
+
+            //创建服务
+            Integer buyGoodsNum = orderGoods.getBuyNum();
+            //判断是否确认次数
+            if (orderGoods.getCycleNumFlag() == 0) {
+                consumerGoods = new ConsumerGoods();
+                consumerGoodsId = IdUtils.simpleUUID();
+                consumerGoods.setConsumerGoodsId(consumerGoodsId);
+                consumerGoods.setDelFlag(0);
+                consumerGoods.setServiceStatus(1);
+                consumerGoods.setShopId(shopId);
+                consumerGoods.setUserId(userId);
+                consumerGoods.setOrderId(orderId);
+                consumerGoods.setOrderGoodsId(orderGoodsId);
+                consumerGoods.setGoodsId(orderGoods.getGoodsId());
+                consumerGoods.setGoodsName(orderGoods.getGoodsName());
+                consumerGoods.setCycleNumFlag(orderGoods.getCycleNumFlag());
+                consumerGoods.setServiceNum(orderGoods.getServiceNum());
+                consumerGoods.setUsedNum(0);
+                consumerGoods.setGoodsType(orderGoods.getGoodsType());
+                consumerGoods.setGoodsTag(orderGoods.getGoodsTag());
+                consumerGoods.setCreateTime(nowTime);
+                consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
+                consumerGoods.setGoodsPicture(orderGoods.getGoodsPicture());
+                consumerGoods.setGoodsNurses(goods.getGoodsNurses());
+                consumerGoods.setSourceFrom(1);
+                consumerGoods.setSureNum(buyGoodsNum);
+                consumerGoodsList.add(consumerGoods);
+            } else {
+                for (int i = 0; i < buyGoodsNum; i++) {
+                    consumerGoods = new ConsumerGoods();
+                    consumerGoodsId = IdUtils.simpleUUID();
+                    consumerGoods.setConsumerGoodsId(consumerGoodsId);
+                    consumerGoods.setDelFlag(0);
+                    consumerGoods.setServiceStatus(1);
+                    consumerGoods.setShopId(shopId);
+                    consumerGoods.setUserId(userId);
+                    consumerGoods.setOrderId(orderId);
+                    consumerGoods.setOrderGoodsId(orderGoodsId);
+                    consumerGoods.setGoodsId(orderGoods.getGoodsId());
+                    consumerGoods.setGoodsName(orderGoods.getGoodsName());
+                    consumerGoods.setCycleNumFlag(orderGoods.getCycleNumFlag());
+                    consumerGoods.setServiceNum(orderGoods.getServiceNum());
+                    consumerGoods.setUsedNum(0);
+                    consumerGoods.setGoodsType(orderGoods.getGoodsType());
+                    consumerGoods.setGoodsTag(orderGoods.getGoodsTag());
+                    consumerGoods.setCreateTime(nowTime);
+                    consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
+                    consumerGoods.setGoodsPicture(orderGoods.getGoodsPicture());
+                    consumerGoods.setGoodsNurses(goods.getGoodsNurses());
+                    consumerGoods.setSourceFrom(1);
+                    consumerGoodsList.add(consumerGoods);
+                }
+            }
+
+            //商户变更计算
             switch (orderGoods.getGoodsType()) {
                 case 1:
                     cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney());
@@ -1806,16 +2197,14 @@
         order.setCouponMoney(couponDiscount);
         order.setDiscountMoney(couponDiscount);
         order.setReceivableMoney(orderPayMoney);
-        order.setReceivableDeposit(new BigDecimal("0.00"));
+        order.setReceivableDeposit(orderPayDeposit);
         order.setPayType(1);
+        //判断实收金额
         if (merNewOrderDto.getChangeMoney() != null) {
             order.setChangeReceivableMoney(merNewOrderDto.getChangeMoney());
         } else {
             order.setChangeReceivableMoney(orderPayMoney);
         }
-        order.setPayMoney(orderPayMoney);
-        order.setOnlinePayMoney(new BigDecimal("0.00"));
-        order.setOfflinePayMoney(orderPayMoney);
         order.setOrderRemark(merNewOrderDto.getOrderRemark());
         order.setGoodsNum(goodsNum);
         order.setCreateTime(nowTime);
@@ -1824,75 +2213,16 @@
         order.setPayMoney(merNewOrderDto.getPayMoney());
         order.setOnlinePayMoney(new BigDecimal("0.00"));
         order.setOfflinePayMoney(merNewOrderDto.getPayMoney());
+        order.setPayMoney(merNewOrderDto.getPayMoney());
         order.setOffPayTime(nowTime);
         order.setPayType(1);
-        if(order.getPayMoney().compareTo(order.getChangeReceivableMoney())>=0){
-            order.setCloseFlag(0);
-        }else{
+        //判断结清
+        if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) {
             order.setCloseFlag(1);
+        } else {
+            order.setCloseFlag(0);
         }
-        this.save(order);
-        //创建服务
-        List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId);
-        ConsumerGoods consumerGoods;
-        String consumerGoodsId;
-        List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
-        for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) {
-            Integer buyGoodsNum = appUserOrderGoodsPageVo.getBuyNum();
-            if(appUserOrderGoodsPageVo.getCycleNumFlag()==0){
-                consumerGoods = new ConsumerGoods();
-                goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData();
-                consumerGoodsId = IdUtils.simpleUUID();
-                consumerGoods.setConsumerGoodsId(consumerGoodsId);
-                consumerGoods.setDelFlag(0);
-                consumerGoods.setServiceStatus(1);
-                consumerGoods.setShopId(order.getShopId());
-                consumerGoods.setUserId(order.getUserId());
-                consumerGoods.setOrderId(orderId);
-                consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId());
-                consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId());
-                consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName());
-                consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag());
-                consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
-                consumerGoods.setUsedNum(0);
-                consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
-                consumerGoods.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag());
-                consumerGoods.setCreateTime(nowTime);
-                consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
-                consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
-                consumerGoods.setGoodsNurses(goods.getGoodsNurses());
-                consumerGoods.setSourceFrom(1);
-                consumerGoods.setSureNum(buyGoodsNum);
-                consumerGoodsList.add(consumerGoods);
-            }else{
-                for(int i=0;i<buyGoodsNum;i++) {
-                    consumerGoods = new ConsumerGoods();
-                    goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData();
-                    consumerGoodsId = IdUtils.simpleUUID();
-                    consumerGoods.setConsumerGoodsId(consumerGoodsId);
-                    consumerGoods.setDelFlag(0);
-                    consumerGoods.setServiceStatus(1);
-                    consumerGoods.setShopId(order.getShopId());
-                    consumerGoods.setUserId(order.getUserId());
-                    consumerGoods.setOrderId(orderId);
-                    consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId());
-                    consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId());
-                    consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName());
-                    consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag());
-                    consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
-                    consumerGoods.setUsedNum(0);
-                    consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
-                    consumerGoods.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag());
-                    consumerGoods.setCreateTime(nowTime);
-                    consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
-                    consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
-                    consumerGoods.setGoodsNurses(goods.getGoodsNurses());
-                    consumerGoods.setSourceFrom(1);
-                    consumerGoodsList.add(consumerGoods);
-                }
-            }
-        }
-        consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
+        //用户未绑定则绑定商户
         Member member = remoteMemberService.getMember(userId).getData();
         if (member != null && member.getBindingFlag() != 1) {
             //绑定商户
@@ -1901,23 +2231,35 @@
             appMemberBindingDto.setShopName(shop.getShopName());
             appMemberBindingDto.setUserId(userId);
             appMemberBindingDto.setBindingFlag(1);
+            appMemberBindingDto.setBindingType(3);
             remoteMemberService.updateMemberBinding(appMemberBindingDto);
+            order.setNewMemberFlag(1);
         }
-        ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
+        //保存订单和服务
+        this.save(order);
+        orderGoodsService.saveBatch(orderGoodsList);
+        consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
+        //减去优惠券
+        if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
+            remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
+        }
+
+        //更新商户统计
+        /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
         shopTotalChangeDto.setShopId(order.getShopId());
         shopTotalChangeDto.setOrderType(1);
         shopTotalChangeDto.setCycleMoney(cycleMoney);
         shopTotalChangeDto.setServiceMoney(serviceMoney);
         shopTotalChangeDto.setExperienceMoney(experienceMoney);
         shopTotalChangeDto.setGoodsMoney(goodsMoney);
-        remoteShopService.changeShopTotal(shopTotalChangeDto);
+        remoteShopService.changeShopTotal(shopTotalChangeDto);*/
         //创建支付记录
         PayRecord payRecord = new PayRecord();
         payRecord.setDelFlag(0);
         payRecord.setOrderId(orderId);
         payRecord.setPayMoney(order.getPayMoney());
-        payRecord.setPayTime(order.getPayTime());
-        payRecord.setPayType(2);
+        payRecord.setPayTime(order.getOffPayTime());
+        payRecord.setPayType(merNewOrderDto.getPayType());
         payRecordService.save(payRecord);
     }
 
@@ -1928,11 +2270,13 @@
      */
     @Override
     public List<MerOrderPageVo> pageMerOrder(Page page, MerOrderPageDto merOrderPageDto) {
-        if(StringUtils.isNotBlank(merOrderPageDto.getKeyword())){
+        if (StringUtils.isNotBlank(merOrderPageDto.getKeyword())) {
+            // 获取关键字对应的用户ID
             MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto();
             userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword());
             MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData();
-            if(StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())){
+            if (StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())) {
+                // 将用户ID转换成List<Long>类型
                 List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(","))
                         .map(Long::parseLong)
                         .collect(Collectors.toList());
@@ -1940,6 +2284,8 @@
                 merOrderPageDto.setMemberUserId(null);
             }
         }
+
+        // 获取订单列表
         List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerOrder(page, merOrderPageDto);
         if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) {
             Long userId;
@@ -1948,13 +2294,17 @@
             String orderFromDesc;
             BigDecimal zeroBig = new BigDecimal("0.00");
             StringJoiner userIdSj = new StringJoiner(",");
+            // 遍历订单列表
             for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
                 userId = merOrderPageVo.getUserId();
                 userIdSj.add(userId.toString());
                 orderFrom = merOrderPageVo.getOrderFrom();
+                // 根据订单来源设置订单来源描述
                 if (orderFrom != null) {
                     if (orderFrom == 1) {
                         orderFromDesc = "商城订单";
+                    } else if (orderFrom == 2) {
+                        orderFromDesc = "店铺砍价活动(" + merOrderPageVo.getActivityName() + ")";
                     } else {
                         orderFromDesc = "线下创建";
                     }
@@ -1962,23 +2312,29 @@
                     orderFromDesc = "商城订单";
                 }
                 merOrderPageVo.setOrderFromDesc(orderFromDesc);
-                merOrderPageVo.setUnPaidMoney(merOrderPageVo.getPayMoney().subtract(merOrderPageVo.getReceiveMoney()));
+                // 设置未支付金额为0.00,如果未支付金额小于0,则设置为0.00
                 if (merOrderPageVo.getUnPaidMoney() == null) {
                     merOrderPageVo.setUnPaidMoney(zeroBig);
                 }
+                if (merOrderPageVo.getUnPaidMoney().compareTo(zeroBig) < 0) {
+                    merOrderPageVo.setUnPaidMoney(zeroBig);
+                }
             }
+
+            // 根据用户ID列表获取用户信息
             MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
             mgtBaseBathDto.setIds(userIdSj.toString());
             List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData();
             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){
+                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() + "缺少用户");
                 }
             }
         }
@@ -1991,13 +2347,15 @@
      * @return
      */
     @Override
-    public List<MerMemberNoClearOrderVo> pageMerMemberOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) {
-        List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberOrder(page, merMemberNoClearOrderDto.getMemberUserId());
+    public List<MerMemberOrderVo> pageMerMemberOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) {
+        List<MerMemberOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberOrder(page, merMemberNoClearOrderDto.getMemberUserId(),merMemberNoClearOrderDto.getShopId());
         if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) {
             BigDecimal zeroBig = new BigDecimal("0.00");
-            for (MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) {
-                merMemberNoClearOrderVo.setUnPaidMoney(merMemberNoClearOrderVo.getReceivableMoney().subtract(merMemberNoClearOrderVo.getPayMoney()));
+            for (MerMemberOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) {
                 if (merMemberNoClearOrderVo.getUnPaidMoney() == null) {
+                    merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
+                }
+                if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){
                     merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                 }
             }
@@ -2345,9 +2703,9 @@
         mgtOrderDetailVo.setCancelTime(order.getCancelTime());
         mgtOrderDetailVo.setOrderRemark(order.getOrderRemark());
         mgtOrderDetailVo.setShopId(order.getShopId());
-        if(shop!=null){
+        if (shop != null) {
             mgtOrderDetailVo.setShopName(shop.getShopName());
-        }else{
+        } else {
             mgtOrderDetailVo.setShopName("商户已被删除");
         }
         mgtOrderDetailVo.setVerifyTime(order.getUseTime());
@@ -2596,13 +2954,31 @@
      */
     @Override
     public MgtTotalDataTotalVo getTotalDataTotal(MgtBaseShopDto mgtBaseShopDto) {
-        //获取人数统计
-        MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto);
+
+        //营业额
         BigDecimal salesTotal = orderMapper.shopSalesTotal(mgtBaseShopDto);
-        mgtTotalDataTotalVo.setSalesTotal(salesTotal);
+        MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto);
+        // 获取当月时间
+        LocalDate currentDate = LocalDate.now();
+        LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1);
+        LocalDate lastDayOfMonth = currentDate.withDayOfMonth(currentDate.lengthOfMonth());
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String firstDayOfMonthStr = firstDayOfMonth.format(formatter);
+        String lastDayOfMonthStr = lastDayOfMonth.format(formatter);
+        mgtBaseShopDto.setStartDate(firstDayOfMonthStr);
+        mgtBaseShopDto.setEndDate(lastDayOfMonthStr);
+        //总进店人数 体验人数 体验开单人数 没体验开单人数
+        MgtTotalDataTotalVo mgtTotalDataMemberTotalVo = orderMapper.getTotalDataMemberTotal(mgtBaseShopDto);
+        mgtTotalDataTotalVo.setOnlyExperiencePerson(mgtTotalDataMemberTotalVo.getOnlyExperiencePerson());
+        mgtTotalDataTotalVo.setExperienceCyclePerson(mgtTotalDataMemberTotalVo.getExperienceCyclePerson());
+        mgtTotalDataTotalVo.setOnlyCyclePerson(mgtTotalDataMemberTotalVo.getOnlyCyclePerson());
+        mgtTotalDataTotalVo.setOrderPerson(mgtTotalDataMemberTotalVo.getOrderPerson());
+        //续单人数
         Integer reorderPerson = orderMapper.getReorderPerson(mgtBaseShopDto);
-        mgtTotalDataTotalVo.setReorderPerson(reorderPerson);
+        //回头客
         Integer returnedPerson = orderMapper.getReturnedPerson(mgtBaseShopDto);
+        mgtTotalDataTotalVo.setSalesTotal(salesTotal);
+        mgtTotalDataTotalVo.setReorderPerson(reorderPerson);
         mgtTotalDataTotalVo.setReturnedPerson(returnedPerson);
         return mgtTotalDataTotalVo;
     }
@@ -2925,6 +3301,9 @@
      */
     @Override
     public MerVerifyCouponVo verifyCoupon(String verifyCode, Long shopId) {
+        if(verifyCode.contains("+")){
+            verifyCode = verifyCode.substring(0, verifyCode.indexOf("+"));
+        }
         // 创建MerVerifyCouponVo对象
         MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo();
         // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象
@@ -2939,28 +3318,41 @@
         } else if (couponStatus != 1) {
             throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
         }
-        if (memberCoupon.getCouponFrom()==2&&!memberCoupon.getShopId().equals(shopId)) {
-            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+        Long userId = verifyCouponGetVo.getUserId();
+        Member member = remoteMemberService.getMember(userId).getData();
+        //如果是商户优惠券,验证商户一致
+        if (memberCoupon.getCouponFrom() == 2) {
+            if(!memberCoupon.getShopId().equals(member.getRelationShopId())){
+                throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR);
+            }
+            if(!memberCoupon.getShopId().equals(shopId)){
+                throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+            }
         }
-        //如果是平台优惠券
-        if(memberCoupon.getCouponFrom()==1&&memberCoupon.getShopId()==null){
-            memberCoupon.setShopId(shopId);
+        //如果是平台优惠券,当用户绑定商户时验证商户一致
+        if (memberCoupon.getCouponFrom() == 1 && member.getBindingFlag() == 1) {
+            /*if(!memberCoupon.getShopId().equals(member.getRelationShopId())){
+                throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR);
+            }*/
+            //判断绑定商户是否和核销商户一致
+            if(!member.getRelationShopId().equals(shopId)){
+                throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+            }
         }
         List<Goods> goodsList = verifyCouponGetVo.getGoodsList();
-        Long userId = verifyCouponGetVo.getUserId();
         // 调用remoteMemberService的getMember方法获取Member对象
-        Member member = remoteMemberService.getMember(userId).getData();
         merVerifyCouponVo.setUserName(member.getRealName());
         merVerifyCouponVo.setUserMobile(member.getMobile());
         merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
-        merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName());
-        merVerifyCouponVo.setCreateTime(verifyCouponGetVo.getMemberCoupon().getReceiveTime());
+        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());
+                    merCouponGoods.setGoodsNum(1);
                     if (goods.getGoodsType() == 1) {
                         merCouponGoods.setGoodsType("周期");
                     } else if (goods.getGoodsType() == 2) {
@@ -2977,38 +3369,66 @@
         // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
         merVerifyCouponVo.setGoodsList(merCouponGoodsList);
         merVerifyCouponVo.setVerifyStatus(1);
+        merVerifyCouponVo.setMemberCouponId(memberCoupon.getId());
         return merVerifyCouponVo;
     }
 
     /**
-     * @description  获取核销奖品
-     * @author  jqs
-     * @date    2023/7/8 17:46
      * @param verifyCode
      * @param shopId
-     * @return  MerVerifyAwardVo
+     * @return MerVerifyAwardVo
+     * @description 获取核销奖品
+     * @author jqs
+     * @date 2023/7/8 17:46
      */
     @Override
-    public MerVerifyAwardVo verifyPrize(String verifyCode,Long shopId){
+    public MerVerifyAwardVo verifyPrize(String verifyCode, Long shopId) {
         MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
         MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(verifyCode).getData();
-        if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){
+        if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) {
             throw new ServiceException(AppErrorConstant.COUPON_USED);
         }
-        if(memberGiftRecord.getGiftFrom()==2&&!memberGiftRecord.getShopId().equals(shopId)){
+        Shop shop = null;
+        Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
+        //判断是否在绑定店铺核销
+        if(member.getBindingFlag()==1){
+            if(!member.getRelationShopId().equals(shopId)){
+                throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+            }
+        }
+        //平台奖品判断
+        if (memberGiftRecord.getGiftFrom() == 1) {
+            BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData();
+            //判断生日活动状态
+            if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){
+                shop = remoteShopService.getShop(shopId).getData();
+                //判断指定区域全部店铺
+                if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){
+                    throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+                }
+                //判断指定店铺
+                if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){
+                    throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+                }
+            }else{
+                throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR);
+            }
+        }
+        //商户奖品判断
+        if (memberGiftRecord.getGiftFrom() == 2 && !memberGiftRecord.getShopId().equals(shopId)) {
             throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
         }
-        Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
+
         merVerifyAwardVo.setUserName(member.getRealName());
         merVerifyAwardVo.setUserMobile(member.getMobile());
-        if(memberGiftRecord.getGiftFrom()==1){
+        if (memberGiftRecord.getGiftFrom() == 1) {
             merVerifyAwardVo.setGiftFrom("平台生日卡");
-        }else{
+        } else {
             merVerifyAwardVo.setGiftFrom("商户生日卡");
         }
-
         merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
-        switch(memberGiftRecord.getGiftType()){
+        //礼物类型1优惠券2商品3现金4实物
+        switch (memberGiftRecord.getGiftType()) {
             case 1:
                 merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                 merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
@@ -3071,12 +3491,9 @@
             merTotalDto.setShopIdList(shopIdList);
             merTotalDto.setShopId(null);
         }
-        if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
-            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
-            merTotalDto.setShopIdList(shopIdList);
-            merTotalDto.setShopId(null);
-        }
+        //线上线下活动订单
         MerOrderTotalVo orderTotalVo = orderMapper.getMerOrderTotalOrderFrom(merTotalDto);
+        //分类型订单
         MerOrderTotalVo goodsTypeVo = orderMapper.getMerTotalOrderTotalGoodsType(merTotalDto);
         orderTotalVo.setCycleTotal(goodsTypeVo.getCycleTotal());
         orderTotalVo.setCycleMoney(goodsTypeVo.getCycleMoney());
@@ -3101,6 +3518,9 @@
             List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
             merTotalDto.setShopIdList(shopIdList);
             merTotalDto.setShopId(null);
+        }
+        if(merTotalDto.getGoodsType()!=null&&merTotalDto.getGoodsType()==0){
+            merTotalDto.setGoodsType(null);
         }
         MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
         // 获取订单年龄用户列表
@@ -3148,22 +3568,24 @@
                     orderMoneyValue[i] = BigDecimal.ZERO;
                 }
             }*/
-            List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList =  orderMapper.listMerOrderDistributionTotal(merTotalDto);
-            if(mgtMapTotalPlusVoList!=null&&!mgtMapTotalPlusVoList.isEmpty()) {
-                String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()];
-                Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()];
-                BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()];
-                MgtMapTotalPlusVo mgtMapTotalPlusVo;
-                for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) {
-                    mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i);
-                    orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey();
-                    orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
-                    orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
-                }
-                orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
-                orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
-                orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
+        List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listMerOrderDistributionTotal(merTotalDto);
+        String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()];
+        Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()];
+        BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()];
+        if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) {
+            MgtMapTotalPlusVo mgtMapTotalPlusVo;
+            for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) {
+                mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i);
+                orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey();
+                orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
+                orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
             }
+            orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
+        }else{
+            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
+            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
+            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
+        }
         // 返回订单分布总数对象
         return orderDistributionTotalVo;
     }
@@ -3188,28 +3610,44 @@
         List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
         List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
         if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
-            MgtMapIntTotalVo MgtMapIntTotalVo;
+            MgtMapIntTotalVo mgtMapIntTotalVo;
             MgtMapBigTotalVo mgtMapBigTotalVo;
+            Integer intTotal = 0;
+            BigDecimal bigTotal = BigDecimal.ZERO;
+            for(MgtMapTotalPlusVo mgtMapTotalPlusVo : MgtMapIntTotalVoGoodsType){
+                intTotal = intTotal + mgtMapTotalPlusVo.getMapValueFirst();
+                bigTotal = bigTotal.add(mgtMapTotalPlusVo.getMapValueSecond());
+            }
+            BigDecimal hundredBig = new BigDecimal("100");
+            BigDecimal intTotalBig = hundredBig;
+            if(intTotal!=0){
+                intTotalBig = new BigDecimal(intTotal.toString());
+            }
+            if(bigTotal.compareTo(BigDecimal.ZERO)<1){
+                bigTotal = hundredBig;
+            }
             // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
             for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
-                MgtMapIntTotalVo = new MgtMapIntTotalVo();
+                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                 mgtMapBigTotalVo = new MgtMapBigTotalVo();
-                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
+                mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
+                mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig));
                 mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
+                mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig));
                 if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
-                    MgtMapIntTotalVo.setMapKey("周期");
+                    mgtMapIntTotalVo.setMapKey("周期");
                     mgtMapBigTotalVo.setMapKey("周期");
                 } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
-                    MgtMapIntTotalVo.setMapKey("服务");
+                    mgtMapIntTotalVo.setMapKey("服务");
                     mgtMapBigTotalVo.setMapKey("服务");
                 } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
-                    MgtMapIntTotalVo.setMapKey("体验");
+                    mgtMapIntTotalVo.setMapKey("体验");
                     mgtMapBigTotalVo.setMapKey("体验");
                 } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
-                    MgtMapIntTotalVo.setMapKey("单品");
+                    mgtMapIntTotalVo.setMapKey("单品");
                     mgtMapBigTotalVo.setMapKey("单品");
                 }
-                goodsTypeTotalList.add(MgtMapIntTotalVo);
+                goodsTypeTotalList.add(mgtMapIntTotalVo);
                 goodsTypeMoneyList.add(mgtMapBigTotalVo);
             }
             orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
@@ -3237,6 +3675,7 @@
         List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto);
         if (goodsRankList != null && goodsRankList.size() > 0) {
             goodsRankList = bigListRemoveNull(goodsRankList);
+            Collections.reverse(goodsRankList);
             orderGoodsRankVo.setGoodsRankList(goodsRankList);
         }
         return orderGoodsRankVo;
@@ -3262,26 +3701,27 @@
         List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto);
         if (orderFromList != null && orderFromList.size() > 0) {
             orderFromList = bigListRemoveNull(orderFromList);
+            Collections.reverse(orderFromList);
             merOrderFromRankVo.setOrderFromRankList(orderFromList);
         }
         return merOrderFromRankVo;
     }
 
     /**
-     * @description  商户端订单管理统计
-     * @author  jqs
-     * @date    2023/7/31 10:53
      * @param merOrderPageDto
-     * @return  MerTotalOrderVo
+     * @return MerTotalOrderVo
+     * @description 商户端订单管理统计
+     * @author jqs
+     * @date 2023/7/31 10:53
      */
     @Override
     public MerTotalOrderVo totalMerOrder(MerOrderPageDto merOrderPageDto) {
         MerTotalOrderVo merTotalOrderVo = new MerTotalOrderVo();
-        if(StringUtils.isNotBlank(merOrderPageDto.getKeyword())){
+        if (StringUtils.isNotBlank(merOrderPageDto.getKeyword())) {
             MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto();
             userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword());
             MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData();
-            if(StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())){
+            if (StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())) {
                 List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(","))
                         .map(Long::parseLong)
                         .collect(Collectors.toList());
@@ -3352,33 +3792,33 @@
     }
 
     /**
-     * @description 自动取消订单
-     * @author  jqs
-     * @date    2023/7/13 17:15
      * @param orderId
-     * @return  void
+     * @return void
+     * @description 自动取消订单
+     * @author jqs
+     * @date 2023/7/13 17:15
      */
     @Override
     @Transactional
-    public void autoCancelOrder(String orderId){
+    public void autoCancelOrder(String orderId) {
         //更新订单信息
         Order order = this.getById(orderId);
         order.setOrderStatus(0);
         order.setCancelTime(new Date());
         this.saveOrUpdate(order);
         //活动订单回退库存
-        if(order.getOrderFrom()==2){
+        if (order.getOrderFrom() == 2) {
             List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
-            if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){
-                for(OrderGoods orderGoods : orderGoodsList){
+            if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
+                for (OrderGoods orderGoods : orderGoodsList) {
                     //redis库存控制极简版
-                    String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId();
+                    String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
                     RLock redissonLock = redissonClient.getLock(goodsLock);
-                    try{
+                    try {
                         redissonLock.lock(30, TimeUnit.SECONDS);
-                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId());
-                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum());
-                    }finally{
+                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId());
+                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum());
+                    } finally {
                         redissonLock.unlock();
                     }
                     //改变活动库存
@@ -3399,16 +3839,16 @@
                     remoteActivityService.delActivityRecord(activityRecord);
                 }
             }
-        }else{
-            if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){
+        } else {
+            if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) {
                 //回退优惠券
                 List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
-                if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) {
+                if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
                     StringJoiner memberCouponSJ = new StringJoiner(",");
                     for (OrderGoods orderGoods : orderGoodsList) {
                         memberCouponSJ.add(orderGoods.getCouponId());
                     }
-                    if(memberCouponSJ!=null){
+                    if (memberCouponSJ != null) {
                         remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
 
                     }
@@ -3418,18 +3858,21 @@
     }
 
     /**
-     * @description  订单支付回调
-     * @author  jqs
-     * @date    2023/7/13 17:57
      * @param transaction
-     * @return  void
+     * @return void
+     * @description 订单支付回调
+     * @author jqs
+     * @date 2023/7/13 17:57
      */
     @Override
     @Transactional
-    public void payBack(Transaction transaction) {
-        // 更新订单状态
-        String orderId=transaction.getOutTradeNo();
-        Order order = this.getById(orderId);
+    public void payBack(PartnerTransactionsResult transaction) {
+
+        // Order order = this.getById(orderId);
+        // 更新订单状态 订单编号,就是 微信outTradeNo
+        String orderNo = transaction.getOutTradeNo();
+        Order order = this.getByOrderNo(orderNo);
+        String orderId = order.getOrderId();
         order.setOrderStatus(2);
         order.setPayTime(new Date());
         this.saveOrUpdate(order);
@@ -3474,22 +3917,23 @@
             goodsTotalChangeDto.setChangeType(1);
             goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum());
             goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney());
-            Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(),orderGoods.getGoodsId());
-            if(bugGoodsNum==null||bugGoodsNum<1){
+            Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId());
+            if (bugGoodsNum == null || bugGoodsNum < 1) {
                 goodsTotalChangeDto.setPersonNum(1);
             }
             goodsTotalChangeDtoList.add(goodsTotalChangeDto);
         }
         //更新商品统计
+        remoteGoodsService.changeGoodsTotal(goodsTotalChangeDtoList);
         // 更新商户统计信息
-        ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
+        /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
         shopTotalChangeDto.setShopId(order.getShopId());
         shopTotalChangeDto.setOrderType(1);
         shopTotalChangeDto.setCycleMoney(cycleMoney);
         shopTotalChangeDto.setServiceMoney(serviceMoney);
         shopTotalChangeDto.setExperienceMoney(experienceMoney);
         shopTotalChangeDto.setGoodsMoney(goodsMoney);
-        remoteShopService.changeShopTotal(shopTotalChangeDto);
+        remoteShopService.changeShopTotal(shopTotalChangeDto);*/
         // 初始化会员统计信息
         MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
         memberTotalChangeDto.setUserId(order.getUserId());
@@ -3497,10 +3941,12 @@
         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());
+            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());
         }
         // 设置会员支付金额和支付时间
         memberTotalChangeDto.setPayMoney(order.getPayMoney());
@@ -3547,8 +3993,9 @@
             request.setTransactionId(transaction.getTransactionId());
             profitsSharingService.applyProfitSharing(request);*/
         }
-        //生成支付记录
-        OrderPayment orderPayment = new OrderPayment();
+        //修改支付记录生成支付记录
+        orderPaymentService.updatePaySuccess(transaction.getOutTradeNo(), transaction.getTransactionId());
+
         PayRecord payRecord = new PayRecord();
         payRecord.setDelFlag(0);
         payRecord.setOrderId(orderId);
@@ -3558,17 +4005,25 @@
         payRecordService.save(payRecord);
     }
 
+    @Override
+    public Order getByOrderNo(String orderNo) {
+        LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(Order::getOrderNo, orderNo)
+                .last(" limit 1 ");
+        return this.getOne(queryWrapper);
+    }
+
     /**
-     * @description  订单退款
-     * @author  jqs
-     * @date    2023/7/13 18:36
      * @param orderId
-     * @return  void
+     * @return void
+     * @description 订单退款
+     * @author jqs
+     * @date 2023/7/13 18:36
      */
     @Override
     @Transactional
-    public void refundOrder(String orderId){
-        //更新订单信息
+    public void refundOrder(String orderId) {
+        // 更新订单信息
         Order order = this.getById(orderId);
         order.setOrderStatus(0);
         order.setCancelTime(new Date());
@@ -3581,7 +4036,7 @@
         orderRefund.setOrderId(order.getOrderId());
         orderRefund.setUserId(order.getUserId());
         orderRefund.setShopId(order.getShopId());
-        orderRefund.setRefundMoney(order.getPayMoney());
+        orderRefund.setRefundMoney(order.getOnlinePayMoney());
         orderRefund.setOrderMoney(order.getPayMoney());
         orderRefund.setCreateTime(new Date());
         // 初始化各类商品的收款金额
@@ -3595,19 +4050,19 @@
         Boolean haveExperience = false;
         Boolean haveGoods = false;
         List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
-        if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){
+        if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
             StringJoiner memberCouponSJ = new StringJoiner(",");
-            for(OrderGoods orderGoods : orderGoodsList){
-                if(order.getOrderFrom()==2){
+            for (OrderGoods orderGoods : orderGoodsList) {
+                if (order.getOrderFrom() == 2) {
                     //redis库存控制极简版
                     //活动订单回退库存
-                    String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId();
+                    String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
                     RLock redissonLock = redissonClient.getLock(goodsLock);
-                    try{
+                    try {
                         redissonLock.lock(30, TimeUnit.SECONDS);
-                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId());
-                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum());
-                    }finally{
+                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId());
+                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum());
+                    } finally {
                         redissonLock.unlock();
                     }
                     //改变活动库存
@@ -3626,7 +4081,7 @@
                     activityRecord.setUserId(order.getUserId());
                     activityRecord.setOrderTime(order.getCreateTime());
                     remoteActivityService.delActivityRecord(activityRecord);
-                }else{
+                } else {
                     memberCouponSJ.add(orderGoods.getCouponId());
                 }
                 switch (orderGoods.getGoodsType()) {
@@ -3651,19 +4106,19 @@
                 }
             }
             //回退优惠券
-            if(memberCouponSJ!=null){
+            if (memberCouponSJ != null) {
                 remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
             }
         }
         // 更新商户统计信息
-        ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
+        /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
         shopTotalChangeDto.setOrderType(2);
         shopTotalChangeDto.setShopId(order.getShopId());
         shopTotalChangeDto.setCycleMoney(cycleMoney);
         shopTotalChangeDto.setServiceMoney(serviceMoney);
         shopTotalChangeDto.setExperienceMoney(experienceMoney);
         shopTotalChangeDto.setGoodsMoney(goodsMoney);
-        remoteShopService.changeShopTotal(shopTotalChangeDto);
+        remoteShopService.changeShopTotal(shopTotalChangeDto);*/
         // 初始化会员统计信息
         MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
         memberTotalChangeDto.setUserId(order.getUserId());
@@ -3710,50 +4165,117 @@
             activityTotalChangeDto.setUserId(order.getUserId());
             remoteActivityService.changeActivityTotal(activityTotalChangeDto);
         }
+
+        // 用户取消订单退款
+        BigDecimal onlinePayMoney = order.getOnlinePayMoney();
+        if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){
+            // 订单支付金额大于0,可发起退款
+            orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund);
+        }
+
+        orderRefund.setRefundStatus(1);
+        orderRefundService.saveOrUpdate(orderRefund);
     }
 
     /**
-     * @description  员工端活动订单统计
-     * @author  jqs
-     * @date    2023/7/17 15:25
+     * 申请退款API
+     */
+    private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){
+        try {
+            // 创建支付订单
+            OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId);
+            if (null == orderPayment) {
+                return;
+            }
+            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 = payMoney.multiply(new BigDecimal(100)).intValue();
+            RefundsRequest.Amount amount = RefundsRequest.Amount.builder().refund(total).total(total).currency("CNY").build();
+            request.setAmount(amount);
+            request.setNotifyUrl(config.getNotifyUrl());
+
+            RefundsResult result = wxService.getEcommerceService().refunds(request);
+
+            // 微信退款id
+            orderRefund.setWxRefundId(result.getRefundId());
+
+            // 请求参数
+            Gson gson = new Gson();
+            String refundRequestJson = gson.toJson(request);
+            // 返回参数
+            String refundResponseJson = gson.toJson(result);
+
+            // 保存支付订单统一下单日志
+            paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson);
+
+        } catch (WxPayException e) {
+            throw new ServiceException(e.getMessage());
+        }
+    }
+
+    /**
      * @param staffTotalDto
-     * @return  StaffActivityOrderTotalVo
+     * @return StaffActivityOrderTotalVo
+     * @description 员工端活动订单统计
+     * @author jqs
+     * @date 2023/7/17 15:25
      */
     @Override
-    public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto){
-        StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto);
+    public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto) {
+        StaffActivityOrderTotalVo staffActivityOrderTotalVo = new StaffActivityOrderTotalVo();
+        if(staffTotalDto.getActivityFrom()==1){
+            staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto);
+            StaffActivityOrderTotalVo staffActivityOrderGoodsTotalVo = orderMapper.getStaffActivityOrderGoodsTotal(staffTotalDto);
+            staffActivityOrderTotalVo.setCycleTotal(staffActivityOrderGoodsTotalVo.getCycleTotal());
+            staffActivityOrderTotalVo.setServiceTotal(staffActivityOrderGoodsTotalVo.getServiceTotal());
+            staffActivityOrderTotalVo.setExperienceTotal(staffActivityOrderGoodsTotalVo.getExperienceTotal());
+        }
         return staffActivityOrderTotalVo;
     }
 
     /**
-     * @description  员工端活动统计
-     * @author  jqs
-     * @date    2023/7/17 15:51
      * @param staffTotalDto
-     * @return  StaffActivityTotalVo
+     * @return StaffActivityTotalVo
+     * @description 员工端活动统计
+     * @author jqs
+     * @date 2023/7/17 15:51
      */
     @Override
-    public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto){
-        StaffActivityTotalVo staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto);
+    public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto) {
+        StaffActivityTotalVo staffActivityTotalVo = new StaffActivityTotalVo();
+        if(staffTotalDto.getActivityFrom()==1){
+            staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto);
+        }
         return staffActivityTotalVo;
     }
 
     /**
-     * @description  员工端活动统计订单分布
-     * @author  jqs
-     * @date    2023/7/17 16:16
      * @param staffTotalDto
-     * @return  MerOrderDistributionTotalVo
+     * @return MerOrderDistributionTotalVo
+     * @description 员工端活动统计订单分布
+     * @author jqs
+     * @date 2023/7/17 16:16
      */
     @Override
-    public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto){
+    public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto) {
+        if(staffTotalDto.getGoodsType()!=null&&staffTotalDto.getGoodsType()==0){
+            staffTotalDto.setGoodsType(null);
+        }
         MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
         // 获取订单年龄用户列表
-        MerTotalDto merTotalDto = new MerTotalDto();
-        merTotalDto.setShopId(staffTotalDto.getShopId());
-        List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData();
+        //MerTotalDto merTotalDto = new MerTotalDto();
+        //merTotalDto.setShopId(staffTotalDto.getShopId());
+        //List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData();
         // 如果订单年龄用户列表不为空
-        if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) {
+        /*if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) {
             // 定义变量
             Integer ageType;
             List<Long> userIdList;
@@ -3787,7 +4309,7 @@
                 }
                 // 如果用户ID列表不为空
                 if (userIdList != null && !userIdList.isEmpty()) {
-                    mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList,staffTotalDto.getShopId(),staffTotalDto.getActivityId());
+                    mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList, staffTotalDto.getShopId(), staffTotalDto.getActivityId());
                     orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                     orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
                 } else {
@@ -3799,146 +4321,245 @@
             orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
             orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
             orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
+        }*/
+        if(staffTotalDto.getActivityFrom()==1){
+            List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listStaffActivityOrderDistributionTotal(staffTotalDto);
+            String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()];
+            Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()];
+            BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()];
+            if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) {
+                MgtMapTotalPlusVo mgtMapTotalPlusVo;
+                for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) {
+                    mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i);
+                    orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey();
+                    orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
+                    orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
+                }
+                orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
+            }else{
+                orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
+                orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
+                orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
+            }
         }
         // 返回订单分布总数对象
         return orderDistributionTotalVo;
     }
 
+    public MerOrderDistributionTotalVo fillOrderTotalKeyAndValuesToRecentFiveDays(String[] orderTotalKey,Integer[] orderTotalValue,BigDecimal[] orderMoneyValue) {
+        MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
+        // 获取当前日期
+        LocalDate currentDate = LocalDate.now();
+
+        // 创建最近五天日期列表
+        List<String> recentFiveDays = new ArrayList<>();
+        for (int i = 0; i < 5; i++) {
+            LocalDate date = currentDate.minusDays(i);
+            recentFiveDays.add(date.toString());
+        }
+
+        // 创建新的数组
+        String[] newOrderTotalKey = new String[5];
+        Integer[] newOrderTotalValue = new Integer[5];
+        BigDecimal[] newOrderMoneyValue = new BigDecimal[5];
+
+        // 遍历最近五天日期列表,并补充数据
+        for (int i = 0; i < 5; i++) {
+            String day = recentFiveDays.get(i);
+            int index = getIndexInOrderTotalKey(day,orderTotalKey);
+            if (index != -1) {
+                newOrderTotalKey[i] = orderTotalKey[index];
+                newOrderTotalValue[i] = orderTotalValue[index];
+                newOrderMoneyValue[i] = orderMoneyValue[index];
+            } else {
+                newOrderTotalKey[i] = day;
+                newOrderTotalValue[i] = 0;
+                newOrderMoneyValue[i] = BigDecimal.ZERO;
+            }
+        }
+
+        // 更新属性
+        orderTotalKey = newOrderTotalKey;
+        orderTotalValue = newOrderTotalValue;
+        orderMoneyValue = newOrderMoneyValue;
+        orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
+        orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
+        orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
+        return orderDistributionTotalVo;
+    }
+
+    private int getIndexInOrderTotalKey(String day,String[] orderTotalKey) {
+        for (int i = 0; i < orderTotalKey.length; i++) {
+            if (orderTotalKey[i].equals(day)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
 
     /**
-     * @description  员工端活动统计销售占比
-     * @author  jqs
-     * @date    2023/7/17 17:03
      * @param staffTotalDto
-     * @return  MerOrderTypeTotalVo
+     * @return MerOrderTypeTotalVo
+     * @description 员工端活动统计销售占比
+     * @author jqs
+     * @date 2023/7/17 17:03
      */
     @Override
-    public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto){
+    public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto) {
         MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo();
-        //获取商品分类销售数据
-        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listStaffOrderTotalGoodsType(staffTotalDto);
-        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
-        List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
-        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
-            MgtMapIntTotalVo MgtMapIntTotalVo;
-            MgtMapBigTotalVo mgtMapBigTotalVo;
-            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
-            for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
-                MgtMapIntTotalVo = new MgtMapIntTotalVo();
-                mgtMapBigTotalVo = new MgtMapBigTotalVo();
-                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
-                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
-                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
-                    MgtMapIntTotalVo.setMapKey("周期");
-                    mgtMapBigTotalVo.setMapKey("周期");
-                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
-                    MgtMapIntTotalVo.setMapKey("服务");
-                    mgtMapBigTotalVo.setMapKey("服务");
-                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
-                    MgtMapIntTotalVo.setMapKey("体验");
-                    mgtMapBigTotalVo.setMapKey("体验");
-                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
-                    MgtMapIntTotalVo.setMapKey("单品");
-                    mgtMapBigTotalVo.setMapKey("单品");
+        if(staffTotalDto.getActivityFrom()==1){
+            //获取商品分类销售数据
+            List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listStaffOrderTotalGoodsType(staffTotalDto);
+            List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
+            List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
+            if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
+                MgtMapIntTotalVo mgtMapIntTotalVo;
+                MgtMapBigTotalVo mgtMapBigTotalVo;
+                Integer intTotal = 0;
+                BigDecimal bigTotal = BigDecimal.ZERO;
+                for(MgtMapTotalPlusVo mgtMapTotalPlusVo : MgtMapIntTotalVoGoodsType){
+                    intTotal = intTotal + mgtMapTotalPlusVo.getMapValueFirst();
+                    bigTotal = bigTotal.add(mgtMapTotalPlusVo.getMapValueSecond());
                 }
-                goodsTypeTotalList.add(MgtMapIntTotalVo);
-                goodsTypeMoneyList.add(mgtMapBigTotalVo);
+                BigDecimal hundredBig = new BigDecimal("100");
+                BigDecimal intTotalBig = hundredBig;
+                if(intTotal!=0){
+                    intTotalBig = new BigDecimal(intTotal.toString());
+                }
+                if(bigTotal.compareTo(BigDecimal.ZERO)<1){
+                    bigTotal = hundredBig;
+                }
+                // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+                for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
+                    mgtMapIntTotalVo = new MgtMapIntTotalVo();
+                    mgtMapBigTotalVo = new MgtMapBigTotalVo();
+                    mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
+                    mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig));
+                    mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
+                    mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig));
+                    if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
+                        mgtMapIntTotalVo.setMapKey("周期");
+                        mgtMapBigTotalVo.setMapKey("周期");
+                    } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
+                        mgtMapIntTotalVo.setMapKey("服务");
+                        mgtMapBigTotalVo.setMapKey("服务");
+                    } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
+                        mgtMapIntTotalVo.setMapKey("体验");
+                        mgtMapBigTotalVo.setMapKey("体验");
+                    } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
+                        mgtMapIntTotalVo.setMapKey("单品");
+                        mgtMapBigTotalVo.setMapKey("单品");
+                    }
+                    goodsTypeTotalList.add(mgtMapIntTotalVo);
+                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
+                }
+                orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
+                orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
             }
-            orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
-            orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
         }
         return orderTypeTotalVo;
     }
 
     /**
-     * @description  员工端获客人数
-     * @author  jqs
-     * @date    2023/7/17 18:42
      * @param staffTotalDto
-     * @return  StaffActivityDateMemberTotalVo
+     * @return StaffActivityDateMemberTotalVo
+     * @description 员工端获客人数
+     * @author jqs
+     * @date 2023/7/17 18:42
      */
     @Override
     public StaffActivityDateMemberTotalVo getStaffActivityGetMemberTotal(StaffTotalDto staffTotalDto) {
         // 创建返回对象
         StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo();
-        // 查询数据库获取数据
-        List<MgtMapIntTotalVo> mgtMapIntTotalVoList = orderMapper.getStaffActivityGetMemberTotal(staffTotalDto);
-        // 将查询结果转为Map
-        Map<String, Integer> map = new HashMap<>();
-        if (mgtMapIntTotalVoList != null && !mgtMapIntTotalVoList.isEmpty()) {
-            map = mgtMapIntTotalVoList.stream()
-                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
+        if(staffTotalDto.getActivityFrom()==1){
+            // 查询数据库获取数据
+            List<MgtMapIntTotalVo> mgtMapIntTotalVoList = orderMapper.getStaffActivityGetMemberTotal(staffTotalDto);
+            // 将查询结果转为Map
+            Map<String, Integer> map = new HashMap<>();
+            if (mgtMapIntTotalVoList != null && !mgtMapIntTotalVoList.isEmpty()) {
+                map = mgtMapIntTotalVoList.stream()
+                        .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
+            }
+            // 获取日期范围
+            List<String> dateList = getDateRange(staffTotalDto.getStartDate(), staffTotalDto.getEndDate());
+            int size = dateList.size();
+            // 创建日期和成员总数的数组
+            String[] dateMemberTotalKey = new String[size];
+            Integer[] dateMemberTotalValue = new Integer[size];
+            // 遍历日期列表,设置日期和成员总数的数组
+            String str;
+            Integer value;
+            for (int i = 0; i < size; i++) {
+                str = dateList.get(i);
+                dateMemberTotalKey[i] = str;
+                value = map.get(str);
+                dateMemberTotalValue[i] = (value != null) ? value : 0;
+            }
+            // 设置返回对象的日期和成员总数数组
+            staffActivityDateMemberTotalVo.setDateMemberTotalKey(dateMemberTotalKey);
+            staffActivityDateMemberTotalVo.setDateMemberTotalValue(dateMemberTotalValue);
         }
-        // 获取日期范围
-        List<String> dateList = getDateRange(staffTotalDto.getStartDate(), staffTotalDto.getEndDate());
-        int size = dateList.size();
-        // 创建日期和成员总数的数组
-        String[] dateMemberTotalKey = new String[size];
-        Integer[] dateMemberTotalValue = new Integer[size];
-        // 遍历日期列表,设置日期和成员总数的数组
-        String str;
-        Integer value;
-        for (int i = 0; i < size; i++) {
-            str = dateList.get(i);
-            dateMemberTotalKey[i] = str;
-            value = map.get(str);
-            dateMemberTotalValue[i] = (value != null) ? value : 0;
-        }
-        // 设置返回对象的日期和成员总数数组
-        staffActivityDateMemberTotalVo.setDateMemberTotalKey(dateMemberTotalKey);
-        staffActivityDateMemberTotalVo.setDateMemberTotalValue(dateMemberTotalValue);
         // 返回结果对象
         return staffActivityDateMemberTotalVo;
     }
 
     /**
-     * @description  员工端获客人数
-     * @author  jqs
-     * @date    2023/7/17 18:42
      * @param staffTotalDto
-     * @return  StaffActivityDateMemberTotalVo
+     * @return StaffActivityDateMemberTotalVo
+     * @description 员工端获客人数
+     * @author jqs
+     * @date 2023/7/17 18:42
      */
     @Override
     public StaffActivityDateMemberTotalVo getStaffActivityMemberTotal(StaffTotalDto staffTotalDto) {
         // 创建返回对象
         StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo();
-        // 查询数据库获取数据
-        List<MgtMapIntTotalVo> mgtMapIntTotalVoList = orderMapper.getStaffActivityMemberTotal(staffTotalDto);
-        // 将查询结果转为Map
-        Map<String, Integer> map = new HashMap<>();
-        if (mgtMapIntTotalVoList != null && !mgtMapIntTotalVoList.isEmpty()) {
-            map = mgtMapIntTotalVoList.stream()
-                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
+        if(staffTotalDto.getActivityFrom()==1){
+            MerTotalDto merTotalDto = new MerTotalDto();
+            merTotalDto.setAgeType(staffTotalDto.getAgeType());
+            if(staffTotalDto.getAgeType()!=null){
+                List<Long> userIdList = remoteMemberService.listUserIdByAgeType(staffTotalDto.getAgeType()).getData();
+                staffTotalDto.setUserIdList(userIdList);
+            }
+            // 查询数据库获取数据
+            List<MgtMapIntTotalVo> mgtMapIntTotalVoList = orderMapper.getStaffActivityMemberTotal(staffTotalDto);
+            // 将查询结果转为Map
+            Map<String, Integer> map = new HashMap<>();
+            if (mgtMapIntTotalVoList != null && !mgtMapIntTotalVoList.isEmpty()) {
+                map = mgtMapIntTotalVoList.stream()
+                        .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
+            }
+            // 获取日期范围
+            List<String> dateList = getDateRange(staffTotalDto.getStartDate(), staffTotalDto.getEndDate());
+            int size = dateList.size();
+            // 创建日期和成员总数的数组
+            String[] dateMemberTotalKey = new String[size];
+            Integer[] dateMemberTotalValue = new Integer[size];
+            // 遍历日期列表,设置日期和成员总数的数组
+            String str;
+            Integer value;
+            for (int i = 0; i < size; i++) {
+                str = dateList.get(i);
+                dateMemberTotalKey[i] = str;
+                value = map.get(str);
+                dateMemberTotalValue[i] = (value != null) ? value : 0;
+            }
+            // 设置返回对象的日期和成员总数数组
+            staffActivityDateMemberTotalVo.setDateMemberTotalKey(dateMemberTotalKey);
+            staffActivityDateMemberTotalVo.setDateMemberTotalValue(dateMemberTotalValue);
         }
-        // 获取日期范围
-        List<String> dateList = getDateRange(staffTotalDto.getStartDate(), staffTotalDto.getEndDate());
-        int size = dateList.size();
-        // 创建日期和成员总数的数组
-        String[] dateMemberTotalKey = new String[size];
-        Integer[] dateMemberTotalValue = new Integer[size];
-        // 遍历日期列表,设置日期和成员总数的数组
-        String str;
-        Integer value;
-        for (int i = 0; i < size; i++) {
-            str = dateList.get(i);
-            dateMemberTotalKey[i] = str;
-            value = map.get(str);
-            dateMemberTotalValue[i] = (value != null) ? value : 0;
-        }
-        // 设置返回对象的日期和成员总数数组
-        staffActivityDateMemberTotalVo.setDateMemberTotalKey(dateMemberTotalKey);
-        staffActivityDateMemberTotalVo.setDateMemberTotalValue(dateMemberTotalValue);
         // 返回结果对象
         return staffActivityDateMemberTotalVo;
     }
 
     /**
-     * @description  获取时间段日期
-     * @author  jqs
-     * @date    2023/7/17 19:11
      * @param startDate
      * @param endDate
-     * @return  List<String>
+     * @return List<String>
+     * @description 获取时间段日期
+     * @author jqs
+     * @date 2023/7/17 19:11
      */
     public static List<String> getDateRange(String startDate, String endDate) {
         List<String> dateList = new ArrayList<>();
@@ -3952,50 +4573,87 @@
     }
 
     /**
-     * @description  检查订单状态定时任务
-     * @author  jqs
-     * @date    2023/7/25 14:40
      * @param
-     * @return  void
+     * @return void
+     * @description 检查订单状态定时任务
+     * @author jqs
+     * @date 2023/7/25 14:40
      */
     @Override
-    public void checkOrderStatus(){
+    public void checkOrderStatus() {
         Integer delayTime = 30;
-        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
+        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
             delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
         }
         delayTime = delayTime + 5;
-        Date checkTime = DateUtils.addMinutes(new Date(),-delayTime);
+        Date checkTime = DateUtils.addMinutes(new Date(), -delayTime);
         LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(Order::getDelFlag,0);
-        queryWrapper.lt(Order::getCreateTime,checkTime);
-        queryWrapper.eq(Order::getOrderStatus,1);
+        queryWrapper.eq(Order::getDelFlag, 0);
+        queryWrapper.lt(Order::getCreateTime, checkTime);
+        queryWrapper.eq(Order::getOrderStatus, 1);
         List<Order> orderList = this.list(queryWrapper);
-        if(orderList!=null&&!orderList.isEmpty()){
-            for(Order order: orderList){
+        if (orderList != null && !orderList.isEmpty()) {
+            for (Order order : orderList) {
                 autoTimeCancelOrder(order);
             }
         }
     }
 
-    private void autoTimeCancelOrder(Order order){
+    @Override
+    public void profitSharingBack(ProfitSharingNotifyResult result) {
+
+        try {
+            String outOrderNo = result.getOutOrderNo();
+            ProfitSharing profitSharing = profitSharingService.getById(outOrderNo);
+            if(null != profitSharing){
+                profitSharing.setWxOrderId(result.getOrderId());
+                profitSharing.setFinishTime(result.getSuccessTime());
+                profitSharing.setFinishFlag(1);
+
+                profitSharingService.saveOrUpdate(profitSharing);
+            }
+        } catch (Exception e){
+
+            log.error("==分账回成功回调操作====【{}】========={}", result.getOutOrderNo(), e.getMessage());
+        }
+    }
+
+    @Override
+    public void orderRefundBack(RefundNotifyResult result) {
+        try {
+            String outRefundNo = result.getOutRefundNo();
+            String refundStatus = result.getRefundStatus();
+            OrderRefund orderRefund = orderRefundService.getById(outRefundNo);
+            if(null != orderRefund){
+                orderRefund.setWxRefundId(result.getRefundId());
+                orderRefund.setBackTime(result.getSuccessTime());
+                orderRefund.setRefundStatus(IDict.getCodeByText(RefundStatusEnum.class, refundStatus));
+                orderRefundService.saveOrUpdate(orderRefund);
+            }
+        } catch (Exception e){
+
+            log.error("==退款回成功回调操作====【{}】========={}", result.getOutRefundNo(), e.getMessage());
+        }
+    }
+
+    private void autoTimeCancelOrder(Order order) {
         String orderId = order.getOrderId();
         order.setOrderStatus(0);
         order.setCancelTime(new Date());
         this.saveOrUpdate(order);
         //活动订单回退库存
-        if(order.getOrderFrom()==2){
+        if (order.getOrderFrom() == 2) {
             List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
-            if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){
-                for(OrderGoods orderGoods : orderGoodsList){
+            if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
+                for (OrderGoods orderGoods : orderGoodsList) {
                     //redis库存控制极简版
-                    String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId();
+                    String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
                     RLock redissonLock = redissonClient.getLock(goodsLock);
-                    try{
+                    try {
                         redissonLock.lock(30, TimeUnit.SECONDS);
-                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId());
-                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum());
-                    }finally{
+                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId());
+                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum());
+                    } finally {
                         redissonLock.unlock();
                     }
                     //改变活动库存
@@ -4016,16 +4674,16 @@
                     remoteActivityService.delActivityRecord(activityRecord);
                 }
             }
-        }else{
-            if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){
+        } else {
+            if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) {
                 //回退优惠券
                 List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
-                if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) {
+                if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
                     StringJoiner memberCouponSJ = new StringJoiner(",");
                     for (OrderGoods orderGoods : orderGoodsList) {
                         memberCouponSJ.add(orderGoods.getCouponId());
                     }
-                    if(memberCouponSJ!=null){
+                    if (memberCouponSJ != null) {
                         remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
 
                     }
@@ -4038,12 +4696,101 @@
      * @description  获取商户订单统计
      * @author  jqs
      * @date    2023/8/4 10:25
-     * @param mgtShopOrderPageDto
+     * @param mgtShopAllOrderPageDto
      * @return  MgtShopAllOrderTotal
      */
     @Override
-    public MgtShopAllOrderTotal getMgtShopAllOrderTotal(MgtShopOrderPageDto mgtShopOrderPageDto){
-        MgtShopAllOrderTotal shopAllOrderTotal = orderMapper.getMgtShopAllOrderTotal(mgtShopOrderPageDto);
+    public MgtShopAllOrderTotal getMgtShopAllOrderTotal(MgtShopAllOrderPageDto mgtShopAllOrderPageDto){
+        MgtShopAllOrderTotal shopAllOrderTotal = orderMapper.getMgtShopAllOrderTotal(mgtShopAllOrderPageDto);
         return shopAllOrderTotal;
     }
+
+    /**
+     * 分页获取会员消费记录
+     * @param merOrderPageDto
+     * @return
+     */
+    @Override
+    public List<MerOrderPageVo> pageMerMemberPayOrder(Page page,MerMemberNoClearOrderDto merOrderPageDto){
+        List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerMemberPayOrder(page, merOrderPageDto);
+        if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) {
+            Long userId;
+            Member member;
+            Integer orderFrom;
+            String orderFromDesc;
+            BigDecimal zeroBig = new BigDecimal("0.00");
+            StringJoiner userIdSj = new StringJoiner(",");
+            for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
+                userId = merOrderPageVo.getUserId();
+                userIdSj.add(userId.toString());
+                orderFrom = merOrderPageVo.getOrderFrom();
+                if (orderFrom != null) {
+                    if (orderFrom == 1) {
+                        orderFromDesc = "商城订单";
+                    } else {
+                        orderFromDesc = "线下创建";
+                    }
+                } else {
+                    orderFromDesc = "商城订单";
+                }
+                merOrderPageVo.setOrderFromDesc(orderFromDesc);
+                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<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){
+                    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()+"缺少用户");
+                }
+            }
+        }
+        return merOrderPageVoList;
+    }
+
+    /**
+     * @description  获取销售排行
+     * @author  jqs
+     * @date    2023/8/24 18:00
+     * @param shopIdList
+     * @return  List<MgtMapIntTotalVo>
+     */
+    @Override
+    public List<MgtMapBigTotalVo> shopSalesRank(List<Long> shopIdList){
+        return orderMapper.shopSalesRank(shopIdList);
+    }
+
+    /**
+     * @description  获取商户服务统计
+     * @author  jqs
+     * @date    2023/8/24 18:28
+     * @param shopId
+     * @return  MerHomeShopTotalVo
+     */
+    @Override
+    public MerHomeShopTotalVo getShopServiceTotal(Long shopId){
+        MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId);
+        return serviceTotalVo;
+    }
+
+    /**
+     * @description  获取区域统计
+     * @author  jqs
+     * @date    2023/8/25 11:49
+     * @param shopIdList
+     * @return  AgencyTotalVo
+     */
+    @Override
+    public AgencyTotalVo getAgencyTotalVo(List<Long> shopIdList){
+        AgencyTotalVo agencyTotalVo = orderMapper.getAgencyTotalVo(shopIdList);
+        return agencyTotalVo;
+    }
 }

--
Gitblit v1.7.1