From c93e76c57a98e35abbf62d2f514d9ba51efd3243 Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期一, 21 八月 2023 19:03:55 +0800 Subject: [PATCH] bug --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 1613 ++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 1,305 insertions(+), 308 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 d610779..3c83650 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 @@ -5,6 +5,17 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsRequest; +import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsResult; +import com.github.binarywang.wxpay.bean.ecommerce.RefundNotifyResult; +import com.github.binarywang.wxpay.bean.ecommerce.TransactionsResult; +import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum; +import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult; +import com.github.binarywang.wxpay.config.WxPayConfig; +import com.github.binarywang.wxpay.exception.WxPayException; +import com.github.binarywang.wxpay.service.WxPayService; +import com.google.common.base.Joiner; +import com.google.gson.Gson; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; @@ -13,25 +24,32 @@ 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.account.ProfitSharing; 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.pojo.order.PayRecord; import com.ruoyi.order.domain.vo.*; +import com.ruoyi.order.enums.RefundStatusEnum; +import com.ruoyi.order.enums.dict.IDict; 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; -import com.ruoyi.order.service.order.UserServiceRecordService; +import com.ruoyi.order.service.account.OrderPaymentService; +import com.ruoyi.order.service.account.OrderRefundService; +import com.ruoyi.order.service.account.PaymentMessageService; +import com.ruoyi.order.service.account.ProfitSharingService; +import com.ruoyi.order.service.order.*; 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.BirthdayCard; 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; @@ -39,10 +57,11 @@ import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.service.*; +import lombok.extern.slf4j.Slf4j; 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; @@ -62,6 +81,7 @@ * @since 2023-04-25 */ @Service +@Slf4j public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService { @Resource @@ -101,13 +121,28 @@ private RemoteActivityService remoteActivityService; @Resource - private UserServiceRecordMapper userServiceRecordMapper; - - @Resource private RedisService redisService; - @Autowired + @Resource + private PayRecordService payRecordService; + + @Resource private RedissonClient redissonClient; + + @Resource + private WxPayService wxService; + + @Resource + private PaymentMessageService paymentMessageService; + + @Resource + private OrderPaymentService orderPaymentService; + + @Resource + private ProfitSharingService profitSharingService; + + @Resource + private OrderRefundService orderRefundService; /** * @description: buyGoods @@ -135,8 +170,8 @@ 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){ + for (Goods goods : goodsList) { + if (goods.getSubscriptionFlag()==1&&goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) { haveDeposit = true; } } @@ -153,10 +188,12 @@ merBaseDto.setShopId(appSureOrderDto.getShopId()); // 获取用户优惠券列表 List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData(); - // 初始化商品优惠券列表 - List<AppMemberCouponVo> appGoodsMemberCouponVoList; + // 将优惠券列表转换为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; @@ -181,7 +218,7 @@ memberCouponId = appBuyGoodsDto.getMemberCouponId(); // 获取商品信息 goods = goodsMap.get(goodsId); - if(goods.getGoodsStatus()!=1){ + if (goods.getGoodsStatus() != 1) { throw new ServiceException(AppErrorConstant.GOODS_DOWN); } // 设置订单商品信息 @@ -189,6 +226,7 @@ appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction()); appSureOrderGoodsVo.setGoodsType(goods.getGoodsType()); + appSureOrderGoodsVo.setGoodsTag(goods.getGoodsTags()); // 获取商品图片 goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl()); @@ -213,8 +251,8 @@ 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); @@ -222,39 +260,37 @@ } } 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); + goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP); + discountMoney = goodsTotalPrice.subtract(goodsRealPrice); 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; + 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); } - useCoupon = 1; - userCouponIdSet.add(memberCouponId); - appSureOrderGoodsVo.setMemberCouponId(memberCouponId); } } - } - if(appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()){ - appSureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList); } appSureOrderGoodsVo.setUseCoupon(useCoupon); appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); appSureOrderGoodsVo.setCouponDiscount(discountMoney); appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); + // 获取商品订金 goodsDeposit = goods.getSubscription(); - // 获取商品押金 - goodsDeposit = goods.getSubscription(); - if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) { + if (goods.getSubscriptionFlag()==1 && goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO) > 0) { goodsDeposit = goodsDeposit.multiply(buyNumBig); - }else{ - if(haveDeposit){ + } else { + if (haveDeposit) { goodsDeposit = goodsRealPrice; - }else{ + } else { goodsDeposit = new BigDecimal("0.00"); } } @@ -269,14 +305,39 @@ //处理优惠券列表 if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { for (AppMemberCouponVo entity : appMemberCouponVoList) { - if(userCouponIdSet!=null&&userCouponIdSet.contains(entity.getMemberCouponId())){ + if (userCouponIdSet != null && userCouponIdSet.contains(entity.getMemberCouponId())) { entity.setUseFlag(1); - }else{ + } else { entity.setUseFlag(0); } + + } - for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) { - sureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList); + // 过滤商品优惠券列表 + 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) { + appGoodsMemberCouponVoList.add(entity); + } + /*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) { + appGoodsMemberCouponVoList.add(entity); + /*if (entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0) { + appGoodsMemberCouponVoList.add(entity); + }*/ + } + + } + } + sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); } } /*if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { @@ -376,17 +437,26 @@ if (activityGoodsGetVo.getActivityStatus() == 2) { throw new ServiceException(AppErrorConstant.ACTIVITY_END); } - if (activityGoodsGetVo.getAvailableBuyNum() < 1) { + Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId); + if (surpNum == null || surpNum < 1) { throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); } + if (activityGoodsGetVo.getAvailableBuyNum() < 1) { + throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND); + } + if (activityGoodsGetVo.getAvailableBuyNum() < buyNum) { + throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND); + } Goods goods = remoteGoodsService.getGoods(goodsId).getData(); - if(goods.getGoodsStatus()!=1){ + if (goods.getGoodsStatus() != 1) { throw new ServiceException(AppErrorConstant.GOODS_DOWN); } + appPanicBuyVo.setActivityId(activityId); appPanicBuyVo.setGoodsId(goodsId); appPanicBuyVo.setGoodsName(goods.getGoodsName()); appPanicBuyVo.setGoodsIntroduction(goods.getGoodsIntroduction()); appPanicBuyVo.setGoodsType(goods.getGoodsType()); + appPanicBuyVo.setGoodsTag(goods.getGoodsTags()); //商品图片 goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); appPanicBuyVo.setGoodsPicture(goodsFile.getFileUrl()); @@ -409,9 +479,9 @@ appPanicBuyVo.setGoodsTotalPrice(goodsTotalPrice); appPanicBuyVo.setGoodsRealPrice(goodsRealPrice); goodsDeposit = activityGoodsGetVo.getActivitySubscription(); - if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) { + if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) { goodsDeposit = new BigDecimal("0.00"); - }else{ + } else { goodsDeposit = goodsDeposit.multiply(buyNumBig); } appPanicBuyVo.setGoodsDeposit(goodsDeposit); @@ -431,6 +501,7 @@ * @return */ @Override + @Transactional public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) { // 获取用户ID Long userId = appPlaceOrderDto.getUserId(); @@ -450,8 +521,8 @@ 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){ + for (Goods goods : goodsList) { + if (goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) { haveDeposit = true; } } @@ -462,7 +533,7 @@ Integer serviceNum; Integer goodsNum = 0; String memberCouponId; - Goods goods; + Goods goods = null; GoodsFile goodsFile; BigDecimal goodsPrice; BigDecimal goodsTotalPrice; @@ -494,6 +565,7 @@ HashSet<String> goodsTypeSet = new HashSet<>(); //使用优惠券 StringJoiner memberCouponSJ = new StringJoiner(","); + List<String> goodsNameList = new ArrayList<>(); // 遍历购买的商品列表 for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { appSureOrderGoodsVo = new AppSureOrderGoodsVo(); @@ -503,6 +575,7 @@ memberCouponId = appBuyGoodsDto.getMemberCouponId(); // 获取商品信息 goods = goodsMap.get(goodsId); + goodsNameList.add(goods.getGoodsName()); // 设置商品信息 appSureOrderGoodsVo.setGoodsId(goodsId); appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); @@ -548,13 +621,17 @@ } } 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); + goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP); + discountMoney = goodsTotalPrice.subtract(goodsRealPrice); useCoupon = 1; } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) { discountMoney = appMemberCouponVo.getDiscountMoney(); goodsRealPrice = goodsTotalPrice.subtract(discountMoney); useCoupon = 1; + } + if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){ + goodsRealPrice = BigDecimal.ZERO; + discountMoney = goodsTotalPrice; } } memberCouponSJ.add(memberCouponId); @@ -565,12 +642,12 @@ appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); // 获取商品押金 goodsDeposit = goods.getSubscription(); - if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) { + if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO) > 0) { goodsDeposit = goodsDeposit.multiply(buyNumBig); - }else{ - if(haveDeposit){ + } else { + if (haveDeposit) { goodsDeposit = goodsRealPrice; - }else{ + } else { goodsDeposit = new BigDecimal("0.00"); } } @@ -600,6 +677,8 @@ orderGoods.setServiceNum(serviceNum); orderGoods.setGoodsType(goods.getGoodsType()); orderGoods.setGoodsName(goods.getGoodsName()); + orderGoods.setGoodsTag(goods.getGoodsTags()); + orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); orderGoods.setGoodsPicture(goodsFile.getFileUrl()); // 保存订单商品 orderGoodsService.save(orderGoods); @@ -633,20 +712,23 @@ order.setDiscountMoney(couponDiscount); order.setReceivableMoney(orderPayMoney); order.setReceivableDeposit(orderPayDeposit); - order.setChangeReceivableMoney(orderPayMoney); - order.setPayType(appPlaceOrderDto.getPayType()); + order.setOfflinePayMoney(BigDecimal.ZERO); // 根据支付类型计算支付金额 - 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.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount)); + 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.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount).subtract(orderPayDeposit)); + order.setPayType(2); order.setCloseFlag(0); } order.setOrderRemark(appPlaceOrderDto.getOrderRemark()); @@ -663,25 +745,129 @@ } appPlaceOrderVo.setOrderId(orderId); appPlaceOrderVo.setOrderNo(orderNo); - // 调用支付 + + String goodsName = ""; + if (null != goodsNameList) { + goodsName = String.join(",", goodsNameList); + } + + // 小程序微信下单支付 + /*createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, orderNo, + orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), + appPlaceOrderDto.getSpbillCreateIp(), goodsNameList);*/ + + //减去优惠券 - if(memberCouponSJ!=null){ + if (StringUtils.isNotBlank(memberCouponSJ.toString())) { remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); } //生成自动取消订单延时任务 Integer delayTime = 30; - if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ + 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.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; } + + /** + * 小程序支付下单API + * @param appPlaceOrderVo + * @param userId + * @param shopId + * @param goodsName + * @param orderNo + * @param orderId + * @param payMoney + * @param openid + * @param payerClientIp + * @param goodsNameList + */ + public void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, + String goodsName, String orderNo, + String orderId, BigDecimal payMoney, + String openid, String payerClientIp, List<String> goodsNameList){ + try { + // 创建支付订单 + //R<String> resultMch = remoteShopService.getShopSubMchId(shopId); + String subMchId = "1650744551"; + if (StringUtils.isEmpty(subMchId)) { + throw new ServiceException("获取微信商户号失败"); + } + WxPayConfig config = wxService.getConfig(); + config.setSubMchId(subMchId); + + PartnerTransactionsRequest request = new PartnerTransactionsRequest(); + request.setSpAppid(config.getAppId()); + request.setSpMchid(config.getMchId()); + request.setSubMchid(config.getSubMchId()); + // 商品描述 body + String description = goodsName + "-商品购买"; + + request.setDescription(description); + request.setOutTradeNo(orderNo); + request.setNotifyUrl(config.getNotifyUrl()); + // 结算信息 + PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo(); + settleInfo.setProfitSharing(true); + settleInfo.setSubsidyAmount(BigDecimal.ZERO); + request.setSettleInfo(settleInfo); + + // 订单总金额 + Integer totalFee = payMoney.multiply(new BigDecimal(100)).intValue(); + PartnerTransactionsRequest.Amount amount = new PartnerTransactionsRequest.Amount(); + amount.setTotal(totalFee); + amount.setCurrency("CNY"); + request.setAmount(amount); + + // 支付者 + PartnerTransactionsRequest.Payer payer = new PartnerTransactionsRequest.Payer(); + payer.setSpOpenid(openid); + request.setPayer(payer); + + // 场景信息 + PartnerTransactionsRequest.SceneInfo sceneInfo = new PartnerTransactionsRequest.SceneInfo(); + sceneInfo.setPayerClientIp(payerClientIp); + request.setSceneInfo(sceneInfo); + + TransactionsResult.JsapiResult result = wxService.getEcommerceService().partnerTransactions(TradeTypeEnum.JSAPI, request); + + // 请求参数 + Gson gson = new Gson(); + String payRequestJson = gson.toJson(request); + // 返回参数 + String payResponseJson = gson.toJson(result); + + // 支付相关信息返回 + appPlaceOrderVo.setAppId(result.getAppId()); + appPlaceOrderVo.setMchId(config.getMchId()); + appPlaceOrderVo.setTimeStamp(result.getTimeStamp()); + appPlaceOrderVo.setNonceStr(result.getNonceStr()); + appPlaceOrderVo.setPackageStr(result.getPackageValue()); + appPlaceOrderVo.setSignType(result.getSignType()); + appPlaceOrderVo.setPaySign(result.getPaySign()); + appPlaceOrderVo.setPrepayId(result.getPackageValue()); + + // 保存支付订单统一下单日志 + paymentMessageService.savePaymentMessage("1", orderId, payRequestJson, payResponseJson); + + // 保存支付订单统一下单支付记录 + orderPaymentService.saveOrderPayment(userId, shopId, subMchId, orderId, payMoney, + appPlaceOrderVo.getEndTime(), "Y", openid, + Joiner.on(";").join(goodsNameList), result.getPackageValue()); + } catch (WxPayException e) { + throw new ServiceException(e.getMessage()); + } + } + /** * @param appPlaceActivityDto @@ -691,6 +877,7 @@ * @date 2023/7/6 17:59 */ @Override + @Transactional public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) { Long userId = appPlaceActivityDto.getUserId(); // 创建订单对象 @@ -702,17 +889,17 @@ String goodsId = appPlaceActivityDto.getGoodsId(); Integer buyNum = appPlaceActivityDto.getBuyNum(); //redis库存控制极简版 - String goodsLock = "goods_lock_"+activityId+"_"+goodsId; + String goodsLock = "goods_lock_" + activityId + "_" + goodsId; RLock redissonLock = redissonClient.getLock(goodsLock); - try{ + try { redissonLock.lock(30, TimeUnit.SECONDS); - Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId); - if(surpNum==null||surpNum<buyNum){ + 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); + } else { + redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId, surpNum - buyNum); } - }finally{ + } finally { redissonLock.unlock(); } // 定义购买数量,服务数量,商品数量 @@ -750,8 +937,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(); @@ -792,9 +979,9 @@ appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); // 获取商品押金 goodsDeposit = activityGoodsGetVo.getActivitySubscription(); - if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) { + if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) { goodsDeposit = new BigDecimal("0.00"); - }else{ + } else { goodsDeposit = goodsDeposit.multiply(buyNumBig); } appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit); @@ -819,7 +1006,9 @@ orderGoods.setCycleNumFlag(goods.getCycleNumFlag()); orderGoods.setServiceNum(serviceNum); orderGoods.setGoodsType(goods.getGoodsType()); + orderGoods.setGoodsTag(goods.getGoodsTags()); orderGoods.setGoodsName(goods.getGoodsName()); + orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); orderGoods.setGoodsPicture(goodsFile.getFileUrl()); // 保存订单商品 orderGoodsService.save(orderGoods); @@ -839,9 +1028,9 @@ goodsTypeSet.add("单品"); } String goodsNurse = goods.getGoodsNurses(); - if(StringUtils.isNotBlank(goodsNurse)){ + if (StringUtils.isNotBlank(goodsNurse)) { String[] goodsNurseArr = goodsNurse.split(","); - for(String str : goodsNurseArr){ + for (String str : goodsNurseArr) { goodsNurseSet.add(str); } } @@ -859,21 +1048,26 @@ order.setDiscountMoney(couponDiscount); order.setReceivableMoney(orderPayMoney); order.setReceivableDeposit(orderPayDeposit); - order.setChangeReceivableMoney(orderPayMoney); - order.setPayType(appPlaceActivityDto.getPayType()); + order.setActivityId(activityId); + order.setActivityName(activityGoodsGetVo.getActivityName()); + order.setOfflinePayMoney(BigDecimal.ZERO); // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志 - 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) { + order.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount)); + } 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.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount).subtract(orderPayDeposit)); } // 设置订单备注,商品数量,创建时间 order.setOrderRemark(appPlaceActivityDto.getOrderRemark()); @@ -882,7 +1076,7 @@ // 保存订单 this.save(order); // 更新用户商品类型 - if (goodsTypeSet != null || goodsNurseSet!= null) { + if (goodsTypeSet != null || goodsNurseSet != null) { AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto(); appMemberGoodsTypeDto.setUserId(userId); appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet); @@ -902,18 +1096,65 @@ 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)){ + 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.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; } @@ -941,6 +1182,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()); @@ -951,6 +1196,7 @@ appUserOrderPageVo.setSameShop(0); } appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId()); + appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(), delayTime)); } } return appUserOrderPageVoList; @@ -975,6 +1221,8 @@ appUserOrderGetVo.setCouponDiscount(order.getCouponMoney()); appUserOrderGetVo.setReceivableDeposit(order.getReceivableDeposit()); appUserOrderGetVo.setReceivableMoney(order.getReceivableMoney()); + appUserOrderGetVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getOnlinePayMoney())); + appUserOrderGetVo.setPayType(order.getPayType()); appUserOrderGetVo.setPayMoney(order.getPayMoney()); appUserOrderGetVo.setOrderRemark(order.getOrderRemark()); appUserOrderGetVo.setShopId(order.getShopId()); @@ -987,6 +1235,12 @@ appUserOrderGetVo.setShopName(shop.getShopName()); appUserOrderGetVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); appUserOrderGetVo.setVerifyCode("1-" + orderId); + //生成自动取消订单延时任务 + Integer delayTime = 30; + if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { + delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); + } + appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime)); return appUserOrderGetVo; } @@ -998,11 +1252,15 @@ @Override public void cancelOrder(String orderId) { Order order = this.getById(orderId); - if (order.getOrderStatus() == 1) { + // 订单状态-1.删除 0.已取消 1.待支付 2.待核销 3.已完成 + if (order.getOrderStatus() == 0) { + throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER); + } else if (order.getOrderStatus() == 1) { this.autoCancelOrder(orderId); - }else if(order.getOrderStatus() == 2){ + } else if (order.getOrderStatus() == 2) { + // 2.待核销 -> 订单退款 this.refundOrder(orderId); - }else{ + } else { throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER); } } @@ -1036,9 +1294,15 @@ @Override public MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo) { Long shopId = merHomeShopTotalVo.getShopId(); + //获取今日到店 Integer todayShop = userServiceRecordService.countShopServicePerson(shopId); + //获取待处理订单和营业额 merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId); + //获取服务统计 + MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId); merHomeShopTotalVo.setTodayShop(todayShop); + merHomeShopTotalVo.setCycleSurp(serviceTotalVo.getCycleSurp()); + merHomeShopTotalVo.setExplorationSurp(serviceTotalVo.getExplorationSurp()); return merHomeShopTotalVo; } @@ -1052,6 +1316,9 @@ public MerVerifyOrderVo verifyOrder(String orderId, Long shopId) { // 创建返回对象 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); + if(orderId.contains("+")){ + orderId = orderId.substring(0, orderId.indexOf("+")); + } // 根据订单ID获取订单信息 Order order = this.getById(orderId); if (order.getOrderStatus() != 2) { @@ -1070,17 +1337,34 @@ merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney()); merVerifyOrderVo.setCouponDiscount(order.getCouponMoney()); merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit()); - merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney()); + if(order.getPayType()==1){ + merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney()); + }else{ + merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit())); + } merVerifyOrderVo.setPayMoney(order.getPayMoney()); merVerifyOrderVo.setOrderRemark(order.getOrderRemark()); merVerifyOrderVo.setCreateTime(order.getCreateTime()); merVerifyOrderVo.setPayTime(order.getPayTime()); merVerifyOrderVo.setUseTime(order.getUseTime()); merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); + merVerifyOrderVo.setPayType(order.getPayType()); + merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney()); + if(order.getPayType()==1){ + merVerifyOrderVo.setReceiveMoney(order.getPayMoney()); + }else{ + if(order.getOfflinePayMoney()!=null){ + merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney()); + }else{ + merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); + } + } + merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney())); // 根据订单用户ID获取用户信息 - SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData(); - merVerifyOrderVo.setUserName(sysUser.getNickName()); - merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber()); + Member member = remoteMemberService.getMember(order.getUserId()).getData(); + merVerifyOrderVo.setUserId(order.getUserId()); + merVerifyOrderVo.setUserName(member.getRealName()); + merVerifyOrderVo.setUserMobile(member.getMobile()); merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); // 返回结果 return merVerifyOrderVo; @@ -1093,6 +1377,7 @@ * @return */ @Override + @Transactional public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto) { String orderId = merVerifyOrderDto.getOrderId(); BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney(); @@ -1103,14 +1388,23 @@ 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(order.getPayMoney().add(relPayMoney)); - order.setCloseFlag(1); order.setChangeReceivableMoney(relReceiveMoney); + if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) { + order.setCloseFlag(1); + } else { + order.setCloseFlag(0); + } this.saveOrUpdate(order); //创建服务商品 List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId); @@ -1127,28 +1421,59 @@ Goods goods; List<ConsumerGoods> consumerGoodsList = new ArrayList<>(); for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) { - consumerGoods = new ConsumerGoods(); - goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId()); - consumerGoodsId = IdUtils.simpleUUID(); - consumerGoods.setConsumerGoodsId(consumerGoodsId); - consumerGoods.setDelFlag(0); - consumerGoods.setServiceStatus(1); - consumerGoods.setShopId(order.getShopId()); - consumerGoods.setUserId(order.getUserId()); - consumerGoods.setOrderId(orderId); - consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId()); - consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId()); - consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName()); - consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag()); - consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum()); - consumerGoods.setUsedNum(0); - consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType()); - consumerGoods.setCreateTime(nowTime); - consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); - consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture()); - consumerGoods.setGoodsNurses(goods.getGoodsNurses()); - consumerGoods.setSourceFrom(1); - consumerGoodsList.add(consumerGoods); + Integer buyNum = appUserOrderGoodsPageVo.getBuyNum(); + if (appUserOrderGoodsPageVo.getCycleNumFlag() == 0) { + consumerGoods = new ConsumerGoods(); + goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId()); + consumerGoodsId = IdUtils.simpleUUID(); + consumerGoods.setConsumerGoodsId(consumerGoodsId); + consumerGoods.setDelFlag(0); + consumerGoods.setServiceStatus(1); + consumerGoods.setShopId(order.getShopId()); + consumerGoods.setUserId(order.getUserId()); + consumerGoods.setOrderId(orderId); + consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId()); + consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId()); + consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName()); + consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag()); + consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum()); + consumerGoods.setUsedNum(0); + consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType()); + consumerGoods.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag()); + consumerGoods.setCreateTime(nowTime); + consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); + consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture()); + consumerGoods.setGoodsNurses(goods.getGoodsNurses()); + consumerGoods.setSourceFrom(1); + consumerGoods.setSureNum(buyNum); + consumerGoodsList.add(consumerGoods); + } else { + for (int i = 0; i < buyNum; i++) { + consumerGoods = new ConsumerGoods(); + goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId()); + consumerGoodsId = IdUtils.simpleUUID(); + consumerGoods.setConsumerGoodsId(consumerGoodsId); + consumerGoods.setDelFlag(0); + consumerGoods.setServiceStatus(1); + consumerGoods.setShopId(order.getShopId()); + consumerGoods.setUserId(order.getUserId()); + consumerGoods.setOrderId(orderId); + consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId()); + consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId()); + consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName()); + consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag()); + consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum()); + consumerGoods.setUsedNum(0); + consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType()); + consumerGoods.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag()); + consumerGoods.setCreateTime(nowTime); + consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); + consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture()); + consumerGoods.setGoodsNurses(goods.getGoodsNurses()); + consumerGoods.setSourceFrom(1); + consumerGoodsList.add(consumerGoods); + } + } } consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); //生成返回 @@ -1160,18 +1485,130 @@ merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney()); merVerifyOrderVo.setCouponDiscount(order.getCouponMoney()); merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit()); - merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney()); + if(order.getPayType()==1){ + merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getPayMoney())); + }else{ + merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit())); + } merVerifyOrderVo.setPayMoney(order.getPayMoney()); merVerifyOrderVo.setOrderRemark(order.getOrderRemark()); merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); 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()); + merVerifyOrderVo.setPayType(order.getPayType()); + merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney()); + if(order.getPayType()==1){ + merVerifyOrderVo.setReceiveMoney(order.getPayMoney()); + }else{ + if(order.getOfflinePayMoney()!=null){ + merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney()); + }else{ + merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); + } + } + merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney())); + Member member = remoteMemberService.getMember(order.getUserId()).getData(); + merVerifyOrderVo.setUserId(order.getUserId()); + merVerifyOrderVo.setUserName(member.getRealName()); + merVerifyOrderVo.setUserMobile(member.getMobile()); + merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); + // + if (order.getOrderFrom() == 2) { + // profitsSharingService.applyProfitSharing(); + } + + //创建支付记录 + if(merVerifyOrderDto.getRelPayMoney().compareTo(BigDecimal.ZERO)>0){ + PayRecord payRecord = new PayRecord(); + payRecord.setDelFlag(0); + payRecord.setOrderId(order.getOrderId()); + payRecord.setPayMoney(merVerifyOrderDto.getRelPayMoney()); + payRecord.setPayTime(new Date()); + payRecord.setPayType(merVerifyOrderDto.getPayType()); + payRecordService.save(payRecord); + } + //submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney()); + return merVerifyOrderVo; } + + /*private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney) { + String sendMessage = ""; + String resultMessage = ""; + try { + // 核销完成 开始分账(平台收取服务费) + OrderPayment payment = orderPaymentService.getByOrderId(orderId); + String transactionId = payment.getTransactionId(); + + // 平台特约商户号,用户平台收取服务费 + String platformTyMacId = WxPayConfiguration.getPlatformTyMacId(); + + R<String> resultMch = remoteShopService.getShopSubMchId(shopId); + String subMchId = resultMch.getData(); + if (!StringUtils.isEmpty(subMchId)) { + + + R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(shopId); + ShopProportionVo shopProportion = resultShopProportion.getData(); + if (null != shopProportion) { + ProfitSharingRequest request = new ProfitSharingRequest(); + request.setSubMchid(subMchId); + request.setTransactionId(transactionId); + request.setOutOrderNo(orderNo); + List<Receiver> receiverList = new ArrayList<>(); + + String description = "订单:" + orderNo + " 平台抽取佣金"; + BigDecimal proportionPercent = shopProportion.getProportionPercent(); + if (null == proportionPercent) { + proportionPercent = BigDecimal.ZERO; + } + + ProfitSharingResult result = new ProfitSharingResult(); + result.setOutOrderNo(orderNo); + result.setStatus("FINISHED"); + + // 计算分成金额 + int amount = orderMoney.multiply(proportionPercent).setScale(0, RoundingMode.UP).intValue(); + log.info("订单分账:{} 分账金额: {}", orderNo, amount); + if (amount > 0) { + // 分账创建 + Receiver receiver = new Receiver(); + receiver.setType("MERCHANT_ID"); + receiver.setReceiverAccount(platformTyMacId); + receiver.setAmount(amount); + receiver.setDescription(description); + + receiverList.add(receiver); + request.setReceivers(receiverList); + // 分账完成 + request.setFinish(true); + result = wxService.getEcommerceService().profitSharing(request); + } + + // 创建分账记录 + profitSharingService.saveProfitSharing(shopId, orderId, orderMoney, result); + + // 保存请求信息 + sendMessage = JSONObject.toJSONString(request); + resultMessage = JSONObject.toJSONString(result); + } else { + resultMessage = String.format("订单分账:%s 获取商户分成失败", orderNo); + log.info(resultMessage); + } + } else { + resultMessage = String.format("订单分账:%s 获取微信商户号失败", orderNo); + log.info(resultMessage); + } + } catch (WxPayException e) { + resultMessage = String.format("订单分账:%s 分账失败:%s", orderNo, e.getMessage()); + log.info(resultMessage); + e.printStackTrace(); + } + + // 保存分账信息 + paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage); + }*/ /** * @param merVerifyCouponDto @@ -1181,20 +1618,44 @@ * @date 2023/6/28 11:26 */ @Override + @Transactional public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) { MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData(); + MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon(); + ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyCouponDto.getUserId()).getData(); + Long userId = verifyCouponGetVo.getUserId(); + Long shopId = shopRelUserVo.getShopId(); + Shop shop = remoteShopService.getShop(shopId).getData(); + // 调用remoteMemberService的getMember方法获取Member对象 + Member member = remoteMemberService.getMember(userId).getData(); + //如果是商户优惠券,验证商户一致 + if (memberCoupon.getCouponFrom() == 2 && !memberCoupon.getShopId().equals(shopId)) { + if(!memberCoupon.getShopId().equals(member.getRelationShopId())){ + throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR); + } + if(!memberCoupon.getShopId().equals(shopId)){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + } + //如果是平台优惠券,当用户绑定商户时验证商户一致 + if (memberCoupon.getCouponFrom() == 1 && member.getBindingFlag() == 1) { + /*if(!memberCoupon.getShopId().equals(member.getRelationShopId())){ + throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR); + }*/ + if(!member.getRelationShopId().equals(shopId)){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + } + memberCoupon.setShopId(shopId); // 创建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.getNickName()); + merVerifyCouponVo.setUserName(member.getRealName()); merVerifyCouponVo.setUserMobile(member.getMobile()); merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom()); - merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName()); - merVerifyCouponVo.setCreateTime(verifyCouponGetVo.getMemberCoupon().getReceiveTime()); + merVerifyCouponVo.setCouponName(memberCoupon.getCouponName()); + merVerifyCouponVo.setCreateTime(memberCoupon.getReceiveTime()); // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性 List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream() .map(goods -> { @@ -1216,7 +1677,6 @@ .collect(Collectors.toList()); // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList merVerifyCouponVo.setGoodsList(merCouponGoodsList); - MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon(); //生成服务 ConsumerGoods consumerGoods; String consumerGoodsId; @@ -1243,11 +1703,12 @@ appShopGoodsGetDto.setShopId(memberCoupon.getShopId()); //获取商户服务次数 shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); - if(shopGoods!=null){ + if (shopGoods != null) { consumerGoods.setServiceNum(shopGoods.getServiceNum()); } consumerGoods.setUsedNum(0); consumerGoods.setGoodsType(goods.getGoodsType()); + consumerGoods.setGoodsTag(goods.getGoodsTags()); consumerGoods.setCreateTime(new Date()); consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData(); @@ -1256,38 +1717,78 @@ consumerGoods.setSourceFrom(1); consumerGoodsList.add(consumerGoods); } + MerVerifyMemberCouponDto merVerifyMemberCouponDto = new MerVerifyMemberCouponDto(); + merVerifyMemberCouponDto.setCouponId(memberCoupon.getId()); + merVerifyMemberCouponDto.setShopId(shopId); + remoteCouponService.sureMemberCoupon(merVerifyMemberCouponDto); consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); + if (member.getBindingFlag() != 1) { + AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); + appMemberBindingDto.setBindingFlag(1); + appMemberBindingDto.setBindingType(4); + appMemberBindingDto.setShopId(shop.getShopId()); + appMemberBindingDto.setShopName(shop.getShopName()); + appMemberBindingDto.setUserId(memberCoupon.getUserId()); + remoteMemberService.updateMemberBinding(appMemberBindingDto); + } merVerifyCouponVo.setVerifyStatus(2); return merVerifyCouponVo; } /** - * @description 确认核销奖品 - * @author jqs - * @date 2023/7/9 9:54 * @param merVerifyPrizeDto - * @return MerVerifyAwardVo + * @return MerVerifyAwardVo + * @description 确认核销奖品 + * @author jqs + * @date 2023/7/9 9:54 */ @Override - public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto){ + @Transactional + public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto) { MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo(); MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData(); - if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){ + if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) { throw new ServiceException(AppErrorConstant.COUPON_USED); } + ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyPrizeDto.getUserId()).getData(); + Long shopId = shopRelUserVo.getShopId(); + Shop shop = remoteShopService.getShop(shopId).getData(); + //平台奖品判断 + if (memberGiftRecord.getGiftFrom() == 1) { + BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData(); + //判断生日活动状态 + if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){ + shop = remoteShopService.getShop(shopId).getData(); + //判断指定区域全部店铺 + if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + //判断指定店铺 + if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + }else{ + throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR); + } + } + //商户奖品判断 + 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.getNickName()); + + merVerifyAwardVo.setUserName(member.getRealName()); merVerifyAwardVo.setUserMobile(member.getMobile()); - if(memberGiftRecord.getGiftFrom()==1){ + if (memberGiftRecord.getGiftFrom() == 1) { merVerifyAwardVo.setGiftFrom("平台生日卡"); - }else{ + } else { merVerifyAwardVo.setGiftFrom("商户生日卡"); } merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType()); List<BirthdayGiftSendDto> giftSendDtoList = new ArrayList<>(); BirthdayGiftSendDto birthdayGiftSendDto = new BirthdayGiftSendDto(); - switch(memberGiftRecord.getGiftType()){ + switch (memberGiftRecord.getGiftType()) { case 1: merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber())); @@ -1334,15 +1835,17 @@ break; } merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime()); - memberGiftRecord.setVerifyStatus(2); - memberGiftRecord.setVerifyTime(new Date()); - if(member.getBindingFlag()!=1){ + MerVerifyPrizeFinalDto merVerifyPrizeFinalDto = new MerVerifyPrizeFinalDto(); + merVerifyPrizeFinalDto.setPrizeId(memberGiftRecord.getPrizeId()); + merVerifyPrizeFinalDto.setShopId(shop.getShopId()); + remoteMemberService.verifyPrize(merVerifyPrizeFinalDto); + if (member.getBindingFlag() != 1) { AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); appMemberBindingDto.setBindingFlag(1); - appMemberBindingDto.setShopId(merVerifyPrizeDto.getShopId()); - Shop shop = remoteShopService.getShop(merVerifyPrizeDto.getShopId()).getData(); + appMemberBindingDto.setBindingType(5); + appMemberBindingDto.setShopId(shop.getShopId()); appMemberBindingDto.setShopName(shop.getShopName()); - appMemberBindingDto.setUserId(merVerifyPrizeDto.getUserId()); + appMemberBindingDto.setUserId(memberGiftRecord.getUserId()); remoteMemberService.updateMemberBinding(appMemberBindingDto); } merVerifyAwardVo.setPrizeId(merVerifyPrizeDto.getPrizeId()); @@ -1364,8 +1867,10 @@ if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) { BigDecimal zeroBig = new BigDecimal("0.00"); for (MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) { - merMemberNoClearOrderVo.setUnPaidMoney(merMemberNoClearOrderVo.getReceivableMoney().subtract(merMemberNoClearOrderVo.getPayMoney())); if (merMemberNoClearOrderVo.getUnPaidMoney() == null) { + merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); + } + if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){ merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); } } @@ -1381,11 +1886,23 @@ @Override public void merCloseOrder(MerCloseOrderDto merCloseOrderDto) { Order order = this.getById(merCloseOrderDto.getOrderId()); - order.setOfflinePayMoney(merCloseOrderDto.getPayMoney()); + order.setOfflinePayMoney(order.getOfflinePayMoney().add(merCloseOrderDto.getPayMoney())); order.setOffPayTime(new Date()); order.setPayMoney(order.getPayMoney().add(merCloseOrderDto.getPayMoney())); - order.setCloseFlag(1); + if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) { + order.setCloseFlag(1); + } else { + order.setCloseFlag(0); + } this.saveOrUpdate(order); + //创建支付记录 + PayRecord payRecord = new PayRecord(); + payRecord.setDelFlag(0); + payRecord.setOrderId(order.getOrderId()); + payRecord.setPayMoney(merCloseOrderDto.getPayMoney()); + payRecord.setPayTime(new Date()); + payRecord.setPayType(merCloseOrderDto.getPayType()); + payRecordService.save(payRecord); } /** @@ -1397,6 +1914,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(); @@ -1416,7 +1935,6 @@ sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); String password = "hongruitang"; sysUser.setPassword(SecurityUtils.encryptPassword(password)); - log.debug("sysUser" + sysUser.toString()); sysUser = remoteUserService.registerUser(sysUser).getData(); member = new Member(); member.setMemberId(memberId); @@ -1424,6 +1942,10 @@ member.setMobile(mobile); member.setRealName(name); member.setNickName(name); + member.setBindingFlag(1); + member.setBindingType(3); + member.setRelationShopId(shopId); + member.setRelationShopName(shop.getShopName()); remoteMemberService.createNewMember(member); } userId = sysUser.getUserId(); @@ -1440,8 +1962,6 @@ BigDecimal goodsPrice; BigDecimal goodsTotalPrice; BigDecimal goodsRealPrice; - Long shopId = merNewOrderDto.getShopId(); - Shop shop = remoteShopService.getShop(shopId).getData(); MerBaseDto merBaseDto = new MerBaseDto(); merBaseDto.setUserId(userId); merBaseDto.setShopId(shopId); @@ -1469,6 +1989,12 @@ BigDecimal experienceMoney = new BigDecimal("0.00"); BigDecimal serviceMoney = new BigDecimal("0.00"); BigDecimal goodsMoney = new BigDecimal("0.00"); + List<OrderGoods> orderGoodsList = new ArrayList<>(); + ConsumerGoods consumerGoods; + String consumerGoodsId; + List<ConsumerGoods> consumerGoodsList = new ArrayList<>(); + //使用优惠券 + StringJoiner memberCouponSJ = new StringJoiner(","); for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { goodsId = appBuyGoodsDto.getGoodsId(); memberCouponId = appBuyGoodsDto.getMemberCouponId(); @@ -1502,19 +2028,23 @@ } } 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); + goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP); + discountMoney = goodsTotalPrice.subtract(goodsRealPrice); } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) { discountMoney = appMemberCouponVo.getDiscountMoney(); goodsRealPrice = goodsTotalPrice.subtract(discountMoney); } + if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){ + goodsRealPrice = BigDecimal.ZERO; + discountMoney = goodsTotalPrice.subtract(goodsRealPrice); + } + memberCouponSJ.add(memberCouponId); } } - goodsDeposit = goods.getSubscription(); - if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) { + if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) { goodsDeposit = new BigDecimal("0.00"); - }else{ + } else { goodsDeposit = goodsDeposit.multiply(buyNumBig); } goodsNum = goodsNum + buyNum; @@ -1522,6 +2052,7 @@ couponDiscount = couponDiscount.add(discountMoney); orderPayDeposit = orderPayDeposit.add(goodsDeposit); orderPayMoney = orderPayMoney.add(goodsRealPrice); + //创建OrderGoods orderGoods = new OrderGoods(); orderGoodsId = IdUtils.simpleUUID(); @@ -1539,9 +2070,67 @@ orderGoods.setCycleNumFlag(goods.getCycleNumFlag()); orderGoods.setServiceNum(serviceNum); orderGoods.setGoodsType(goods.getGoodsType()); + orderGoods.setGoodsTag(goods.getGoodsTags()); orderGoods.setGoodsName(goods.getGoodsName()); + orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); orderGoods.setGoodsPicture(goodsFile.getFileUrl()); - orderGoodsService.save(orderGoods); + orderGoodsList.add(orderGoods); + + //创建服务 + Integer buyGoodsNum = orderGoods.getBuyNum(); + //判断是否确认次数 + if (orderGoods.getCycleNumFlag() == 0) { + consumerGoods = new ConsumerGoods(); + consumerGoodsId = IdUtils.simpleUUID(); + consumerGoods.setConsumerGoodsId(consumerGoodsId); + consumerGoods.setDelFlag(0); + consumerGoods.setServiceStatus(1); + consumerGoods.setShopId(shopId); + consumerGoods.setUserId(userId); + consumerGoods.setOrderId(orderId); + consumerGoods.setOrderGoodsId(orderGoodsId); + consumerGoods.setGoodsId(orderGoods.getGoodsId()); + consumerGoods.setGoodsName(orderGoods.getGoodsName()); + consumerGoods.setCycleNumFlag(orderGoods.getCycleNumFlag()); + consumerGoods.setServiceNum(orderGoods.getServiceNum()); + consumerGoods.setUsedNum(0); + consumerGoods.setGoodsType(orderGoods.getGoodsType()); + consumerGoods.setGoodsTag(orderGoods.getGoodsTag()); + consumerGoods.setCreateTime(nowTime); + consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); + consumerGoods.setGoodsPicture(orderGoods.getGoodsPicture()); + consumerGoods.setGoodsNurses(goods.getGoodsNurses()); + consumerGoods.setSourceFrom(1); + consumerGoods.setSureNum(buyGoodsNum); + consumerGoodsList.add(consumerGoods); + } else { + for (int i = 0; i < buyGoodsNum; i++) { + consumerGoods = new ConsumerGoods(); + consumerGoodsId = IdUtils.simpleUUID(); + consumerGoods.setConsumerGoodsId(consumerGoodsId); + consumerGoods.setDelFlag(0); + consumerGoods.setServiceStatus(1); + consumerGoods.setShopId(shopId); + consumerGoods.setUserId(userId); + consumerGoods.setOrderId(orderId); + consumerGoods.setOrderGoodsId(orderGoodsId); + consumerGoods.setGoodsId(orderGoods.getGoodsId()); + consumerGoods.setGoodsName(orderGoods.getGoodsName()); + consumerGoods.setCycleNumFlag(orderGoods.getCycleNumFlag()); + consumerGoods.setServiceNum(orderGoods.getServiceNum()); + consumerGoods.setUsedNum(0); + consumerGoods.setGoodsType(orderGoods.getGoodsType()); + consumerGoods.setGoodsTag(orderGoods.getGoodsTag()); + consumerGoods.setCreateTime(nowTime); + consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); + consumerGoods.setGoodsPicture(orderGoods.getGoodsPicture()); + consumerGoods.setGoodsNurses(goods.getGoodsNurses()); + consumerGoods.setSourceFrom(1); + consumerGoodsList.add(consumerGoods); + } + } + + //商户变更计算 switch (orderGoods.getGoodsType()) { case 1: cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); @@ -1572,56 +2161,40 @@ order.setCouponMoney(couponDiscount); order.setDiscountMoney(couponDiscount); order.setReceivableMoney(orderPayMoney); - order.setReceivableDeposit(new BigDecimal("0.00")); + order.setReceivableDeposit(orderPayDeposit); order.setPayType(1); + //判断实收金额 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); - order.setPayTime(nowTime); order.setUseTime(nowTime); order.setUseUserId(merNewOrderDto.getUserId()); order.setPayMoney(merNewOrderDto.getPayMoney()); order.setOnlinePayMoney(new BigDecimal("0.00")); order.setOfflinePayMoney(merNewOrderDto.getPayMoney()); + order.setPayMoney(merNewOrderDto.getPayMoney()); order.setOffPayTime(nowTime); - order.setCloseFlag(1); - this.save(order); - //创建服务 - List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId); - ConsumerGoods consumerGoods; - String consumerGoodsId; - for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) { - consumerGoods = new ConsumerGoods(); - goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData(); - consumerGoodsId = IdUtils.simpleUUID(); - consumerGoods.setConsumerGoodsId(consumerGoodsId); - consumerGoods.setDelFlag(0); - consumerGoods.setServiceStatus(1); - consumerGoods.setShopId(order.getShopId()); - consumerGoods.setUserId(order.getUserId()); - consumerGoods.setOrderId(orderId); - consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId()); - consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId()); - consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName()); - consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag()); - consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum()); - consumerGoods.setUsedNum(0); - consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType()); - consumerGoods.setCreateTime(nowTime); - consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); - consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture()); - consumerGoods.setGoodsNurses(goods.getGoodsNurses()); - consumerGoodsService.save(consumerGoods); + order.setPayType(1); + //判断结清 + if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) { + order.setCloseFlag(1); + } else { + order.setCloseFlag(0); } + //保存订单和服务 + this.save(order); + orderGoodsService.saveBatch(orderGoodsList); + consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); + //减去优惠券 + if (StringUtils.isNotBlank(memberCouponSJ.toString())) { + remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); + } + //用户未绑定则绑定商户 Member member = remoteMemberService.getMember(userId).getData(); if (member != null && member.getBindingFlag() != 1) { //绑定商户 @@ -1630,16 +2203,26 @@ appMemberBindingDto.setShopName(shop.getShopName()); appMemberBindingDto.setUserId(userId); appMemberBindingDto.setBindingFlag(1); + appMemberBindingDto.setBindingType(3); remoteMemberService.updateMemberBinding(appMemberBindingDto); } - ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); + //更新商户统计 + /*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); + remoteShopService.changeShopTotal(shopTotalChangeDto);*/ + //创建支付记录 + PayRecord payRecord = new PayRecord(); + payRecord.setDelFlag(0); + payRecord.setOrderId(orderId); + payRecord.setPayMoney(order.getPayMoney()); + payRecord.setPayTime(order.getOffPayTime()); + payRecord.setPayType(merNewOrderDto.getPayType()); + payRecordService.save(payRecord); } @@ -1649,6 +2232,22 @@ */ @Override public List<MerOrderPageVo> pageMerOrder(Page page, MerOrderPageDto merOrderPageDto) { + if (StringUtils.isNotBlank(merOrderPageDto.getKeyword())) { + // 获取关键字对应的用户ID + MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto(); + userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword()); + MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData(); + if (StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())) { + // 将用户ID转换成List<Long>类型 + List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(",")) + .map(Long::parseLong) + .collect(Collectors.toList()); + merOrderPageDto.setMemberUserIdList(userIdList); + merOrderPageDto.setMemberUserId(null); + } + } + + // 获取订单列表 List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerOrder(page, merOrderPageDto); if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) { Long userId; @@ -1657,13 +2256,17 @@ String orderFromDesc; BigDecimal zeroBig = new BigDecimal("0.00"); StringJoiner userIdSj = new StringJoiner(","); + // 遍历订单列表 for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { userId = merOrderPageVo.getUserId(); userIdSj.add(userId.toString()); orderFrom = merOrderPageVo.getOrderFrom(); + // 根据订单来源设置订单来源描述 if (orderFrom != null) { if (orderFrom == 1) { orderFromDesc = "商城订单"; + } else if (orderFrom == 2) { + orderFromDesc = "店铺砍价活动(" + merOrderPageVo.getActivityName() + ")"; } else { orderFromDesc = "线下创建"; } @@ -1671,19 +2274,30 @@ orderFromDesc = "商城订单"; } merOrderPageVo.setOrderFromDesc(orderFromDesc); - merOrderPageVo.setUnPaidMoney(merOrderPageVo.getReceivableMoney().subtract(merOrderPageVo.getPayMoney())); + // 设置未支付金额为0.00,如果未支付金额小于0,则设置为0.00 if (merOrderPageVo.getUnPaidMoney() == null) { merOrderPageVo.setUnPaidMoney(zeroBig); } + if (merOrderPageVo.getUnPaidMoney().compareTo(zeroBig) < 0) { + merOrderPageVo.setUnPaidMoney(zeroBig); + } } + + // 根据用户ID列表获取用户信息 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()); + if (merOrderPageVo.getUserId() != null && userMap.get(merOrderPageVo.getUserId()) != null) { + merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName()); + merOrderPageVo.setNickName(userMap.get(merOrderPageVo.getUserId()).getNickName()); + merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile()); + } else { + log.debug("订单merOrderPageVo" + merOrderPageVo.getOrderId() + "缺少用户"); + } } } return merOrderPageVoList; @@ -1695,13 +2309,15 @@ * @return */ @Override - public List<MerMemberNoClearOrderVo> pageMerMemberOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) { - List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberOrder(page, merMemberNoClearOrderDto.getMemberUserId()); + public List<MerMemberOrderVo> pageMerMemberOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) { + List<MerMemberOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberOrder(page, merMemberNoClearOrderDto.getMemberUserId(),merMemberNoClearOrderDto.getShopId()); if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) { BigDecimal zeroBig = new BigDecimal("0.00"); - for (MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) { - merMemberNoClearOrderVo.setUnPaidMoney(merMemberNoClearOrderVo.getReceivableMoney().subtract(merMemberNoClearOrderVo.getPayMoney())); + for (MerMemberOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) { if (merMemberNoClearOrderVo.getUnPaidMoney() == null) { + merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); + } + if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){ merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); } } @@ -1736,6 +2352,7 @@ if (mgtMemberOrderPageVoList != null && !mgtMemberOrderPageVoList.isEmpty()) { Long shopId; HashSet<String> set = new HashSet<>(); + BigDecimal zeroBig = new BigDecimal("0.00"); // 遍历MgtMemberOrderPageVoList,获取shopId并添加到set中 for (MgtMemberOrderPageVo mgtMemberOrderPageVo : mgtMemberOrderPageVoList) { shopId = mgtMemberOrderPageVo.getShopId(); @@ -1754,6 +2371,8 @@ for (MgtMemberOrderPageVo mgtMemberOrderPageVo : mgtMemberOrderPageVoList) { shopId = mgtMemberOrderPageVo.getShopId(); mgtMemberOrderPageVo.setShopName(map.get(shopId).getShopName()); + BigDecimal unPaidMoney = mgtMemberOrderPageVo.getReceivableMoney().subtract(mgtMemberOrderPageVo.getPayMoney()); + mgtMemberOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney); } } // 返回MgtMemberOrderPageVoList @@ -1821,7 +2440,9 @@ for (MgtActivityOrderPageVo mgtActivityOrderPageVo : activityOrderPageVoList) { mgtActivityOrderPageVo.setShopName(shopMap.get(mgtActivityOrderPageVo.getShopId()).getShopName()); if (userMap.get(mgtActivityOrderPageVo.getUserId()) != null) { - mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getNickName()); + mgtActivityOrderPageVo.setNickName(userMap.get(mgtActivityOrderPageVo.getUserId()).getNickName()); + mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getRealName()); + mgtActivityOrderPageVo.setUserMobile(userMap.get(mgtActivityOrderPageVo.getUserId()).getUserMobile()); } BigDecimal unPaidMoney = mgtActivityOrderPageVo.getReceivableMoney().subtract(mgtActivityOrderPageVo.getPayMoney()); mgtActivityOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney); @@ -1861,7 +2482,7 @@ } } MgtOrderTotal mgtOrderTotal = new MgtOrderTotal(); - MgtOrderTotal mgtOrderTotalFirst = orderMapper.totalOrderFirst(); + MgtOrderTotal mgtOrderTotalFirst = orderMapper.totalOrderFirst(mgtShopOrderPageDto); MgtOrderTotal mgtOrderTotalSecond = orderMapper.totalOrderSecond(mgtShopOrderPageDto); MgtOrderTotal mgtOrderTotalThird = orderMapper.totalOrderThird(mgtShopOrderPageDto); mgtOrderTotal.setOrderTotal(mgtOrderTotalFirst.getOrderTotal()); @@ -1945,7 +2566,9 @@ } if (userMap != null && !userMap.isEmpty()) { if (userMap.get(mgtShopOrderPageVo.getUserId()) != null) { - mgtShopOrderPageVo.setUserName(userMap.get(mgtShopOrderPageVo.getUserId()).getNickName()); + mgtShopOrderPageVo.setNickName(userMap.get(mgtShopOrderPageVo.getUserId()).getNickName()); + mgtShopOrderPageVo.setUserName(userMap.get(mgtShopOrderPageVo.getUserId()).getRealName()); + mgtShopOrderPageVo.setUserMobile(userMap.get(mgtShopOrderPageVo.getUserId()).getUserMobile()); } } BigDecimal unPaidMoney = mgtShopOrderPageVo.getReceivableMoney().subtract(mgtShopOrderPageVo.getPayMoney()); @@ -2042,8 +2665,15 @@ mgtOrderDetailVo.setCancelTime(order.getCancelTime()); mgtOrderDetailVo.setOrderRemark(order.getOrderRemark()); mgtOrderDetailVo.setShopId(order.getShopId()); - mgtOrderDetailVo.setShopName(shop.getShopName()); + if (shop != null) { + mgtOrderDetailVo.setShopName(shop.getShopName()); + } else { + mgtOrderDetailVo.setShopName("商户已被删除"); + } mgtOrderDetailVo.setVerifyTime(order.getUseTime()); + //获取支付记录 + List<MgtOrderPayListVo> orderPayListVoList = payRecordService.listMgtOrderPayVo(orderId); + mgtOrderDetailVo.setOrderPayListVoList(orderPayListVoList); return mgtOrderDetailVo; } @@ -2057,6 +2687,8 @@ @Override public MgtBulletinBoardVo boardOrderTotal() { MgtBulletinBoardVo mgtBulletinBoardVo = orderMapper.boardOrderTotal(); + Integer activityUserTotal = orderMapper.activityUserTotal(); + mgtBulletinBoardVo.setActivityUserTotal(activityUserTotal); return mgtBulletinBoardVo; } @@ -2613,6 +3245,9 @@ */ @Override public MerVerifyCouponVo verifyCoupon(String verifyCode, Long shopId) { + if(verifyCode.contains("+")){ + verifyCode = verifyCode.substring(0, verifyCode.indexOf("+")); + } // 创建MerVerifyCouponVo对象 MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo(); // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象 @@ -2624,27 +3259,43 @@ throw new ServiceException(AppErrorConstant.COUPON_EXPIRED); } else if (couponStatus == 2) { throw new ServiceException(AppErrorConstant.COUPON_USED); - } else if (couponStatus != 0) { + } else if (couponStatus != 1) { throw new ServiceException(AppErrorConstant.COUPON_NO_FIND); } - if (!memberCoupon.getShopId().equals(shopId)) { - throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + Long userId = verifyCouponGetVo.getUserId(); + Member member = remoteMemberService.getMember(userId).getData(); + //如果是商户优惠券,验证商户一致 + if (memberCoupon.getCouponFrom() == 2 && !memberCoupon.getShopId().equals(shopId)) { + if(!memberCoupon.getShopId().equals(member.getRelationShopId())){ + throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR); + } + if(!memberCoupon.getShopId().equals(shopId)){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + } + //如果是平台优惠券,当用户绑定商户时验证商户一致 + if (memberCoupon.getCouponFrom() == 1 && member.getBindingFlag() == 1) { + /*if(!memberCoupon.getShopId().equals(member.getRelationShopId())){ + throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR); + }*/ + if(!member.getRelationShopId().equals(shopId)){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } } List<Goods> goodsList = verifyCouponGetVo.getGoodsList(); - 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()); - merVerifyCouponVo.setCreateTime(verifyCouponGetVo.getMemberCoupon().getReceiveTime()); + merVerifyCouponVo.setCouponName(memberCoupon.getCouponName()); + merVerifyCouponVo.setCreateTime(memberCoupon.getReceiveTime()); // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性 List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream() .map(goods -> { MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo(); merCouponGoods.setGoodsId(goods.getGoodsId()); merCouponGoods.setGoodsName(goods.getGoodsName()); + merCouponGoods.setGoodsNum(1); if (goods.getGoodsType() == 1) { merCouponGoods.setGoodsType("周期"); } else if (goods.getGoodsType() == 2) { @@ -2661,38 +3312,66 @@ // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList merVerifyCouponVo.setGoodsList(merCouponGoodsList); merVerifyCouponVo.setVerifyStatus(1); + merVerifyCouponVo.setMemberCouponId(memberCoupon.getId()); return merVerifyCouponVo; } /** - * @description 获取核销奖品 - * @author jqs - * @date 2023/7/8 17:46 * @param verifyCode * @param shopId - * @return MerVerifyAwardVo + * @return MerVerifyAwardVo + * @description 获取核销奖品 + * @author jqs + * @date 2023/7/8 17:46 */ @Override - public MerVerifyAwardVo verifyPrize(String verifyCode,Long shopId){ + public MerVerifyAwardVo verifyPrize(String verifyCode, Long shopId) { MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo(); MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(verifyCode).getData(); - if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){ + if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) { throw new ServiceException(AppErrorConstant.COUPON_USED); } - if(memberGiftRecord.getGiftFrom()==2&&!memberGiftRecord.getShopId().equals(shopId)){ + Shop shop = null; + Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); + //判断是否在绑定店铺核销 + if(member.getBindingFlag()==1){ + if(!member.getRelationShopId().equals(shopId)){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + } + //平台奖品判断 + if (memberGiftRecord.getGiftFrom() == 1) { + BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData(); + //判断生日活动状态 + if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){ + shop = remoteShopService.getShop(shopId).getData(); + //判断指定区域全部店铺 + if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + //判断指定店铺 + if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){ + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + }else{ + throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR); + } + } + //商户奖品判断 + 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.getNickName()); + + merVerifyAwardVo.setUserName(member.getRealName()); merVerifyAwardVo.setUserMobile(member.getMobile()); - if(memberGiftRecord.getGiftFrom()==1){ + if (memberGiftRecord.getGiftFrom() == 1) { merVerifyAwardVo.setGiftFrom("平台生日卡"); - }else{ + } else { merVerifyAwardVo.setGiftFrom("商户生日卡"); } - merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType()); - switch(memberGiftRecord.getGiftType()){ + //礼物类型1优惠券2商品3现金4实物 + switch (memberGiftRecord.getGiftType()) { case 1: merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber())); @@ -2755,12 +3434,9 @@ 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()); @@ -2788,9 +3464,9 @@ } MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); // 获取订单年龄用户列表 - List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); + //List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); // 如果订单年龄用户列表不为空 - if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { + /*if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { // 定义变量 Integer ageType; List<Long> userIdList; @@ -2831,8 +3507,19 @@ orderTotalValue[i] = 0; orderMoneyValue[i] = BigDecimal.ZERO; } + }*/ + List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listMerOrderDistributionTotal(merTotalDto); + if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) { + String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; + Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; + BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; + MgtMapTotalPlusVo mgtMapTotalPlusVo; + for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) { + mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i); + orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey(); + orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); + orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); } - // 设置订单分布总数对象的属性值 orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); @@ -2941,15 +3628,29 @@ } /** - * @param merBaseDto + * @param merOrderPageDto * @return MerTotalOrderVo * @description 商户端订单管理统计 * @author jqs - * @date 2023/7/4 16:27 + * @date 2023/7/31 10:53 */ @Override - public MerTotalOrderVo totalMerOrder(MerBaseDto merBaseDto) { - return orderMapper.totalMerOrder(merBaseDto.getShopId()); + public MerTotalOrderVo totalMerOrder(MerOrderPageDto merOrderPageDto) { + MerTotalOrderVo merTotalOrderVo = new MerTotalOrderVo(); + if (StringUtils.isNotBlank(merOrderPageDto.getKeyword())) { + MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto(); + userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword()); + MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData(); + if (StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())) { + List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(",")) + .map(Long::parseLong) + .collect(Collectors.toList()); + merOrderPageDto.setMemberUserIdList(userIdList); + merOrderPageDto.setMemberUserId(null); + } + } + merTotalOrderVo = orderMapper.totalMerOrder(merOrderPageDto); + return merTotalOrderVo; } /** @@ -3011,32 +3712,33 @@ } /** - * @description 自动取消订单 - * @author jqs - * @date 2023/7/13 17:15 * @param orderId - * @return void + * @return void + * @description 自动取消订单 + * @author jqs + * @date 2023/7/13 17:15 */ @Override - public void autoCancelOrder(String orderId){ + @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){ + if (order.getOrderFrom() == 2) { List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); - if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ - for(OrderGoods orderGoods : orderGoodsList){ + if (orderGoodsList != null && !orderGoodsList.isEmpty()) { + for (OrderGoods orderGoods : orderGoodsList) { //redis库存控制极简版 - String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); + String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId(); RLock redissonLock = redissonClient.getLock(goodsLock); - try{ + 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{ + 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(); } //改变活动库存 @@ -3048,18 +3750,25 @@ 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){ + } else { + if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) { //回退优惠券 List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); - if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) { + if (orderGoodsList != null && !orderGoodsList.isEmpty()) { StringJoiner memberCouponSJ = new StringJoiner(","); for (OrderGoods orderGoods : orderGoodsList) { memberCouponSJ.add(orderGoods.getCouponId()); } - if(memberCouponSJ!=null){ + if (memberCouponSJ != null) { remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); } @@ -3069,15 +3778,17 @@ } /** - * @description 订单支付回调 - * @author jqs - * @date 2023/7/13 17:57 - * @param orderId - * @return void + * @param transaction + * @return void + * @description 订单支付回调 + * @author jqs + * @date 2023/7/13 17:57 */ @Override - public void payBack(String orderId) { + @Transactional + public void payBack(PartnerTransactionsResult transaction) { // 更新订单状态 + String orderId = transaction.getOutTradeNo(); Order order = this.getById(orderId); order.setOrderStatus(2); order.setPayTime(new Date()); @@ -3094,6 +3805,8 @@ Boolean haveGoods = false; // 获取订单中的所有商品 List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>(); + GoodsTotalChangeDto goodsTotalChangeDto; // 遍历订单中的所有商品,根据商品类型累加收款金额,并标记商品存在状态 for (OrderGoods orderGoods : orderGoodsList) { switch (orderGoods.getGoodsType()) { @@ -3116,16 +3829,28 @@ 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); } + //更新商品统计 + remoteGoodsService.changeGoodsTotal(goodsTotalChangeDtoList); // 更新商户统计信息 - ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); + /*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); + remoteShopService.changeShopTotal(shopTotalChangeDto);*/ // 初始化会员统计信息 MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); memberTotalChangeDto.setUserId(order.getUserId()); @@ -3133,10 +3858,12 @@ 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()); + BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()).setScale(0,BigDecimal.ROUND_HALF_UP); Integer integral = Integer.valueOf(integralBig.toString()); memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(1); + memberTotalChangeDto.setOrderId(orderId); + memberTotalChangeDto.setOrderNo(order.getOrderNo()); } // 设置会员支付金额和支付时间 memberTotalChangeDto.setPayMoney(order.getPayMoney()); @@ -3153,6 +3880,9 @@ } if (haveGoods) { memberTotalChangeDto.setGoodsOrderChange(1); + } + if(order.getOrderFrom()==2){ + memberTotalChangeDto.setActivityTime(order.getCreateTime()); } // 更新会员统计信息 remoteMemberService.changeMemberTotal(memberTotalChangeDto); @@ -3171,19 +3901,37 @@ } 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(); + PayRecord payRecord = new PayRecord(); + payRecord.setDelFlag(0); + payRecord.setOrderId(orderId); + payRecord.setPayMoney(order.getPayMoney()); + payRecord.setPayTime(order.getPayTime()); + payRecord.setPayType(1); + payRecordService.save(payRecord); } /** - * @description 订单退款 - * @author jqs - * @date 2023/7/13 18:36 * @param orderId - * @return void + * @return void + * @description 订单退款 + * @author jqs + * @date 2023/7/13 18:36 */ @Override - public void refundOrder(String orderId){ - //更新订单信息 + @Transactional + public void refundOrder(String orderId) { + // 更新订单信息 Order order = this.getById(orderId); order.setOrderStatus(0); order.setCancelTime(new Date()); @@ -3196,7 +3944,7 @@ orderRefund.setOrderId(order.getOrderId()); orderRefund.setUserId(order.getUserId()); orderRefund.setShopId(order.getShopId()); - orderRefund.setRefundMoney(order.getPayMoney()); + orderRefund.setRefundMoney(order.getOnlinePayMoney()); orderRefund.setOrderMoney(order.getPayMoney()); orderRefund.setCreateTime(new Date()); // 初始化各类商品的收款金额 @@ -3210,19 +3958,19 @@ Boolean haveExperience = false; Boolean haveGoods = false; List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); - if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ + if (orderGoodsList != null && !orderGoodsList.isEmpty()) { StringJoiner memberCouponSJ = new StringJoiner(","); - for(OrderGoods orderGoods : orderGoodsList){ - if(order.getOrderFrom()==2){ + for (OrderGoods orderGoods : orderGoodsList) { + if (order.getOrderFrom() == 2) { //redis库存控制极简版 //活动订单回退库存 - String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); + String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId(); RLock redissonLock = redissonClient.getLock(goodsLock); - try{ + 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{ + 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(); } //改变活动库存 @@ -3234,7 +3982,14 @@ agStockChangeDto.setShopId(order.getShopId()); agStockChangeDto.setUserId(order.getUserId()); remoteActivityService.changeActivityStock(agStockChangeDto); - }else{ + //删除活动记录 + 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()) { @@ -3259,19 +4014,19 @@ } } //回退优惠券 - if(memberCouponSJ!=null){ + if (memberCouponSJ != null) { remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); } } // 更新商户统计信息 - ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); + /*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); + remoteShopService.changeShopTotal(shopTotalChangeDto);*/ // 初始化会员统计信息 MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); memberTotalChangeDto.setUserId(order.getUserId()); @@ -3318,43 +4073,97 @@ activityTotalChangeDto.setUserId(order.getUserId()); remoteActivityService.changeActivityTotal(activityTotalChangeDto); } + + // 用户取消订单退款 + BigDecimal onlinePayMoney = order.getOnlinePayMoney(); + if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){ + // 订单支付金额大于0,可发起退款 + //orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); + } + + orderRefund.setRefundStatus(1); + orderRefundService.saveOrUpdate(orderRefund); } /** - * @description 员工端活动订单统计 - * @author jqs - * @date 2023/7/17 15:25 + * 申请退款API + */ + /*private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){ + try { + // 创建支付订单 + OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId); + if (null == orderPayment) { + return; + } + String subMchId = orderPayment.getSubMchId(); + WxPayConfig config = wxService.getConfig(); + + RefundsRequest request = new RefundsRequest(); + request.setSpAppid(config.getAppId()); + request.setSubMchid(subMchId); + request.setTransactionId(orderPayment.getTransactionId()); + request.setOutRefundNo(outRefundNo); + request.setReason("用户取消订单"); + // 订单金额 + int total = payMoney.multiply(new BigDecimal(100)).intValue(); + RefundsRequest.Amount amount = RefundsRequest.Amount.builder().refund(total).total(total).currency("CNY").build(); + request.setAmount(amount); + request.setNotifyUrl(config.getNotifyUrl()); + + RefundsResult result = wxService.getEcommerceService().refunds(request); + + // 微信退款id + orderRefund.setWxRefundId(result.getRefundId()); + + // 请求参数 + Gson gson = new Gson(); + String refundRequestJson = gson.toJson(request); + // 返回参数 + String refundResponseJson = gson.toJson(result); + + // 保存支付订单统一下单日志 + paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson); + + } catch (WxPayException e) { + throw new ServiceException(e.getMessage()); + } + }*/ + + /** * @param staffTotalDto - * @return StaffActivityOrderTotalVo + * @return StaffActivityOrderTotalVo + * @description 员工端活动订单统计 + * @author jqs + * @date 2023/7/17 15:25 */ @Override - public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto){ + 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 + * @return StaffActivityTotalVo + * @description 员工端活动统计 + * @author jqs + * @date 2023/7/17 15:51 */ @Override - public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto){ + 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 + * @return MerOrderDistributionTotalVo + * @description 员工端活动统计订单分布 + * @author jqs + * @date 2023/7/17 16:16 */ @Override - public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto){ + public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto) { MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); // 获取订单年龄用户列表 MerTotalDto merTotalDto = new MerTotalDto(); @@ -3395,7 +4204,7 @@ } // 如果用户ID列表不为空 if (userIdList != null && !userIdList.isEmpty()) { - mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList,staffTotalDto.getShopId(),staffTotalDto.getActivityId()); + mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList, staffTotalDto.getShopId(), staffTotalDto.getActivityId()); orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); } else { @@ -3414,14 +4223,14 @@ /** - * @description 员工端活动统计销售占比 - * @author jqs - * @date 2023/7/17 17:03 * @param staffTotalDto - * @return MerOrderTypeTotalVo + * @return MerOrderTypeTotalVo + * @description 员工端活动统计销售占比 + * @author jqs + * @date 2023/7/17 17:03 */ @Override - public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto){ + public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto) { MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo(); //获取商品分类销售数据 List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listStaffOrderTotalGoodsType(staffTotalDto); @@ -3459,11 +4268,11 @@ } /** - * @description 员工端获客人数 - * @author jqs - * @date 2023/7/17 18:42 * @param staffTotalDto - * @return StaffActivityDateMemberTotalVo + * @return StaffActivityDateMemberTotalVo + * @description 员工端获客人数 + * @author jqs + * @date 2023/7/17 18:42 */ @Override public StaffActivityDateMemberTotalVo getStaffActivityGetMemberTotal(StaffTotalDto staffTotalDto) { @@ -3500,11 +4309,11 @@ } /** - * @description 员工端获客人数 - * @author jqs - * @date 2023/7/17 18:42 * @param staffTotalDto - * @return StaffActivityDateMemberTotalVo + * @return StaffActivityDateMemberTotalVo + * @description 员工端获客人数 + * @author jqs + * @date 2023/7/17 18:42 */ @Override public StaffActivityDateMemberTotalVo getStaffActivityMemberTotal(StaffTotalDto staffTotalDto) { @@ -3541,12 +4350,12 @@ } /** - * @description 获取时间段日期 - * @author jqs - * @date 2023/7/17 19:11 * @param startDate * @param endDate - * @return List<String> + * @return List<String> + * @description 获取时间段日期 + * @author jqs + * @date 2023/7/17 19:11 */ public static List<String> getDateRange(String startDate, String endDate) { List<String> dateList = new ArrayList<>(); @@ -3558,4 +4367,192 @@ } return dateList; } + + /** + * @param + * @return void + * @description 检查订单状态定时任务 + * @author jqs + * @date 2023/7/25 14:40 + */ + @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); + } + } + } + + @Override + public void profitSharingBack(ProfitSharingNotifyResult result) { + + try { + String outOrderNo = result.getOutOrderNo(); + ProfitSharing profitSharing = profitSharingService.getById(outOrderNo); + if(null != profitSharing){ + profitSharing.setWxOrderId(result.getOrderId()); + profitSharing.setFinishTime(result.getSuccessTime()); + profitSharing.setFinishFlag(1); + + profitSharingService.saveOrUpdate(profitSharing); + } + } catch (Exception e){ + + log.error("==分账回成功回调操作====【{}】========={}", result.getOutOrderNo(), e.getMessage()); + } + } + + @Override + public void orderRefundBack(RefundNotifyResult result) { + try { + String outRefundNo = result.getOutRefundNo(); + String refundStatus = result.getRefundStatus(); + OrderRefund orderRefund = orderRefundService.getById(outRefundNo); + if(null != orderRefund){ + orderRefund.setWxRefundId(result.getRefundId()); + orderRefund.setBackTime(result.getSuccessTime()); + orderRefund.setRefundStatus(IDict.getCodeByText(RefundStatusEnum.class, refundStatus)); + orderRefundService.saveOrUpdate(orderRefund); + } + } catch (Exception e){ + + log.error("==退款回成功回调操作====【{}】========={}", result.getOutRefundNo(), e.getMessage()); + } + } + + 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()); + + } + } + } + } + } + + /** + * @description 获取商户订单统计 + * @author jqs + * @date 2023/8/4 10:25 + * @param mgtShopAllOrderPageDto + * @return MgtShopAllOrderTotal + */ + @Override + public MgtShopAllOrderTotal getMgtShopAllOrderTotal(MgtShopAllOrderPageDto mgtShopAllOrderPageDto){ + MgtShopAllOrderTotal shopAllOrderTotal = orderMapper.getMgtShopAllOrderTotal(mgtShopAllOrderPageDto); + return shopAllOrderTotal; + } + + /** + * 分页获取会员消费记录 + * @param merOrderPageDto + * @return + */ + @Override + public List<MerOrderPageVo> pageMerMemberPayOrder(Page page,MerMemberNoClearOrderDto merOrderPageDto){ + List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerMemberPayOrder(page, merOrderPageDto); + if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) { + Long userId; + Member member; + Integer orderFrom; + String orderFromDesc; + BigDecimal zeroBig = new BigDecimal("0.00"); + StringJoiner userIdSj = new StringJoiner(","); + for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { + userId = merOrderPageVo.getUserId(); + userIdSj.add(userId.toString()); + orderFrom = merOrderPageVo.getOrderFrom(); + if (orderFrom != null) { + if (orderFrom == 1) { + orderFromDesc = "商城订单"; + } else { + orderFromDesc = "线下创建"; + } + } else { + orderFromDesc = "商城订单"; + } + merOrderPageVo.setOrderFromDesc(orderFromDesc); + merOrderPageVo.setUnPaidMoney(merOrderPageVo.getPayMoney().subtract(merOrderPageVo.getReceiveMoney())); + if (merOrderPageVo.getUnPaidMoney() == null) { + merOrderPageVo.setUnPaidMoney(zeroBig); + } + if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){ + merOrderPageVo.setUnPaidMoney(zeroBig); + } + } + 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) { + if(merOrderPageVo.getUserId()!=null&&userMap.get(merOrderPageVo.getUserId())!=null){ + merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName()); + merOrderPageVo.setNickName(userMap.get(merOrderPageVo.getUserId()).getNickName()); + merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile()); + }else{ + log.debug("订单merOrderPageVo"+merOrderPageVo.getOrderId()+"缺少用户"); + } + } + } + return merOrderPageVoList; + } } -- Gitblit v1.7.1