From 58d3e3d9d6a129c687044eef0418def8ad6e7cad Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期日, 27 八月 2023 19:10:27 +0800
Subject: [PATCH] bug

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java |  442 ++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 327 insertions(+), 115 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 0971266..27c19ec 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
@@ -1,6 +1,7 @@
 package com.ruoyi.order.service.impl.order;
 
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -21,6 +22,7 @@
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.utils.CodeFactoryUtil;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.order.config.WxPayConfiguration;
 import com.ruoyi.order.domain.dto.*;
 import com.ruoyi.order.domain.pojo.account.OrderPayment;
 import com.ruoyi.order.domain.pojo.account.OrderRefund;
@@ -52,6 +54,7 @@
 import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
 import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
+import com.ruoyi.system.api.domain.poji.shop.ShopProportionVo;
 import com.ruoyi.system.api.domain.poji.sys.SysUser;
 import com.ruoyi.system.api.domain.vo.*;
 import com.ruoyi.system.api.service.*;
@@ -63,6 +66,8 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -152,6 +157,10 @@
     @Override
     public AppSureOrderVo buyGoods(AppSureOrderDto appSureOrderDto) {
         Long userId = appSureOrderDto.getUserId();
+        Shop shop = remoteShopService.getShop(appSureOrderDto.getShopId()).getData();
+        if(shop!=null&&shop.getShopStatus()!=1){
+            throw new ServiceException(AppErrorConstant.SHOP_CLOSED);
+        }
         // 初始化订单对象
         AppSureOrderVo appSureOrderVo = new AppSureOrderVo();
         // 初始化订单商品列表
@@ -410,6 +419,10 @@
     @Override
     public AppPanicBuyVo panicBuyGoods(AppPanicBuyDto appPanicBuyDto) {
         Long userId = appPanicBuyDto.getUserId();
+        Shop shop = remoteShopService.getShop(appPanicBuyDto.getShopId()).getData();
+        if(shop!=null&&shop.getShopStatus()!=1){
+            throw new ServiceException(AppErrorConstant.SHOP_CLOSED);
+        }
         AppPanicBuyVo appPanicBuyVo = new AppPanicBuyVo();
         String activityId = appPanicBuyDto.getActivityId();
         String goodsId = appPanicBuyDto.getGoodsId();
@@ -747,42 +760,42 @@
         }
         appPlaceOrderVo.setOrderId(orderId);
         appPlaceOrderVo.setOrderNo(orderNo);
-
+        //商品数据
         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 (StringUtils.isNotBlank(memberCouponSJ.toString())) {
             remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
         }
-        //生成自动取消订单延时任务
-        Integer delayTime = 30;
-        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
-            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
+        if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.ZERO)>0){
+            String outTradeNo = IdUtils.simpleUUID();
+            // 保存订单 交易流水
+            order.setOutTradeNo(outTradeNo);
+            this.saveOrUpdate(order);
+            Integer delayTime = 30;
+            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
+                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
+            }
+            appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
+            // 小程序微信下单支付
+            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo,
+                    orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
+                    appPlaceOrderDto.getSpbillCreateIp(), goodsNameList,1);
+            //生成自动取消订单延时任务
+            String payStr = appPlaceOrderVo.getAppId()+"-"+appPlaceOrderVo.getTimeStamp()+"-"+appPlaceOrderVo.getNonceStr()+"-"+appPlaceOrderVo.getPackageStr()+"-"+appPlaceOrderVo.getSignType()+"-"+appPlaceOrderVo.getSignType()+"-"+appPlaceOrderVo.getPaySign();
+            redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, payStr , delayTime.longValue(), TimeUnit.MINUTES);
+            DelayTask delayTask = new DelayTask();
+            delayTask.setDelFlag(0);
+            delayTask.setCreateTime(new Date());
+            delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
+            delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
+            remoteConfigService.addDelayTask(delayTask);
+        }else{
+            order.setOrderStatus(2);
+            this.saveOrUpdate(order);
         }
-        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.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
-        remoteConfigService.addDelayTask(delayTask);
-        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
 
         return appPlaceOrderVo;
     }
@@ -826,6 +839,7 @@
             request.setNotifyUrl(config.getNotifyUrl());
             // 结算信息
             PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo();
+            // TODO 分账处理
             if(orderFrom==2){
                 settleInfo.setProfitSharing(true);
             }else{
@@ -840,7 +854,10 @@
             amount.setTotal(totalFee);
             amount.setCurrency("CNY");
             request.setAmount(amount);
-
+            Date endTime = appPlaceOrderVo.getEndTime();
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
+            String rfc3339Format = formatter.format(endTime);
+            request.setTimeExpire(rfc3339Format);
             // 支付者
             PartnerTransactionsRequest.Payer payer = new PartnerTransactionsRequest.Payer();
             payer.setSpOpenid(openid);
@@ -1151,18 +1168,34 @@
         goodsNameList.add(orderGoods.getGoodsName());
 
 
-        if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){
+        if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.ZERO)>0){
 
             String outTradeNo = IdUtils.simpleUUID();
-
             // 保存订单 交易流水
             order.setOutTradeNo(outTradeNo);
             this.saveOrUpdate(order);
-
+            Integer delayTime = 30;
+            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
+                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
+            }
+            appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
             // 小程序微信下单支付
             createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), orderNo,
                     orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(),
                     appPlaceActivityDto.getSpbillCreateIp(), goodsNameList,2);
+            //生成自动取消订单延时任务
+            String payStr = appPlaceOrderVo.getAppId()+"-"+appPlaceOrderVo.getTimeStamp()+"-"+appPlaceOrderVo.getNonceStr()+"-"+appPlaceOrderVo.getPackageStr()+"-"+appPlaceOrderVo.getSignType()+"-"+appPlaceOrderVo.getSignType()+"-"+appPlaceOrderVo.getPaySign();
+            redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, payStr , delayTime.longValue(), TimeUnit.MINUTES);
+            DelayTask delayTask = new DelayTask();
+            delayTask.setDelFlag(0);
+            delayTask.setCreateTime(new Date());
+            delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
+            delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
+            remoteConfigService.addDelayTask(delayTask);
+
+        }else{
+            order.setOrderStatus(2);
+            this.saveOrUpdate(order);
         }
         //生成活动参加记录
         ActivityRecord activityRecord = new ActivityRecord();
@@ -1177,19 +1210,6 @@
         activityRecord.setGoodsId(orderGoods.getGoodsId());
         activityRecord.setActivityMoney(activityGoodsGetVo.getActivityPrice());
         remoteActivityService.addActivityRecord(activityRecord);
-        //生成自动取消订单延时任务
-        Integer delayTime = 30;
-        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.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
-        remoteConfigService.addDelayTask(delayTask);
-        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
         return appPlaceOrderVo;
     }
 
@@ -1298,6 +1318,47 @@
         } else {
             throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER);
         }
+    }
+
+    /**
+     * @description  支付订单
+     * @author  jqs
+     * @date    2023/8/27 15:26
+     * @param orderId
+     * @return  AppPlaceOrderVo
+     */
+    @Override
+    public AppPlaceOrderVo payOrder(String orderId){
+        Order order = this.getById(orderId);
+        if(order.getOrderStatus()!=1){
+            throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER);
+        }
+        String payStr = redisService.getCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+orderId);
+        if(StringUtils.isBlank(payStr)){
+            throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER);
+        }
+        Integer delayTime = 30;
+        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
+            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
+        }
+        AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo();
+        OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId);
+        String[] payArr = payStr.split("-");
+        appPlaceOrderVo.setOrderId(order.getOrderId());
+        appPlaceOrderVo.setOrderNo(order.getOrderNo());
+        appPlaceOrderVo.setPayType(order.getPayType());
+        appPlaceOrderVo.setPayMoney(order.getPayMoney());
+        appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
+        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
+        appPlaceOrderVo.setAppId(payArr[0]);
+        appPlaceOrderVo.setMchId(orderPayment.getSubMchId());
+        appPlaceOrderVo.setTimeStamp(payArr[1]);
+        appPlaceOrderVo.setNonceStr(payArr[2]);
+        appPlaceOrderVo.setPackageStr(payArr[3]);
+        appPlaceOrderVo.setSignType(payArr[4]);
+        appPlaceOrderVo.setPaySign(payArr[5]);
+        appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId());
+        return appPlaceOrderVo;
     }
 
     /**
@@ -1548,9 +1609,10 @@
         merVerifyOrderVo.setUserName(member.getRealName());
         merVerifyOrderVo.setUserMobile(member.getMobile());
         merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
-        //
+        // TODO  活动才分账
         if (order.getOrderFrom() == 2) {
-            // profitsSharingService.applyProfitSharing();
+            // 活动才分账
+            submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney());
         }
 
         //创建支付记录
@@ -1563,12 +1625,11 @@
             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) {
+    private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney) {
         String sendMessage = "";
         String resultMessage = "";
         try {
@@ -1582,51 +1643,55 @@
             R<String> resultMch = remoteShopService.getShopSubMchId(shopId);
             String subMchId = resultMch.getData();
             if (!StringUtils.isEmpty(subMchId)) {
-
+                WxPayConfig config = wxService.getConfig();
 
                 R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(shopId);
                 ShopProportionVo shopProportion = resultShopProportion.getData();
                 if (null != shopProportion) {
                     ProfitSharingRequest request = new ProfitSharingRequest();
+                    request.setAppid(config.getAppId());
                     request.setSubMchid(subMchId);
                     request.setTransactionId(transactionId);
-                    request.setOutOrderNo(orderNo);
-                    List<Receiver> receiverList = new ArrayList<>();
+                    request.setOutOrderNo(IdUtils.simpleUUID());
+                    List<ProfitSharingRequest.Receiver> receiverList = new ArrayList<>();
 
                     String description = "订单:" + orderNo + " 平台抽取佣金";
+                    //获取商户分成
                     BigDecimal proportionPercent = shopProportion.getProportionPercent();
                     if (null == proportionPercent) {
                         proportionPercent = BigDecimal.ZERO;
                     }
+                    //平台分成
+                    proportionPercent = new BigDecimal("100.00").subtract(proportionPercent);
+                    if(proportionPercent.compareTo(BigDecimal.ZERO)>0){
+                        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) {
+                            // 分账创建
+                            ProfitSharingRequest.Receiver receiver = new ProfitSharingRequest.Receiver();
+                            receiver.setType("MERCHANT_ID");
+                            receiver.setReceiverAccount(platformTyMacId);
+                            receiver.setAmount(amount);
+                            receiver.setDescription(description);
 
-                    ProfitSharingResult result = new ProfitSharingResult();
-                    result.setOutOrderNo(orderNo);
-                    result.setStatus("FINISHED");
+                            receiverList.add(receiver);
+                            request.setReceivers(receiverList);
+                            // 分账完成
+                            request.setFinish(true);
+                            result = wxService.getEcommerceService().profitSharing(request);
+                        }
 
-                    // 计算分成金额
-                    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);
+                        // 创建分账记录
+                        profitSharingService.saveProfitSharing(shopId, orderId, orderMoney, result);
 
-                        receiverList.add(receiver);
-                        request.setReceivers(receiverList);
-                        // 分账完成
-                        request.setFinish(true);
-                        result = wxService.getEcommerceService().profitSharing(request);
+                        // 保存请求信息
+                        sendMessage = JSONObject.toJSONString(request);
+                        resultMessage = JSONObject.toJSONString(result);
                     }
-
-                    // 创建分账记录
-                    profitSharingService.saveProfitSharing(shopId, orderId, orderMoney, result);
-
-                    // 保存请求信息
-                    sendMessage = JSONObject.toJSONString(request);
-                    resultMessage = JSONObject.toJSONString(result);
                 } else {
                     resultMessage = String.format("订单分账:%s 获取商户分成失败", orderNo);
                     log.info(resultMessage);
@@ -1643,7 +1708,7 @@
 
         // 保存分账信息
         paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage);
-    }*/
+    }
 
     /**
      * @param merVerifyCouponDto
@@ -2739,22 +2804,10 @@
      */
     @Override
     public MgtTotalOrderTotalVo getTotalOrderTotal(MgtBaseShopDto mgtBaseShopDto) {
+        //订单数量 订单金额
         MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getTotalOrderTotalOrderFrom(mgtBaseShopDto);
         //MgtTotalOrderTotalVo mgtTotalOrderTotalVoGoodsType = orderMapper.getTotalOrderTotalGoodsType(mgtBaseShopDto);
-        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto);
-        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
-            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
-            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
-            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
-            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
-                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
-                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
-                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
-            }
-            mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey);
-            mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue);
-            mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue);
-        }
+
         //获取商品分类销售数据
         List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listTotalOrderTotalGoodsType(mgtBaseShopDto);
         List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
@@ -2805,6 +2858,26 @@
             orderFromList = bigListRemoveNull(orderFromList);
             mgtTotalOrderTotalVo.setOrderFromRankList(orderFromList);
         }
+        //订单分布
+        //日期全部时固定为5天
+        if(StringUtils.isBlank(mgtBaseShopDto.getStartDate())){
+            mgtBaseShopDto.setStartDate(DateUtils.getDate());
+            mgtBaseShopDto.setEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
+        }
+        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto);
+        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
+            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
+            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
+            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
+            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
+                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
+                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
+                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
+            }
+            mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey);
+            mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue);
+            mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue);
+        }
         return mgtTotalOrderTotalVo;
     }
 
@@ -2849,8 +2922,14 @@
      */
     @Override
     public MgtTotalActivityTotalVo getTotalActivityTotal(MgtBaseShopDto mgtBaseShopDto) {
-        //获取基础统计
+        //获取基础统计 总订单数 订单金额 参与人数
         MgtTotalActivityTotalVo totalActivityTotalVo = orderMapper.getTotalActivityTotal(mgtBaseShopDto);
+        //获客人数
+        MgtTotalActivityTotalVo totalActivityMemberTotalVo = orderMapper.getTotalActivityMemberTotal(mgtBaseShopDto);
+        totalActivityTotalVo.setOrderPerson(totalActivityMemberTotalVo.getOrderPerson());
+        totalActivityTotalVo.setCyclePerson(totalActivityMemberTotalVo.getCyclePerson());
+        totalActivityTotalVo.setServicePerson(totalActivityMemberTotalVo.getServicePerson());
+        totalActivityTotalVo.setExperiencePerson(totalActivityMemberTotalVo.getExperiencePerson());
         //获取商品分类销售数据
         List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listTotalActivityTotalGoodsType(mgtBaseShopDto);
         if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
@@ -2896,7 +2975,13 @@
             totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
             totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
         }
+
         //获取订单分布
+        //日期全部时固定为5天
+        if(StringUtils.isBlank(mgtBaseShopDto.getStartDate())){
+            mgtBaseShopDto.setStartDate(DateUtils.getDate());
+            mgtBaseShopDto.setEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
+        }
         List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalActivityTotal(mgtBaseShopDto);
         if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
             String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
@@ -2911,6 +2996,31 @@
             totalActivityTotalVo.setOrderTotalValue(orderTotalValue);
             totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue);
         }
+        //参与人数
+        List<MgtMapIntTotalVo> joinList = orderMapper.getActivityMemberTotal(mgtBaseShopDto);
+        // 将查询结果转为Map
+        Map<String, Integer> mgtMapIntTotalVoMap = new HashMap<>();
+        if (joinList != null && !joinList.isEmpty()) {
+            mgtMapIntTotalVoMap = joinList.stream()
+                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
+        }
+        // 获取日期范围
+        List<String> dateList = getDateRange(mgtBaseShopDto.getStartDate(), mgtBaseShopDto.getEndDate());
+        int size = dateList.size();
+        // 创建日期和成员总数的数组
+        String[] joinMemberTotalKey = new String[size];
+        Integer[] joinMemberTotalValue = new Integer[size];
+        // 遍历日期列表,设置日期和成员总数的数组
+        String str;
+        Integer value;
+        for (int i = 0; i < size; i++) {
+            str = dateList.get(i);
+            joinMemberTotalKey[i] = str;
+            value = mgtMapIntTotalVoMap.get(str);
+            joinMemberTotalValue[i] = (value != null) ? value : 0;
+        }
+        totalActivityTotalVo.setJoinMemberTotalKey(joinMemberTotalKey);
+        totalActivityTotalVo.setJoinMemberTotalValue(joinMemberTotalValue);
         return totalActivityTotalVo;
     }
 
@@ -2921,7 +3031,7 @@
      * @author jqs
      * @date 2023/6/20 9:56
      */
-    @Override
+    /*@Override
     public MgtTotalActivityTotalVo getTotalActivityAgeRank(MgtActivityAgeDto mgtActivityAgeDto) {
         List<Long> userIds = orderMapper.getUserIdAgeRank(mgtActivityAgeDto);
         mgtActivityAgeDto.setUserIds(userIds);
@@ -2943,7 +3053,7 @@
         totalActivityTotalVo.setActivityAgeKey(activityAgeKey);
         totalActivityTotalVo.setActivityAgeValue(activityAgeValue);
         return totalActivityTotalVo;
-    }
+    }*/
 
     /**
      * @param mgtBaseShopDto
@@ -3063,23 +3173,13 @@
             }
         }
         List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
+        if(mgtBasePlatformDto.getShopId()!=null){
+            shopIdList = new ArrayList<>();
+            shopIdList.add(mgtBasePlatformDto.getShopId());
+        }
         mgtBasePlatformDto.setShopIdList(shopIdList);
         //获取基础统计
         MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getPlTotalOrderTotalOrderFrom(mgtBasePlatformDto);
-        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalOrderTotal(mgtBasePlatformDto);
-        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
-            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
-            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
-            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
-            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
-                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
-                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
-                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
-            }
-            mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey);
-            mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue);
-            mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue);
-        }
         //获取商品分类销售数据
         List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalOrderTotalGoodsType(mgtBasePlatformDto);
         List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
@@ -3136,6 +3236,27 @@
             orderFromList = bigListRemoveNull(orderFromList);
             mgtTotalOrderTotalVo.setOrderFromRankList(orderFromList);
         }
+        //订单分布
+        //日期全部时固定为5天
+        if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){
+            mgtBasePlatformDto.setStartDate(DateUtils.getDate());
+            mgtBasePlatformDto.setEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
+        }
+        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalOrderTotal(mgtBasePlatformDto);
+        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
+            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
+            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
+            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
+            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
+                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
+                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
+                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
+            }
+            MerOrderDistributionTotalVo merOrderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
+            mgtTotalOrderTotalVo.setOrderTotalKey(merOrderDistributionTotalVo.getOrderTotalKey());
+            mgtTotalOrderTotalVo.setOrderTotalValue(merOrderDistributionTotalVo.getOrderTotalValue());
+            mgtTotalOrderTotalVo.setOrderMoneyValue(merOrderDistributionTotalVo.getOrderMoneyValue());
+        }
         return mgtTotalOrderTotalVo;
     }
 
@@ -3148,6 +3269,9 @@
      */
     @Override
     public MgtPlTotalActivityTotalVo getPlTotalActivityTotal(MgtBasePlatformDto mgtBasePlatformDto) {
+        if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){
+            return new MgtPlTotalActivityTotalVo();
+        }
         //获取需要关联的用户id集合
         if (mgtBasePlatformDto.getDeptId() != null) {
             List<Long> userIdList = new ArrayList<>();
@@ -3167,6 +3291,12 @@
         mgtBasePlatformDto.setShopIdList(shopIdList);
         //获取基础统计
         MgtPlTotalActivityTotalVo totalActivityTotalVo = orderMapper.getPlTotalActivityTotal(mgtBasePlatformDto);
+        //获客人数
+        MgtPlTotalActivityTotalVo totalActivityMemberTotalVo = orderMapper.getPlTotalActivityMemberTotal(mgtBasePlatformDto);
+        totalActivityTotalVo.setOrderPerson(totalActivityMemberTotalVo.getOrderPerson());
+        totalActivityTotalVo.setCyclePerson(totalActivityMemberTotalVo.getCyclePerson());
+        totalActivityTotalVo.setServicePerson(totalActivityMemberTotalVo.getServicePerson());
+        totalActivityTotalVo.setExperiencePerson(totalActivityMemberTotalVo.getExperiencePerson());
         //获取商品分类销售数据
         List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalActivityTotalGoodsType(mgtBasePlatformDto);
         List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
@@ -3209,6 +3339,11 @@
             totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
             totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
         }
+        //日期全部时固定为5天
+        if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){
+            mgtBasePlatformDto.setStartDate(DateUtils.getDate());
+            mgtBasePlatformDto.setEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
+        }
         //获取订单分布
         List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalActivityTotal(mgtBasePlatformDto);
         if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
@@ -3236,18 +3371,28 @@
         mgtBaseBathDto.setIds(joinedString);
         List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData();
         // 将MgtSimpleShopVoList转换为Map<Long, MgtSimpleShopVo>,以便后续根据shopId获取对应的MgtSimpleShopVo
-        Map<Long, MgtSimpleShopVo> map = simpleShopVoList.stream()
+        Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream()
                 .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
         //商户活动次数排名
         List<MgtMapBigTotalVo> shopActivityRank = orderMapper.listPlTotalShopActivityRank(mgtBasePlatformDto);
         if (shopActivityRank != null && shopActivityRank.size() > 0) {
             shopActivityRank = bigListRemoveNull(shopActivityRank);
+            for(MgtMapBigTotalVo mgtMapBigTotalVo : shopActivityRank){
+                if(shopMap.get(mgtMapBigTotalVo.getMapKey())!=null){
+                    mgtMapBigTotalVo.setMapKey(shopMap.get(mgtMapBigTotalVo.getMapKey()).getShopName());
+                }
+            }
             totalActivityTotalVo.setShopSalesRankList(shopActivityRank);
         }
         //商户活动销售额排名
         List<MgtMapBigTotalVo> shopActivitySalesRank = orderMapper.listPlTotalShopActivitySalesRank(mgtBasePlatformDto);
         if (shopActivitySalesRank != null && shopActivitySalesRank.size() > 0) {
             shopActivitySalesRank = bigListRemoveNull(shopActivitySalesRank);
+            for(MgtMapBigTotalVo mgtMapBigTotalVo : shopActivitySalesRank){
+                if(shopMap.get(mgtMapBigTotalVo.getMapKey())!=null){
+                    mgtMapBigTotalVo.setMapKey(shopMap.get(mgtMapBigTotalVo.getMapKey()).getShopName());
+                }
+            }
             totalActivityTotalVo.setShopSalesRankList(shopActivitySalesRank);
         }
         //活动销售额排名
@@ -3256,6 +3401,57 @@
             activitySalesRank = bigListRemoveNull(activitySalesRank);
             totalActivityTotalVo.setActivitySalesRankList(activitySalesRank);
         }
+        MerTotalDto merTotalDto = new MerTotalDto();
+        merTotalDto.setAgeType(mgtBasePlatformDto.getAgeType());
+        if(mgtBasePlatformDto.getAgeType()!=null){
+            List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData();
+            mgtBasePlatformDto.setUserIdList(userIdList);
+        }
+        //参与人数
+        List<MgtMapIntTotalVo> joinList = orderMapper.getMgtActivityMemberTotal(mgtBasePlatformDto);
+        // 将查询结果转为Map
+        Map<String, Integer> mgtMapIntTotalVoMap = new HashMap<>();
+        if (joinList != null && !joinList.isEmpty()) {
+            mgtMapIntTotalVoMap = joinList.stream()
+                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
+        }
+        // 获取日期范围
+        List<String> dateList = getDateRange(mgtBasePlatformDto.getStartDate(), mgtBasePlatformDto.getEndDate());
+        int size = dateList.size();
+        // 创建日期和成员总数的数组
+        String[] joinMemberTotalKey = new String[size];
+        Integer[] joinMemberTotalValue = new Integer[size];
+        // 遍历日期列表,设置日期和成员总数的数组
+        String str;
+        Integer value;
+        for (int i = 0; i < size; i++) {
+            str = dateList.get(i);
+            joinMemberTotalKey[i] = str;
+            value = mgtMapIntTotalVoMap.get(str);
+            joinMemberTotalValue[i] = (value != null) ? value : 0;
+        }
+        totalActivityTotalVo.setJoinMemberTotalKey(joinMemberTotalKey);
+        totalActivityTotalVo.setJoinMemberTotalValue(joinMemberTotalValue);
+        //获客人数
+        List<MgtMapIntTotalVo> getList = orderMapper.getMgtActivityGetMemberTotal(mgtBasePlatformDto);
+        // 将查询结果转为Map
+        Map<String, Integer> getMemberMap = new HashMap<>();
+        if (getList != null && !getList.isEmpty()) {
+            getMemberMap = getList.stream()
+                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
+        }
+        // 创建日期和成员总数的数组
+        String[] getMemberTotalKey = new String[size];
+        Integer[] getMemberTotalValue = new Integer[size];
+        // 遍历日期列表,设置日期和成员总数的数组
+        for (int i = 0; i < size; i++) {
+            str = dateList.get(i);
+            joinMemberTotalKey[i] = str;
+            value = getMemberMap.get(str);
+            joinMemberTotalValue[i] = (value != null) ? value : 0;
+        }
+        totalActivityTotalVo.setGetMemberTotalKey(getMemberTotalKey);
+        totalActivityTotalVo.setGetMemberTotalValue(getMemberTotalValue);
         return totalActivityTotalVo;
     }
 
@@ -3266,7 +3462,7 @@
      * @author jqs
      * @date 2023/6/20 9:56
      */
-    @Override
+    /*@Override
     public MgtPlTotalActivityTotalVo getPlTotalActivityAgeRank(MgtPlActivityAgeDto mgtPlActivityAgeDto) {
         List<Long> userIds = orderMapper.getPlUserIdAgeRank(mgtPlActivityAgeDto);
         MgtActivityAgeDto mgtActivityAgeDto = new MgtActivityAgeDto();
@@ -3290,7 +3486,7 @@
         plTotalActivityTotalVo.setActivityAgeKey(activityAgeKey);
         plTotalActivityTotalVo.setActivityAgeValue(activityAgeValue);
         return plTotalActivityTotalVo;
-    }
+    }*/
 
     /**
      * @param verifyCode
@@ -3869,9 +4065,9 @@
     public void payBack(PartnerTransactionsResult transaction) {
 
         // Order order = this.getById(orderId);
-        // 更新订单状态 订单编号,就是 微信outTradeNo
-        String orderNo = transaction.getOutTradeNo();
-        Order order = this.getByOrderNo(orderNo);
+        // 更新订单状态 outTradeNo
+        String outTradeNo = transaction.getOutTradeNo();
+        Order order = this.getByOutTradeNo(outTradeNo);
         String orderId = order.getOrderId();
         order.setOrderStatus(2);
         order.setPayTime(new Date());
@@ -4009,6 +4205,14 @@
     public Order getByOrderNo(String orderNo) {
         LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(Order::getOrderNo, orderNo)
+                .last(" limit 1 ");
+        return this.getOne(queryWrapper);
+    }
+
+    @Override
+    public Order getByOutTradeNo(String outTradeNo) {
+        LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(Order::getOutTradeNo, outTradeNo)
                 .last(" limit 1 ");
         return this.getOne(queryWrapper);
     }
@@ -4166,9 +4370,11 @@
             remoteActivityService.changeActivityTotal(activityTotalChangeDto);
         }
 
+        log.info("用户取消订单退款, 检查退款");
         // 用户取消订单退款
         BigDecimal onlinePayMoney = order.getOnlinePayMoney();
         if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){
+            log.info("订单支付金额大于0,可发起退款");
             // 订单支付金额大于0,可发起退款
             orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund);
         }
@@ -4187,6 +4393,9 @@
             if (null == orderPayment) {
                 return;
             }
+
+            log.info("调用微信退款---发起退款");
+
             String subMchId = orderPayment.getSubMchId();
             WxPayConfig config = wxService.getConfig();
 
@@ -4197,7 +4406,8 @@
             request.setOutRefundNo(outRefundNo);
             request.setReason("用户取消订单");
             // 订单金额
-            int total = payMoney.multiply(new BigDecimal(100)).intValue();
+            int total = orderPayment.getPayMoney().multiply(new BigDecimal(100)).intValue();
+
             RefundsRequest.Amount amount = RefundsRequest.Amount.builder().refund(total).total(total).currency("CNY").build();
             request.setAmount(amount);
             request.setNotifyUrl(config.getNotifyUrl());
@@ -4213,6 +4423,8 @@
             // 返回参数
             String refundResponseJson = gson.toJson(result);
 
+            log.info("调用微信退款返回参数---{}", refundResponseJson);
+
             // 保存支付订单统一下单日志
             paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson);
 

--
Gitblit v1.7.1