From d9e75c8c09738b31c375e3b843a3f2d4927f325f Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期三, 26 七月 2023 09:13:29 +0800 Subject: [PATCH] bug --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 730 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 661 insertions(+), 69 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 6b2ad45..52cceca 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 @@ -13,13 +13,13 @@ 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.mapper.order.UserServiceRecordMapper; import com.ruoyi.order.service.order.ConsumerGoodsService; import com.ruoyi.order.service.order.OrderGoodsService; import com.ruoyi.order.service.order.OrderService; @@ -28,6 +28,7 @@ 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; @@ -39,13 +40,17 @@ import com.ruoyi.system.api.domain.poji.sys.SysUser; 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; @@ -99,13 +104,31 @@ private RemoteActivityService remoteActivityService; @Resource - private UserServiceRecordMapper userServiceRecordMapper; - - @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 @@ -124,6 +147,20 @@ 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; @@ -132,12 +169,17 @@ BigDecimal goodsPrice; BigDecimal goodsTotalPrice; BigDecimal goodsRealPrice; + MerBaseDto merBaseDto = new MerBaseDto(); + merBaseDto.setUserId(userId); + merBaseDto.setShopId(appSureOrderDto.getShopId()); // 获取用户优惠券列表 - List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData(); - // 初始化商品优惠券列表 - List<AppMemberCouponVo> appGoodsMemberCouponVoList; + List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData(); + // 将优惠券列表转换为Map,以优惠券ID为键 - Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); + 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; @@ -152,14 +194,19 @@ 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()); @@ -183,7 +230,7 @@ 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(); @@ -193,16 +240,25 @@ discountMoney = appMemberCouponVo.getDiscountMoney(); 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); + if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){ + goodsRealPrice = BigDecimal.ZERO; + } useCoupon = 1; + userCouponIdSet.add(memberCouponId); + appSureOrderGoodsVo.setMemberCouponId(memberCouponId); } } } @@ -210,9 +266,16 @@ 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); // 计算订单总金额 @@ -220,34 +283,90 @@ couponDiscount = couponDiscount.add(discountMoney); orderPayDeposit = orderPayDeposit.add(goodsDeposit); orderPayMoney = orderPayMoney.add(goodsRealPrice); + 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){ + appGoodsMemberCouponVoList.add(entity); + }else{ + if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){ + appGoodsMemberCouponVoList.add(entity); + } + } + + } + } + sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); + } + } + /*if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { // 获取商品关联优惠券 appGoodsMemberCouponVoList = new ArrayList<>(); - if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { + 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 (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { - appGoodsMemberCouponVoList.add(entity); + 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{ - appGoodsMemberCouponVoList.add(entity); + 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(goodsId)) { + } else if (entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())) { if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) { moneyThreshold = entity.getMoneyThreshold(); - if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { - appGoodsMemberCouponVoList.add(entity); + 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{ - appGoodsMemberCouponVoList.add(entity); + if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + }else{ + if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + } + } } } } - appSureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); + sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); } - appSureOrderGoodsVoList.add(appSureOrderGoodsVo); - } + }*/ // 设置订单相关金额 appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney); appSureOrderVo.setCouponDiscount(couponDiscount); @@ -296,7 +415,13 @@ 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()); @@ -323,8 +448,10 @@ appPanicBuyVo.setGoodsTotalPrice(goodsTotalPrice); appPanicBuyVo.setGoodsRealPrice(goodsRealPrice); goodsDeposit = activityGoodsGetVo.getActivitySubscription(); - if (goodsDeposit == null) { + 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); @@ -343,6 +470,7 @@ * @return */ @Override + @Transactional public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) { // 获取用户ID Long userId = appPlaceOrderDto.getUserId(); @@ -353,6 +481,20 @@ 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; @@ -365,8 +507,11 @@ BigDecimal goodsPrice; BigDecimal goodsTotalPrice; BigDecimal goodsRealPrice; + MerBaseDto merBaseDto = new MerBaseDto(); + merBaseDto.setUserId(userId); + merBaseDto.setShopId(appPlaceOrderDto.getShopId()); // 获取用户优惠券列表 - List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData(); + List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData(); // 将用户优惠券列表转换为Map,方便后续查找 Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); AppMemberCouponVo appMemberCouponVo; @@ -397,7 +542,7 @@ goodsId = appBuyGoodsDto.getGoodsId(); memberCouponId = appBuyGoodsDto.getMemberCouponId(); // 获取商品信息 - goods = remoteGoodsService.getGoods(goodsId).getData(); + goods = goodsMap.get(goodsId); // 设置商品信息 appSureOrderGoodsVo.setGoodsId(goodsId); appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); @@ -460,8 +605,14 @@ 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); // 计算商品总数量、商品总价、优惠总金额、支付押金、支付金额 @@ -523,19 +674,20 @@ order.setReceivableMoney(orderPayMoney); order.setReceivableDeposit(orderPayDeposit); order.setChangeReceivableMoney(orderPayMoney); - order.setPayType(appPlaceOrderDto.getPayType()); // 根据支付类型计算支付金额 - if (order.getPayType() == 1) { + 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()); @@ -553,8 +705,36 @@ appPlaceOrderVo.setOrderId(orderId); appPlaceOrderVo.setOrderNo(orderNo); // 调用支付 - //使用优惠券 - if(memberCouponSJ!=null){ + /* 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()); } //生成自动取消订单延时任务 @@ -569,8 +749,10 @@ 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 @@ -580,6 +762,7 @@ * @date 2023/7/6 17:59 */ @Override + @Transactional public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) { Long userId = appPlaceActivityDto.getUserId(); // 创建订单对象 @@ -639,8 +822,8 @@ if (activityGoodsGetVo.getAvailableBuyNum() < 1) { throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); } - if (buyNum < activityGoodsGetVo.getAvailableBuyNum()) { - throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); + if (activityGoodsGetVo.getAvailableBuyNum() < buyNum) { + throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND); } // 创建订单ID和订单号 String orderId = IdUtils.simpleUUID(); @@ -650,6 +833,7 @@ String orderGoodsId; // 创建商品类型集合 HashSet<String> goodsTypeSet = new HashSet<>(); + HashSet<String> goodsNurseSet = new HashSet<>(); // 创建商品订单对象,并设置商品ID,商品名称,商品介绍,商品类型 appSureOrderGoodsVo = new AppSureOrderGoodsVo(); useCoupon = 0; @@ -680,8 +864,10 @@ appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); // 获取商品押金 goodsDeposit = activityGoodsGetVo.getActivitySubscription(); - if (goodsDeposit == null) { + if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) { goodsDeposit = new BigDecimal("0.00"); + }else{ + goodsDeposit = goodsDeposit.multiply(buyNumBig); } appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit); // 计算商品数量,订单商品金额,优惠券折扣,订单支付押金,订单支付金额 @@ -724,6 +910,13 @@ } 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); @@ -739,19 +932,20 @@ order.setReceivableMoney(orderPayMoney); order.setReceivableDeposit(orderPayDeposit); order.setChangeReceivableMoney(orderPayMoney); - order.setPayType(appPlaceActivityDto.getPayType()); // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志 - if (order.getPayType() == 1) { + 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 (order.getPayType() == 2) { + } 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); } // 设置订单备注,商品数量,创建时间 @@ -761,10 +955,11 @@ // 保存订单 this.save(order); // 更新用户商品类型 - if (goodsTypeSet != null && goodsTypeSet.size() > 0) { + if (goodsTypeSet != null || goodsNurseSet!= null) { AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto(); appMemberGoodsTypeDto.setUserId(userId); appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet); + appMemberGoodsTypeDto.setGoodsNurseSet(goodsNurseSet); remoteMemberService.updateMemberGoodsType(appMemberGoodsTypeDto); } // 设置订单ID和订单号 @@ -780,6 +975,52 @@ 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)){ @@ -792,6 +1033,7 @@ 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; } @@ -819,6 +1061,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()); @@ -829,6 +1075,7 @@ appUserOrderPageVo.setSameShop(0); } appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId()); + appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(),delayTime)); } } return appUserOrderPageVoList; @@ -853,6 +1100,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()); @@ -913,18 +1161,10 @@ */ @Override public MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo) { - List<Long> shopIds = merHomeShopTotalVo.getShopIds(); - if (null != shopIds && shopIds.size() != 0) { - Integer todayShop = userServiceRecordMapper.countShopServicePersons(shopIds); - merHomeShopTotalVo = orderMapper.getMerHomeShopsTotalVo(shopIds); - merHomeShopTotalVo.setTodayShop(todayShop); - }else{ - Long shopId = merHomeShopTotalVo.getShopId(); - Integer todayShop = userServiceRecordService.countShopServicePerson(shopId); - merHomeShopTotalVo.setTodayShop(todayShop); - merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId); - - } + Long shopId = merHomeShopTotalVo.getShopId(); + Integer todayShop = userServiceRecordService.countShopServicePerson(shopId); + merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId); + merHomeShopTotalVo.setTodayShop(todayShop); return merHomeShopTotalVo; } @@ -964,9 +1204,9 @@ merVerifyOrderVo.setUseTime(order.getUseTime()); merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); // 根据订单用户ID获取用户信息 - 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()); // 返回结果 return merVerifyOrderVo; @@ -979,6 +1219,7 @@ * @return */ @Override + @Transactional public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto) { String orderId = merVerifyOrderDto.getOrderId(); BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney(); @@ -988,6 +1229,11 @@ 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); @@ -1053,10 +1299,17 @@ 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; + } /** @@ -1067,8 +1320,13 @@ * @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对象 @@ -1076,7 +1334,7 @@ Long userId = verifyCouponGetVo.getUserId(); // 调用remoteMemberService的getMember方法获取Member对象 Member member = remoteMemberService.getMember(userId).getData(); - merVerifyCouponVo.setUserName(member.getNickName()); + merVerifyCouponVo.setUserName(member.getRealName()); merVerifyCouponVo.setUserMobile(member.getMobile()); merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom()); merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName()); @@ -1156,14 +1414,19 @@ * @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.getNickName()); + merVerifyAwardVo.setUserName(member.getRealName()); merVerifyAwardVo.setUserMobile(member.getMobile()); if(memberGiftRecord.getGiftFrom()==1){ merVerifyAwardVo.setGiftFrom("平台生日卡"); @@ -1283,6 +1546,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(); @@ -1310,6 +1575,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(); @@ -1326,9 +1594,10 @@ BigDecimal goodsPrice; BigDecimal goodsTotalPrice; BigDecimal goodsRealPrice; - Long shopId = merNewOrderDto.getShopId(); - Shop shop = remoteShopService.getShop(shopId).getData(); - List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData(); + 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())); @@ -1395,8 +1664,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); @@ -1474,6 +1745,7 @@ order.setOnlinePayMoney(new BigDecimal("0.00")); order.setOfflinePayMoney(merNewOrderDto.getPayMoney()); order.setOffPayTime(nowTime); + order.setPayType(1); order.setCloseFlag(1); this.save(order); //创建服务 @@ -2515,7 +2787,7 @@ Long userId = verifyCouponGetVo.getUserId(); // 调用remoteMemberService的getMember方法获取Member对象 Member member = remoteMemberService.getMember(userId).getData(); - merVerifyCouponVo.setUserName(member.getNickName()); + merVerifyCouponVo.setUserName(member.getRealName()); merVerifyCouponVo.setUserMobile(member.getMobile()); merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom()); merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName()); @@ -2564,7 +2836,7 @@ throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); } Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); - merVerifyAwardVo.setUserName(member.getNickName()); + merVerifyAwardVo.setUserName(member.getRealName()); merVerifyAwardVo.setUserMobile(member.getMobile()); if(memberGiftRecord.getGiftFrom()==1){ merVerifyAwardVo.setGiftFrom("平台生日卡"); @@ -2830,7 +3102,15 @@ */ @Override public MerTotalOrderVo totalMerOrder(MerBaseDto merBaseDto) { - return orderMapper.totalMerOrder(merBaseDto.getShopId()); + MerTotalOrderVo merTotalOrderVo = new MerTotalOrderVo(); + merTotalOrderVo = orderMapper.totalMerOrder(merBaseDto.getShopId()); + Shop shop = remoteShopService.getShop(merBaseDto.getShopId()).getData(); + if(shop.getShopType()==2){ + merTotalOrderVo.setAgencyFlag(1); + }else{ + merTotalOrderVo.setAgencyFlag(0); + } + return merTotalOrderVo; } /** @@ -2899,6 +3179,7 @@ * @return void */ @Override + @Transactional public void autoCancelOrder(String orderId){ //更新订单信息 Order order = this.getById(orderId); @@ -2929,6 +3210,13 @@ 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{ @@ -2953,12 +3241,14 @@ * @description 订单支付回调 * @author jqs * @date 2023/7/13 17:57 - * @param orderId + * @param transaction * @return void */ @Override - public void payBack(String orderId) { + @Transactional + public void payBack(Transaction transaction) { // 更新订单状态 + String orderId=transaction.getOutTradeNo(); Order order = this.getById(orderId); order.setOrderStatus(2); order.setPayTime(new Date()); @@ -2975,6 +3265,8 @@ Boolean haveGoods = false; // 获取订单中的所有商品 List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>(); + GoodsTotalChangeDto goodsTotalChangeDto; // 遍历订单中的所有商品,根据商品类型累加收款金额,并标记商品存在状态 for (OrderGoods orderGoods : orderGoodsList) { switch (orderGoods.getGoodsType()) { @@ -2997,7 +3289,18 @@ 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()); @@ -3052,7 +3355,22 @@ } 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(); + + + + + } /** @@ -3063,6 +3381,7 @@ * @return void */ @Override + @Transactional public void refundOrder(String orderId){ //更新订单信息 Order order = this.getById(orderId); @@ -3115,6 +3434,13 @@ 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()); } @@ -3200,4 +3526,270 @@ 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){ + autoCancelOrder(order.getOrderId()); + } + } + } } -- Gitblit v1.7.1