zhanglin8526
2023-08-26 b879982d29cb2dbfe72482b46c8f6f2064d663a2
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -5,10 +5,7 @@
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 +13,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;
@@ -558,6 +556,7 @@
        BigDecimal orderPayMoney = new BigDecimal("0.00");
        // 创建订单ID和订单号
        String orderId = IdUtils.simpleUUID();
        String orderNo = CodeFactoryUtil.getShopOrderNo();
        OrderGoods orderGoods;
        String orderGoodsId;
@@ -734,6 +733,9 @@
        order.setOrderRemark(appPlaceOrderDto.getOrderRemark());
        order.setGoodsNum(goodsNum);
        order.setCreateTime(new Date());
        if(appPlaceOrderDto.getNewMemberFlag()!=null&&appPlaceOrderDto.getNewMemberFlag()==1){
            order.setNewMemberFlag(1);
        }
        // 保存订单
        this.save(order);
        // 更新用户商品类型
@@ -751,11 +753,18 @@
            goodsName = String.join(",", goodsNameList);
        }
        // 小程序微信下单支付
        /*createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, orderNo,
                orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
                appPlaceOrderDto.getSpbillCreateIp(), goodsNameList);*/
        if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){
            String outTradeNo = IdUtils.simpleUUID();
            // 保存订单 交易流水
            order.setOutTradeNo(outTradeNo);
            this.saveOrUpdate(order);
            // 小程序微信下单支付
            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo,
                    orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
                    appPlaceOrderDto.getSpbillCreateIp(), goodsNameList,1);
        }
        //减去优惠券
        if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
@@ -784,7 +793,7 @@
     * @param userId
     * @param shopId
     * @param goodsName
     * @param orderNo
     * @param outTradeNo
     * @param orderId
     * @param payMoney
     * @param openid
@@ -792,13 +801,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("获取微信商户号失败");
            }
@@ -813,11 +822,15 @@
            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);
            if(orderFrom==2){
                settleInfo.setProfitSharing(true);
            }else{
                settleInfo.setProfitSharing(false);
            }
            settleInfo.setSubsidyAmount(BigDecimal.ZERO);
            request.setSettleInfo(settleInfo);
@@ -860,9 +873,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());
        }
@@ -1073,6 +1087,9 @@
        order.setOrderRemark(appPlaceActivityDto.getOrderRemark());
        order.setGoodsNum(goodsNum);
        order.setCreateTime(new Date());
        if(appPlaceActivityDto.getNewMemberFlag()!=null&&appPlaceActivityDto.getNewMemberFlag()==1){
            order.setNewMemberFlag(1);
        }
        // 保存订单
        this.save(order);
        // 更新用户商品类型
@@ -1128,7 +1145,25 @@
        appPlaceOrderVo.setPackageStr(res.getPackageVal());
        appPlaceOrderVo.setTradeType(res.getSignType());
        appPlaceOrderVo.setPaySign(res.getPaySign());
*/
        List<String> goodsNameList = new ArrayList<>();
        goodsNameList.add(orderGoods.getGoodsName());
        if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){
            String outTradeNo = IdUtils.simpleUUID();
            // 保存订单 交易流水
            order.setOutTradeNo(outTradeNo);
            this.saveOrUpdate(order);
            // 小程序微信下单支付
            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), orderNo,
                    orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(),
                    appPlaceActivityDto.getSpbillCreateIp(), goodsNameList,2);
        }
        //生成活动参加记录
        ActivityRecord activityRecord = new ActivityRecord();
        activityRecord.setDelFlag(0);
@@ -1629,7 +1664,7 @@
        // 调用remoteMemberService的getMember方法获取Member对象
        Member member = remoteMemberService.getMember(userId).getData();
        //如果是商户优惠券,验证商户一致
        if (memberCoupon.getCouponFrom() == 2 && !memberCoupon.getShopId().equals(shopId)) {
        if (memberCoupon.getCouponFrom() == 2) {
            if(!memberCoupon.getShopId().equals(member.getRelationShopId())){
                throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR);
            }
@@ -1642,6 +1677,7 @@
            /*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);
            }
@@ -2186,14 +2222,6 @@
        } else {
            order.setCloseFlag(0);
        }
        //保存订单和服务
        this.save(order);
        orderGoodsService.saveBatch(orderGoodsList);
        consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
        //减去优惠券
        if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
            remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
        }
        //用户未绑定则绑定商户
        Member member = remoteMemberService.getMember(userId).getData();
        if (member != null && member.getBindingFlag() != 1) {
@@ -2205,7 +2233,17 @@
            appMemberBindingDto.setBindingFlag(1);
            appMemberBindingDto.setBindingType(3);
            remoteMemberService.updateMemberBinding(appMemberBindingDto);
            order.setNewMemberFlag(1);
        }
        //保存订单和服务
        this.save(order);
        orderGoodsService.saveBatch(orderGoodsList);
        consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
        //减去优惠券
        if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
            remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
        }
        //更新商户统计
        /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
        shopTotalChangeDto.setShopId(order.getShopId());
@@ -2916,13 +2954,31 @@
     */
    @Override
    public MgtTotalDataTotalVo getTotalDataTotal(MgtBaseShopDto mgtBaseShopDto) {
        //获取人数统计
        MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto);
        //营业额
        BigDecimal salesTotal = orderMapper.shopSalesTotal(mgtBaseShopDto);
        mgtTotalDataTotalVo.setSalesTotal(salesTotal);
        MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto);
        // 获取当月时间
        LocalDate currentDate = LocalDate.now();
        LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1);
        LocalDate lastDayOfMonth = currentDate.withDayOfMonth(currentDate.lengthOfMonth());
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String firstDayOfMonthStr = firstDayOfMonth.format(formatter);
        String lastDayOfMonthStr = lastDayOfMonth.format(formatter);
        mgtBaseShopDto.setStartDate(firstDayOfMonthStr);
        mgtBaseShopDto.setEndDate(lastDayOfMonthStr);
        //总进店人数 体验人数 体验开单人数 没体验开单人数
        MgtTotalDataTotalVo mgtTotalDataMemberTotalVo = orderMapper.getTotalDataMemberTotal(mgtBaseShopDto);
        mgtTotalDataTotalVo.setOnlyExperiencePerson(mgtTotalDataMemberTotalVo.getOnlyExperiencePerson());
        mgtTotalDataTotalVo.setExperienceCyclePerson(mgtTotalDataMemberTotalVo.getExperienceCyclePerson());
        mgtTotalDataTotalVo.setOnlyCyclePerson(mgtTotalDataMemberTotalVo.getOnlyCyclePerson());
        mgtTotalDataTotalVo.setOrderPerson(mgtTotalDataMemberTotalVo.getOrderPerson());
        //续单人数
        Integer reorderPerson = orderMapper.getReorderPerson(mgtBaseShopDto);
        mgtTotalDataTotalVo.setReorderPerson(reorderPerson);
        //回头客
        Integer returnedPerson = orderMapper.getReturnedPerson(mgtBaseShopDto);
        mgtTotalDataTotalVo.setSalesTotal(salesTotal);
        mgtTotalDataTotalVo.setReorderPerson(reorderPerson);
        mgtTotalDataTotalVo.setReturnedPerson(returnedPerson);
        return mgtTotalDataTotalVo;
    }
@@ -3265,7 +3321,7 @@
        Long userId = verifyCouponGetVo.getUserId();
        Member member = remoteMemberService.getMember(userId).getData();
        //如果是商户优惠券,验证商户一致
        if (memberCoupon.getCouponFrom() == 2 && !memberCoupon.getShopId().equals(shopId)) {
        if (memberCoupon.getCouponFrom() == 2) {
            if(!memberCoupon.getShopId().equals(member.getRelationShopId())){
                throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR);
            }
@@ -3278,6 +3334,7 @@
            /*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);
            }
@@ -3462,6 +3519,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();
@@ -3509,10 +3569,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);
@@ -3520,6 +3580,8 @@
                orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
            }
            orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
        }else{
            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
@@ -3548,28 +3610,44 @@
        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapIntTotalVo mgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            Integer intTotal = 0;
            BigDecimal bigTotal = BigDecimal.ZERO;
            for(MgtMapTotalPlusVo mgtMapTotalPlusVo : MgtMapIntTotalVoGoodsType){
                intTotal = intTotal + mgtMapTotalPlusVo.getMapValueFirst();
                bigTotal = bigTotal.add(mgtMapTotalPlusVo.getMapValueSecond());
            }
            BigDecimal hundredBig = new BigDecimal("100");
            BigDecimal intTotalBig = hundredBig;
            if(intTotal!=0){
                intTotalBig = new BigDecimal(intTotal.toString());
            }
            if(bigTotal.compareTo(BigDecimal.ZERO)<1){
                bigTotal = hundredBig;
            }
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig));
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig));
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                }
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
@@ -3597,6 +3675,7 @@
        List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto);
        if (goodsRankList != null && goodsRankList.size() > 0) {
            goodsRankList = bigListRemoveNull(goodsRankList);
            Collections.reverse(goodsRankList);
            orderGoodsRankVo.setGoodsRankList(goodsRankList);
        }
        return orderGoodsRankVo;
@@ -3622,6 +3701,7 @@
        List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto);
        if (orderFromList != null && orderFromList.size() > 0) {
            orderFromList = bigListRemoveNull(orderFromList);
            Collections.reverse(orderFromList);
            merOrderFromRankVo.setOrderFromRankList(orderFromList);
        }
        return merOrderFromRankVo;
@@ -3787,9 +3867,12 @@
    @Override
    @Transactional
    public void payBack(PartnerTransactionsResult transaction) {
        // 更新订单状态
        String orderId = transaction.getOutTradeNo();
        Order order = this.getById(orderId);
        // Order order = this.getById(orderId);
        // 更新订单状态 订单编号,就是 微信outTradeNo
        String orderNo = transaction.getOutTradeNo();
        Order order = this.getByOrderNo(orderNo);
        String orderId = order.getOrderId();
        order.setOrderStatus(2);
        order.setPayTime(new Date());
        this.saveOrUpdate(order);
@@ -3910,8 +3993,9 @@
            request.setTransactionId(transaction.getTransactionId());
            profitsSharingService.applyProfitSharing(request);*/
        }
        //生成支付记录
        OrderPayment orderPayment = new OrderPayment();
        //修改支付记录生成支付记录
        orderPaymentService.updatePaySuccess(transaction.getOutTradeNo(), transaction.getTransactionId());
        PayRecord payRecord = new PayRecord();
        payRecord.setDelFlag(0);
        payRecord.setOrderId(orderId);
@@ -3919,6 +4003,14 @@
        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);
    }
    /**
@@ -4078,7 +4170,7 @@
        BigDecimal onlinePayMoney = order.getOnlinePayMoney();
        if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){
            // 订单支付金额大于0,可发起退款
            //orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund);
            orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund);
        }
        orderRefund.setRefundStatus(1);
@@ -4088,7 +4180,7 @@
    /**
     * 申请退款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);
@@ -4127,7 +4219,7 @@
        } catch (WxPayException e) {
            throw new ServiceException(e.getMessage());
        }
    }*/
    }
    /**
     * @param staffTotalDto
@@ -4138,7 +4230,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;
    }
@@ -4151,7 +4250,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;
    }
@@ -4164,13 +4266,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;
@@ -4216,9 +4321,80 @@
            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
        }*/
        if(staffTotalDto.getActivityFrom()==1){
            List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listStaffActivityOrderDistributionTotal(staffTotalDto);
            String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()];
            Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()];
            if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) {
                MgtMapTotalPlusVo mgtMapTotalPlusVo;
                for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) {
                    mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i);
                    orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey();
                    orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                    orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
                }
                orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
            }else{
                orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
                orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
                orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
            }
        }
        // 返回订单分布总数对象
        return orderDistributionTotalVo;
    }
    public MerOrderDistributionTotalVo fillOrderTotalKeyAndValuesToRecentFiveDays(String[] orderTotalKey,Integer[] orderTotalValue,BigDecimal[] orderMoneyValue) {
        MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();
        // 创建最近五天日期列表
        List<String> recentFiveDays = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            LocalDate date = currentDate.minusDays(i);
            recentFiveDays.add(date.toString());
        }
        // 创建新的数组
        String[] newOrderTotalKey = new String[5];
        Integer[] newOrderTotalValue = new Integer[5];
        BigDecimal[] newOrderMoneyValue = new BigDecimal[5];
        // 遍历最近五天日期列表,并补充数据
        for (int i = 0; i < 5; i++) {
            String day = recentFiveDays.get(i);
            int index = getIndexInOrderTotalKey(day,orderTotalKey);
            if (index != -1) {
                newOrderTotalKey[i] = orderTotalKey[index];
                newOrderTotalValue[i] = orderTotalValue[index];
                newOrderMoneyValue[i] = orderMoneyValue[index];
            } else {
                newOrderTotalKey[i] = day;
                newOrderTotalValue[i] = 0;
                newOrderMoneyValue[i] = BigDecimal.ZERO;
            }
        }
        // 更新属性
        orderTotalKey = newOrderTotalKey;
        orderTotalValue = newOrderTotalValue;
        orderMoneyValue = newOrderMoneyValue;
        orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
        orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
        orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
        return orderDistributionTotalVo;
    }
    private int getIndexInOrderTotalKey(String day,String[] orderTotalKey) {
        for (int i = 0; i < orderTotalKey.length; i++) {
            if (orderTotalKey[i].equals(day)) {
                return i;
            }
        }
        return -1;
    }
@@ -4232,37 +4408,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;
    }
@@ -4278,32 +4472,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;
    }
@@ -4319,32 +4515,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;
    }
@@ -4530,10 +4734,6 @@
                    orderFromDesc = "商城订单";
                }
                merOrderPageVo.setOrderFromDesc(orderFromDesc);
                merOrderPageVo.setUnPaidMoney(merOrderPageVo.getPayMoney().subtract(merOrderPageVo.getReceiveMoney()));
                if (merOrderPageVo.getUnPaidMoney() == null) {
                    merOrderPageVo.setUnPaidMoney(zeroBig);
                }
                if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){
                    merOrderPageVo.setUnPaidMoney(zeroBig);
                }
@@ -4555,4 +4755,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;
    }
}