bug
jiangqs
2023-08-31 dbff53150cdc807faa56c0d1a947d24b69f372b9
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1,13 +1,12 @@
package com.ruoyi.order.service.impl.order;
import com.alibaba.fastjson.JSONObject;
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;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.binarywang.wxpay.bean.ecommerce.*;
import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingRequest.Receiver;
import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult;
import com.github.binarywang.wxpay.config.WxPayConfig;
@@ -23,7 +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.MyWxPayConfig;
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;
@@ -50,6 +49,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;
@@ -61,13 +61,13 @@
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;
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.*;
@@ -129,10 +129,10 @@
    @Resource
    private PayRecordService payRecordService;
    @Autowired
    @Resource
    private RedissonClient redissonClient;
    @Autowired
    @Resource
    private WxPayService wxService;
    @Resource
@@ -157,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();
        // 初始化订单商品列表
@@ -174,7 +178,7 @@
                .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
        Boolean haveDeposit = false;
        for (Goods goods : goodsList) {
            if (goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) {
            if (goods.getSubscriptionFlag()==1&&goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) {
                haveDeposit = true;
            }
        }
@@ -229,6 +233,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());
@@ -285,9 +290,9 @@
            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) {
@@ -322,15 +327,19 @@
                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) {
                            if (entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) <= 0) {
                                appGoodsMemberCouponVoList.add(entity);
                            }
                            /*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) {
                            appGoodsMemberCouponVoList.add(entity);
                            /*if (entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0) {
                                appGoodsMemberCouponVoList.add(entity);
                            }
                            }*/
                        }
                    }
@@ -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();
@@ -454,6 +467,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());
@@ -555,6 +569,7 @@
        BigDecimal orderPayMoney = new BigDecimal("0.00");
        // 创建订单ID和订单号
        String orderId = IdUtils.simpleUUID();
        String orderNo = CodeFactoryUtil.getShopOrderNo();
        OrderGoods orderGoods;
        String orderGoodsId;
@@ -626,6 +641,10 @@
                        goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
                        useCoupon = 1;
                    }
                    if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){
                        goodsRealPrice = BigDecimal.ZERO;
                        discountMoney = goodsTotalPrice;
                    }
                }
                memberCouponSJ.add(memberCouponId);
            }
@@ -670,6 +689,7 @@
            orderGoods.setServiceNum(serviceNum);
            orderGoods.setGoodsType(goods.getGoodsType());
            orderGoods.setGoodsName(goods.getGoodsName());
            orderGoods.setGoodsTag(goods.getGoodsTags());
            orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            orderGoods.setGoodsPicture(goodsFile.getFileUrl());
            // 保存订单商品
@@ -704,13 +724,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) {
@@ -718,12 +739,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);
        // 更新用户商品类型
@@ -735,35 +760,42 @@
        }
        appPlaceOrderVo.setOrderId(orderId);
        appPlaceOrderVo.setOrderNo(orderNo);
        //商品数据
        String goodsName = "";
        if (null != goods) {
            goodsName = goods.getGoodsName();
        if (null != goodsNameList) {
            goodsName = String.join(",", goodsNameList);
        }
        // 小程序微信下单支付
        createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, orderNo,
                orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
                appPlaceOrderDto.getSpbillCreateIp(), goodsNameList);
        //减去优惠券
        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.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;
    }
@@ -774,17 +806,18 @@
     * @param userId
     * @param shopId
     * @param goodsName
     * @param orderNo
     * @param outTradeNo
     * @param orderId
     * @param payMoney
     * @param openid
     * @param payerClientIp
     * @param goodsNameList
     */
    private void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId,
                                 String goodsName, String orderNo,
                                 String goodsName, String outTradeNo,
                                 String orderId, BigDecimal payMoney,
                                 String openid, String payerClientIp, List<String> goodsNameList){
                                 String openid, String payerClientIp, List<String> goodsNameList,Integer orderFrom){
        try {
            // 创建支付订单
            R<String> resultMch = remoteShopService.getShopSubMchId(shopId);
@@ -803,11 +836,16 @@
            String description = goodsName + "-商品购买";
            request.setDescription(description);
            request.setOutTradeNo(orderNo);
            request.setOutTradeNo(outTradeNo);
            request.setNotifyUrl(config.getNotifyUrl());
            // 结算信息
            PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo();
            settleInfo.setProfitSharing(true);
            // TODO 分账处理
            if(orderFrom==2){
                settleInfo.setProfitSharing(true);
            }else{
                settleInfo.setProfitSharing(false);
            }
            settleInfo.setSubsidyAmount(BigDecimal.ZERO);
            request.setSettleInfo(settleInfo);
@@ -817,7 +855,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);
@@ -850,9 +891,10 @@
            paymentMessageService.savePaymentMessage("1", orderId, payRequestJson, payResponseJson);
            // 保存支付订单统一下单支付记录
            orderPaymentService.saveOrderPayment(userId, shopId, subMchId, orderId, payMoney,
            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());
        }
@@ -996,6 +1038,7 @@
        orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
        orderGoods.setServiceNum(serviceNum);
        orderGoods.setGoodsType(goods.getGoodsType());
        orderGoods.setGoodsTag(goods.getGoodsTags());
        orderGoods.setGoodsName(goods.getGoodsName());
        orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
        orderGoods.setGoodsPicture(goodsFile.getFileUrl());
@@ -1037,9 +1080,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);
@@ -1048,6 +1091,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);
@@ -1055,11 +1099,15 @@
            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);
        // 更新用户商品类型
@@ -1115,7 +1163,41 @@
        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.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(), outTradeNo,
                    orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(),
                    appPlaceActivityDto.getSpbillCreateIp(), goodsNameList,2);
            //生成自动取消订单延时任务
            String payStr = appPlaceOrderVo.getAppId()+"-"+appPlaceOrderVo.getTimeStamp()+"-"+appPlaceOrderVo.getNonceStr()+"-"+appPlaceOrderVo.getPackageStr()+"-"+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();
        activityRecord.setDelFlag(0);
@@ -1129,19 +1211,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;
    }
@@ -1158,14 +1227,20 @@
        List<AppUserOrderPageVo> appUserOrderPageVoList = orderMapper.pageUserOrder(page, appUserOrderPageDto);
        if (appUserOrderPageVoList != null && !appUserOrderPageVoList.isEmpty()) {
            Long shopId;
            String activityId;
            Shop shop;
            HashSet<Long> set = new HashSet<Long>();
            HashSet<Long> shopSet = new HashSet<Long>();
            HashSet<String> activitySet = new HashSet<String>();
            for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
                shopId = appUserOrderPageVo.getShopId();
                set.add(shopId);
                shopSet.add(shopId);
                if(appUserOrderPageVo.getOrderFrom()==2){
                    activityId = appUserOrderPageVo.getActivityId();
                    activitySet.add(activityId);
                }
            }
            Map<Long, Shop> shopMap = new HashMap<>();
            set.forEach(shopIdLong -> {
            shopSet.forEach(shopIdLong -> {
                Shop shopTemp = remoteShopService.getShop(shopIdLong).getData();
                shopMap.put(shopIdLong, shopTemp);
            });
@@ -1253,6 +1328,47 @@
    }
    /**
     * @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.getByUnpaidOrderId(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;
    }
    /**
     * 获取用户订单统计
     *
     * @param userId
@@ -1281,9 +1397,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;
    }
@@ -1297,6 +1419,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) {
@@ -1315,15 +1440,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());
@@ -1400,6 +1542,7 @@
                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());
@@ -1425,6 +1568,7 @@
                    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());
@@ -1444,33 +1588,54 @@
        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());
        //
        // TODO  活动才分账
        if (order.getOrderFrom() == 2) {
            // profitsSharingService.applyProfitSharing();
            // 活动才分账
            submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney());
        }
        //创建支付记录
        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);
        submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney());
        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);
        }
        //更新用户消费统计
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setConsumeTime(nowTime);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        return merVerifyOrderVo;
    }
@@ -1478,60 +1643,65 @@
        String sendMessage = "";
        String resultMessage = "";
        try {
            // TODO 核销完成 开始分账(平台收取服务费)
            // 核销完成 开始分账(平台收取服务费)
            OrderPayment payment = orderPaymentService.getByOrderId(orderId);
            String transactionId = payment.getTransactionId();
            String platformTyMacId = MyWxPayConfig.getPlatformTyMacId();
            // 平台特约商户号,用户平台收取服务费
            String platformTyMacId = WxPayConfiguration.getPlatformTyMacId();
            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);
@@ -1543,7 +1713,7 @@
        } catch (WxPayException e) {
            resultMessage = String.format("订单分账:%s 分账失败:%s", orderNo, e.getMessage());
            log.info(resultMessage);
            e.printStackTrace();
            throw new ServiceException(resultMessage);
        }
        // 保存分账信息
@@ -1561,22 +1731,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 -> {
@@ -1598,7 +1788,6 @@
                .collect(Collectors.toList());
        // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
        merVerifyCouponVo.setGoodsList(merCouponGoodsList);
        MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon();
        //生成服务
        ConsumerGoods consumerGoods;
        String consumerGoodsId;
@@ -1630,6 +1819,7 @@
            }
            consumerGoods.setUsedNum(0);
            consumerGoods.setGoodsType(goods.getGoodsType());
            consumerGoods.setGoodsTag(goods.getGoodsTags());
            consumerGoods.setCreateTime(new Date());
            consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData();
@@ -1638,7 +1828,20 @@
            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;
    }
@@ -1660,10 +1863,32 @@
            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) {
@@ -1721,15 +1946,17 @@
                break;
        }
        merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime());
        memberGiftRecord.setVerifyStatus(2);
        memberGiftRecord.setVerifyTime(new Date());
        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());
@@ -1751,8 +1978,10 @@
        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);
                }
            }
@@ -1772,9 +2001,9 @@
        order.setOffPayTime(new Date());
        order.setPayMoney(order.getPayMoney().add(merCloseOrderDto.getPayMoney()));
        if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) {
            order.setCloseFlag(0);
        } else {
            order.setCloseFlag(1);
        } else {
            order.setCloseFlag(0);
        }
        this.saveOrUpdate(order);
        //创建支付记录
@@ -1783,7 +2012,7 @@
        payRecord.setOrderId(order.getOrderId());
        payRecord.setPayMoney(merCloseOrderDto.getPayMoney());
        payRecord.setPayTime(new Date());
        payRecord.setPayType(2);
        payRecord.setPayType(merCloseOrderDto.getPayType());
        payRecordService.save(payRecord);
    }
@@ -1817,7 +2046,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);
@@ -1826,6 +2054,7 @@
                member.setRealName(name);
                member.setNickName(name);
                member.setBindingFlag(1);
                member.setBindingType(3);
                member.setRelationShopId(shopId);
                member.setRelationShopName(shop.getShopName());
                remoteMemberService.createNewMember(member);
@@ -1871,6 +2100,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();
@@ -1905,14 +2140,18 @@
                    } 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);
                        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) {
                goodsDeposit = new BigDecimal("0.00");
@@ -1924,6 +2163,7 @@
            couponDiscount = couponDiscount.add(discountMoney);
            orderPayDeposit = orderPayDeposit.add(goodsDeposit);
            orderPayMoney = orderPayMoney.add(goodsRealPrice);
            //创建OrderGoods
            orderGoods = new OrderGoods();
            orderGoodsId = IdUtils.simpleUUID();
@@ -1941,10 +2181,67 @@
            orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
            orderGoods.setServiceNum(serviceNum);
            orderGoods.setGoodsType(goods.getGoodsType());
            orderGoods.setGoodsTag(goods.getGoodsTags());
            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());
@@ -1975,92 +2272,32 @@
        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);
        order.setPayTime(nowTime);
        order.setUseTime(nowTime);
        order.setUseUserId(merNewOrderDto.getUserId());
        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 {
            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.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.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) {
            //绑定商户
@@ -2069,23 +2306,38 @@
            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());
        }
        //更新会员消费记录
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setConsumeTime(nowTime);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        //更新商户统计
        /*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);
    }
@@ -2097,10 +2349,12 @@
    @Override
    public List<MerOrderPageVo> pageMerOrder(Page page, MerOrderPageDto merOrderPageDto) {
        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())) {
                // 将用户ID转换成List<Long>类型
                List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(","))
                        .map(Long::parseLong)
                        .collect(Collectors.toList());
@@ -2108,6 +2362,8 @@
                merOrderPageDto.setMemberUserId(null);
            }
        }
        // 获取订单列表
        List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerOrder(page, merOrderPageDto);
        if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) {
            Long userId;
@@ -2116,13 +2372,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 = "线下创建";
                    }
@@ -2130,16 +2390,22 @@
                    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) {
                    merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName());
@@ -2159,13 +2425,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);
                }
            }
@@ -2330,7 +2598,7 @@
            }
        }
        MgtOrderTotal mgtOrderTotal = new MgtOrderTotal();
        MgtOrderTotal mgtOrderTotalFirst = orderMapper.totalOrderFirst();
        MgtOrderTotal mgtOrderTotalFirst = orderMapper.totalOrderFirst(mgtShopOrderPageDto);
        MgtOrderTotal mgtOrderTotalSecond = orderMapper.totalOrderSecond(mgtShopOrderPageDto);
        MgtOrderTotal mgtOrderTotalThird = orderMapper.totalOrderThird(mgtShopOrderPageDto);
        mgtOrderTotal.setOrderTotal(mgtOrderTotalFirst.getOrderTotal());
@@ -2410,7 +2678,9 @@
            // 遍历列表,设置店铺名称、用户名称和未支付金额
            for (MgtShopOrderPageVo mgtShopOrderPageVo : shopOrderPageVoList) {
                if (shopMap != null && !shopMap.isEmpty()) {
                    mgtShopOrderPageVo.setShopName(shopMap.get(mgtShopOrderPageVo.getShopId()).getShopName());
                    if(shopMap.get(mgtShopOrderPageVo.getShopId())!=null){
                        mgtShopOrderPageVo.setShopName(shopMap.get(mgtShopOrderPageVo.getShopId()).getShopName());
                    }
                }
                if (userMap != null && !userMap.isEmpty()) {
                    if (userMap.get(mgtShopOrderPageVo.getUserId()) != null) {
@@ -2535,6 +2805,8 @@
    @Override
    public MgtBulletinBoardVo boardOrderTotal() {
        MgtBulletinBoardVo mgtBulletinBoardVo = orderMapper.boardOrderTotal();
        Integer activityUserTotal = orderMapper.activityUserTotal();
        mgtBulletinBoardVo.setActivityUserTotal(activityUserTotal);
        return mgtBulletinBoardVo;
    }
@@ -2547,55 +2819,92 @@
     */
    @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<>();
        List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapIntTotalVo mgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            Boolean noCycle = true;
            Boolean noService = true;
            Boolean noExperience = true;
            Boolean noGoods = true;
            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());
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                    mgtTotalOrderTotalVo.setCycleTotal(mgtTotalOrderTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setCycleMoney(mgtTotalOrderTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noCycle= false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                    mgtTotalOrderTotalVo.setServiceTotal(mgtTotalOrderTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setServiceMoney(mgtTotalOrderTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noService= false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                    mgtTotalOrderTotalVo.setExperienceTotal(mgtTotalOrderTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setExperienceMoney(mgtTotalOrderTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noExperience = false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                    noGoods = false;
                }
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                //补充缺少类型
                if(noCycle){
                    mgtMapIntTotalVo = new MgtMapIntTotalVo();
                    mgtMapIntTotalVo.setMapKey("周期");
                    mgtMapIntTotalVo.setMapValue(0);
                    goodsTypeTotalList.add(mgtMapIntTotalVo);
                    mgtMapBigTotalVo = new MgtMapBigTotalVo();
                    mgtMapBigTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
                }
                if(noService){
                    mgtMapIntTotalVo = new MgtMapIntTotalVo();
                    mgtMapIntTotalVo.setMapKey("服务");
                    mgtMapIntTotalVo.setMapValue(0);
                    goodsTypeTotalList.add(mgtMapIntTotalVo);
                    mgtMapBigTotalVo = new MgtMapBigTotalVo();
                    mgtMapBigTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
                }
                if(noExperience){
                    mgtMapIntTotalVo = new MgtMapIntTotalVo();
                    mgtMapIntTotalVo.setMapKey("体验");
                    mgtMapIntTotalVo.setMapValue(0);
                    goodsTypeTotalList.add(mgtMapIntTotalVo);
                    mgtMapBigTotalVo = new MgtMapBigTotalVo();
                    mgtMapBigTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
                }
                if(noGoods){
                    mgtMapIntTotalVo = new MgtMapIntTotalVo();
                    mgtMapIntTotalVo.setMapKey("单品");
                    mgtMapIntTotalVo.setMapValue(0);
                    goodsTypeTotalList.add(mgtMapIntTotalVo);
                    mgtMapBigTotalVo = new MgtMapBigTotalVo();
                    mgtMapBigTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
                }
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            mgtTotalOrderTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
@@ -2612,6 +2921,26 @@
        if (orderFromList != null && orderFromList.size() > 0) {
            orderFromList = bigListRemoveNull(orderFromList);
            mgtTotalOrderTotalVo.setOrderFromRankList(orderFromList);
        }
        //订单分布
        //日期全部时固定为5天
        if(StringUtils.isBlank(mgtBaseShopDto.getStartDate())){
            mgtBaseShopDto.setEndDate(DateUtils.getDate());
            mgtBaseShopDto.setStartDate(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;
    }
@@ -2657,8 +2986,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) {
@@ -2671,40 +3006,95 @@
            totalActivityTotalVo.setExperienceTotal(0);
            totalActivityTotalVo.setExperienceMoney(BigDecimal.ZERO);
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapIntTotalVo mgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            Boolean noCycle = true;
            Boolean noService = true;
            Boolean noExperience = true;
            Boolean noGoods = true;
            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());
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                    totalActivityTotalVo.setCycleTotal(totalActivityTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setCycleMoney(totalActivityTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noCycle= false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                    totalActivityTotalVo.setServiceTotal(totalActivityTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setServiceMoney(totalActivityTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noService= false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                    totalActivityTotalVo.setExperienceTotal(totalActivityTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setExperienceMoney(totalActivityTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noExperience = false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                    noGoods = false;
                }
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            //补充缺少类型
            if(noCycle){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("周期");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("周期");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noService){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("服务");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("服务");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noExperience){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("体验");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("体验");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noGoods){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("单品");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("单品");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
            totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
        }
        //获取订单分布
        //日期全部时固定为5天
        if(StringUtils.isBlank(mgtBaseShopDto.getStartDate())){
            mgtBaseShopDto.setEndDate(DateUtils.getDate());
            mgtBaseShopDto.setStartDate(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()];
@@ -2719,6 +3109,71 @@
            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;
    }
    @Override
    public MgtTotalActivityTotalVo getTotalActivityJoinMemberTotal(MgtBaseShopDto mgtBaseShopDto) {
        MgtTotalActivityTotalVo totalActivityTotalVo = new MgtTotalActivityTotalVo();
        //日期全部时固定为5天
        if(StringUtils.isBlank(mgtBaseShopDto.getStartDate())){
            mgtBaseShopDto.setEndDate(DateUtils.getDate());
            mgtBaseShopDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
        }
        if(mgtBaseShopDto.getAgeType()!=null){
            List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBaseShopDto.getAgeType()).getData();
            mgtBaseShopDto.setUserIdList(userIdList);
        }
        //参与人数
        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;
    }
@@ -2729,7 +3184,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);
@@ -2751,7 +3206,7 @@
        totalActivityTotalVo.setActivityAgeKey(activityAgeKey);
        totalActivityTotalVo.setActivityAgeValue(activityAgeValue);
        return totalActivityTotalVo;
    }
    }*/
    /**
     * @param mgtBaseShopDto
@@ -2762,13 +3217,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;
    }
@@ -2809,10 +3282,28 @@
                mgtBasePlatformDto.setUserIdList(userIdList);
            }
        }
        List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        List<Long> shopIdList = new ArrayList<>();
        if(mgtBasePlatformDto.getShopId()!=null){
            shopIdList.add(mgtBasePlatformDto.getShopId());
        }else{
            shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        }
        List<MgtTotalDataTotalVo> mgtTotalDataTotalVoList = new ArrayList<>();
        MgtBaseShopDto mgtBaseShopDto;
        MgtTotalDataTotalVo mgtTotalDataTotalVo;
        MgtSimpleShopVo simpleShopVo;
        HashSet<String> set = new HashSet<>();
        // 遍历MgtMemberOrderPageVoList,获取shopId并添加到set中
        for (Long entity : shopIdList) {
            set.add(entity.toString());
        }
        String joinedString = String.join(",", set);
        MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
        mgtBaseBathDto.setIds(joinedString);
        List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData();
        // 将MgtSimpleShopVoList转换为Map<Long, MgtSimpleShopVo>,以便后续根据shopId获取对应的MgtSimpleShopVo
        Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream()
                .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
        if (shopIdList != null && !shopIdList.isEmpty()) {
            for (Long shopId : shopIdList) {
                mgtBaseShopDto = new MgtBaseShopDto();
@@ -2820,8 +3311,10 @@
                mgtBaseShopDto.setEndDate(mgtBasePlatformDto.getEndDate());
                mgtBaseShopDto.setShopId(shopId);
                mgtTotalDataTotalVo = this.getTotalDataTotal(mgtBaseShopDto);
                Shop shop = remoteShopService.getShop(shopId).getData();
                mgtTotalDataTotalVo.setShopName(shop.getShopName());
                simpleShopVo = shopMap.get(shopId);
                if (simpleShopVo!=null) {
                    mgtTotalDataTotalVo.setShopName(simpleShopVo.getShopName());
                }
                mgtTotalDataTotalVoList.add(mgtTotalDataTotalVo);
            }
        }
@@ -2853,23 +3346,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<>();
@@ -2881,34 +3364,83 @@
        mgtTotalOrderTotalVo.setExperienceTotal(0);
        mgtTotalOrderTotalVo.setExperienceMoney(BigDecimal.ZERO);
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapIntTotalVo mgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            Boolean noCycle = true;
            Boolean noService = true;
            Boolean noExperience = true;
            Boolean noGoods = true;
            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());
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                    mgtTotalOrderTotalVo.setCycleTotal(mgtTotalOrderTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setCycleMoney(mgtTotalOrderTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noCycle= false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                    mgtTotalOrderTotalVo.setServiceTotal(mgtTotalOrderTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setServiceMoney(mgtTotalOrderTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noService= false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                    mgtTotalOrderTotalVo.setExperienceTotal(mgtTotalOrderTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setExperienceMoney(mgtTotalOrderTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noExperience = false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                    noGoods = false;
                }
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            //补充缺少类型
            if(noCycle){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("周期");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("周期");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noService){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("服务");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("服务");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noExperience){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("体验");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("体验");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noGoods){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("单品");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("单品");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            mgtTotalOrderTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
@@ -2926,6 +3458,36 @@
            orderFromList = bigListRemoveNull(orderFromList);
            mgtTotalOrderTotalVo.setOrderFromRankList(orderFromList);
        }
        //订单分布
        //日期全部时固定为5天
        Boolean fillZero = false;
        if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){
            mgtBasePlatformDto.setEndDate(DateUtils.getDate());
            mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
            fillZero = true;
        }
        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();
            }
            if(fillZero){
                MerOrderDistributionTotalVo merOrderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
                mgtTotalOrderTotalVo.setOrderTotalKey(merOrderDistributionTotalVo.getOrderTotalKey());
                mgtTotalOrderTotalVo.setOrderTotalValue(merOrderDistributionTotalVo.getOrderTotalValue());
                mgtTotalOrderTotalVo.setOrderMoneyValue(merOrderDistributionTotalVo.getOrderMoneyValue());
            }else{
                mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey);
                mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue);
                mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue);
            }
        }
        return mgtTotalOrderTotalVo;
    }
@@ -2938,8 +3500,11 @@
     */
    @Override
    public MgtPlTotalActivityTotalVo getPlTotalActivityTotal(MgtBasePlatformDto mgtBasePlatformDto) {
        if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){
            return new MgtPlTotalActivityTotalVo();
        }
        //获取需要关联的用户id集合
        if (mgtBasePlatformDto.getDeptId() != null) {
        /*if (mgtBasePlatformDto.getDeptId() != null) {
            List<Long> userIdList = new ArrayList<>();
            if (mgtBasePlatformDto.getUserId() != null) {
                userIdList.add(mgtBasePlatformDto.getUserId());
@@ -2952,11 +3517,21 @@
            if (!userIdList.isEmpty()) {
                mgtBasePlatformDto.setUserIdList(userIdList);
            }
        }
        }*/
        List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        if(mgtBasePlatformDto.getShopId()!=null){
            shopIdList = new ArrayList<>();
            shopIdList.add(mgtBasePlatformDto.getShopId());
        }
        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<>();
@@ -2968,36 +3543,92 @@
        totalActivityTotalVo.setExperienceTotal(0);
        totalActivityTotalVo.setExperienceMoney(BigDecimal.ZERO);
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapIntTotalVo mgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            Boolean noCycle = true;
            Boolean noService = true;
            Boolean noExperience = true;
            Boolean noGoods = true;
            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());
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                    totalActivityTotalVo.setCycleTotal(totalActivityTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setCycleMoney(totalActivityTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noCycle= false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                    totalActivityTotalVo.setServiceTotal(totalActivityTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setServiceMoney(totalActivityTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noService= false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                    totalActivityTotalVo.setExperienceTotal(totalActivityTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setExperienceMoney(totalActivityTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                    noExperience = false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                    noGoods = false;
                }
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            //补充缺少类型
            if(noCycle){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("周期");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("周期");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noService){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("服务");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("服务");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noExperience){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("体验");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("体验");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noGoods){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("单品");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("单品");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
            totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
        }
        //日期全部时固定为5天
        if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){
            mgtBasePlatformDto.setEndDate(DateUtils.getDate());
            mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
        }
        //获取订单分布
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalActivityTotal(mgtBasePlatformDto);
@@ -3026,18 +3657,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);
        }
        //活动销售额排名
@@ -3046,8 +3687,182 @@
            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);
            getMemberTotalKey[i] = str;
            value = getMemberMap.get(str);
            getMemberTotalValue[i] = (value != null) ? value : 0;
        }
        totalActivityTotalVo.setGetMemberTotalKey(getMemberTotalKey);
        totalActivityTotalVo.setGetMemberTotalValue(getMemberTotalValue);
        return totalActivityTotalVo;
    }
    @Override
    public MgtPlTotalActivityTotalVo getPlTotalActivityJoinMemberTotal(MgtBasePlatformDto mgtBasePlatformDto) {
        if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){
            return new MgtPlTotalActivityTotalVo();
        }
        //获取需要关联的用户id集合
        /*if (mgtBasePlatformDto.getDeptId() != null) {
            List<Long> userIdList = new ArrayList<>();
            if (mgtBasePlatformDto.getUserId() != null) {
                userIdList.add(mgtBasePlatformDto.getUserId());
            } else {
                MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept();
                mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId());
                mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData();
                userIdList = mgtUserIdByDept.getUserIdList();
            }
            if (!userIdList.isEmpty()) {
                mgtBasePlatformDto.setUserIdList(userIdList);
            }
        }*/
        if(mgtBasePlatformDto.getAgeType()!=null){
            List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData();
            mgtBasePlatformDto.setUserIdList(userIdList);
        }
        List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        mgtBasePlatformDto.setShopIdList(shopIdList);
        MgtPlTotalActivityTotalVo totalActivityTotalVo = new MgtPlTotalActivityTotalVo();
        //日期全部时固定为5天
        if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){
            mgtBasePlatformDto.setEndDate(DateUtils.getDate());
            mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
        }
        //参与人数
        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);
        return totalActivityTotalVo;
    }
    @Override
    public MgtPlTotalActivityTotalVo getPlTotalActivityGetMemberTotal(MgtBasePlatformDto mgtBasePlatformDto) {
        if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){
            return new MgtPlTotalActivityTotalVo();
        }
        //获取需要关联的用户id集合
        /*if (mgtBasePlatformDto.getDeptId() != null) {
            List<Long> userIdList = new ArrayList<>();
            if (mgtBasePlatformDto.getUserId() != null) {
                userIdList.add(mgtBasePlatformDto.getUserId());
            } else {
                MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept();
                mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId());
                mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData();
                userIdList = mgtUserIdByDept.getUserIdList();
            }
            if (!userIdList.isEmpty()) {
                mgtBasePlatformDto.setUserIdList(userIdList);
            }
        }*/
        if(mgtBasePlatformDto.getAgeType()!=null){
            List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData();
            mgtBasePlatformDto.setUserIdList(userIdList);
        }
        List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        mgtBasePlatformDto.setShopIdList(shopIdList);
        MgtPlTotalActivityTotalVo totalActivityTotalVo = new MgtPlTotalActivityTotalVo();
        //日期全部时固定为5天
        if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){
            mgtBasePlatformDto.setEndDate(DateUtils.getDate());
            mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
        }
        //获客人数
        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));
        }
        // 获取日期范围
        List<String> dateList = getDateRange(mgtBasePlatformDto.getStartDate(), mgtBasePlatformDto.getEndDate());
        int size = dateList.size();
        // 创建日期和成员总数的数组
        String[] getMemberTotalKey = new String[size];
        Integer[] getMemberTotalValue = new Integer[size];
        // 遍历日期列表,设置日期和成员总数的数组
        String str;
        Integer value;
        // 遍历日期列表,设置日期和成员总数的数组
        for (int i = 0; i < size; i++) {
            str = dateList.get(i);
            getMemberTotalKey[i] = str;
            value = getMemberMap.get(str);
            getMemberTotalValue[i] = (value != null) ? value : 0;
        }
        totalActivityTotalVo.setGetMemberTotalKey(getMemberTotalKey);
        totalActivityTotalVo.setGetMemberTotalValue(getMemberTotalValue);
        return totalActivityTotalVo;
    }
    /**
     * @param mgtPlActivityAgeDto
@@ -3056,7 +3871,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();
@@ -3080,7 +3895,7 @@
        plTotalActivityTotalVo.setActivityAgeKey(activityAgeKey);
        plTotalActivityTotalVo.setActivityAgeValue(activityAgeValue);
        return plTotalActivityTotalVo;
    }
    }*/
    /**
     * @param verifyCode
@@ -3091,6 +3906,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对象
@@ -3105,28 +3923,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) {
@@ -3143,6 +3974,7 @@
        // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
        merVerifyCouponVo.setGoodsList(merCouponGoodsList);
        merVerifyCouponVo.setVerifyStatus(1);
        merVerifyCouponVo.setMemberCouponId(memberCoupon.getId());
        return merVerifyCouponVo;
    }
@@ -3161,10 +3993,37 @@
        if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) {
            throw new ServiceException(AppErrorConstant.COUPON_USED);
        }
        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) {
@@ -3172,8 +4031,8 @@
        } else {
            merVerifyAwardVo.setGiftFrom("商户生日卡");
        }
        merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
        //礼物类型1优惠券2商品3现金4实物
        switch (memberGiftRecord.getGiftType()) {
            case 1:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
@@ -3237,12 +4096,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());
@@ -3263,10 +4119,14 @@
     */
    @Override
    public MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto) {
        //获取查询的商户列表
        if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
            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();
        // 获取订单年龄用户列表
@@ -3315,10 +4175,11 @@
                }
            }*/
        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()) {
            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);
@@ -3326,6 +4187,9 @@
                orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
            }
            //补充日期到近5日
            orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
        }else{
            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
@@ -3354,28 +4218,93 @@
        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;
            }
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            Boolean noCycle = true;
            Boolean noService = true;
            Boolean noExperience = true;
            Boolean noGoods = true;
            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("周期");
                    noCycle= false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                    noService= false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                    noExperience = false;
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                    noGoods = false;
                }
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            //补充缺少类型
            if(noCycle){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("周期");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("周期");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noService){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("服务");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("服务");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noExperience){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("体验");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("体验");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            if(noGoods){
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo.setMapKey("单品");
                mgtMapIntTotalVo.setMapValue(0);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapBigTotalVo.setMapKey("单品");
                mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
@@ -3403,6 +4332,7 @@
        List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto);
        if (goodsRankList != null && goodsRankList.size() > 0) {
            goodsRankList = bigListRemoveNull(goodsRankList);
            Collections.reverse(goodsRankList);
            orderGoodsRankVo.setGoodsRankList(goodsRankList);
        }
        return orderGoodsRankVo;
@@ -3428,6 +4358,7 @@
        List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto);
        if (orderFromList != null && orderFromList.size() > 0) {
            orderFromList = bigListRemoveNull(orderFromList);
            Collections.reverse(orderFromList);
            merOrderFromRankVo.setOrderFromRankList(orderFromList);
        }
        return merOrderFromRankVo;
@@ -3593,9 +4524,12 @@
    @Override
    @Transactional
    public void payBack(PartnerTransactionsResult transaction) {
        // 更新订单状态
        String orderId = transaction.getOutTradeNo();
        Order order = this.getById(orderId);
        log.info("订单支付回调---"+transaction.toString());
        // Order order = this.getById(orderId);
        // 更新订单状态 outTradeNo
        String outTradeNo = transaction.getOutTradeNo();
        Order order = this.getByOutTradeNo(outTradeNo);
        String orderId = order.getOrderId();
        order.setOrderStatus(2);
        order.setPayTime(new Date());
        this.saveOrUpdate(order);
@@ -3643,19 +4577,22 @@
            Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId());
            if (bugGoodsNum == null || bugGoodsNum < 1) {
                goodsTotalChangeDto.setPersonNum(1);
            }else{
                goodsTotalChangeDto.setPersonNum(0);
            }
            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());
@@ -3663,10 +4600,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());
@@ -3683,6 +4622,9 @@
        }
        if (haveGoods) {
            memberTotalChangeDto.setGoodsOrderChange(1);
        }
        if(order.getOrderFrom()==2){
            memberTotalChangeDto.setActivityTime(order.getCreateTime());
        }
        // 更新会员统计信息
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
@@ -3710,8 +4652,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);
@@ -3719,6 +4662,22 @@
        payRecord.setPayTime(order.getPayTime());
        payRecord.setPayType(1);
        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);
    }
    @Override
    public Order getByOutTradeNo(String outTradeNo) {
        LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(Order::getOutTradeNo, outTradeNo)
                .last(" limit 1 ");
        return this.getOne(queryWrapper);
    }
    /**
@@ -3757,6 +4716,9 @@
        Boolean haveService = false;
        Boolean haveExperience = false;
        Boolean haveGoods = false;
        //商品统计回退
        List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>();
        GoodsTotalChangeDto goodsTotalChangeDto;
        List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
        if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
            StringJoiner memberCouponSJ = new StringJoiner(",");
@@ -3792,6 +4754,7 @@
                } else {
                    memberCouponSJ.add(orderGoods.getCouponId());
                }
                //会员统计更新
                switch (orderGoods.getGoodsType()) {
                    case 1:
                        cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney());
@@ -3812,21 +4775,35 @@
                    default:
                        break;
                }
                //商品统计更新
                goodsTotalChangeDto = new GoodsTotalChangeDto();
                goodsTotalChangeDto.setGoodsId(orderGoods.getGoodsId());
                goodsTotalChangeDto.setChangeType(2);
                goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum());
                goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney());
                Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId());
                if (bugGoodsNum == null || bugGoodsNum <= orderGoods.getBuyNum()) {
                    goodsTotalChangeDto.setPersonNum(1);
                }else{
                    goodsTotalChangeDto.setPersonNum(0);
                }
                goodsTotalChangeDtoList.add(goodsTotalChangeDto);
            }
            remoteGoodsService.changeGoodsTotal(goodsTotalChangeDtoList);
            //回退优惠券
            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());
@@ -3874,9 +4851,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);
        }
@@ -3895,6 +4874,9 @@
            if (null == orderPayment) {
                return;
            }
            log.info("调用微信退款---发起退款");
            String subMchId = orderPayment.getSubMchId();
            WxPayConfig config = wxService.getConfig();
@@ -3905,7 +4887,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());
@@ -3920,6 +4903,8 @@
            String refundRequestJson = gson.toJson(request);
            // 返回参数
            String refundResponseJson = gson.toJson(result);
            log.info("调用微信退款返回参数---{}", refundResponseJson);
            // 保存支付订单统一下单日志
            paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson);
@@ -3938,7 +4923,14 @@
     */
    @Override
    public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto) {
        StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(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;
    }
@@ -3951,7 +4943,10 @@
     */
    @Override
    public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto) {
        StaffActivityTotalVo staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto);
        StaffActivityTotalVo staffActivityTotalVo = new StaffActivityTotalVo();
        if(staffTotalDto.getActivityFrom()==1){
            staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto);
        }
        return staffActivityTotalVo;
    }
@@ -3964,13 +4959,16 @@
     */
    @Override
    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;
@@ -4016,9 +5014,90 @@
            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;
    }
    /**
     * @description  补时间
     * @author  jqs
     * @date    2023/8/28 15:03
     * @param orderTotalKey
     * @param orderTotalValue
     * @param orderMoneyValue
     * @return  MerOrderDistributionTotalVo
     */
    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;
    }
@@ -4032,37 +5111,104 @@
    @Override
    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;
                }
                // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
                Boolean noCycle = true;
                Boolean noService = true;
                Boolean noExperience = true;
                Boolean noGoods = true;
                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("周期");
                        noCycle= false;
                    } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                        mgtMapIntTotalVo.setMapKey("服务");
                        mgtMapBigTotalVo.setMapKey("服务");
                        noService= false;
                    } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                        mgtMapIntTotalVo.setMapKey("体验");
                        mgtMapBigTotalVo.setMapKey("体验");
                        noExperience = false;
                    } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                        mgtMapIntTotalVo.setMapKey("单品");
                        mgtMapBigTotalVo.setMapKey("单品");
                        noGoods = false;
                    }
                    goodsTypeTotalList.add(mgtMapIntTotalVo);
                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
                }
                //补充缺少类型
                if(noCycle){
                    mgtMapIntTotalVo = new MgtMapIntTotalVo();
                    mgtMapIntTotalVo.setMapKey("周期");
                    mgtMapIntTotalVo.setMapValue(0);
                    goodsTypeTotalList.add(mgtMapIntTotalVo);
                    mgtMapBigTotalVo = new MgtMapBigTotalVo();
                    mgtMapBigTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
                }
                if(noService){
                    mgtMapIntTotalVo = new MgtMapIntTotalVo();
                    mgtMapIntTotalVo.setMapKey("服务");
                    mgtMapIntTotalVo.setMapValue(0);
                    goodsTypeTotalList.add(mgtMapIntTotalVo);
                    mgtMapBigTotalVo = new MgtMapBigTotalVo();
                    mgtMapBigTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
                }
                if(noExperience){
                    mgtMapIntTotalVo = new MgtMapIntTotalVo();
                    mgtMapIntTotalVo.setMapKey("体验");
                    mgtMapIntTotalVo.setMapValue(0);
                    goodsTypeTotalList.add(mgtMapIntTotalVo);
                    mgtMapBigTotalVo = new MgtMapBigTotalVo();
                    mgtMapBigTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
                }
                if(noGoods){
                    mgtMapIntTotalVo = new MgtMapIntTotalVo();
                    mgtMapIntTotalVo.setMapKey("单品");
                    mgtMapIntTotalVo.setMapValue(0);
                    goodsTypeTotalList.add(mgtMapIntTotalVo);
                    mgtMapBigTotalVo = new MgtMapBigTotalVo();
                    mgtMapBigTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO);
                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
                }
                orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
                orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
            }
            orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
            orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
        }
        return orderTypeTotalVo;
    }
@@ -4078,32 +5224,34 @@
    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;
    }
@@ -4119,32 +5267,40 @@
    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;
    }
@@ -4287,4 +5443,107 @@
            }
        }
    }
    /**
     * @description  获取商户订单统计
     * @author  jqs
     * @date    2023/8/4 10:25
     * @param mgtShopAllOrderPageDto
     * @return  MgtShopAllOrderTotal
     */
    @Override
    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());
                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;
    }
    /**
     * @description  商户端会员订单统计
     * @author  jqs
     * @date    2023/8/29 17:39
     * @param merBaseDto
     * @return  MerMemberSimpleTotalVo
     */
    @Override
    public MerMemberSimpleTotalVo getMerMemberSimpleTotalVo(MerBaseDto merBaseDto){
        return orderMapper.getMerMemberSimpleTotalVo(merBaseDto);
    }
}