From eac1bb48ce6df55a923981a99c26693406f877e9 Mon Sep 17 00:00:00 2001 From: jiangqs <343695869@qq.com> Date: 星期二, 25 七月 2023 21:56:42 +0800 Subject: [PATCH] bug --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 2891 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 2,744 insertions(+), 147 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 4a625f9..4b611e6 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 @@ -6,34 +6,53 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; +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.domain.dto.*; +import com.ruoyi.order.domain.pojo.account.OrderPayment; +import com.ruoyi.order.domain.pojo.account.OrderRefund; import com.ruoyi.order.domain.pojo.order.ConsumerGoods; import com.ruoyi.order.domain.pojo.order.Order; import com.ruoyi.order.domain.pojo.order.OrderGoods; import com.ruoyi.order.domain.vo.*; +import com.ruoyi.order.mapper.order.OrderMapper; import com.ruoyi.order.service.order.ConsumerGoodsService; import com.ruoyi.order.service.order.OrderGoodsService; -import com.ruoyi.common.security.utils.CodeFactoryUtil; -import com.ruoyi.system.api.domain.dto.*; -import com.ruoyi.system.api.domain.vo.*; -import com.ruoyi.system.api.service.*; +import com.ruoyi.order.service.order.OrderService; +import com.ruoyi.order.service.order.UserServiceRecordService; import com.ruoyi.system.api.constant.AppErrorConstant; +import com.ruoyi.system.api.constant.DelayTaskEnum; +import com.ruoyi.system.api.constant.SecurityConstant; +import com.ruoyi.system.api.domain.dto.*; +import com.ruoyi.system.api.domain.poji.activity.ActivityRecord; +import com.ruoyi.system.api.domain.poji.config.DelayTask; import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.poji.goods.GoodsFile; import com.ruoyi.system.api.domain.poji.goods.ShopGoods; import com.ruoyi.system.api.domain.poji.member.Member; +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.sys.SysUser; -import com.ruoyi.order.mapper.order.OrderMapper; -import com.ruoyi.order.service.order.OrderService; +import com.ruoyi.system.api.domain.vo.*; +import com.ruoyi.system.api.service.*; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @@ -72,6 +91,44 @@ @Resource private RemoteShoppingCartService remoteShoppingCartService; + @Resource + private RemoteConfigService remoteConfigService; + + @Resource + private UserServiceRecordService userServiceRecordService; + + @Resource + private RemoteCouponService remoteCouponService; + + @Resource + private RemoteActivityService remoteActivityService; + + @Resource + private RedisService redisService; + + //@Resource + //@Qualifier("profitsSharingServiceImpl") + //private ProfitsSharingService profitsSharingService; + + @Autowired + private RedissonClient redissonClient; + + /** 商户号 */ + public static String merchantId = ""; + /** 商户API私钥路径 */ + public static String privateKeyPath = ""; + /** 商户证书序列号 */ + public static String merchantSerialNumber = ""; + /** 微信支付平台证书路径 */ + public static String wechatPayCertificatePath = ""; + /** 微信支付 APIv3 密钥 */ + public static String apiV3Key = ""; + /** 微信支付APPID */ + public static String appId=""; + /** 微信支付商户ID */ + public static String mchId=""; + /** 通知地址 */ + public static String notifyUrl=""; /** * @description: buyGoods @@ -83,21 +140,46 @@ @Override public AppSureOrderVo buyGoods(AppSureOrderDto appSureOrderDto) { Long userId = appSureOrderDto.getUserId(); + // 初始化订单对象 AppSureOrderVo appSureOrderVo = new AppSureOrderVo(); + // 初始化订单商品列表 List<AppSureOrderGoodsVo> appSureOrderGoodsVoList = new ArrayList<>(); AppSureOrderGoodsVo appSureOrderGoodsVo; + // 获取购买商品列表 List<AppBuyGoodsDto> appBuyGoodsDtoList = appSureOrderDto.getAppBuyGoodsDtoList(); + //获取商品列表 + StringJoiner goodsIdSJ = new StringJoiner(","); + for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { + goodsIdSJ.add(appBuyGoodsDto.getGoodsId()); + } + List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIdSJ.toString()).getData(); + Map<String, Goods> goodsMap = goodsList.stream() + .collect(Collectors.toMap(Goods::getGoodsId, Function.identity())); + Boolean haveDeposit = false; + for(Goods goods : goodsList){ + if(goods.getSubscription()!=null&&goods.getSubscription().compareTo(BigDecimal.ZERO)>0){ + haveDeposit = true; + } + } String goodsId; Integer buyNum; BigDecimal buyNumBig; - Long memberCouponId; + String memberCouponId; Goods goods; BigDecimal goodsPrice; BigDecimal goodsTotalPrice; BigDecimal goodsRealPrice; - List<AppMemberCouponVo> appMemberCouponVoList = remoteMemberService.listVoMemberCouponByUserId(userId).getData(); - List<AppMemberCouponVo> appGoodsMemberCouponVoList; - Map<Long, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); + MerBaseDto merBaseDto = new MerBaseDto(); + merBaseDto.setUserId(userId); + merBaseDto.setShopId(appSureOrderDto.getShopId()); + // 获取用户优惠券列表 + List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData(); + + // 将优惠券列表转换为Map,以优惠券ID为键 + Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>(); + if(appMemberCouponVoList!=null&&!appMemberCouponVoList.isEmpty()){ + appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); + } AppMemberCouponVo appMemberCouponVo; Integer couponType; BigDecimal moneyThreshold; @@ -106,28 +188,36 @@ BigDecimal goodsDeposit; GoodsFile goodsFile; Integer useCoupon; + // 初始化订单相关金额 BigDecimal orderGoodsMoney = new BigDecimal("0.00"); BigDecimal couponDiscount = new BigDecimal("0.00"); BigDecimal orderPayDeposit = new BigDecimal("0.00"); BigDecimal orderPayMoney = new BigDecimal("0.00"); + // 遍历购买商品列表 + HashSet<String> userCouponIdSet = new HashSet<>(); for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { appSureOrderGoodsVo = new AppSureOrderGoodsVo(); + discountMoney = BigDecimal.ZERO; useCoupon = 0; goodsId = appBuyGoodsDto.getGoodsId(); buyNum = appBuyGoodsDto.getBuyNum(); memberCouponId = appBuyGoodsDto.getMemberCouponId(); - goods = remoteGoodsService.getGoods(goodsId).getData(); + // 获取商品信息 + goods = goodsMap.get(goodsId); + if(goods.getGoodsStatus()!=1){ + throw new ServiceException(AppErrorConstant.GOODS_DOWN); + } + // 设置订单商品信息 appSureOrderGoodsVo.setGoodsId(goodsId); appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction()); appSureOrderGoodsVo.setGoodsType(goods.getGoodsType()); - //商品图片 + // 获取商品图片 goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl()); - buyNum = appBuyGoodsDto.getBuyNum(); appSureOrderGoodsVo.setBuyNum(buyNum); goodsPrice = goods.getSalesPrice(); - //商户定制价格 + // 获取商户定制价格 AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto(); appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); appShopGoodsGetDto.setShopId(appSureOrderDto.getShopId()); @@ -139,26 +229,38 @@ buyNumBig = BigDecimal.valueOf(buyNum); goodsTotalPrice = goodsPrice.multiply(buyNumBig); goodsRealPrice = goodsTotalPrice; - if (memberCouponId != null) { + // 处理优惠券 + if (StringUtils.isNotBlank(memberCouponId)) { appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId); if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) { couponType = appMemberCouponVo.getCouponType(); if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) { moneyThreshold = appMemberCouponVo.getMoneyThreshold(); - if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { - discountMoney = appMemberCouponVo.getDiscountMoney(); + discountMoney = appMemberCouponVo.getDiscountMoney(); + if (goodsTotalPrice.compareTo(moneyThreshold) >= 0 && goodsTotalPrice.compareTo(discountMoney)>0) { goodsRealPrice = goodsTotalPrice.subtract(discountMoney); useCoupon = 1; + userCouponIdSet.add(memberCouponId); + appSureOrderGoodsVo.setMemberCouponId(memberCouponId); } } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) { discountPercent = appMemberCouponVo.getDiscountPercent(); goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN).setScale(2, BigDecimal.ROUND_HALF_UP); discountMoney = goodsRealPrice.subtract(goodsTotalPrice); useCoupon = 1; + userCouponIdSet.add(memberCouponId); + appSureOrderGoodsVo.setMemberCouponId(memberCouponId); } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) { discountMoney = appMemberCouponVo.getDiscountMoney(); - goodsRealPrice = goodsTotalPrice.subtract(discountMoney); - useCoupon = 1; + if(goodsTotalPrice.compareTo(discountMoney)>0){ + goodsRealPrice = goodsTotalPrice.subtract(discountMoney); + if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){ + goodsRealPrice = BigDecimal.ZERO; + } + useCoupon = 1; + userCouponIdSet.add(memberCouponId); + appSureOrderGoodsVo.setMemberCouponId(memberCouponId); + } } } } @@ -166,35 +268,205 @@ appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); appSureOrderGoodsVo.setCouponDiscount(discountMoney); appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); + // 获取商品押金 goodsDeposit = goods.getSubscription(); - if (goodsDeposit == null) { - goodsDeposit = new BigDecimal("0.00"); + if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) { + goodsDeposit = goodsDeposit.multiply(buyNumBig); + }else{ + if(haveDeposit){ + goodsDeposit = goodsRealPrice; + }else{ + goodsDeposit = new BigDecimal("0.00"); + } } appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit); + // 计算订单总金额 orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice); couponDiscount = couponDiscount.add(discountMoney); orderPayDeposit = orderPayDeposit.add(goodsDeposit); orderPayMoney = orderPayMoney.add(goodsRealPrice); - //商品关联优惠券 - appGoodsMemberCouponVoList = new ArrayList<>(); - if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { - for (AppMemberCouponVo entity : appMemberCouponVoList) { - if (StringUtils.isBlank(entity.getRelGoodsIds())) { - appGoodsMemberCouponVoList.add(entity); - } else if (entity.getRelGoodsIds().contains(goodsId)) { - appGoodsMemberCouponVoList.add(entity); - } - } - appSureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); - } appSureOrderGoodsVoList.add(appSureOrderGoodsVo); } + //处理优惠券列表 + if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { + for (AppMemberCouponVo entity : appMemberCouponVoList) { + if(userCouponIdSet!=null&&userCouponIdSet.contains(entity.getMemberCouponId())){ + entity.setUseFlag(1); + }else{ + entity.setUseFlag(0); + } + + + } + // 过滤商品优惠券列表 + List<AppMemberCouponVo> appGoodsMemberCouponVoList; + for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) { + appGoodsMemberCouponVoList = new ArrayList<>(); + for(AppMemberCouponVo entity : appMemberCouponVoList){ + if(StringUtils.isBlank(entity.getRelGoodsIds())||entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())){ + if(entity.getCouponType()==1){ + if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0&&entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){ + appGoodsMemberCouponVoList.add(entity); + } + }else if(entity.getCouponType()==2){ + appGoodsMemberCouponVoList.add(entity); + }else if(entity.getCouponType()==3){ + if(entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){ + appGoodsMemberCouponVoList.add(entity); + } + } + + } + } + sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); + } + } + /*if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { + // 获取商品关联优惠券 + appGoodsMemberCouponVoList = new ArrayList<>(); + for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList){ + for (AppMemberCouponVo entity : appMemberCouponVoList) { + if (StringUtils.isBlank(entity.getRelGoodsIds())) { + if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) { + moneyThreshold = entity.getMoneyThreshold(); + if (sureOrderGoodsVo.getGoodsTotalPrice().compareTo(moneyThreshold) >= 0) { + if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + }else{ + if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + } + } + } + }else{ + if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + }else{ + if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + } + } + } + } else if (entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())) { + if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) { + moneyThreshold = entity.getMoneyThreshold(); + if (sureOrderGoodsVo.getGoodsTotalPrice().compareTo(moneyThreshold) >= 0) { + if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + }else{ + if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + } + } + } + }else{ + if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + }else{ + if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + } + } + } + } + } + sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); + } + }*/ + // 设置订单相关金额 appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney); appSureOrderVo.setCouponDiscount(couponDiscount); appSureOrderVo.setOrderPayDeposit(orderPayDeposit); appSureOrderVo.setOrderPayMoney(orderPayMoney); + // 设置订单商品列表 appSureOrderVo.setAppSureOrderGoodsVoList(appSureOrderGoodsVoList); return appSureOrderVo; + } + + /** + * @param appPanicBuyDto + * @return AppSureOrderVo + * @description 抢购商品 + * @author jqs + * @date 2023/7/6 11:45 + */ + @Override + public AppPanicBuyVo panicBuyGoods(AppPanicBuyDto appPanicBuyDto) { + Long userId = appPanicBuyDto.getUserId(); + AppPanicBuyVo appPanicBuyVo = new AppPanicBuyVo(); + String activityId = appPanicBuyDto.getActivityId(); + String goodsId = appPanicBuyDto.getGoodsId(); + Integer buyNum = appPanicBuyDto.getBuyNum(); + BigDecimal buyNumBig; + BigDecimal goodsPrice; + BigDecimal goodsTotalPrice; + BigDecimal goodsRealPrice; + BigDecimal goodsDeposit; + BigDecimal goodsActivityPrice; + GoodsFile goodsFile; + BigDecimal orderGoodsMoney = new BigDecimal("0.00"); + BigDecimal orderPayDeposit = new BigDecimal("0.00"); + BigDecimal orderPayMoney = new BigDecimal("0.00"); + ActivityGoodsGetDto activityGoodsGetDto = new ActivityGoodsGetDto(); + activityGoodsGetDto.setActivityId(activityId); + activityGoodsGetDto.setGoodsId(goodsId); + activityGoodsGetDto.setUserId(userId); + ActivityGoodsGetVo activityGoodsGetVo = remoteActivityService.getUserActivityGoods(activityGoodsGetDto).getData(); + if (activityGoodsGetVo.getActivityStatus() == 0) { + throw new ServiceException(AppErrorConstant.ACTIVITY_NO_START); + } + if (activityGoodsGetVo.getActivityStatus() == 2) { + throw new ServiceException(AppErrorConstant.ACTIVITY_END); + } + if (activityGoodsGetVo.getAvailableBuyNum() < 1) { + throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); + } + if (activityGoodsGetVo.getAvailableBuyNum() < buyNum) { + throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND); + } + Goods goods = remoteGoodsService.getGoods(goodsId).getData(); + if(goods.getGoodsStatus()!=1){ + throw new ServiceException(AppErrorConstant.GOODS_DOWN); + } + appPanicBuyVo.setGoodsId(goodsId); + appPanicBuyVo.setGoodsName(goods.getGoodsName()); + appPanicBuyVo.setGoodsIntroduction(goods.getGoodsIntroduction()); + appPanicBuyVo.setGoodsType(goods.getGoodsType()); + //商品图片 + goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); + appPanicBuyVo.setGoodsPicture(goodsFile.getFileUrl()); + appPanicBuyVo.setBuyNum(buyNum); + goodsPrice = goods.getSalesPrice(); + //商户定制价格 + AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto(); + appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); + appShopGoodsGetDto.setShopId(appPanicBuyDto.getShopId()); + ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); + if (shopGoods != null) { + goodsPrice = shopGoods.getSalesPrice(); + } + appPanicBuyVo.setGoodsPrice(goodsPrice); + buyNumBig = BigDecimal.valueOf(buyNum); + goodsActivityPrice = activityGoodsGetVo.getActivityPrice(); + goodsTotalPrice = goodsActivityPrice.multiply(buyNumBig); + goodsRealPrice = goodsTotalPrice; + appPanicBuyVo.setActivityPrice(goodsActivityPrice); + appPanicBuyVo.setGoodsTotalPrice(goodsTotalPrice); + appPanicBuyVo.setGoodsRealPrice(goodsRealPrice); + goodsDeposit = activityGoodsGetVo.getActivitySubscription(); + if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) { + goodsDeposit = new BigDecimal("0.00"); + }else{ + goodsDeposit = goodsDeposit.multiply(buyNumBig); + } + appPanicBuyVo.setGoodsDeposit(goodsDeposit); + orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice); + orderPayDeposit = orderPayDeposit.add(goodsDeposit); + orderPayMoney = orderPayMoney.add(goodsRealPrice); + appPanicBuyVo.setOrderGoodsMoney(orderGoodsMoney); + appPanicBuyVo.setOrderPayDeposit(orderPayDeposit); + appPanicBuyVo.setOrderPayMoney(orderPayMoney); + return appPanicBuyVo; } /** @@ -204,75 +476,115 @@ * @return */ @Override + @Transactional public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) { + // 获取用户ID Long userId = appPlaceOrderDto.getUserId(); + // 创建下单视图对象 AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo(); + // 创建商品列表 List<AppSureOrderGoodsVo> appSureOrderGoodsVoList = new ArrayList<>(); AppSureOrderGoodsVo appSureOrderGoodsVo; + // 获取购买的商品列表 List<AppBuyGoodsDto> appBuyGoodsDtoList = appPlaceOrderDto.getAppBuyGoodsDtoList(); + StringJoiner goodsIdSJ = new StringJoiner(","); + for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { + goodsIdSJ.add(appBuyGoodsDto.getGoodsId()); + } + //获取商品列表 + List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIdSJ.toString()).getData(); + Map<String, Goods> goodsMap = goodsList.stream() + .collect(Collectors.toMap(Goods::getGoodsId, Function.identity())); + Boolean haveDeposit = false; + for(Goods goods : goodsList){ + if(goods.getSubscription()!=null&&goods.getSubscription().compareTo(BigDecimal.ZERO)>0){ + haveDeposit = true; + } + } + // 初始化变量 String goodsId; Integer buyNum; BigDecimal buyNumBig; Integer serviceNum; Integer goodsNum = 0; - Long memberCouponId; + String memberCouponId; Goods goods; + GoodsFile goodsFile; BigDecimal goodsPrice; BigDecimal goodsTotalPrice; BigDecimal goodsRealPrice; - List<AppMemberCouponVo> appMemberCouponVoList = remoteMemberService.listVoMemberCouponByUserId(userId).getData(); - Map<Long, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); + MerBaseDto merBaseDto = new MerBaseDto(); + merBaseDto.setUserId(userId); + merBaseDto.setShopId(appPlaceOrderDto.getShopId()); + // 获取用户优惠券列表 + List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData(); + // 将用户优惠券列表转换为Map,方便后续查找 + Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); AppMemberCouponVo appMemberCouponVo; Integer couponType; BigDecimal moneyThreshold; BigDecimal discountMoney = new BigDecimal("0.00"); BigDecimal discountPercent; BigDecimal goodsDeposit; - GoodsFile goodsFile; Integer useCoupon; BigDecimal orderGoodsMoney = new BigDecimal("0.00"); BigDecimal couponDiscount = new BigDecimal("0.00"); BigDecimal orderPayDeposit = new BigDecimal("0.00"); BigDecimal orderPayMoney = new BigDecimal("0.00"); + // 创建订单ID和订单号 String orderId = IdUtils.simpleUUID(); String orderNo = CodeFactoryUtil.getShopOrderNo(); OrderGoods orderGoods; String orderGoodsId; + // 创建商品类型集合,用于记录订单中所有商品的类型 HashSet<String> goodsTypeSet = new HashSet<>(); + //使用优惠券 + StringJoiner memberCouponSJ = new StringJoiner(","); + // 遍历购买的商品列表 for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { appSureOrderGoodsVo = new AppSureOrderGoodsVo(); useCoupon = 0; + // 获取商品ID和优惠券ID goodsId = appBuyGoodsDto.getGoodsId(); memberCouponId = appBuyGoodsDto.getMemberCouponId(); - goods = remoteGoodsService.getGoods(goodsId).getData(); + // 获取商品信息 + goods = goodsMap.get(goodsId); + // 设置商品信息 appSureOrderGoodsVo.setGoodsId(goodsId); appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction()); appSureOrderGoodsVo.setGoodsType(goods.getGoodsType()); - //商品图片 + // 获取商品图片 goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl()); + // 获取购买数量 buyNum = appBuyGoodsDto.getBuyNum(); appSureOrderGoodsVo.setBuyNum(buyNum); + // 获取商品价格和服务数量 goodsPrice = goods.getSalesPrice(); serviceNum = goods.getServiceNum(); - //商户定制价格 + // 获取商户定制价格 AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto(); appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); appShopGoodsGetDto.setShopId(appPlaceOrderDto.getShopId()); ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); + // 如果商户定制价格存在,则使用商户定制价格和服务数量 if (shopGoods != null) { goodsPrice = shopGoods.getSalesPrice(); serviceNum = shopGoods.getServiceNum(); } appSureOrderGoodsVo.setGoodsPrice(goodsPrice); + // 计算商品总价 buyNumBig = BigDecimal.valueOf(buyNum); goodsTotalPrice = goodsPrice.multiply(buyNumBig); goodsRealPrice = goodsTotalPrice; + // 如果使用了优惠券,计算优惠后的价格 if (memberCouponId != null) { appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId); + // 如果优惠券适用于该商品 if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) { couponType = appMemberCouponVo.getCouponType(); + // 根据优惠券类型计算优惠后的价格 if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) { moneyThreshold = appMemberCouponVo.getMoneyThreshold(); if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { @@ -291,22 +603,31 @@ useCoupon = 1; } } + memberCouponSJ.add(memberCouponId); } appSureOrderGoodsVo.setUseCoupon(useCoupon); appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); appSureOrderGoodsVo.setCouponDiscount(discountMoney); appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); + // 获取商品押金 goodsDeposit = goods.getSubscription(); - if (goodsDeposit == null) { - goodsDeposit = new BigDecimal("0.00"); + if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) { + goodsDeposit = goodsDeposit.multiply(buyNumBig); + }else{ + if(haveDeposit){ + goodsDeposit = goodsRealPrice; + }else{ + goodsDeposit = new BigDecimal("0.00"); + } } appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit); + // 计算商品总数量、商品总价、优惠总金额、支付押金、支付金额 goodsNum = goodsNum + buyNum; orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice); couponDiscount = couponDiscount.add(discountMoney); orderPayDeposit = orderPayDeposit.add(goodsDeposit); orderPayMoney = orderPayMoney.add(goodsRealPrice); - //创建OrderGoods + // 创建订单商品 orderGoods = new OrderGoods(); orderGoodsId = IdUtils.simpleUUID(); orderGoods.setOrderGoodsId(orderGoodsId); @@ -318,17 +639,22 @@ orderGoods.setCouponId(memberCouponId.toString()); } orderGoods.setGoodsPrice(goodsPrice); + orderGoods.setGoodsDeposit(goodsDeposit); orderGoods.setGoodsTotalMoney(orderGoodsMoney); orderGoods.setGoodsReceivableMoney(goodsRealPrice); orderGoods.setCycleNumFlag(goods.getCycleNumFlag()); orderGoods.setServiceNum(serviceNum); orderGoods.setGoodsType(goods.getGoodsType()); + orderGoods.setGoodsName(goods.getGoodsName()); + orderGoods.setGoodsPicture(goodsFile.getFileUrl()); + // 保存订单商品 orderGoodsService.save(orderGoods); - //清空购物车 + // 清空购物车 AppShoppingCartDelDto appShoppingCartDelDto = new AppShoppingCartDelDto(); appShoppingCartDelDto.setGoodsId(goodsId); appShoppingCartDelDto.setUserId(userId); remoteShoppingCartService.deleteShoppingCart(appShoppingCartDelDto); + // 记录商品类型 if (goods.getGoodsType() == 1) { goodsTypeSet.add("周期"); } else if (goods.getGoodsType() == 2) { @@ -339,11 +665,11 @@ goodsTypeSet.add("单品"); } } + // 创建订单 Order order = new Order(); order.setOrderId(orderId); order.setDelFlag(0); - //为对接支付 直接付款成功 - order.setOrderStatus(2); + order.setOrderStatus(1); order.setOrderNo(orderNo); order.setOrderFrom(1); order.setShopId(appPlaceOrderDto.getShopId()); @@ -353,25 +679,29 @@ order.setDiscountMoney(couponDiscount); order.setReceivableMoney(orderPayMoney); order.setReceivableDeposit(orderPayDeposit); - order.setPayType(appPlaceOrderDto.getPayType()); - if (order.getPayType() == 1) { + order.setChangeReceivableMoney(orderPayMoney); + // 根据支付类型计算支付金额 + if (appPlaceOrderDto.getPayType() == 1) { order.setPayMoney(orderPayMoney); order.setOnlinePayMoney(orderPayMoney); appPlaceOrderVo.setPayMoney(orderPayMoney); appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); + order.setPayType(1); order.setCloseFlag(1); - } else if (order.getPayType() == 2) { + } else if (appPlaceOrderDto.getPayType() == 2) { order.setPayMoney(orderPayDeposit); order.setOnlinePayMoney(orderPayDeposit); appPlaceOrderVo.setPayMoney(orderPayDeposit); appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); + order.setPayType(2); order.setCloseFlag(0); } order.setOrderRemark(appPlaceOrderDto.getOrderRemark()); order.setGoodsNum(goodsNum); order.setCreateTime(new Date()); + // 保存订单 this.save(order); - //更新用户商品类型 + // 更新用户商品类型 if (goodsTypeSet != null && goodsTypeSet.size() > 0) { AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto(); appMemberGoodsTypeDto.setUserId(userId); @@ -380,12 +710,339 @@ } appPlaceOrderVo.setOrderId(orderId); appPlaceOrderVo.setOrderNo(orderNo); + // 调用支付 + /* CombineTransactionsJsRequest request=new CombineTransactionsJsRequest(); + request.setCombineAppid(); + request.setCombineMchid(); + profitsSharingService.combineTransactions(request);*/ - //调用支付 + //构建预下单支付对象 + /*PrepayRequest request = new PrepayRequest(); + Amount amount = new Amount(); + amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString())); + request.setAmount(amount); + request.setAppid(this.appId); + request.setMchid(this.mchId); + request.setDescription(order.getGoodsInfo()); + request.setNotifyUrl(this.notifyUrl); + request.setOutTradeNo(order.getOrderId()); + Payer payer = new Payer(); + payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********"); + request.setPayer(payer);*/ + //返回前端唤醒支付结果信息 + /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request); + appPlaceOrderVo.setAppId(this.appId); + appPlaceOrderVo.setTimeStamp(res.getTimeStamp()); + appPlaceOrderVo.setNonceStr(res.getNonceStr()); + appPlaceOrderVo.setPackageStr(res.getPackageVal()); + appPlaceOrderVo.setTradeType(res.getSignType()); + appPlaceOrderVo.setPaySign(res.getPaySign());*/ + //减去优惠券 + if(memberCouponSJ!=null&&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); + } + 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; } + + + /** + * @param appPlaceActivityDto + * @return AppPlaceOrderVo + * @description 创建活动订单 + * @author jqs + * @date 2023/7/6 17:59 + */ + @Override + @Transactional + public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) { + Long userId = appPlaceActivityDto.getUserId(); + // 创建订单对象 + AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo(); + // 定义商品订单对象 + AppSureOrderGoodsVo appSureOrderGoodsVo; + // 获取活动ID,商品ID,购买数量 + String activityId = appPlaceActivityDto.getActivityId(); + String goodsId = appPlaceActivityDto.getGoodsId(); + Integer buyNum = appPlaceActivityDto.getBuyNum(); + //redis库存控制极简版 + String goodsLock = "goods_lock_"+activityId+"_"+goodsId; + RLock redissonLock = redissonClient.getLock(goodsLock); + try{ + redissonLock.lock(30, TimeUnit.SECONDS); + Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId); + if(surpNum==null||surpNum<buyNum){ + throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); + }else{ + redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId,surpNum-buyNum); + } + }finally{ + redissonLock.unlock(); + } + // 定义购买数量,服务数量,商品数量 + BigDecimal buyNumBig; + Integer serviceNum; + Integer goodsNum = 0; + // 定义商品,商品文件,商品价格,商品总价,商品实际价格,折扣金额,折扣百分比,商品押金,使用优惠券,订单商品金额,优惠券折扣,订单支付押金,订单支付金额 + Goods goods; + GoodsFile goodsFile; + BigDecimal goodsPrice; + BigDecimal goodsTotalPrice; + BigDecimal goodsRealPrice; + BigDecimal discountMoney = new BigDecimal("0.00"); + BigDecimal discountPercent; + BigDecimal goodsDeposit; + Integer useCoupon; + BigDecimal orderGoodsMoney = new BigDecimal("0.00"); + BigDecimal couponDiscount = new BigDecimal("0.00"); + BigDecimal orderPayDeposit = new BigDecimal("0.00"); + BigDecimal orderPayMoney = new BigDecimal("0.00"); + // 创建活动商品对象,并设置活动ID,商品ID,用户ID + ActivityGoodsGetDto activityGoodsGetDto = new ActivityGoodsGetDto(); + activityGoodsGetDto.setActivityId(activityId); + activityGoodsGetDto.setGoodsId(goodsId); + activityGoodsGetDto.setUserId(userId); + // 获取用户活动商品 + ActivityGoodsGetVo activityGoodsGetVo = remoteActivityService.getUserActivityGoods(activityGoodsGetDto).getData(); + // 检查活动状态 + if (activityGoodsGetVo.getActivityStatus() == 0) { + throw new ServiceException(AppErrorConstant.ACTIVITY_NO_START); + } + if (activityGoodsGetVo.getActivityStatus() == 2) { + throw new ServiceException(AppErrorConstant.ACTIVITY_END); + } + if (activityGoodsGetVo.getAvailableBuyNum() < 1) { + throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); + } + if (activityGoodsGetVo.getAvailableBuyNum() < buyNum) { + throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND); + } + // 创建订单ID和订单号 + String orderId = IdUtils.simpleUUID(); + String orderNo = CodeFactoryUtil.getShopOrderNo(); + // 创建订单商品对象和订单商品ID + OrderGoods orderGoods; + String orderGoodsId; + // 创建商品类型集合 + HashSet<String> goodsTypeSet = new HashSet<>(); + HashSet<String> goodsNurseSet = new HashSet<>(); + // 创建商品订单对象,并设置商品ID,商品名称,商品介绍,商品类型 + appSureOrderGoodsVo = new AppSureOrderGoodsVo(); + useCoupon = 0; + goodsId = appPlaceActivityDto.getGoodsId(); + goods = remoteGoodsService.getGoods(goodsId).getData(); + appSureOrderGoodsVo.setGoodsId(goodsId); + appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); + appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction()); + appSureOrderGoodsVo.setGoodsType(goods.getGoodsType()); + // 获取商品图片 + goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); + appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl()); + // 设置购买数量,商品价格,服务数量 + appSureOrderGoodsVo.setBuyNum(buyNum); + goodsPrice = goods.getSalesPrice(); + serviceNum = goods.getServiceNum(); + // 获取活动价格 + goodsPrice = activityGoodsGetVo.getActivityPrice(); + appSureOrderGoodsVo.setGoodsPrice(goodsPrice); + // 计算商品总价,商品实际价格 + buyNumBig = BigDecimal.valueOf(buyNum); + goodsTotalPrice = goodsPrice.multiply(buyNumBig); + goodsRealPrice = goodsTotalPrice; + // 设置使用优惠券,商品总价,优惠券折扣,商品实际价格 + appSureOrderGoodsVo.setUseCoupon(useCoupon); + appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); + appSureOrderGoodsVo.setCouponDiscount(discountMoney); + appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); + // 获取商品押金 + goodsDeposit = activityGoodsGetVo.getActivitySubscription(); + if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) { + goodsDeposit = new BigDecimal("0.00"); + }else{ + goodsDeposit = goodsDeposit.multiply(buyNumBig); + } + appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit); + // 计算商品数量,订单商品金额,优惠券折扣,订单支付押金,订单支付金额 + goodsNum = goodsNum + buyNum; + orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice); + couponDiscount = couponDiscount.add(discountMoney); + orderPayDeposit = orderPayDeposit.add(goodsDeposit); + orderPayMoney = orderPayMoney.add(goodsRealPrice); + // 创建订单商品,并设置订单商品ID,删除标志,订单ID,商品ID,购买数量,商品价格,商品押金,商品总金额,商品应收金额,周期数量标志,服务数量,商品类型,商品名称,商品图片 + orderGoods = new OrderGoods(); + orderGoodsId = IdUtils.simpleUUID(); + orderGoods.setOrderGoodsId(orderGoodsId); + orderGoods.setDelFlag(0); + orderGoods.setOrderId(orderId); + orderGoods.setGoodsId(goodsId); + orderGoods.setBuyNum(buyNum); + orderGoods.setGoodsPrice(goodsPrice); + orderGoods.setGoodsDeposit(goodsDeposit); + orderGoods.setGoodsTotalMoney(orderGoodsMoney); + orderGoods.setGoodsReceivableMoney(goodsRealPrice); + orderGoods.setCycleNumFlag(goods.getCycleNumFlag()); + orderGoods.setServiceNum(serviceNum); + orderGoods.setGoodsType(goods.getGoodsType()); + orderGoods.setGoodsName(goods.getGoodsName()); + orderGoods.setGoodsPicture(goodsFile.getFileUrl()); + // 保存订单商品 + orderGoodsService.save(orderGoods); + // 清空购物车 + AppShoppingCartDelDto appShoppingCartDelDto = new AppShoppingCartDelDto(); + appShoppingCartDelDto.setGoodsId(goodsId); + appShoppingCartDelDto.setUserId(userId); + remoteShoppingCartService.deleteShoppingCart(appShoppingCartDelDto); + // 根据商品类型添加到商品类型集合中 + if (goods.getGoodsType() == 1) { + goodsTypeSet.add("周期"); + } else if (goods.getGoodsType() == 2) { + goodsTypeSet.add("服务"); + } else if (goods.getGoodsType() == 3) { + goodsTypeSet.add("体验"); + } else if (goods.getGoodsType() == 4) { + goodsTypeSet.add("单品"); + } + String goodsNurse = goods.getGoodsNurses(); + if(StringUtils.isNotBlank(goodsNurse)){ + String[] goodsNurseArr = goodsNurse.split(","); + for(String str : goodsNurseArr){ + goodsNurseSet.add(str); + } + } + // 创建订单,并设置订单ID,删除标志,订单状态,订单号,订单来源,店铺ID,用户ID,订单金额,优惠券金额,折扣金额,应收金额,应收押金,变动应收金额,支付类型 + Order order = new Order(); + order.setOrderId(orderId); + order.setDelFlag(0); + order.setOrderStatus(1); + order.setOrderNo(orderNo); + order.setOrderFrom(2); + order.setShopId(appPlaceActivityDto.getShopId()); + order.setUserId(userId); + order.setOrderMoney(orderGoodsMoney); + order.setCouponMoney(couponDiscount); + order.setDiscountMoney(couponDiscount); + order.setReceivableMoney(orderPayMoney); + order.setReceivableDeposit(orderPayDeposit); + order.setChangeReceivableMoney(orderPayMoney); + // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志 + if (appPlaceActivityDto.getPayType() == 1) { + order.setPayMoney(orderPayMoney); + order.setOnlinePayMoney(orderPayMoney); + appPlaceOrderVo.setPayMoney(orderPayMoney); + appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); + order.setPayType(1); + order.setCloseFlag(1); + } else if (appPlaceActivityDto.getPayType() == 2) { + order.setPayMoney(orderPayDeposit); + order.setOnlinePayMoney(orderPayDeposit); + appPlaceOrderVo.setPayMoney(orderPayDeposit); + appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); + order.setPayType(2); + order.setCloseFlag(0); + } + // 设置订单备注,商品数量,创建时间 + order.setOrderRemark(appPlaceActivityDto.getOrderRemark()); + order.setGoodsNum(goodsNum); + order.setCreateTime(new Date()); + // 保存订单 + this.save(order); + // 更新用户商品类型 + if (goodsTypeSet != null || goodsNurseSet!= null) { + AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto(); + appMemberGoodsTypeDto.setUserId(userId); + appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet); + appMemberGoodsTypeDto.setGoodsNurseSet(goodsNurseSet); + remoteMemberService.updateMemberGoodsType(appMemberGoodsTypeDto); + } + // 设置订单ID和订单号 + appPlaceOrderVo.setOrderId(orderId); + appPlaceOrderVo.setOrderNo(orderNo); + //改变活动库存 + AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); + agStockChangeDto.setActivityId(activityId); + agStockChangeDto.setGoodsId(goodsId); + agStockChangeDto.setChangeType(2); + agStockChangeDto.setChangeNum(buyNum); + agStockChangeDto.setShopId(order.getShopId()); + agStockChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityStock(agStockChangeDto); + // 调用支付 + /*PrepayRequest request = new PrepayRequest(); + Amount amount = new Amount(); + amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString())); + request.setAmount(amount); + request.setAppid(this.appId); + request.setMchid(this.mchId); + request.setDescription(order.getGoodsInfo()); + request.setNotifyUrl(this.notifyUrl); + request.setOutTradeNo(order.getOrderId()); + Payer payer = new Payer(); + // TODO 获取openID + payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********"); + + request.setPayer(payer);*/ + + //设置订单允许分账 秒杀活动才允许分账 + /*if(order.getOrderFrom()==2){ + SettleInfo settleInfo=new SettleInfo(); + settleInfo.setProfitSharing(true); + request.setSettleInfo(settleInfo); + }*/ + + + //返回前端唤醒支付结果信息 + /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request); + + appPlaceOrderVo.setAppId(this.appId); + appPlaceOrderVo.setTimeStamp(res.getTimeStamp()); + appPlaceOrderVo.setNonceStr(res.getNonceStr()); + appPlaceOrderVo.setPackageStr(res.getPackageVal()); + appPlaceOrderVo.setTradeType(res.getSignType()); + appPlaceOrderVo.setPaySign(res.getPaySign()); +*/ + //生成活动参加记录 + ActivityRecord activityRecord = new ActivityRecord(); + activityRecord.setDelFlag(0); + activityRecord.setActivityId(activityId); + activityRecord.setUserId(userId); + activityRecord.setOrderTime(order.getCreateTime()); + activityRecord.setOrderMoney(order.getOrderMoney()); + activityRecord.setOrderId(orderId); + activityRecord.setCreateTime(new Date()); + activityRecord.setBuyNum(orderGoods.getBuyNum()); + 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; + } + /** * 分页获取用户订单 @@ -410,6 +1067,10 @@ Shop shopTemp = remoteShopService.getShop(shopIdLong).getData(); shopMap.put(shopIdLong, shopTemp); }); + Integer delayTime = 30; + if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ + delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); + } for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) { shop = shopMap.get(appUserOrderPageVo.getShopId()); appUserOrderPageVo.setShopName(shop.getShopName()); @@ -420,6 +1081,7 @@ appUserOrderPageVo.setSameShop(0); } appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId()); + appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(),delayTime)); } } return appUserOrderPageVoList; @@ -444,6 +1106,7 @@ appUserOrderGetVo.setCouponDiscount(order.getCouponMoney()); appUserOrderGetVo.setReceivableDeposit(order.getReceivableDeposit()); appUserOrderGetVo.setReceivableMoney(order.getReceivableMoney()); + appUserOrderGetVo.setPayType(order.getPayType()); appUserOrderGetVo.setPayMoney(order.getPayMoney()); appUserOrderGetVo.setOrderRemark(order.getOrderRemark()); appUserOrderGetVo.setShopId(order.getShopId()); @@ -467,12 +1130,13 @@ @Override public void cancelOrder(String orderId) { Order order = this.getById(orderId); - if (order.getOrderStatus() != 1) { + if (order.getOrderStatus() == 1) { + this.autoCancelOrder(orderId); + }else if(order.getOrderStatus() == 2){ + this.refundOrder(orderId); + }else{ throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER); } - order.setOrderStatus(0); - order.setCancelTime(new Date()); - this.saveOrUpdate(order); } /** @@ -504,16 +1168,9 @@ @Override public MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo) { Long shopId = merHomeShopTotalVo.getShopId(); - Integer todayShop = 0; - Integer unHandleOrder = 0; - BigDecimal shopTurnover = new BigDecimal("0.00"); - Integer cycleSurp = 0; - Integer explorationSurp = 0; + Integer todayShop = userServiceRecordService.countShopServicePerson(shopId); + merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId); merHomeShopTotalVo.setTodayShop(todayShop); - merHomeShopTotalVo.setUnHandleOrder(unHandleOrder); - merHomeShopTotalVo.setShopTurnover(shopTurnover); - merHomeShopTotalVo.setCycleSurp(cycleSurp); - merHomeShopTotalVo.setExplorationSurp(explorationSurp); return merHomeShopTotalVo; } @@ -524,10 +1181,20 @@ * @return */ @Override - public MerVerifyOrderVo verifyOrder(String orderId) { + public MerVerifyOrderVo verifyOrder(String orderId, Long shopId) { + // 创建返回对象 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); + // 根据订单ID获取订单信息 Order order = this.getById(orderId); + if (order.getOrderStatus() != 2) { + throw new ServiceException(AppErrorConstant.VERIFY_USED); + } + if (!order.getShopId().equals(shopId)) { + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + // 根据订单ID获取订单商品列表 List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId); + // 设置返回对象的属性值 merVerifyOrderVo.setOrderId(orderId); merVerifyOrderVo.setOrderNo(order.getOrderNo()); merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); @@ -542,10 +1209,12 @@ merVerifyOrderVo.setPayTime(order.getPayTime()); merVerifyOrderVo.setUseTime(order.getUseTime()); merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); - SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData(); - merVerifyOrderVo.setUserName(sysUser.getNickName()); - merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber()); + // 根据订单用户ID获取用户信息 + Member member = remoteMemberService.getMember(order.getUserId()).getData(); + merVerifyOrderVo.setUserName(member.getRealName()); + merVerifyOrderVo.setUserMobile(member.getMobile()); merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); + // 返回结果 return merVerifyOrderVo; } @@ -556,6 +1225,7 @@ * @return */ @Override + @Transactional public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto) { String orderId = merVerifyOrderDto.getOrderId(); BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney(); @@ -563,22 +1233,40 @@ Date nowTime = new Date(); //更新订单信息 Order order = this.getById(orderId); + if (order.getOrderStatus() != 2) { + throw new ServiceException(AppErrorConstant.VERIFY_USED); + } + + ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyOrderDto.getUserId()).getData(); + if(!shopRelUserVo.getShopId().equals(order.getShopId())){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } order.setOrderStatus(3); order.setUseTime(nowTime); order.setUseUserId(merVerifyOrderDto.getUserId()); order.setOfflinePayMoney(relPayMoney); order.setOffPayTime(nowTime); - order.setPayMoney(relReceiveMoney.add(relPayMoney)); + order.setPayMoney(order.getPayMoney().add(relPayMoney)); order.setCloseFlag(1); + order.setChangeReceivableMoney(relReceiveMoney); this.saveOrUpdate(order); //创建服务商品 List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId); + StringJoiner goodsIdSj = new StringJoiner(","); + for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) { + goodsIdSj.add(appUserOrderGoodsPageVo.getGoodsId()); + } + String goodsIds = goodsIdSj.toString(); + List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIds).getData(); + Map<String, Goods> goodsMap = goodsList.stream() + .collect(Collectors.toMap(Goods::getGoodsId, Function.identity())); ConsumerGoods consumerGoods; String consumerGoodsId; Goods goods; + List<ConsumerGoods> consumerGoodsList = new ArrayList<>(); for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) { consumerGoods = new ConsumerGoods(); - goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData(); + goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId()); consumerGoodsId = IdUtils.simpleUUID(); consumerGoods.setConsumerGoodsId(consumerGoodsId); consumerGoods.setDelFlag(0); @@ -597,8 +1285,10 @@ consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture()); consumerGoods.setGoodsNurses(goods.getGoodsNurses()); - consumerGoodsService.save(consumerGoods); + consumerGoods.setSourceFrom(1); + consumerGoodsList.add(consumerGoods); } + consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); //生成返回 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); merVerifyOrderVo.setOrderId(orderId); @@ -615,11 +1305,206 @@ merVerifyOrderVo.setCreateTime(order.getCreateTime()); merVerifyOrderVo.setPayTime(order.getPayTime()); merVerifyOrderVo.setUseTime(order.getUseTime()); - SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData(); - merVerifyOrderVo.setUserName(sysUser.getNickName()); - merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber()); + Member member = remoteMemberService.getMember(order.getUserId()).getData(); + merVerifyOrderVo.setUserName(member.getRealName()); + merVerifyOrderVo.setUserMobile(member.getMobile()); + merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); + // + if(order.getOrderFrom()==2){ + + //profitsSharingService.applyProfitSharing(); + } return merVerifyOrderVo; + } + + /** + * @param merVerifyCouponDto + * @return MerVerifyCouponVo + * @description 确认核销优惠券 + * @author jqs + * @date 2023/6/28 11:26 + */ + @Override + @Transactional + public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) { + MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData(); + ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyCouponDto.getUserId()).getData(); + if(!shopRelUserVo.getShopId().equals(verifyCouponGetVo.getMemberCoupon().getShopId())){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + // 创建MerVerifyCouponVo对象 + MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo(); + // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象 + List<Goods> goodsList = verifyCouponGetVo.getGoodsList(); + Long userId = verifyCouponGetVo.getUserId(); + // 调用remoteMemberService的getMember方法获取Member对象 + Member member = remoteMemberService.getMember(userId).getData(); + merVerifyCouponVo.setUserName(member.getRealName()); + merVerifyCouponVo.setUserMobile(member.getMobile()); + merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom()); + merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName()); + merVerifyCouponVo.setCreateTime(verifyCouponGetVo.getMemberCoupon().getReceiveTime()); + // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性 + List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream() + .map(goods -> { + MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo(); + merCouponGoods.setGoodsId(goods.getGoodsId()); + merCouponGoods.setGoodsName(goods.getGoodsName()); + if (goods.getGoodsType() == 1) { + merCouponGoods.setGoodsType("周期"); + } else if (goods.getGoodsType() == 2) { + merCouponGoods.setGoodsType("服务"); + } else if (goods.getGoodsType() == 3) { + merCouponGoods.setGoodsType("体验"); + } else if (goods.getGoodsType() == 4) { + merCouponGoods.setGoodsType("单品"); + } + // 设置其他属性 + return merCouponGoods; + }) + .collect(Collectors.toList()); + // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList + merVerifyCouponVo.setGoodsList(merCouponGoodsList); + MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon(); + //生成服务 + ConsumerGoods consumerGoods; + String consumerGoodsId; + GoodsFile goodsFile; + AppShopGoodsGetDto appShopGoodsGetDto; + ShopGoods shopGoods; + List<ConsumerGoods> consumerGoodsList = new ArrayList<>(); + for (Goods goods : goodsList) { + consumerGoods = new ConsumerGoods(); + consumerGoodsId = IdUtils.simpleUUID(); + consumerGoods.setConsumerGoodsId(consumerGoodsId); + consumerGoods.setDelFlag(0); + consumerGoods.setServiceStatus(1); + consumerGoods.setShopId(memberCoupon.getShopId()); + consumerGoods.setUserId(memberCoupon.getUserId()); + consumerGoods.setSourceFrom(2); + consumerGoods.setMemberCouponId(memberCoupon.getId()); + consumerGoods.setGoodsId(goods.getGoodsId()); + consumerGoods.setGoodsName(goods.getGoodsName()); + consumerGoods.setCycleNumFlag(goods.getCycleNumFlag()); + consumerGoods.setServiceNum(goods.getServiceNum()); + appShopGoodsGetDto = new AppShopGoodsGetDto(); + appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); + appShopGoodsGetDto.setShopId(memberCoupon.getShopId()); + //获取商户服务次数 + shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); + if(shopGoods!=null){ + consumerGoods.setServiceNum(shopGoods.getServiceNum()); + } + consumerGoods.setUsedNum(0); + consumerGoods.setGoodsType(goods.getGoodsType()); + consumerGoods.setCreateTime(new Date()); + consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); + goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData(); + consumerGoods.setGoodsPicture(goodsFile.getFileUrl()); + consumerGoods.setGoodsNurses(goods.getGoodsNurses()); + consumerGoods.setSourceFrom(1); + consumerGoodsList.add(consumerGoods); + } + consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); + merVerifyCouponVo.setVerifyStatus(2); + return merVerifyCouponVo; + } + + + /** + * @description 确认核销奖品 + * @author jqs + * @date 2023/7/9 9:54 + * @param merVerifyPrizeDto + * @return MerVerifyAwardVo + */ + @Override + @Transactional + public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto){ + MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo(); + MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData(); + if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){ + throw new ServiceException(AppErrorConstant.COUPON_USED); + } + ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyPrizeDto.getUserId()).getData(); + if(!shopRelUserVo.getShopId().equals(memberGiftRecord.getShopId())){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); + merVerifyAwardVo.setUserName(member.getRealName()); + merVerifyAwardVo.setUserMobile(member.getMobile()); + if(memberGiftRecord.getGiftFrom()==1){ + merVerifyAwardVo.setGiftFrom("平台生日卡"); + }else{ + merVerifyAwardVo.setGiftFrom("商户生日卡"); + } + merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType()); + List<BirthdayGiftSendDto> giftSendDtoList = new ArrayList<>(); + BirthdayGiftSendDto birthdayGiftSendDto = new BirthdayGiftSendDto(); + switch(memberGiftRecord.getGiftType()){ + case 1: + merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); + merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber())); + birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId()); + birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType()); + birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom()); + birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId()); + birthdayGiftSendDto.setCouponId(memberGiftRecord.getCouponId()); + birthdayGiftSendDto.setCouponNumber(memberGiftRecord.getCouponNumber()); + giftSendDtoList.add(birthdayGiftSendDto); + remoteCouponService.sendCouponGift(giftSendDtoList); + break; + case 2: + Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData(); + merVerifyAwardVo.setGiftName(memberGiftRecord.getGoodsName()); + merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGoodsNumber())); + if (goods.getGoodsType() == 1) { + merVerifyAwardVo.setGiftRemark("周期"); + } else if (goods.getGoodsType() == 2) { + merVerifyAwardVo.setGiftRemark("服务"); + } else if (goods.getGoodsType() == 3) { + merVerifyAwardVo.setGiftRemark("体验"); + } else if (goods.getGoodsType() == 4) { + merVerifyAwardVo.setGiftRemark("单品"); + } + birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId()); + birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType()); + birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom()); + birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId()); + birthdayGiftSendDto.setGoodsId(memberGiftRecord.getGoodsId()); + birthdayGiftSendDto.setGoodsNumber(memberGiftRecord.getGoodsNumber()); + giftSendDtoList.add(birthdayGiftSendDto); + consumerGoodsService.sendGoodsGift(giftSendDtoList); + break; + case 3: + merVerifyAwardVo.setGiftName("现金"); + merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue()); + break; + case 4: + merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName()); + merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGiftNumber())); + break; + default: + break; + } + merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime()); + memberGiftRecord.setVerifyStatus(2); + memberGiftRecord.setVerifyTime(new Date()); + if(member.getBindingFlag()!=1){ + AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); + appMemberBindingDto.setBindingFlag(1); + appMemberBindingDto.setShopId(merVerifyPrizeDto.getShopId()); + Shop shop = remoteShopService.getShop(merVerifyPrizeDto.getShopId()).getData(); + appMemberBindingDto.setShopName(shop.getShopName()); + appMemberBindingDto.setUserId(merVerifyPrizeDto.getUserId()); + remoteMemberService.updateMemberBinding(appMemberBindingDto); + } + merVerifyAwardVo.setPrizeId(merVerifyPrizeDto.getPrizeId()); + merVerifyAwardVo.setVerifyStatus(2); + return merVerifyAwardVo; + } + /** * 收银未结清订单列表 @@ -667,6 +1552,8 @@ public void createNewOrder(MerNewOrderDto merNewOrderDto) { Long userId = merNewOrderDto.getBuyUserId(); Date nowTime = new Date(); + Long shopId = merNewOrderDto.getShopId(); + Shop shop = remoteShopService.getShop(shopId).getData(); //如果非指定用户判断是否需要通过手机号创建新用户 if (userId == null) { String name = merNewOrderDto.getName(); @@ -694,6 +1581,9 @@ member.setMobile(mobile); member.setRealName(name); member.setNickName(name); + member.setBindingFlag(1); + member.setRelationShopId(shopId); + member.setRelationShopName(shop.getShopName()); remoteMemberService.createNewMember(member); } userId = sysUser.getUserId(); @@ -705,19 +1595,19 @@ BigDecimal buyNumBig; Integer serviceNum; Integer goodsNum = 0; - Long memberCouponId; + String memberCouponId; Goods goods; BigDecimal goodsPrice; BigDecimal goodsTotalPrice; BigDecimal goodsRealPrice; - Long shopId = merNewOrderDto.getShopId(); - Shop shop = remoteShopService.getShop(shopId).getData(); - List<AppMemberCouponVo> appMemberCouponVoList = remoteMemberService.listVoMemberCouponByUserId(userId).getData(); - Map<Long, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>(); + MerBaseDto merBaseDto = new MerBaseDto(); + merBaseDto.setUserId(userId); + merBaseDto.setShopId(shopId); + List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData(); + Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>(); if (null != appMemberCouponVoList) { appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); } - AppMemberCouponVo appMemberCouponVo; Integer couponType; BigDecimal moneyThreshold; @@ -732,10 +1622,16 @@ String orderNo = CodeFactoryUtil.getShopOrderNo(); OrderGoods orderGoods; String orderGoodsId; + GoodsFile goodsFile; + BigDecimal cycleMoney = new BigDecimal("0.00"); + BigDecimal experienceMoney = new BigDecimal("0.00"); + BigDecimal serviceMoney = new BigDecimal("0.00"); + BigDecimal goodsMoney = new BigDecimal("0.00"); for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { goodsId = appBuyGoodsDto.getGoodsId(); memberCouponId = appBuyGoodsDto.getMemberCouponId(); goods = remoteGoodsService.getGoods(goodsId).getData(); + goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); buyNum = appBuyGoodsDto.getBuyNum(); goodsPrice = goods.getSalesPrice(); serviceNum = goods.getServiceNum(); @@ -774,8 +1670,10 @@ } goodsDeposit = goods.getSubscription(); - if (goodsDeposit == null) { + if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) { goodsDeposit = new BigDecimal("0.00"); + }else{ + goodsDeposit = goodsDeposit.multiply(buyNumBig); } goodsNum = goodsNum + buyNum; orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice); @@ -799,7 +1697,25 @@ orderGoods.setCycleNumFlag(goods.getCycleNumFlag()); orderGoods.setServiceNum(serviceNum); orderGoods.setGoodsType(goods.getGoodsType()); + orderGoods.setGoodsName(goods.getGoodsName()); + orderGoods.setGoodsPicture(goodsFile.getFileUrl()); orderGoodsService.save(orderGoods); + switch (orderGoods.getGoodsType()) { + case 1: + cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); + break; + case 2: + serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney()); + break; + case 3: + experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney()); + break; + case 4: + goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney()); + break; + default: + break; + } } //创建订单 Order order = new Order(); @@ -816,15 +1732,15 @@ order.setReceivableMoney(orderPayMoney); order.setReceivableDeposit(new BigDecimal("0.00")); order.setPayType(1); - if (order.getPayType() == 1) { - order.setPayMoney(orderPayMoney); - order.setOnlinePayMoney(orderPayMoney); - order.setCloseFlag(1); - } else if (order.getPayType() == 2) { - order.setPayMoney(orderPayDeposit); - order.setOnlinePayMoney(orderPayDeposit); - order.setCloseFlag(0); + if (merNewOrderDto.getChangeMoney() != null) { + order.setChangeReceivableMoney(merNewOrderDto.getChangeMoney()); + } else { + order.setChangeReceivableMoney(orderPayMoney); } + order.setPayMoney(orderPayMoney); + order.setOnlinePayMoney(new BigDecimal("0.00")); + order.setOfflinePayMoney(orderPayMoney); + order.setCloseFlag(1); order.setOrderRemark(merNewOrderDto.getOrderRemark()); order.setGoodsNum(goodsNum); order.setCreateTime(nowTime); @@ -835,6 +1751,7 @@ order.setOnlinePayMoney(new BigDecimal("0.00")); order.setOfflinePayMoney(merNewOrderDto.getPayMoney()); order.setOffPayTime(nowTime); + order.setPayType(1); order.setCloseFlag(1); this.save(order); //创建服务 @@ -874,6 +1791,14 @@ appMemberBindingDto.setBindingFlag(1); remoteMemberService.updateMemberBinding(appMemberBindingDto); } + ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); + shopTotalChangeDto.setShopId(order.getShopId()); + shopTotalChangeDto.setOrderType(1); + shopTotalChangeDto.setCycleMoney(cycleMoney); + shopTotalChangeDto.setServiceMoney(serviceMoney); + shopTotalChangeDto.setExperienceMoney(experienceMoney); + shopTotalChangeDto.setGoodsMoney(goodsMoney); + remoteShopService.changeShopTotal(shopTotalChangeDto); } @@ -890,21 +1815,10 @@ Integer orderFrom; String orderFromDesc; BigDecimal zeroBig = new BigDecimal("0.00"); + StringJoiner userIdSj = new StringJoiner(","); for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { userId = merOrderPageVo.getUserId(); - member = remoteMemberService.getMember(userId).getData(); - if (member != null) { - if (StringUtils.isNotBlank(member.getNickName())) { - merOrderPageVo.setUserName(member.getNickName()); - } - merOrderPageVo.setUserMobile(member.getMobile()); - } else { - SysUser sysUser = remoteUserService.getSysUser(userId).getData(); - if (StringUtils.isNotBlank(sysUser.getNickName())) { - merOrderPageVo.setUserName(sysUser.getNickName()); - } - merOrderPageVo.setUserMobile(sysUser.getPhonenumber()); - } + userIdSj.add(userId.toString()); orderFrom = merOrderPageVo.getOrderFrom(); if (orderFrom != null) { if (orderFrom == 1) { @@ -920,6 +1834,15 @@ if (merOrderPageVo.getUnPaidMoney() == null) { merOrderPageVo.setUnPaidMoney(zeroBig); } + } + MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(userIdSj.toString()); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() + .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); + for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { + merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getNickName()); + merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile()); } } return merOrderPageVoList; @@ -980,7 +1903,9 @@ // 将set中的shopId转换为逗号分隔的字符串 String joinedString = String.join(",", set); // 通过remoteShopService获取MgtSimpleShopVoList - List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(joinedString).getData(); + MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(joinedString); + List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); // 将MgtSimpleShopVoList转换为Map<Long, MgtSimpleShopVo>,以便后续根据shopId获取对应的MgtSimpleShopVo Map<Long, MgtSimpleShopVo> map = simpleShopVoList.stream() .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); @@ -1005,22 +1930,22 @@ @Override public List<MgtActivityOrderPageVo> pageMgtActivityOrder(Page page, MgtShopOrderPageDto mgtShopOrderPageDto) { //如果区域代码不为null获取对应的商户id - if(StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword())||StringUtils.isNotBlank(mgtShopOrderPageDto.getShopProvinceCode())||StringUtils.isNotBlank(mgtShopOrderPageDto.getShopCityCode())||StringUtils.isNotBlank(mgtShopOrderPageDto.getShopAreaCode())){ + if (StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword()) || StringUtils.isNotBlank(mgtShopOrderPageDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtShopOrderPageDto.getShopCityCode()) || StringUtils.isNotBlank(mgtShopOrderPageDto.getShopAreaCode())) { MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto(); mgtShopIdByCodeDto.setShopProvinceCode(mgtShopOrderPageDto.getShopProvinceCode()); mgtShopIdByCodeDto.setShopCityCode(mgtShopOrderPageDto.getShopCityCode()); mgtShopIdByCodeDto.setShopAreaCode(mgtShopOrderPageDto.getShopAreaCode()); MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData(); - if(StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())){ + if (StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())) { mgtShopOrderPageDto.setShopIds(mgtShopIdByCodeVo.getShopIds()); } } //如果关键词不为null获取对应的用户id - if(StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword())){ + if (StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword())) { MgtUserIdByKeywordDto mgtUserIdByKeywordDto = new MgtUserIdByKeywordDto(); mgtUserIdByKeywordDto.setKeyword(mgtShopOrderPageDto.getKeyword()); - MgtUserIdByKeywordVo mgtUserIdByKeywordVo= remoteMemberService.getUserIdByKeyword(mgtUserIdByKeywordDto).getData(); - if(StringUtils.isNotBlank(mgtUserIdByKeywordVo.getUserIds())){ + MgtUserIdByKeywordVo mgtUserIdByKeywordVo = remoteMemberService.getUserIdByKeyword(mgtUserIdByKeywordDto).getData(); + if (StringUtils.isNotBlank(mgtUserIdByKeywordVo.getUserIds())) { mgtShopOrderPageDto.setUserIds(mgtUserIdByKeywordVo.getUserIds()); } } @@ -1041,16 +1966,22 @@ String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList())); String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); // 从远程服务获取店铺和用户信息 - List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(shopJoinedString).getData(); + MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(shopJoinedString); + List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream() .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData(); + mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(userJoinedString); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); // 遍历列表,设置店铺名称、用户名称和未支付金额 for (MgtActivityOrderPageVo mgtActivityOrderPageVo : activityOrderPageVoList) { mgtActivityOrderPageVo.setShopName(shopMap.get(mgtActivityOrderPageVo.getShopId()).getShopName()); - mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getUserName()); + if (userMap.get(mgtActivityOrderPageVo.getUserId()) != null) { + mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getNickName()); + } BigDecimal unPaidMoney = mgtActivityOrderPageVo.getReceivableMoney().subtract(mgtActivityOrderPageVo.getPayMoney()); mgtActivityOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney); } @@ -1060,31 +1991,31 @@ } /** - * @description 获取订单统计 - * @author jqs - * @date 2023/6/16 12:51 * @param mgtShopOrderPageDto - * @return MgtMemberOrderTotalVo + * @return MgtMemberOrderTotalVo + * @description 获取订单统计 + * @author jqs + * @date 2023/6/16 12:51 */ @Override - public MgtOrderTotal getMgtOrderTotal(MgtShopOrderPageDto mgtShopOrderPageDto){ + public MgtOrderTotal getMgtOrderTotal(MgtShopOrderPageDto mgtShopOrderPageDto) { //如果区域代码不为null获取对应的商户id - if(StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword())||StringUtils.isNotBlank(mgtShopOrderPageDto.getShopProvinceCode())||StringUtils.isNotBlank(mgtShopOrderPageDto.getShopCityCode())||StringUtils.isNotBlank(mgtShopOrderPageDto.getShopAreaCode())){ + if (StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword()) || StringUtils.isNotBlank(mgtShopOrderPageDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtShopOrderPageDto.getShopCityCode()) || StringUtils.isNotBlank(mgtShopOrderPageDto.getShopAreaCode())) { MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto(); mgtShopIdByCodeDto.setShopProvinceCode(mgtShopOrderPageDto.getShopProvinceCode()); mgtShopIdByCodeDto.setShopCityCode(mgtShopOrderPageDto.getShopCityCode()); mgtShopIdByCodeDto.setShopAreaCode(mgtShopOrderPageDto.getShopAreaCode()); MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData(); - if(StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())){ + if (StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())) { mgtShopOrderPageDto.setShopIds(mgtShopIdByCodeVo.getShopIds()); } } //如果关键词不为null获取对应的用户id - if(StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword())){ + if (StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword())) { MgtUserIdByKeywordDto mgtUserIdByKeywordDto = new MgtUserIdByKeywordDto(); mgtUserIdByKeywordDto.setKeyword(mgtShopOrderPageDto.getKeyword()); - MgtUserIdByKeywordVo mgtUserIdByKeywordVo= remoteMemberService.getUserIdByKeyword(mgtUserIdByKeywordDto).getData(); - if(StringUtils.isNotBlank(mgtUserIdByKeywordVo.getUserIds())){ + MgtUserIdByKeywordVo mgtUserIdByKeywordVo = remoteMemberService.getUserIdByKeyword(mgtUserIdByKeywordDto).getData(); + if (StringUtils.isNotBlank(mgtUserIdByKeywordVo.getUserIds())) { mgtShopOrderPageDto.setUserIds(mgtUserIdByKeywordVo.getUserIds()); } } @@ -1106,32 +2037,32 @@ } /** - * @description 分页获取门店订单列表 - * @author jqs - * @date 2023/6/16 14:57 * @param page * @param mgtShopOrderPageDto - * @return List<MgtShopOrderPageVo> + * @return List<MgtShopOrderPageVo> + * @description 分页获取门店订单列表 + * @author jqs + * @date 2023/6/16 14:57 */ @Override - public List<MgtShopOrderPageVo> pageMgtShopOrder(Page page, MgtShopOrderPageDto mgtShopOrderPageDto){ + public List<MgtShopOrderPageVo> pageMgtShopOrder(Page page, MgtShopOrderPageDto mgtShopOrderPageDto) { //如果区域代码不为null获取对应的商户id - if(StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword())||StringUtils.isNotBlank(mgtShopOrderPageDto.getShopProvinceCode())||StringUtils.isNotBlank(mgtShopOrderPageDto.getShopCityCode())||StringUtils.isNotBlank(mgtShopOrderPageDto.getShopAreaCode())){ + if (StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword()) || StringUtils.isNotBlank(mgtShopOrderPageDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtShopOrderPageDto.getShopCityCode()) || StringUtils.isNotBlank(mgtShopOrderPageDto.getShopAreaCode())) { MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto(); mgtShopIdByCodeDto.setShopProvinceCode(mgtShopOrderPageDto.getShopProvinceCode()); mgtShopIdByCodeDto.setShopCityCode(mgtShopOrderPageDto.getShopCityCode()); mgtShopIdByCodeDto.setShopAreaCode(mgtShopOrderPageDto.getShopAreaCode()); MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData(); - if(StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())){ + if (StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())) { mgtShopOrderPageDto.setShopIds(mgtShopIdByCodeVo.getShopIds()); } } //如果关键词不为null获取对应的用户id - if(StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword())){ + if (StringUtils.isNotBlank(mgtShopOrderPageDto.getKeyword())) { MgtUserIdByKeywordDto mgtUserIdByKeywordDto = new MgtUserIdByKeywordDto(); mgtUserIdByKeywordDto.setKeyword(mgtShopOrderPageDto.getKeyword()); - MgtUserIdByKeywordVo mgtUserIdByKeywordVo= remoteMemberService.getUserIdByKeyword(mgtUserIdByKeywordDto).getData(); - if(StringUtils.isNotBlank(mgtUserIdByKeywordVo.getUserIds())){ + MgtUserIdByKeywordVo mgtUserIdByKeywordVo = remoteMemberService.getUserIdByKeyword(mgtUserIdByKeywordDto).getData(); + if (StringUtils.isNotBlank(mgtUserIdByKeywordVo.getUserIds())) { mgtShopOrderPageDto.setUserIds(mgtUserIdByKeywordVo.getUserIds()); } } @@ -1147,22 +2078,47 @@ shopIdSet.add(mgtShopOrderPageVo.getShopId()); userIdSet.add(mgtShopOrderPageVo.getUserId()); } - // 将店铺 ID 和用户 ID 转换为逗号分隔的字符串 - String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList())); - String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); // 从远程服务获取店铺和用户信息 - List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(shopJoinedString).getData(); - Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream() - .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData(); - Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() - .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); + Map<Long, MgtSimpleShopVo> shopMap = null; + Map<Long, MgtSimpleMemberVo> userMap = null; + if (shopIdSet != null && !shopIdSet.isEmpty()) { + String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList())); + MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(shopJoinedString); + List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); + shopMap = simpleShopVoList.stream() + .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); + } + if (userIdSet != null && !userIdSet.isEmpty()) { + String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); + MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(userJoinedString); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + userMap = simpleMemberVoList.stream() + .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); + } // 遍历列表,设置店铺名称、用户名称和未支付金额 for (MgtShopOrderPageVo mgtShopOrderPageVo : shopOrderPageVoList) { - mgtShopOrderPageVo.setShopName(shopMap.get(mgtShopOrderPageVo.getShopId()).getShopName()); - mgtShopOrderPageVo.setUserName(userMap.get(mgtShopOrderPageVo.getUserId()).getUserName()); + if (shopMap != null && !shopMap.isEmpty()) { + mgtShopOrderPageVo.setShopName(shopMap.get(mgtShopOrderPageVo.getShopId()).getShopName()); + } + if (userMap != null && !userMap.isEmpty()) { + if (userMap.get(mgtShopOrderPageVo.getUserId()) != null) { + mgtShopOrderPageVo.setUserName(userMap.get(mgtShopOrderPageVo.getUserId()).getNickName()); + } + } BigDecimal unPaidMoney = mgtShopOrderPageVo.getReceivableMoney().subtract(mgtShopOrderPageVo.getPayMoney()); mgtShopOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney); + } + //处理商品信息 + List<MgtOrderGoodsPageVo> mgtOrderGoodsVoList; + String goodsString; + for (MgtShopOrderPageVo entity : shopOrderPageVoList) { + mgtOrderGoodsVoList = entity.getMgtOrderGoodsPageVoList(); + goodsString = mgtOrderGoodsVoList.stream() + .map(goods -> goods.getGoodsName() + "*" + goods.getBuyNum()) + .collect(Collectors.joining(";")); + entity.setGoodsInfo(goodsString); } } return shopOrderPageVoList; @@ -1170,14 +2126,14 @@ /** - * @description 获取订单详情 - * @author jqs - * @date 2023/6/16 16:49 * @param orderId - * @return MgtOrderDetailVo + * @return MgtOrderDetailVo + * @description 获取订单详情 + * @author jqs + * @date 2023/6/16 16:49 */ @Override - public MgtOrderDetailVo getMgtOrderDetail(String orderId){ + public MgtOrderDetailVo getMgtOrderDetail(String orderId) { // 创建MgtOrderDetailVo对象 MgtOrderDetailVo mgtOrderDetailVo = new MgtOrderDetailVo(); // 获取订单信息 @@ -1249,4 +2205,1645 @@ mgtOrderDetailVo.setVerifyTime(order.getUseTime()); return mgtOrderDetailVo; } + + /** + * @param + * @return MgtBulletinBoardVo + * @description boardOrderTotal + * @author jqs34 + * @date 2023/6/18 17:20 + */ + @Override + public MgtBulletinBoardVo boardOrderTotal() { + MgtBulletinBoardVo mgtBulletinBoardVo = orderMapper.boardOrderTotal(); + return mgtBulletinBoardVo; + } + + /** + * @param mgtBaseShopDto + * @return MgtTotalOrderTotalVo + * @description getTotalOrderTotal + * @author jqs34 + * @date 2023/6/19 22:23 + */ + @Override + public MgtTotalOrderTotalVo getTotalOrderTotal(MgtBaseShopDto mgtBaseShopDto) { + MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getTotalOrderTotalOrderFrom(mgtBaseShopDto); + //MgtTotalOrderTotalVo mgtTotalOrderTotalVoGoodsType = orderMapper.getTotalOrderTotalGoodsType(mgtBaseShopDto); + List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto); + if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) { + String[] orderTotalKey = new String[MgtMapIntTotalVos.size()]; + Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()]; + BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()]; + for (int i = 0; i < MgtMapIntTotalVos.size(); i++) { + orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey(); + orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst(); + orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond(); + } + mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey); + mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue); + mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue); + } + //获取商品分类销售数据 + List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listTotalOrderTotalGoodsType(mgtBaseShopDto); + List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); + List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); + if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { + MgtMapIntTotalVo MgtMapIntTotalVo; + 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("周期"); + mgtTotalOrderTotalVo.setCycleTotal(mgtTotalOrderTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtTotalOrderTotalVo.setCycleMoney(mgtTotalOrderTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { + MgtMapIntTotalVo.setMapKey("服务"); + mgtMapBigTotalVo.setMapKey("服务"); + mgtTotalOrderTotalVo.setServiceTotal(mgtTotalOrderTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtTotalOrderTotalVo.setServiceMoney(mgtTotalOrderTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { + MgtMapIntTotalVo.setMapKey("体验"); + mgtMapBigTotalVo.setMapKey("体验"); + mgtTotalOrderTotalVo.setExperienceTotal(mgtTotalOrderTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtTotalOrderTotalVo.setExperienceMoney(mgtTotalOrderTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { + MgtMapIntTotalVo.setMapKey("单品"); + mgtMapBigTotalVo.setMapKey("单品"); + } + goodsTypeTotalList.add(MgtMapIntTotalVo); + goodsTypeMoneyList.add(mgtMapBigTotalVo); + } + mgtTotalOrderTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); + mgtTotalOrderTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); + } + //获取商品销售排名 + List<MgtMapBigTotalVo> goodsRankList = orderMapper.listTotalOrderTotalGoodsRank(mgtBaseShopDto); + if (goodsRankList != null && goodsRankList.size() > 0) { + goodsRankList = bigListRemoveNull(goodsRankList); + mgtTotalOrderTotalVo.setGoodsRankList(goodsRankList); + } + //获取来源销售排名 + List<MgtMapBigTotalVo> orderFromList = orderMapper.listTotalOrderTotalOrderFrom(mgtBaseShopDto); + if (orderFromList != null && orderFromList.size() > 0) { + orderFromList = bigListRemoveNull(orderFromList); + mgtTotalOrderTotalVo.setOrderFromRankList(orderFromList); + } + return mgtTotalOrderTotalVo; + } + + /** + * @param MgtMapIntTotalVos + * @return List<MgtMapIntTotalVo> + * @description 去除空字符串 + * @author jqs + * @date 2023/6/27 17:35 + */ + private List<MgtMapIntTotalVo> listRemoveNull(List<MgtMapIntTotalVo> MgtMapIntTotalVos) { + for (int i = 0; i < MgtMapIntTotalVos.size(); i++) { + if (StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())) { + MgtMapIntTotalVos.remove(i); + } + } + return MgtMapIntTotalVos; + } + + /** + * @param MgtMapIntTotalVos + * @return List<MgtMapIntTotalVo> + * @description 去除空字符串 + * @author jqs + * @date 2023/6/27 17:35 + */ + private List<MgtMapBigTotalVo> bigListRemoveNull(List<MgtMapBigTotalVo> MgtMapIntTotalVos) { + for (int i = 0; i < MgtMapIntTotalVos.size(); i++) { + if (StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())) { + MgtMapIntTotalVos.remove(i); + } + } + return MgtMapIntTotalVos; + } + + /** + * @param mgtBaseShopDto + * @return MgtTotalActivityTotalVo + * @description + * @author jqs + * @date 2023/6/20 9:27 + */ + @Override + public MgtTotalActivityTotalVo getTotalActivityTotal(MgtBaseShopDto mgtBaseShopDto) { + //获取基础统计 + MgtTotalActivityTotalVo totalActivityTotalVo = orderMapper.getTotalActivityTotal(mgtBaseShopDto); + //获取商品分类销售数据 + List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listTotalActivityTotalGoodsType(mgtBaseShopDto); + if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { + List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); + List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); + totalActivityTotalVo.setCycleTotal(0); + totalActivityTotalVo.setCycleMoney(BigDecimal.ZERO); + totalActivityTotalVo.setServiceTotal(0); + totalActivityTotalVo.setServiceMoney(BigDecimal.ZERO); + totalActivityTotalVo.setExperienceTotal(0); + totalActivityTotalVo.setExperienceMoney(BigDecimal.ZERO); + // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 + 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("周期"); + totalActivityTotalVo.setCycleTotal(totalActivityTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + totalActivityTotalVo.setCycleMoney(totalActivityTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { + MgtMapIntTotalVo.setMapKey("服务"); + mgtMapBigTotalVo.setMapKey("服务"); + totalActivityTotalVo.setServiceTotal(totalActivityTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + totalActivityTotalVo.setServiceMoney(totalActivityTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { + MgtMapIntTotalVo.setMapKey("体验"); + mgtMapBigTotalVo.setMapKey("体验"); + totalActivityTotalVo.setExperienceTotal(totalActivityTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + totalActivityTotalVo.setExperienceMoney(totalActivityTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { + MgtMapIntTotalVo.setMapKey("单品"); + mgtMapBigTotalVo.setMapKey("单品"); + } + goodsTypeTotalList.add(MgtMapIntTotalVo); + goodsTypeMoneyList.add(mgtMapBigTotalVo); + } + totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); + totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); + } + //获取订单分布 + List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalActivityTotal(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(); + } + totalActivityTotalVo.setOrderTotalKey(orderTotalKey); + totalActivityTotalVo.setOrderTotalValue(orderTotalValue); + totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue); + } + return totalActivityTotalVo; + } + + /** + * @param mgtActivityAgeDto + * @return MgtTotalActivityTotalVo + * @description + * @author jqs + * @date 2023/6/20 9:56 + */ + @Override + public MgtTotalActivityTotalVo getTotalActivityAgeRank(MgtActivityAgeDto mgtActivityAgeDto) { + List<Long> userIds = orderMapper.getUserIdAgeRank(mgtActivityAgeDto); + mgtActivityAgeDto.setUserIds(userIds); + userIds = remoteMemberService.listUserIdByAge(mgtActivityAgeDto).getData(); + mgtActivityAgeDto.setUserIds(userIds); + List<MgtMapIntTotalVo> ageRankList = orderMapper.getTotalActivityAgeRank(mgtActivityAgeDto); + ageRankList = listRemoveNull(ageRankList); + MgtTotalActivityTotalVo totalActivityTotalVo = new MgtTotalActivityTotalVo(); + String[] activityAgeKey = new String[ageRankList.size()]; + Integer[] activityAgeValue = new Integer[ageRankList.size()]; + if (!ageRankList.isEmpty()) { + MgtMapIntTotalVo MgtMapIntTotalVo; + for (int i = 0; i < ageRankList.size(); i++) { + MgtMapIntTotalVo = ageRankList.get(i); + activityAgeKey[i] = MgtMapIntTotalVo.getMapKey(); + activityAgeValue[i] = MgtMapIntTotalVo.getMapValue(); + } + } + totalActivityTotalVo.setActivityAgeKey(activityAgeKey); + totalActivityTotalVo.setActivityAgeValue(activityAgeValue); + return totalActivityTotalVo; + } + + /** + * @param mgtBaseShopDto + * @return MgtTotalDataTotalVo + * @description + * @author jqs + * @date 2023/6/20 15:31 + */ + @Override + public MgtTotalDataTotalVo getTotalDataTotal(MgtBaseShopDto mgtBaseShopDto) { + //获取人数统计 + MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto); + BigDecimal salesTotal = orderMapper.shopSalesTotal(mgtBaseShopDto); + mgtTotalDataTotalVo.setSalesTotal(salesTotal); + Integer reorderPerson = orderMapper.getReorderPerson(mgtBaseShopDto); + mgtTotalDataTotalVo.setReorderPerson(reorderPerson); + Integer returnedPerson = orderMapper.getReturnedPerson(mgtBaseShopDto); + mgtTotalDataTotalVo.setReturnedPerson(returnedPerson); + return mgtTotalDataTotalVo; + } + + /** + * @param mgtBasePlatformDto + * @return List<MgtMapIntTotalVo> + * @description + * @author jqs + * @date 2023/6/21 15:26 + */ + @Override + public List<MgtMapIntTotalVo> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto) { + return orderMapper.listMemberGoodsRank(mgtBasePlatformDto); + } + + /** + * @param mgtBasePlatformDto + * @return List<MgtTotalDataTotalVo> + * @description 获取平台商户数据统计 + * @author jqs34 + * @date 2023/6/23 14:01 + */ + @Override + public List<MgtTotalDataTotalVo> getPlTotalDataTotal(MgtBasePlatformDto mgtBasePlatformDto) { + //获取需要关联的用户id集合 + if (mgtBasePlatformDto.getDeptId() != null) { + List<Long> userIdList = new ArrayList<>(); + if (mgtBasePlatformDto.getUserId() != null) { + userIdList.add(mgtBasePlatformDto.getUserId()); + } else { + MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); + mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId()); + mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); + userIdList = mgtUserIdByDept.getUserIdList(); + } + if (!userIdList.isEmpty()) { + mgtBasePlatformDto.setUserIdList(userIdList); + } + } + List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); + List<MgtTotalDataTotalVo> mgtTotalDataTotalVoList = new ArrayList<>(); + MgtBaseShopDto mgtBaseShopDto; + MgtTotalDataTotalVo mgtTotalDataTotalVo; + if (shopIdList != null && !shopIdList.isEmpty()) { + for (Long shopId : shopIdList) { + mgtBaseShopDto = new MgtBaseShopDto(); + mgtBaseShopDto.setStartDate(mgtBasePlatformDto.getStartDate()); + mgtBaseShopDto.setEndDate(mgtBasePlatformDto.getEndDate()); + mgtBaseShopDto.setShopId(shopId); + mgtTotalDataTotalVo = this.getTotalDataTotal(mgtBaseShopDto); + Shop shop = remoteShopService.getShop(shopId).getData(); + mgtTotalDataTotalVo.setShopName(shop.getShopName()); + mgtTotalDataTotalVoList.add(mgtTotalDataTotalVo); + } + } + return mgtTotalDataTotalVoList; + } + + /** + * @param mgtBasePlatformDto + * @return MgtTotalOrderTotalVo + * @description 获取平台商户订单统计 + * @author jqs34 + * @date 2023/6/19 22:23 + */ + @Override + public MgtTotalOrderTotalVo getPlTotalOrderTotal(MgtBasePlatformDto mgtBasePlatformDto) { + //获取需要关联的用户id集合 + if (mgtBasePlatformDto.getDeptId() != null) { + List<Long> userIdList = new ArrayList<>(); + if (mgtBasePlatformDto.getUserId() != null) { + userIdList.add(mgtBasePlatformDto.getUserId()); + } else { + MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); + mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId()); + mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); + userIdList = mgtUserIdByDept.getUserIdList(); + } + if (!userIdList.isEmpty()) { + mgtBasePlatformDto.setUserIdList(userIdList); + } + } + List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); + 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<>(); + List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); + mgtTotalOrderTotalVo.setCycleTotal(0); + mgtTotalOrderTotalVo.setCycleMoney(BigDecimal.ZERO); + mgtTotalOrderTotalVo.setServiceTotal(0); + mgtTotalOrderTotalVo.setServiceMoney(BigDecimal.ZERO); + mgtTotalOrderTotalVo.setExperienceTotal(0); + mgtTotalOrderTotalVo.setExperienceMoney(BigDecimal.ZERO); + 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("周期"); + mgtTotalOrderTotalVo.setCycleTotal(mgtTotalOrderTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtTotalOrderTotalVo.setCycleMoney(mgtTotalOrderTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { + MgtMapIntTotalVo.setMapKey("服务"); + mgtMapBigTotalVo.setMapKey("服务"); + mgtTotalOrderTotalVo.setServiceTotal(mgtTotalOrderTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtTotalOrderTotalVo.setServiceMoney(mgtTotalOrderTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { + MgtMapIntTotalVo.setMapKey("体验"); + mgtMapBigTotalVo.setMapKey("体验"); + mgtTotalOrderTotalVo.setExperienceTotal(mgtTotalOrderTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtTotalOrderTotalVo.setExperienceMoney(mgtTotalOrderTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { + MgtMapIntTotalVo.setMapKey("单品"); + mgtMapBigTotalVo.setMapKey("单品"); + } + goodsTypeTotalList.add(MgtMapIntTotalVo); + goodsTypeMoneyList.add(mgtMapBigTotalVo); + } + mgtTotalOrderTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); + mgtTotalOrderTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); + } + //获取商品销售排名 + List<MgtMapBigTotalVo> goodsRankList = orderMapper.listPlTotalOrderTotalGoodsRank(mgtBasePlatformDto); + if (goodsRankList != null && goodsRankList.size() > 0) { + goodsRankList = bigListRemoveNull(goodsRankList); + mgtTotalOrderTotalVo.setGoodsRankList(goodsRankList); + } + //获取来源销售排名 + List<MgtMapBigTotalVo> orderFromList = orderMapper.listPlTotalOrderTotalOrderFrom(mgtBasePlatformDto); + if (orderFromList != null && orderFromList.size() > 0) { + orderFromList = bigListRemoveNull(orderFromList); + mgtTotalOrderTotalVo.setOrderFromRankList(orderFromList); + } + return mgtTotalOrderTotalVo; + } + + /** + * @param mgtBasePlatformDto + * @return MgtTotalActivityTotalVo + * @description + * @author jqs + * @date 2023/6/20 9:27 + */ + @Override + public MgtPlTotalActivityTotalVo getPlTotalActivityTotal(MgtBasePlatformDto mgtBasePlatformDto) { + //获取需要关联的用户id集合 + if (mgtBasePlatformDto.getDeptId() != null) { + List<Long> userIdList = new ArrayList<>(); + if (mgtBasePlatformDto.getUserId() != null) { + userIdList.add(mgtBasePlatformDto.getUserId()); + } else { + MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); + mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId()); + mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); + userIdList = mgtUserIdByDept.getUserIdList(); + } + if (!userIdList.isEmpty()) { + mgtBasePlatformDto.setUserIdList(userIdList); + } + } + List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); + mgtBasePlatformDto.setShopIdList(shopIdList); + //获取基础统计 + MgtPlTotalActivityTotalVo totalActivityTotalVo = orderMapper.getPlTotalActivityTotal(mgtBasePlatformDto); + //获取商品分类销售数据 + List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalActivityTotalGoodsType(mgtBasePlatformDto); + List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); + List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); + totalActivityTotalVo.setCycleTotal(0); + totalActivityTotalVo.setCycleMoney(BigDecimal.ZERO); + totalActivityTotalVo.setServiceTotal(0); + totalActivityTotalVo.setServiceMoney(BigDecimal.ZERO); + totalActivityTotalVo.setExperienceTotal(0); + totalActivityTotalVo.setExperienceMoney(BigDecimal.ZERO); + 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("周期"); + totalActivityTotalVo.setCycleTotal(totalActivityTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + totalActivityTotalVo.setCycleMoney(totalActivityTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { + MgtMapIntTotalVo.setMapKey("服务"); + mgtMapBigTotalVo.setMapKey("服务"); + totalActivityTotalVo.setServiceTotal(totalActivityTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + totalActivityTotalVo.setServiceMoney(totalActivityTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { + MgtMapIntTotalVo.setMapKey("体验"); + mgtMapBigTotalVo.setMapKey("体验"); + totalActivityTotalVo.setExperienceTotal(totalActivityTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + totalActivityTotalVo.setExperienceMoney(totalActivityTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { + MgtMapIntTotalVo.setMapKey("单品"); + mgtMapBigTotalVo.setMapKey("单品"); + } + } + totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); + totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); + } + //获取订单分布 + List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalActivityTotal(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(); + } + totalActivityTotalVo.setOrderTotalKey(orderTotalKey); + totalActivityTotalVo.setOrderTotalValue(orderTotalValue); + totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue); + } + HashSet<String> set = new HashSet<>(); + // 遍历MgtMemberOrderPageVoList,获取shopId并添加到set中 + for (Long shopId : mgtBasePlatformDto.getShopIdList()) { + set.add(shopId.toString()); + } + // 将set中的shopId转换为逗号分隔的字符串 + String joinedString = String.join(",", set); + // 通过remoteShopService获取MgtSimpleShopVoList + MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(joinedString); + List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); + // 将MgtSimpleShopVoList转换为Map<Long, MgtSimpleShopVo>,以便后续根据shopId获取对应的MgtSimpleShopVo + Map<Long, MgtSimpleShopVo> map = simpleShopVoList.stream() + .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); + //商户活动次数排名 + List<MgtMapBigTotalVo> shopActivityRank = orderMapper.listPlTotalShopActivityRank(mgtBasePlatformDto); + if (shopActivityRank != null && shopActivityRank.size() > 0) { + shopActivityRank = bigListRemoveNull(shopActivityRank); + totalActivityTotalVo.setShopSalesRankList(shopActivityRank); + } + //商户活动销售额排名 + List<MgtMapBigTotalVo> shopActivitySalesRank = orderMapper.listPlTotalShopActivitySalesRank(mgtBasePlatformDto); + if (shopActivitySalesRank != null && shopActivitySalesRank.size() > 0) { + shopActivitySalesRank = bigListRemoveNull(shopActivitySalesRank); + totalActivityTotalVo.setShopSalesRankList(shopActivitySalesRank); + } + //活动销售额排名 + List<MgtMapBigTotalVo> activitySalesRank = orderMapper.listPlTotalActivitySalesRank(mgtBasePlatformDto); + if (activitySalesRank != null && activitySalesRank.size() > 0) { + activitySalesRank = bigListRemoveNull(activitySalesRank); + totalActivityTotalVo.setActivitySalesRankList(activitySalesRank); + } + return totalActivityTotalVo; + } + + /** + * @param mgtPlActivityAgeDto + * @return MgtTotalActivityTotalVo + * @description + * @author jqs + * @date 2023/6/20 9:56 + */ + @Override + public MgtPlTotalActivityTotalVo getPlTotalActivityAgeRank(MgtPlActivityAgeDto mgtPlActivityAgeDto) { + List<Long> userIds = orderMapper.getPlUserIdAgeRank(mgtPlActivityAgeDto); + MgtActivityAgeDto mgtActivityAgeDto = new MgtActivityAgeDto(); + mgtActivityAgeDto.setUserIds(userIds); + mgtActivityAgeDto.setAgeType(mgtPlActivityAgeDto.getAgeType()); + userIds = remoteMemberService.listUserIdByAge(mgtActivityAgeDto).getData(); + mgtPlActivityAgeDto.setUserIds(userIds); + List<MgtMapIntTotalVo> ageRankList = orderMapper.getPlTotalActivityAgeRank(mgtPlActivityAgeDto); + ageRankList = listRemoveNull(ageRankList); + MgtPlTotalActivityTotalVo plTotalActivityTotalVo = new MgtPlTotalActivityTotalVo(); + String[] activityAgeKey = new String[ageRankList.size()]; + Integer[] activityAgeValue = new Integer[ageRankList.size()]; + if (!ageRankList.isEmpty()) { + MgtMapIntTotalVo MgtMapIntTotalVo; + for (int i = 0; i < ageRankList.size(); i++) { + MgtMapIntTotalVo = ageRankList.get(i); + activityAgeKey[i] = MgtMapIntTotalVo.getMapKey(); + activityAgeValue[i] = MgtMapIntTotalVo.getMapValue(); + } + } + plTotalActivityTotalVo.setActivityAgeKey(activityAgeKey); + plTotalActivityTotalVo.setActivityAgeValue(activityAgeValue); + return plTotalActivityTotalVo; + } + + /** + * @param verifyCode + * @return MerVerifyCouponVo + * @description 获取优惠券核销信息 + * @author jqs + * @date 2023/6/27 11:10 + */ + @Override + public MerVerifyCouponVo verifyCoupon(String verifyCode, Long shopId) { + // 创建MerVerifyCouponVo对象 + MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo(); + // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象 + MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(verifyCode).getData(); + MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon(); + // 检查优惠券状态 + int couponStatus = memberCoupon.getCouponStatus(); + if (couponStatus == 0) { + throw new ServiceException(AppErrorConstant.COUPON_EXPIRED); + } else if (couponStatus == 2) { + throw new ServiceException(AppErrorConstant.COUPON_USED); + } else if (couponStatus != 0) { + throw new ServiceException(AppErrorConstant.COUPON_NO_FIND); + } + if (!memberCoupon.getShopId().equals(shopId)) { + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + List<Goods> goodsList = verifyCouponGetVo.getGoodsList(); + Long userId = verifyCouponGetVo.getUserId(); + // 调用remoteMemberService的getMember方法获取Member对象 + Member member = remoteMemberService.getMember(userId).getData(); + merVerifyCouponVo.setUserName(member.getRealName()); + merVerifyCouponVo.setUserMobile(member.getMobile()); + merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom()); + merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName()); + merVerifyCouponVo.setCreateTime(verifyCouponGetVo.getMemberCoupon().getReceiveTime()); + // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性 + List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream() + .map(goods -> { + MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo(); + merCouponGoods.setGoodsId(goods.getGoodsId()); + merCouponGoods.setGoodsName(goods.getGoodsName()); + if (goods.getGoodsType() == 1) { + merCouponGoods.setGoodsType("周期"); + } else if (goods.getGoodsType() == 2) { + merCouponGoods.setGoodsType("服务"); + } else if (goods.getGoodsType() == 3) { + merCouponGoods.setGoodsType("体验"); + } else if (goods.getGoodsType() == 4) { + merCouponGoods.setGoodsType("单品"); + } + // 设置其他属性 + return merCouponGoods; + }) + .collect(Collectors.toList()); + // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList + merVerifyCouponVo.setGoodsList(merCouponGoodsList); + merVerifyCouponVo.setVerifyStatus(1); + return merVerifyCouponVo; + } + + /** + * @description 获取核销奖品 + * @author jqs + * @date 2023/7/8 17:46 + * @param verifyCode + * @param shopId + * @return MerVerifyAwardVo + */ + @Override + public MerVerifyAwardVo verifyPrize(String verifyCode,Long shopId){ + MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo(); + MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(verifyCode).getData(); + if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){ + throw new ServiceException(AppErrorConstant.COUPON_USED); + } + if(memberGiftRecord.getGiftFrom()==2&&!memberGiftRecord.getShopId().equals(shopId)){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); + merVerifyAwardVo.setUserName(member.getRealName()); + merVerifyAwardVo.setUserMobile(member.getMobile()); + if(memberGiftRecord.getGiftFrom()==1){ + merVerifyAwardVo.setGiftFrom("平台生日卡"); + }else{ + merVerifyAwardVo.setGiftFrom("商户生日卡"); + } + + merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType()); + switch(memberGiftRecord.getGiftType()){ + case 1: + merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); + merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber())); + break; + case 2: + Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData(); + merVerifyAwardVo.setGiftName(memberGiftRecord.getGoodsName()); + merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGoodsNumber())); + if (goods.getGoodsType() == 1) { + merVerifyAwardVo.setGiftRemark("周期"); + } else if (goods.getGoodsType() == 2) { + merVerifyAwardVo.setGiftRemark("服务"); + } else if (goods.getGoodsType() == 3) { + merVerifyAwardVo.setGiftRemark("体验"); + } else if (goods.getGoodsType() == 4) { + merVerifyAwardVo.setGiftRemark("单品"); + } + break; + case 3: + merVerifyAwardVo.setGiftName("现金"); + merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue()); + break; + case 4: + merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName()); + merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGiftNumber())); + break; + default: + break; + } + merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime()); + merVerifyAwardVo.setVerifyStatus(1); + merVerifyAwardVo.setPrizeId(verifyCode); + return merVerifyAwardVo; + } + + /** + * @param merBaseDto + * @return BigDecimal + * @description 获取用户未支付金额 + * @author jqs + * @date 2023/6/29 18:00 + */ + @Override + public BigDecimal getMemberUnpaidOrder(MerBaseDto merBaseDto) { + BigDecimal unpaidMoney = orderMapper.getMemberUnpaidOrder(merBaseDto); + return unpaidMoney; + } + + /** + * @param merTotalDto + * @return MerOrderTotalVo + * @description 商户获取订单统计 + * @author jqs + * @date 2023/7/3 19:29 + */ + @Override + public MerOrderTotalVo getMerOrderTotal(MerTotalDto merTotalDto) { + if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) { + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) { + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + MerOrderTotalVo orderTotalVo = orderMapper.getMerOrderTotalOrderFrom(merTotalDto); + MerOrderTotalVo goodsTypeVo = orderMapper.getMerTotalOrderTotalGoodsType(merTotalDto); + orderTotalVo.setCycleTotal(goodsTypeVo.getCycleTotal()); + orderTotalVo.setCycleMoney(goodsTypeVo.getCycleMoney()); + orderTotalVo.setExperienceTotal(goodsTypeVo.getExperienceTotal()); + orderTotalVo.setExperienceMoney(goodsTypeVo.getExperienceMoney()); + orderTotalVo.setServiceTotal(goodsTypeVo.getServiceTotal()); + orderTotalVo.setServiceMoney(goodsTypeVo.getServiceMoney()); + return orderTotalVo; + } + + + /** + * @param merTotalDto + * @return MerOrderDistributionTotalVo + * @description + * @author jqs + * @date 2023/7/4 9:29 + */ + @Override + public MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto) { + if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) { + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); + // 获取订单年龄用户列表 + List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); + // 如果订单年龄用户列表不为空 + if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { + // 定义变量 + Integer ageType; + List<Long> userIdList; + MerOrderAgeUserVo orderAgeUserVo; + MgtMapTotalPlusVo mgtMapTotalPlusVo; + String[] orderTotalKey = new String[5]; + Integer[] orderTotalValue = new Integer[5]; + BigDecimal[] orderMoneyValue = new BigDecimal[5]; + // 遍历订单年龄用户列表 + for (int i = 0; i < orderAgeUserVoList.size(); i++) { + orderAgeUserVo = orderAgeUserVoList.get(i); + ageType = orderAgeUserVo.getAgeType(); + userIdList = orderAgeUserVo.getUserIdList(); + // 根据年龄类型设置订单总数键 + switch (ageType) { + case 1: + orderTotalKey[i] = "<20"; + break; + case 2: + orderTotalKey[i] = "21-30"; + break; + case 3: + orderTotalKey[i] = "31-40"; + break; + case 4: + orderTotalKey[i] = "41-50"; + break; + case 5: + orderTotalKey[i] = ">50"; + break; + } + // 如果用户ID列表不为空 + if (userIdList != null && !userIdList.isEmpty()) { + mgtMapTotalPlusVo = orderMapper.listMerOrderDistributionTotal(userIdList); + orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); + orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); + } else { + orderTotalValue[i] = 0; + orderMoneyValue[i] = BigDecimal.ZERO; + } + } + // 设置订单分布总数对象的属性值 + orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); + orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); + orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); + } + // 返回订单分布总数对象 + return orderDistributionTotalVo; + } + + /** + * @param merTotalDto + * @return MerOrderTypeTotalVo + * @description 商户获取销售占比统计 + * @author jqs + * @date 2023/7/4 13:58 + */ + @Override + public MerOrderTypeTotalVo getMerOrderTypeTotal(MerTotalDto merTotalDto) { + if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) { + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo(); + //获取商品分类销售数据 + List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listMerOrderTotalGoodsType(merTotalDto); + 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("单品"); + } + goodsTypeTotalList.add(MgtMapIntTotalVo); + goodsTypeMoneyList.add(mgtMapBigTotalVo); + } + orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); + orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); + } + return orderTypeTotalVo; + } + + + /** + * @param merTotalDto + * @return MerOrderGoodsRankVo + * @description 商户端获取销售排行 + * @author jqs + * @date 2023/7/4 14:23 + */ + @Override + public MerOrderGoodsRankVo getMerOrderGoodsRank(MerTotalDto merTotalDto) { + if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) { + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + MerOrderGoodsRankVo orderGoodsRankVo = new MerOrderGoodsRankVo(); + List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto); + if (goodsRankList != null && goodsRankList.size() > 0) { + goodsRankList = bigListRemoveNull(goodsRankList); + orderGoodsRankVo.setGoodsRankList(goodsRankList); + } + return orderGoodsRankVo; + } + + + /** + * @param merTotalDto + * @return MerOrderFromRankVo + * @description 商户端获取渠道排行 + * @author jqs + * @date 2023/7/4 14:51 + */ + @Override + public MerOrderFromRankVo getMerOrderFromRank(MerTotalDto merTotalDto) { + if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) { + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + MerOrderFromRankVo merOrderFromRankVo = new MerOrderFromRankVo(); + //获取来源销售排名 + List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto); + if (orderFromList != null && orderFromList.size() > 0) { + orderFromList = bigListRemoveNull(orderFromList); + merOrderFromRankVo.setOrderFromRankList(orderFromList); + } + return merOrderFromRankVo; + } + + /** + * @param merBaseDto + * @return MerTotalOrderVo + * @description 商户端订单管理统计 + * @author jqs + * @date 2023/7/4 16:27 + */ + @Override + public MerTotalOrderVo totalMerOrder(MerBaseDto merBaseDto) { + return orderMapper.totalMerOrder(merBaseDto.getShopId()); + } + + /** + * @param page + * @param mgtShopAllOrderPageDto + * @return List<MgtShopAllOrderPageVo> + * @description 平台获取商户订单记录 + * @author jqs + * @date 2023/7/5 20:17 + */ + @Override + public List<MgtShopAllOrderPageVo> pageMgtShopAllOrder(Page page, MgtShopAllOrderPageDto mgtShopAllOrderPageDto) { + List<MgtShopAllOrderPageVo> shopAllOrderPageVoList = orderMapper.pageMgtShopAllOrder(page, mgtShopAllOrderPageDto); + if (!shopAllOrderPageVoList.isEmpty()) { + // 定义变量 + HashSet<Long> userIdSet = new HashSet<>(); + BigDecimal zeroBig = new BigDecimal("0.00"); + // 遍历列表,获取店铺 ID 和用户 ID + for (MgtShopAllOrderPageVo mgtShopOrderPageVo : shopAllOrderPageVoList) { + userIdSet.add(mgtShopOrderPageVo.getUserId()); + } + // 从远程服务获取店铺和用户信息 + Map<Long, MgtSimpleMemberVo> userMap = null; + if (userIdSet != null && !userIdSet.isEmpty()) { + String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); + MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(userJoinedString); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + userMap = simpleMemberVoList.stream() + .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); + } + // 遍历列表,设置店铺名称、用户名称和未支付金额 + String userInfo; + String mobile; + for (MgtShopAllOrderPageVo mgtShopOrderPageVo : shopAllOrderPageVoList) { + if (userMap != null && !userMap.isEmpty()) { + if (userMap.get(mgtShopOrderPageVo.getUserId()) != null) { + userInfo = userMap.get(mgtShopOrderPageVo.getUserId()).getNickName(); + mobile = userMap.get(mgtShopOrderPageVo.getUserId()).getUserMobile(); + if (StringUtils.isNotBlank(mobile)) { + userInfo = userInfo + "(" + mobile + ")"; + } + mgtShopOrderPageVo.setUserInfo(userInfo); + } + } + } + //处理商品信息 + List<MgtOrderGoodsPageVo> mgtOrderGoodsVoList; + String goodsString; + for (MgtShopAllOrderPageVo entity : shopAllOrderPageVoList) { + mgtOrderGoodsVoList = entity.getMgtOrderGoodsPageVoList(); + goodsString = mgtOrderGoodsVoList.stream() + .map(goods -> goods.getGoodsName() + "*" + goods.getBuyNum()) + .collect(Collectors.joining(";")); + entity.setGoodsInfo(goodsString); + } + } + return shopAllOrderPageVoList; + } + + /** + * @description 自动取消订单 + * @author jqs + * @date 2023/7/13 17:15 + * @param orderId + * @return void + */ + @Override + @Transactional + public void autoCancelOrder(String orderId){ + //更新订单信息 + Order order = this.getById(orderId); + order.setOrderStatus(0); + order.setCancelTime(new Date()); + this.saveOrUpdate(order); + //活动订单回退库存 + if(order.getOrderFrom()==2){ + List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ + for(OrderGoods orderGoods : orderGoodsList){ + //redis库存控制极简版 + String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); + RLock redissonLock = redissonClient.getLock(goodsLock); + try{ + redissonLock.lock(30, TimeUnit.SECONDS); + Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); + redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); + }finally{ + redissonLock.unlock(); + } + //改变活动库存 + AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); + agStockChangeDto.setActivityId(order.getActivityId()); + agStockChangeDto.setGoodsId(orderGoods.getGoodsId()); + agStockChangeDto.setChangeType(1); + agStockChangeDto.setChangeNum(orderGoods.getBuyNum()); + agStockChangeDto.setShopId(order.getShopId()); + agStockChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityStock(agStockChangeDto); + //删除活动记录 + ActivityRecord activityRecord = new ActivityRecord(); + activityRecord.setActivityId(order.getActivityId()); + activityRecord.setGoodsId(orderGoods.getGoodsId()); + activityRecord.setUserId(order.getUserId()); + activityRecord.setOrderTime(order.getCreateTime()); + remoteActivityService.delActivityRecord(activityRecord); + } + } + }else{ + if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){ + //回退优惠券 + List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) { + StringJoiner memberCouponSJ = new StringJoiner(","); + for (OrderGoods orderGoods : orderGoodsList) { + memberCouponSJ.add(orderGoods.getCouponId()); + } + if(memberCouponSJ!=null){ + remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); + + } + } + } + } + } + + /** + * @description 订单支付回调 + * @author jqs + * @date 2023/7/13 17:57 + * @param transaction + * @return void + */ + @Override + @Transactional + public void payBack(Transaction transaction) { + // 更新订单状态 + String orderId=transaction.getOutTradeNo(); + Order order = this.getById(orderId); + order.setOrderStatus(2); + order.setPayTime(new Date()); + this.saveOrUpdate(order); + // 初始化各类商品的收款金额 + BigDecimal cycleMoney = new BigDecimal("0.00"); + BigDecimal experienceMoney = new BigDecimal("0.00"); + BigDecimal serviceMoney = new BigDecimal("0.00"); + BigDecimal goodsMoney = new BigDecimal("0.00"); + // 初始化各类商品的存在状态 + Boolean haveCycle = false; + Boolean haveService = false; + Boolean haveExperience = false; + Boolean haveGoods = false; + // 获取订单中的所有商品 + List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>(); + GoodsTotalChangeDto goodsTotalChangeDto; + // 遍历订单中的所有商品,根据商品类型累加收款金额,并标记商品存在状态 + for (OrderGoods orderGoods : orderGoodsList) { + switch (orderGoods.getGoodsType()) { + case 1: + cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); + haveCycle = true; + break; + case 2: + serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney()); + haveService = true; + break; + case 3: + experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney()); + haveExperience = true; + break; + case 4: + goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney()); + haveGoods = true; + break; + default: + break; + } + goodsTotalChangeDto = new GoodsTotalChangeDto(); + goodsTotalChangeDto.setGoodsId(orderGoods.getGoodsId()); + goodsTotalChangeDto.setChangeType(1); + goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum()); + goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney()); + Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(),orderGoods.getGoodsId()); + if(bugGoodsNum==null||bugGoodsNum<1){ + goodsTotalChangeDto.setPersonNum(1); + } + goodsTotalChangeDtoList.add(goodsTotalChangeDto); + } + //更新商品统计 + // 更新商户统计信息 + ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); + shopTotalChangeDto.setShopId(order.getShopId()); + shopTotalChangeDto.setOrderType(1); + shopTotalChangeDto.setCycleMoney(cycleMoney); + shopTotalChangeDto.setServiceMoney(serviceMoney); + shopTotalChangeDto.setExperienceMoney(experienceMoney); + shopTotalChangeDto.setGoodsMoney(goodsMoney); + remoteShopService.changeShopTotal(shopTotalChangeDto); + // 初始化会员统计信息 + MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); + memberTotalChangeDto.setUserId(order.getUserId()); + // 如果存在积分兑换比例,则计算积分 + if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { + Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); + BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); + BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()); + Integer integral = Integer.valueOf(integralBig.toString()); + memberTotalChangeDto.setChangeIntegral(integral); + memberTotalChangeDto.setTypeIntegral(1); + } + // 设置会员支付金额和支付时间 + memberTotalChangeDto.setPayMoney(order.getPayMoney()); + memberTotalChangeDto.setPayTime(new Date()); + // 根据商品存在状态,设置会员统计信息 + if (haveCycle) { + memberTotalChangeDto.setCycleOrderChange(1); + } + if (haveService) { + memberTotalChangeDto.setServiceOrderChange(1); + } + if (haveExperience) { + memberTotalChangeDto.setExperienceOrderChange(1); + } + if (haveGoods) { + memberTotalChangeDto.setGoodsOrderChange(1); + } + // 更新会员统计信息 + remoteMemberService.changeMemberTotal(memberTotalChangeDto); + // 如果订单来源于活动,则更新活动统计信息 + if (order.getOrderFrom() == 2) { + ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto(); + activityTotalChangeDto.setActivityId(order.getActivityId()); + activityTotalChangeDto.setChangeType(1); + activityTotalChangeDto.setChangeNum(1); + activityTotalChangeDto.setMoney(order.getPayMoney()); + Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId()); + if (userActivityNum == 1) { + activityTotalChangeDto.setPersonNum(1); + } else { + activityTotalChangeDto.setPersonNum(0); + } + activityTotalChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityTotal(activityTotalChangeDto); + + + //活动订单进行分账 + /*ProfitSharingApplyRequest request=new ProfitSharingApplyRequest(); + request.setAppid(this.appId); + request.setSubMchid(""); + request.setTransactionId(transaction.getTransactionId()); + profitsSharingService.applyProfitSharing(request);*/ + } + //生成支付记录 + OrderPayment orderPayment = new OrderPayment(); + + + + + + } + + /** + * @description 订单退款 + * @author jqs + * @date 2023/7/13 18:36 + * @param orderId + * @return void + */ + @Override + @Transactional + public void refundOrder(String orderId){ + //更新订单信息 + Order order = this.getById(orderId); + order.setOrderStatus(0); + order.setCancelTime(new Date()); + this.saveOrUpdate(order); + OrderRefund orderRefund = new OrderRefund(); + String refundId = IdUtils.simpleUUID(); + orderRefund.setRefundId(refundId); + orderRefund.setDelFlag(0); + orderRefund.setRefundType(1); + orderRefund.setOrderId(order.getOrderId()); + orderRefund.setUserId(order.getUserId()); + orderRefund.setShopId(order.getShopId()); + orderRefund.setRefundMoney(order.getPayMoney()); + orderRefund.setOrderMoney(order.getPayMoney()); + orderRefund.setCreateTime(new Date()); + // 初始化各类商品的收款金额 + BigDecimal cycleMoney = new BigDecimal("0.00"); + BigDecimal experienceMoney = new BigDecimal("0.00"); + BigDecimal serviceMoney = new BigDecimal("0.00"); + BigDecimal goodsMoney = new BigDecimal("0.00"); + // 初始化各类商品的存在状态 + Boolean haveCycle = false; + Boolean haveService = false; + Boolean haveExperience = false; + Boolean haveGoods = false; + List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ + StringJoiner memberCouponSJ = new StringJoiner(","); + for(OrderGoods orderGoods : orderGoodsList){ + if(order.getOrderFrom()==2){ + //redis库存控制极简版 + //活动订单回退库存 + String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); + RLock redissonLock = redissonClient.getLock(goodsLock); + try{ + redissonLock.lock(30, TimeUnit.SECONDS); + Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); + redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); + }finally{ + redissonLock.unlock(); + } + //改变活动库存 + AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); + agStockChangeDto.setActivityId(order.getActivityId()); + agStockChangeDto.setGoodsId(orderGoods.getGoodsId()); + agStockChangeDto.setChangeType(1); + agStockChangeDto.setChangeNum(orderGoods.getBuyNum()); + agStockChangeDto.setShopId(order.getShopId()); + agStockChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityStock(agStockChangeDto); + //删除活动记录 + ActivityRecord activityRecord = new ActivityRecord(); + activityRecord.setActivityId(order.getActivityId()); + activityRecord.setGoodsId(orderGoods.getGoodsId()); + activityRecord.setUserId(order.getUserId()); + activityRecord.setOrderTime(order.getCreateTime()); + remoteActivityService.delActivityRecord(activityRecord); + }else{ + memberCouponSJ.add(orderGoods.getCouponId()); + } + switch (orderGoods.getGoodsType()) { + case 1: + cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); + haveCycle = true; + break; + case 2: + serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney()); + haveService = true; + break; + case 3: + experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney()); + haveExperience = true; + break; + case 4: + goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney()); + haveGoods = true; + break; + default: + break; + } + } + //回退优惠券 + if(memberCouponSJ!=null){ + remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); + } + } + // 更新商户统计信息 + ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); + shopTotalChangeDto.setOrderType(2); + shopTotalChangeDto.setShopId(order.getShopId()); + shopTotalChangeDto.setCycleMoney(cycleMoney); + shopTotalChangeDto.setServiceMoney(serviceMoney); + shopTotalChangeDto.setExperienceMoney(experienceMoney); + shopTotalChangeDto.setGoodsMoney(goodsMoney); + remoteShopService.changeShopTotal(shopTotalChangeDto); + // 初始化会员统计信息 + MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); + memberTotalChangeDto.setUserId(order.getUserId()); + // 如果存在积分兑换比例,则计算积分 + /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { + Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); + BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); + BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()); + Integer integral = Integer.valueOf(integralBig.toString()); + memberTotalChangeDto.setChangeIntegral(integral); + memberTotalChangeDto.setTypeIntegral(2); + }*/ + // 设置会员支付金额和支付时间 + memberTotalChangeDto.setPayMoney(order.getPayMoney().negate()); + // 根据商品存在状态,设置会员统计信息 + if (haveCycle) { + memberTotalChangeDto.setCycleOrderChange(-1); + } + if (haveService) { + memberTotalChangeDto.setServiceOrderChange(-1); + } + if (haveExperience) { + memberTotalChangeDto.setExperienceOrderChange(-1); + } + if (haveGoods) { + memberTotalChangeDto.setGoodsOrderChange(-1); + } + // 更新会员统计信息 + remoteMemberService.changeMemberTotal(memberTotalChangeDto); + // 如果订单来源于活动,则更新活动统计信息 + if (order.getOrderFrom() == 2) { + ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto(); + activityTotalChangeDto.setActivityId(order.getActivityId()); + activityTotalChangeDto.setChangeType(2); + activityTotalChangeDto.setChangeNum(1); + activityTotalChangeDto.setRefundNum(1); + activityTotalChangeDto.setMoney(order.getPayMoney()); + Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId()); + if (userActivityNum > 0) { + activityTotalChangeDto.setPersonNum(1); + } else { + activityTotalChangeDto.setPersonNum(0); + } + activityTotalChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityTotal(activityTotalChangeDto); + } + } + + /** + * @description 员工端活动订单统计 + * @author jqs + * @date 2023/7/17 15:25 + * @param staffTotalDto + * @return StaffActivityOrderTotalVo + */ + @Override + public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto){ + StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto); + return staffActivityOrderTotalVo; + } + + /** + * @description 员工端活动统计 + * @author jqs + * @date 2023/7/17 15:51 + * @param staffTotalDto + * @return StaffActivityTotalVo + */ + @Override + public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto){ + StaffActivityTotalVo staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto); + return staffActivityTotalVo; + } + + /** + * @description 员工端活动统计订单分布 + * @author jqs + * @date 2023/7/17 16:16 + * @param staffTotalDto + * @return MerOrderDistributionTotalVo + */ + @Override + public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto){ + MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); + // 获取订单年龄用户列表 + MerTotalDto merTotalDto = new MerTotalDto(); + merTotalDto.setShopId(staffTotalDto.getShopId()); + List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); + // 如果订单年龄用户列表不为空 + if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { + // 定义变量 + Integer ageType; + List<Long> userIdList; + MerOrderAgeUserVo orderAgeUserVo; + MgtMapTotalPlusVo mgtMapTotalPlusVo; + String[] orderTotalKey = new String[5]; + Integer[] orderTotalValue = new Integer[5]; + BigDecimal[] orderMoneyValue = new BigDecimal[5]; + // 遍历订单年龄用户列表 + for (int i = 0; i < orderAgeUserVoList.size(); i++) { + orderAgeUserVo = orderAgeUserVoList.get(i); + ageType = orderAgeUserVo.getAgeType(); + userIdList = orderAgeUserVo.getUserIdList(); + // 根据年龄类型设置订单总数键 + switch (ageType) { + case 1: + orderTotalKey[i] = "<20"; + break; + case 2: + orderTotalKey[i] = "21-30"; + break; + case 3: + orderTotalKey[i] = "31-40"; + break; + case 4: + orderTotalKey[i] = "41-50"; + break; + case 5: + orderTotalKey[i] = ">50"; + break; + } + // 如果用户ID列表不为空 + if (userIdList != null && !userIdList.isEmpty()) { + mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList,staffTotalDto.getShopId(),staffTotalDto.getActivityId()); + orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); + orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); + } else { + orderTotalValue[i] = 0; + orderMoneyValue[i] = BigDecimal.ZERO; + } + } + // 设置订单分布总数对象的属性值 + orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); + orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); + orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); + } + // 返回订单分布总数对象 + return orderDistributionTotalVo; + } + + + /** + * @description 员工端活动统计销售占比 + * @author jqs + * @date 2023/7/17 17:03 + * @param staffTotalDto + * @return MerOrderTypeTotalVo + */ + @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("单品"); + } + goodsTypeTotalList.add(MgtMapIntTotalVo); + goodsTypeMoneyList.add(mgtMapBigTotalVo); + } + orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); + orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); + } + return orderTypeTotalVo; + } + + /** + * @description 员工端获客人数 + * @author jqs + * @date 2023/7/17 18:42 + * @param staffTotalDto + * @return StaffActivityDateMemberTotalVo + */ + @Override + 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)); + } + // 获取日期范围 + 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; + } + + /** + * @description 员工端获客人数 + * @author jqs + * @date 2023/7/17 18:42 + * @param staffTotalDto + * @return StaffActivityDateMemberTotalVo + */ + @Override + 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)); + } + // 获取日期范围 + 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; + } + + /** + * @description 获取时间段日期 + * @author jqs + * @date 2023/7/17 19:11 + * @param startDate + * @param endDate + * @return List<String> + */ + public static List<String> getDateRange(String startDate, String endDate) { + List<String> dateList = new ArrayList<>(); + LocalDate start = LocalDate.parse(startDate); + LocalDate end = LocalDate.parse(endDate); + while (!start.isAfter(end)) { + dateList.add(start.format(DateTimeFormatter.ISO_DATE)); + start = start.plusDays(1); + } + return dateList; + } + + /** + * @description 检查订单状态定时任务 + * @author jqs + * @date 2023/7/25 14:40 + * @param + * @return void + */ + @Override + public void checkOrderStatus(){ + Integer delayTime = 30; + if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ + delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); + } + delayTime = delayTime + 5; + Date checkTime = DateUtils.addMinutes(new Date(),delayTime); + LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Order::getDelFlag,0); + queryWrapper.lt(Order::getCreateTime,checkTime); + queryWrapper.eq(Order::getOrderStatus,1); + List<Order> orderList = this.list(queryWrapper); + if(orderList!=null&&!orderList.isEmpty()){ + for(Order order: orderList){ + autoTimeCancelOrder(order); + } + } + } + + private void autoTimeCancelOrder(Order order){ + String orderId = order.getOrderId(); + order.setOrderStatus(0); + order.setCancelTime(new Date()); + this.saveOrUpdate(order); + //活动订单回退库存 + if(order.getOrderFrom()==2){ + List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ + for(OrderGoods orderGoods : orderGoodsList){ + //redis库存控制极简版 + String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); + RLock redissonLock = redissonClient.getLock(goodsLock); + try{ + redissonLock.lock(30, TimeUnit.SECONDS); + Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); + redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); + }finally{ + redissonLock.unlock(); + } + //改变活动库存 + AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); + agStockChangeDto.setActivityId(order.getActivityId()); + agStockChangeDto.setGoodsId(orderGoods.getGoodsId()); + agStockChangeDto.setChangeType(1); + agStockChangeDto.setChangeNum(orderGoods.getBuyNum()); + agStockChangeDto.setShopId(order.getShopId()); + agStockChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityStock(agStockChangeDto); + //删除活动记录 + ActivityRecord activityRecord = new ActivityRecord(); + activityRecord.setActivityId(order.getActivityId()); + activityRecord.setGoodsId(orderGoods.getGoodsId()); + activityRecord.setUserId(order.getUserId()); + activityRecord.setOrderTime(order.getCreateTime()); + remoteActivityService.delActivityRecord(activityRecord); + } + } + }else{ + if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){ + //回退优惠券 + List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) { + StringJoiner memberCouponSJ = new StringJoiner(","); + for (OrderGoods orderGoods : orderGoodsList) { + memberCouponSJ.add(orderGoods.getCouponId()); + } + if(memberCouponSJ!=null){ + remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); + + } + } + } + } + } } -- Gitblit v1.7.1