bug
jiangqs
2023-08-27 db6083bc5e2446a62c208e1d9c93671c111da8ba
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1,14 +1,12 @@
package com.ruoyi.order.service.impl.order;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsRequest;
import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsResult;
import com.github.binarywang.wxpay.bean.ecommerce.RefundNotifyResult;
import com.github.binarywang.wxpay.bean.ecommerce.TransactionsResult;
import com.github.binarywang.wxpay.bean.ecommerce.*;
import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult;
import com.github.binarywang.wxpay.config.WxPayConfig;
@@ -16,6 +14,7 @@
import com.github.binarywang.wxpay.service.WxPayService;
import com.google.common.base.Joiner;
import com.google.gson.Gson;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
@@ -23,6 +22,7 @@
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.config.WxPayConfiguration;
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.account.OrderPayment;
import com.ruoyi.order.domain.pojo.account.OrderRefund;
@@ -54,6 +54,7 @@
import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.poji.shop.ShopProportionVo;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.service.*;
@@ -65,6 +66,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -558,6 +560,7 @@
        BigDecimal orderPayMoney = new BigDecimal("0.00");
        // 创建订单ID和订单号
        String orderId = IdUtils.simpleUUID();
        String orderNo = CodeFactoryUtil.getShopOrderNo();
        OrderGoods orderGoods;
        String orderGoodsId;
@@ -748,35 +751,43 @@
        }
        appPlaceOrderVo.setOrderId(orderId);
        appPlaceOrderVo.setOrderNo(orderNo);
        //商品数据
        String goodsName = "";
        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);
            // 小程序微信下单支付
            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo,
                    orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
                    appPlaceOrderDto.getSpbillCreateIp(), goodsNameList,1);
            //生成自动取消订单延时任务
            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));
        }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;
    }
@@ -787,7 +798,7 @@
     * @param userId
     * @param shopId
     * @param goodsName
     * @param orderNo
     * @param outTradeNo
     * @param orderId
     * @param payMoney
     * @param openid
@@ -795,13 +806,13 @@
     * @param goodsNameList
     */
    public 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);
            String subMchId = "1650744551";
            R<String> resultMch = remoteShopService.getShopSubMchId(shopId);
            String subMchId = resultMch.getData();
            if (StringUtils.isEmpty(subMchId)) {
                throw new ServiceException("获取微信商户号失败");
            }
@@ -816,11 +827,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);
@@ -863,9 +879,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());
        }
@@ -1134,7 +1151,39 @@
        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);
            // 小程序微信下单支付
            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), orderNo,
                    orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(),
                    appPlaceActivityDto.getSpbillCreateIp(), goodsNameList,2);
            //生成自动取消订单延时任务
            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));
        }else{
            order.setOrderStatus(2);
            this.saveOrUpdate(order);
        }
        //生成活动参加记录
        ActivityRecord activityRecord = new ActivityRecord();
        activityRecord.setDelFlag(0);
@@ -1148,19 +1197,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;
    }
@@ -1519,9 +1555,10 @@
        merVerifyOrderVo.setUserName(member.getRealName());
        merVerifyOrderVo.setUserMobile(member.getMobile());
        merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
        //
        // TODO  活动才分账
        if (order.getOrderFrom() == 2) {
            // profitsSharingService.applyProfitSharing();
            // 活动才分账
            submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney());
        }
        //创建支付记录
@@ -1534,12 +1571,11 @@
            payRecord.setPayType(merVerifyOrderDto.getPayType());
            payRecordService.save(payRecord);
        }
        //submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney());
        return merVerifyOrderVo;
    }
    /*private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney) {
    private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney) {
        String sendMessage = "";
        String resultMessage = "";
        try {
@@ -1553,16 +1589,17 @@
            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();
@@ -1579,7 +1616,7 @@
                    log.info("订单分账:{} 分账金额: {}", orderNo, amount);
                    if (amount > 0) {
                        // 分账创建
                        Receiver receiver = new Receiver();
                        ProfitSharingRequest.Receiver receiver = new ProfitSharingRequest.Receiver();
                        receiver.setType("MERCHANT_ID");
                        receiver.setReceiverAccount(platformTyMacId);
                        receiver.setAmount(amount);
@@ -1614,7 +1651,7 @@
        // 保存分账信息
        paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage);
    }*/
    }
    /**
     * @param merVerifyCouponDto
@@ -2710,22 +2747,10 @@
     */
    @Override
    public MgtTotalOrderTotalVo getTotalOrderTotal(MgtBaseShopDto mgtBaseShopDto) {
        //订单数量 订单金额
        MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getTotalOrderTotalOrderFrom(mgtBaseShopDto);
        //MgtTotalOrderTotalVo mgtTotalOrderTotalVoGoodsType = orderMapper.getTotalOrderTotalGoodsType(mgtBaseShopDto);
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto);
        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
            }
            mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey);
            mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue);
            mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listTotalOrderTotalGoodsType(mgtBaseShopDto);
        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
@@ -2776,6 +2801,26 @@
            orderFromList = bigListRemoveNull(orderFromList);
            mgtTotalOrderTotalVo.setOrderFromRankList(orderFromList);
        }
        //订单分布
        //日期全部时固定为5天
        if(StringUtils.isBlank(mgtBaseShopDto.getStartDate())){
            mgtBaseShopDto.setStartDate(DateUtils.getDate());
            mgtBaseShopDto.setEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
        }
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto);
        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
            }
            mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey);
            mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue);
            mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        return mgtTotalOrderTotalVo;
    }
@@ -2820,8 +2865,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) {
@@ -2867,7 +2918,13 @@
            totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
            totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
        }
        //获取订单分布
        //日期全部时固定为5天
        if(StringUtils.isBlank(mgtBaseShopDto.getStartDate())){
            mgtBaseShopDto.setStartDate(DateUtils.getDate());
            mgtBaseShopDto.setEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
        }
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalActivityTotal(mgtBaseShopDto);
        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
@@ -2882,6 +2939,31 @@
            totalActivityTotalVo.setOrderTotalValue(orderTotalValue);
            totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        //参与人数
        List<MgtMapIntTotalVo> joinList = orderMapper.getActivityMemberTotal(mgtBaseShopDto);
        // 将查询结果转为Map
        Map<String, Integer> mgtMapIntTotalVoMap = new HashMap<>();
        if (joinList != null && !joinList.isEmpty()) {
            mgtMapIntTotalVoMap = joinList.stream()
                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
        }
        // 获取日期范围
        List<String> dateList = getDateRange(mgtBaseShopDto.getStartDate(), mgtBaseShopDto.getEndDate());
        int size = dateList.size();
        // 创建日期和成员总数的数组
        String[] joinMemberTotalKey = new String[size];
        Integer[] joinMemberTotalValue = new Integer[size];
        // 遍历日期列表,设置日期和成员总数的数组
        String str;
        Integer value;
        for (int i = 0; i < size; i++) {
            str = dateList.get(i);
            joinMemberTotalKey[i] = str;
            value = mgtMapIntTotalVoMap.get(str);
            joinMemberTotalValue[i] = (value != null) ? value : 0;
        }
        totalActivityTotalVo.setJoinMemberTotalKey(joinMemberTotalKey);
        totalActivityTotalVo.setJoinMemberTotalValue(joinMemberTotalValue);
        return totalActivityTotalVo;
    }
@@ -2892,7 +2974,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);
@@ -2914,7 +2996,7 @@
        totalActivityTotalVo.setActivityAgeKey(activityAgeKey);
        totalActivityTotalVo.setActivityAgeValue(activityAgeValue);
        return totalActivityTotalVo;
    }
    }*/
    /**
     * @param mgtBaseShopDto
@@ -2926,8 +3008,9 @@
    @Override
    public MgtTotalDataTotalVo getTotalDataTotal(MgtBaseShopDto mgtBaseShopDto) {
        //获取人数统计
        //营业额
        BigDecimal salesTotal = orderMapper.shopSalesTotal(mgtBaseShopDto);
        MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto);
        // 获取当月时间
        LocalDate currentDate = LocalDate.now();
        LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1);
@@ -2937,13 +3020,18 @@
        String lastDayOfMonthStr = lastDayOfMonth.format(formatter);
        mgtBaseShopDto.setStartDate(firstDayOfMonthStr);
        mgtBaseShopDto.setEndDate(lastDayOfMonthStr);
        //
        MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto);
        mgtTotalDataTotalVo.setSalesTotal(salesTotal);
        //总进店人数 体验人数 体验开单人数 没体验开单人数
        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;
    }
@@ -3031,20 +3119,6 @@
        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<>();
@@ -3101,6 +3175,27 @@
            orderFromList = bigListRemoveNull(orderFromList);
            mgtTotalOrderTotalVo.setOrderFromRankList(orderFromList);
        }
        //订单分布
        //日期全部时固定为5天
        if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){
            mgtBasePlatformDto.setStartDate(DateUtils.getDate());
            mgtBasePlatformDto.setEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
        }
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalOrderTotal(mgtBasePlatformDto);
        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
            }
            MerOrderDistributionTotalVo merOrderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
            mgtTotalOrderTotalVo.setOrderTotalKey(merOrderDistributionTotalVo.getOrderTotalKey());
            mgtTotalOrderTotalVo.setOrderTotalValue(merOrderDistributionTotalVo.getOrderTotalValue());
            mgtTotalOrderTotalVo.setOrderMoneyValue(merOrderDistributionTotalVo.getOrderMoneyValue());
        }
        return mgtTotalOrderTotalVo;
    }
@@ -3113,6 +3208,9 @@
     */
    @Override
    public MgtPlTotalActivityTotalVo getPlTotalActivityTotal(MgtBasePlatformDto mgtBasePlatformDto) {
        if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){
            return new MgtPlTotalActivityTotalVo();
        }
        //获取需要关联的用户id集合
        if (mgtBasePlatformDto.getDeptId() != null) {
            List<Long> userIdList = new ArrayList<>();
@@ -3132,6 +3230,12 @@
        mgtBasePlatformDto.setShopIdList(shopIdList);
        //获取基础统计
        MgtPlTotalActivityTotalVo totalActivityTotalVo = orderMapper.getPlTotalActivityTotal(mgtBasePlatformDto);
        //获客人数
        MgtPlTotalActivityTotalVo totalActivityMemberTotalVo = orderMapper.getPlTotalActivityMemberTotal(mgtBasePlatformDto);
        totalActivityTotalVo.setOrderPerson(totalActivityMemberTotalVo.getOrderPerson());
        totalActivityTotalVo.setCyclePerson(totalActivityMemberTotalVo.getCyclePerson());
        totalActivityTotalVo.setServicePerson(totalActivityMemberTotalVo.getServicePerson());
        totalActivityTotalVo.setExperiencePerson(totalActivityMemberTotalVo.getExperiencePerson());
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalActivityTotalGoodsType(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
@@ -3174,6 +3278,11 @@
            totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
            totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
        }
        //日期全部时固定为5天
        if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){
            mgtBasePlatformDto.setStartDate(DateUtils.getDate());
            mgtBasePlatformDto.setEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
        }
        //获取订单分布
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalActivityTotal(mgtBasePlatformDto);
        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
@@ -3201,18 +3310,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);
        }
        //活动销售额排名
@@ -3221,6 +3340,57 @@
            activitySalesRank = bigListRemoveNull(activitySalesRank);
            totalActivityTotalVo.setActivitySalesRankList(activitySalesRank);
        }
        MerTotalDto merTotalDto = new MerTotalDto();
        merTotalDto.setAgeType(mgtBasePlatformDto.getAgeType());
        if(mgtBasePlatformDto.getAgeType()!=null){
            List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData();
            mgtBasePlatformDto.setUserIdList(userIdList);
        }
        //参与人数
        List<MgtMapIntTotalVo> joinList = orderMapper.getMgtActivityMemberTotal(mgtBasePlatformDto);
        // 将查询结果转为Map
        Map<String, Integer> mgtMapIntTotalVoMap = new HashMap<>();
        if (joinList != null && !joinList.isEmpty()) {
            mgtMapIntTotalVoMap = joinList.stream()
                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
        }
        // 获取日期范围
        List<String> dateList = getDateRange(mgtBasePlatformDto.getStartDate(), mgtBasePlatformDto.getEndDate());
        int size = dateList.size();
        // 创建日期和成员总数的数组
        String[] joinMemberTotalKey = new String[size];
        Integer[] joinMemberTotalValue = new Integer[size];
        // 遍历日期列表,设置日期和成员总数的数组
        String str;
        Integer value;
        for (int i = 0; i < size; i++) {
            str = dateList.get(i);
            joinMemberTotalKey[i] = str;
            value = mgtMapIntTotalVoMap.get(str);
            joinMemberTotalValue[i] = (value != null) ? value : 0;
        }
        totalActivityTotalVo.setJoinMemberTotalKey(joinMemberTotalKey);
        totalActivityTotalVo.setJoinMemberTotalValue(joinMemberTotalValue);
        //获客人数
        List<MgtMapIntTotalVo> getList = orderMapper.getMgtActivityGetMemberTotal(mgtBasePlatformDto);
        // 将查询结果转为Map
        Map<String, Integer> getMemberMap = new HashMap<>();
        if (getList != null && !getList.isEmpty()) {
            getMemberMap = getList.stream()
                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
        }
        // 创建日期和成员总数的数组
        String[] getMemberTotalKey = new String[size];
        Integer[] getMemberTotalValue = new Integer[size];
        // 遍历日期列表,设置日期和成员总数的数组
        for (int i = 0; i < size; i++) {
            str = dateList.get(i);
            joinMemberTotalKey[i] = str;
            value = getMemberMap.get(str);
            joinMemberTotalValue[i] = (value != null) ? value : 0;
        }
        totalActivityTotalVo.setGetMemberTotalKey(getMemberTotalKey);
        totalActivityTotalVo.setGetMemberTotalValue(getMemberTotalValue);
        return totalActivityTotalVo;
    }
@@ -3231,7 +3401,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();
@@ -3255,7 +3425,7 @@
        plTotalActivityTotalVo.setActivityAgeKey(activityAgeKey);
        plTotalActivityTotalVo.setActivityAgeValue(activityAgeValue);
        return plTotalActivityTotalVo;
    }
    }*/
    /**
     * @param verifyCode
@@ -3484,6 +3654,9 @@
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        if(merTotalDto.getGoodsType()!=null&&merTotalDto.getGoodsType()==0){
            merTotalDto.setGoodsType(null);
        }
        MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
        // 获取订单年龄用户列表
        //List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData();
@@ -3531,10 +3704,10 @@
                }
            }*/
        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);
@@ -3543,6 +3716,10 @@
                orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
            }
            orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
        }else{
            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        // 返回订单分布总数对象
        return orderDistributionTotalVo;
@@ -3568,28 +3745,44 @@
        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapIntTotalVo mgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            Integer intTotal = 0;
            BigDecimal bigTotal = BigDecimal.ZERO;
            for(MgtMapTotalPlusVo mgtMapTotalPlusVo : MgtMapIntTotalVoGoodsType){
                intTotal = intTotal + mgtMapTotalPlusVo.getMapValueFirst();
                bigTotal = bigTotal.add(mgtMapTotalPlusVo.getMapValueSecond());
            }
            BigDecimal hundredBig = new BigDecimal("100");
            BigDecimal intTotalBig = hundredBig;
            if(intTotal!=0){
                intTotalBig = new BigDecimal(intTotal.toString());
            }
            if(bigTotal.compareTo(BigDecimal.ZERO)<1){
                bigTotal = hundredBig;
            }
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig));
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig));
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                }
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
@@ -3617,6 +3810,7 @@
        List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto);
        if (goodsRankList != null && goodsRankList.size() > 0) {
            goodsRankList = bigListRemoveNull(goodsRankList);
            Collections.reverse(goodsRankList);
            orderGoodsRankVo.setGoodsRankList(goodsRankList);
        }
        return orderGoodsRankVo;
@@ -3642,6 +3836,7 @@
        List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto);
        if (orderFromList != null && orderFromList.size() > 0) {
            orderFromList = bigListRemoveNull(orderFromList);
            Collections.reverse(orderFromList);
            merOrderFromRankVo.setOrderFromRankList(orderFromList);
        }
        return merOrderFromRankVo;
@@ -3807,9 +4002,12 @@
    @Override
    @Transactional
    public void payBack(PartnerTransactionsResult transaction) {
        // 更新订单状态
        String orderId = transaction.getOutTradeNo();
        Order order = this.getById(orderId);
        // 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);
@@ -3930,8 +4128,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);
@@ -3939,6 +4138,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);
    }
    /**
@@ -4094,11 +4309,13 @@
            remoteActivityService.changeActivityTotal(activityTotalChangeDto);
        }
        log.info("用户取消订单退款, 检查退款");
        // 用户取消订单退款
        BigDecimal onlinePayMoney = order.getOnlinePayMoney();
        if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){
            log.info("订单支付金额大于0,可发起退款");
            // 订单支付金额大于0,可发起退款
            //orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund);
            orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund);
        }
        orderRefund.setRefundStatus(1);
@@ -4108,13 +4325,16 @@
    /**
     * 申请退款API
     */
    /*private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){
    private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){
        try {
            // 创建支付订单
            OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId);
            if (null == orderPayment) {
                return;
            }
            log.info("调用微信退款---发起退款");
            String subMchId = orderPayment.getSubMchId();
            WxPayConfig config = wxService.getConfig();
@@ -4125,7 +4345,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());
@@ -4141,13 +4362,15 @@
            // 返回参数
            String refundResponseJson = gson.toJson(result);
            log.info("调用微信退款返回参数---{}", refundResponseJson);
            // 保存支付订单统一下单日志
            paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson);
        } catch (WxPayException e) {
            throw new ServiceException(e.getMessage());
        }
    }*/
    }
    /**
     * @param staffTotalDto
@@ -4158,11 +4381,14 @@
     */
    @Override
    public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto) {
        StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto);
        StaffActivityOrderTotalVo staffActivityOrderGoodsTotalVo = orderMapper.getStaffActivityOrderGoodsTotal(staffTotalDto);
        staffActivityOrderTotalVo.setCycleTotal(staffActivityOrderGoodsTotalVo.getCycleTotal());
        staffActivityOrderTotalVo.setServiceTotal(staffActivityOrderGoodsTotalVo.getServiceTotal());
        staffActivityOrderTotalVo.setExperienceTotal(staffActivityOrderGoodsTotalVo.getExperienceTotal());
        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;
    }
@@ -4175,7 +4401,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;
    }
@@ -4188,6 +4417,9 @@
     */
    @Override
    public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto) {
        if(staffTotalDto.getGoodsType()!=null&&staffTotalDto.getGoodsType()==0){
            staffTotalDto.setGoodsType(null);
        }
        MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
        // 获取订单年龄用户列表
        //MerTotalDto merTotalDto = new MerTotalDto();
@@ -4241,19 +4473,25 @@
            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
        }*/
        List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listStaffActivityOrderDistributionTotal(staffTotalDto);
        if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) {
        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()];
            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();
            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);
            }
            orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
        }
        // 返回订单分布总数对象
        return orderDistributionTotalVo;
@@ -4321,37 +4559,55 @@
    @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;
                }
                // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
                for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
                    mgtMapIntTotalVo = new MgtMapIntTotalVo();
                    mgtMapBigTotalVo = new MgtMapBigTotalVo();
                    mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig));
                    mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                    mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig));
                    if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                        mgtMapIntTotalVo.setMapKey("周期");
                        mgtMapBigTotalVo.setMapKey("周期");
                    } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                        mgtMapIntTotalVo.setMapKey("服务");
                        mgtMapBigTotalVo.setMapKey("服务");
                    } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                        mgtMapIntTotalVo.setMapKey("体验");
                        mgtMapBigTotalVo.setMapKey("体验");
                    } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                        mgtMapIntTotalVo.setMapKey("单品");
                        mgtMapBigTotalVo.setMapKey("单品");
                    }
                    goodsTypeTotalList.add(mgtMapIntTotalVo);
                    goodsTypeMoneyList.add(mgtMapBigTotalVo);
                }
                orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
                orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
            }
            orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
            orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
        }
        return orderTypeTotalVo;
    }
@@ -4367,32 +4623,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;
    }
@@ -4406,40 +4664,42 @@
     */
    @Override
    public StaffActivityDateMemberTotalVo getStaffActivityMemberTotal(StaffTotalDto staffTotalDto) {
        MerTotalDto merTotalDto = new MerTotalDto();
        merTotalDto.setAgeType(staffTotalDto.getAgeType());
        if(staffTotalDto.getAgeType()!=null){
            List<Long> userIdList = remoteMemberService.listUserIdByAgeType(staffTotalDto.getAgeType()).getData();
            staffTotalDto.setUserIdList(userIdList);
        }
        // 创建返回对象
        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;
    }
@@ -4646,4 +4906,42 @@
        }
        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;
    }
}