From db6083bc5e2446a62c208e1d9c93671c111da8ba Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期日, 27 八月 2023 15:22:26 +0800 Subject: [PATCH] bug --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 811 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 600 insertions(+), 211 deletions(-) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java index 3c83650..7d059dd 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java @@ -1,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; @@ -734,6 +737,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); // 更新用户商品类型 @@ -745,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; } @@ -784,7 +798,7 @@ * @param userId * @param shopId * @param goodsName - * @param orderNo + * @param outTradeNo * @param orderId * @param payMoney * @param openid @@ -792,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("获取微信商户号失败"); } @@ -813,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); @@ -860,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()); } @@ -1073,6 +1093,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 +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); @@ -1142,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; } @@ -1513,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()); } //创建支付记录 @@ -1528,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 { @@ -1547,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(); @@ -1573,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); @@ -1608,7 +1651,7 @@ // 保存分账信息 paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage); - }*/ + } /** * @param merVerifyCouponDto @@ -1629,7 +1672,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 +1685,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 +2230,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 +2241,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()); @@ -2701,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<>(); @@ -2767,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; } @@ -2811,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) { @@ -2858,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()]; @@ -2873,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; } @@ -2883,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); @@ -2905,7 +2996,7 @@ totalActivityTotalVo.setActivityAgeKey(activityAgeKey); totalActivityTotalVo.setActivityAgeValue(activityAgeValue); return totalActivityTotalVo; - } + }*/ /** * @param mgtBaseShopDto @@ -2916,13 +3007,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; } @@ -3010,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<>(); @@ -3080,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; } @@ -3092,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<>(); @@ -3111,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<>(); @@ -3153,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) { @@ -3180,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); } //活动销售额排名 @@ -3200,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; } @@ -3210,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(); @@ -3234,7 +3425,7 @@ plTotalActivityTotalVo.setActivityAgeKey(activityAgeKey); plTotalActivityTotalVo.setActivityAgeValue(activityAgeValue); return plTotalActivityTotalVo; - } + }*/ /** * @param verifyCode @@ -3265,7 +3456,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 +3469,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 +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(); @@ -3509,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); @@ -3520,6 +3715,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 +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); @@ -3597,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; @@ -3622,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; @@ -3787,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); @@ -3910,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); @@ -3919,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); } /** @@ -4074,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); @@ -4088,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(); @@ -4105,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()); @@ -4121,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 @@ -4138,7 +4381,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 +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; } @@ -4164,13 +4417,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 +4472,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 +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; } @@ -4278,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; } @@ -4319,32 +4666,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 +4885,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 +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; + } } -- Gitblit v1.7.1