From 47ca395c7dd7005f04fd68e4f12aa4dd0baf31bc Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期四, 10 七月 2025 15:25:10 +0800 Subject: [PATCH] bug修改 --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 558 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 522 insertions(+), 36 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 1ab53ad..117fbc5 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 @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.douyin.openapi.client.models.*; import com.github.binarywang.wxpay.bean.ecommerce.*; import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult; @@ -28,7 +29,7 @@ import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.common.security.utils.SecurityUtils; -import com.ruoyi.goods.api.domain.LotteryEvent; +import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.service.LotteryEventClient; import com.ruoyi.order.config.WxPayConfiguration; import com.ruoyi.order.domain.dto.*; @@ -49,6 +50,8 @@ import com.ruoyi.order.service.account.ProfitSharingService; import com.ruoyi.order.service.order.*; import com.ruoyi.order.util.HuiFuTianXiaUtil; +import com.ruoyi.order.util.douyin.OrderUtil; +import com.ruoyi.order.util.douyin.VerifyUtil; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.constant.DelayTaskEnum; import com.ruoyi.system.api.constant.SecurityConstant; @@ -69,7 +72,6 @@ import com.ruoyi.system.api.model.QwH5LoginVo; import com.ruoyi.system.api.model.QwUserDetailDto; import com.ruoyi.system.api.service.*; -import io.seata.spring.annotation.GlobalTransactional; import lombok.extern.log4j.Log4j2; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; @@ -181,6 +183,7 @@ if(shop!=null&&shop.getShopStatus()!=1){ throw new ServiceException(AppErrorConstant.SHOP_CLOSED); } +// Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData(); // 初始化订单对象 AppSureOrderVo appSureOrderVo = new AppSureOrderVo(); // 初始化订单商品列表 @@ -264,8 +267,21 @@ appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); appShopGoodsGetDto.setShopId(appSureOrderDto.getShopId()); ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); + //商户是否定制价格 if (shopGoods != null) { goodsPrice = shopGoods.getSalesPrice(); + } + //是否绑定经销商 + if(shop.getBelongShopId()!=null &&shop.getShopType()==2){ + //经销商定制价格 + AppShopGoodsGetDto shopGoodsGetDto=new AppShopGoodsGetDto(); + shopGoodsGetDto.setGoodsId(goods.getGoodsId()); + shopGoodsGetDto.setShopId(shop.getBelongShopId()); + Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData(); + shopGoods = remoteGoodsService.getShopGoods(shopGoodsGetDto).getData(); + if (1 == belongShop.getModifyPricePermission() && null != shopGoods) { + goodsPrice=shopGoods.getSalesPrice(); + } } appSureOrderGoodsVo.setGoodsPrice(goodsPrice); buyNumBig = BigDecimal.valueOf(buyNum); @@ -450,6 +466,18 @@ if (shopGoods != null) { goodsPrice = shopGoods.getSalesPrice(); } + //是否绑定经销商 + if(shop.getBelongShopId()!=null &&shop.getShopType()==2){ + //经销商定制价格 + Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData(); + appShopGoodsGetDto = new AppShopGoodsGetDto(); + appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); + appShopGoodsGetDto.setShopId(belongShop.getShopId()); + shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); + if (1 == belongShop.getModifyPricePermission() && null != shopGoods) { + goodsPrice = shopGoods.getSalesPrice(); + } + } appPanicBuyVo.setGoodsPrice(goodsPrice); buyNumBig = BigDecimal.valueOf(buyNum); goodsActivityPrice = activityGoodsGetVo.getActivityPrice(); @@ -481,8 +509,8 @@ * @return */ @Override - @Transactional - @GlobalTransactional(rollbackFor = Exception.class) + @Transactional // todo 放开分布式事务注解 +// @GlobalTransactional(rollbackFor = Exception.class) public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) { // 获取用户ID Long userId = appPlaceOrderDto.getUserId(); @@ -555,6 +583,10 @@ //使用优惠券 StringJoiner memberCouponSJ = new StringJoiner(","); List<String> goodsNameList = new ArrayList<>(); + Shop shop = remoteShopService.getShop(appPlaceOrderDto.getShopId()).getData(); + if(shop!=null&&shop.getShopStatus()!=1){ + throw new ServiceException(AppErrorConstant.SHOP_CLOSED); + } // 遍历购买的商品列表 for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { appSureOrderGoodsVo = new AppSureOrderGoodsVo(); @@ -588,6 +620,19 @@ if (shopGoods != null) { goodsPrice = shopGoods.getSalesPrice(); serviceNum = shopGoods.getServiceNum(); + } + //是否绑定经销商 + if(shop.getBelongShopId()!=null &&shop.getShopType()==2){ + //经销商定制价格 + Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData(); + appShopGoodsGetDto = new AppShopGoodsGetDto(); + appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); + appShopGoodsGetDto.setShopId(belongShop.getShopId()); + shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); + if (1 == belongShop.getModifyPricePermission() && null != shopGoods) { + goodsPrice = shopGoods.getSalesPrice(); + serviceNum = shopGoods.getServiceNum(); + } } appSureOrderGoodsVo.setGoodsPrice(goodsPrice); // 计算商品总价 @@ -993,7 +1038,7 @@ */ @Override @Transactional - @GlobalTransactional(rollbackFor = Exception.class) +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) { Long userId = appPlaceActivityDto.getUserId(); Member member = remoteMemberService.getMember(userId).getData(); @@ -1545,10 +1590,13 @@ appPlaceOrderVo.setPaySign(payArr[5]); appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId()); // 返回AppPlaceOrderVo对象 - List<LotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); + List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); if (data.size() > 0) { - long count = data.stream().filter(s -> s.getPayMoney().compareTo(order.getPayMoney()) >= 0).count(); - appPlaceOrderVo.setLotteryDraw(count > 0); + List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(order.getPayMoney()) >= 0).collect(Collectors.toList()); + appPlaceOrderVo.setLotteryDraw(collect.size() > 0); + if (collect.size() > 0) { + appPlaceOrderVo.setLotteryEventId(collect.get(0).getId()); + } } else { appPlaceOrderVo.setLotteryDraw(false); } @@ -1778,12 +1826,12 @@ merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); merVerifyOrderVo.setPayType(order.getPayType()); merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney()); - if(order.getPayType()==1){ + if (order.getPayType() == 1) { merVerifyOrderVo.setReceiveMoney(order.getPayMoney()); - }else{ - if(order.getOfflinePayMoney()!=null){ + } else { + if (order.getOfflinePayMoney() != null) { merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney()); - }else{ + } else { merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); } } @@ -1795,7 +1843,41 @@ // 返回结果 return merVerifyOrderVo; } - + + + @Override + public MerVerifyOrderVo verifyOrderDouYin(String orderId, Long shopId) { + CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId); + if (null == data) { + throw new ServiceException("查询券信息失败"); + } + List<CertificatePrepareResponseDataCertificatesItem> itemList = data.getCertificates(); + if (null == itemList || itemList.isEmpty()) { + throw new ServiceException("查询券信息失败"); + } + CertificatePrepareResponseDataCertificatesItem certificatesItem = itemList.get(0); + //商品信息 + CertificatePrepareResponseDataCertificatesItemSku sku = certificatesItem.getSku(); + //次卡信息 + CertificatePrepareResponseDataCertificatesItemTimeCard timeCard = certificatesItem.getTimeCard(); + //券的状态 + Number status = certificatesItem.getStatus(); + // 创建返回对象 + MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); + // 设置返回对象的属性值 + merVerifyOrderVo.setOrderId(orderId); + merVerifyOrderVo.setOrderFrom(6); + merVerifyOrderVo.setOrderStatus(status.intValue() == 1 ? 2 : 3); + List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = new ArrayList<>(); + AppUserOrderGoodsPageVo orderGoodsPageVo = new AppUserOrderGoodsPageVo(); + orderGoodsPageVo.setGoodsName(sku.getTitle()); + appUserOrderGoodsPageVoList.add(orderGoodsPageVo); + merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); + merVerifyOrderVo.setLaveTime(timeCard.getTimesCount() - timeCard.getTimesUsed()); + // 返回结果 + return merVerifyOrderVo; + } + /** * 确认核销订单 * @@ -1804,7 +1886,7 @@ */ @Override @Transactional - @GlobalTransactional(rollbackFor = Exception.class) +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto) { String orderId = merVerifyOrderDto.getOrderId(); BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney(); @@ -2037,17 +2119,222 @@ remoteMemberService.changeMemberTotal(memberTotalChangeDto); return merVerifyOrderVo; } - + + /** - * @description 分账实现 - * @author jqs - * @date 2023/9/8 11:56 + * 核销抖音券 + * + * @return + */ + @Override + @Transactional +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 + public MerVerifyOrderVo sureVerifyOrderDouYin(MerVerifyOrderDto merVerifyOrderDto) { + String phone = merVerifyOrderDto.getPhone(); + String orderId = merVerifyOrderDto.getOrderId(); + Long shopId = merVerifyOrderDto.getShopId(); + //获取核销商户 + Shop shop = remoteShopService.getShop(shopId).getData(); + CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId); + if (null == data) { + throw new ServiceException("查询券信息失败"); + } + List<CertificatePrepareResponseDataCertificatesItem> itemList = data.getCertificates(); + if (null == itemList || itemList.isEmpty()) { + throw new ServiceException("查询券信息失败"); + } + CertificatePrepareResponseDataCertificatesItem certificatesItem = itemList.get(0); + Number status = certificatesItem.getStatus(); + if (status.intValue() == 2) { + throw new ServiceException("该抖音券不能重复核销"); + } + if (status.intValue() != 1) { + throw new ServiceException("抖音券核销失败"); + } + String encryptedCode = certificatesItem.getEncryptedCode(); + List<CertificateVerifyResponseDataVerifyResultsItem> items = VerifyUtil.certificateVerify(data.getVerifyToken(), shop.getPoiId(), new ArrayList<String>() {{ + add(encryptedCode); + }}); + if (null == items || items.isEmpty()) { + throw new ServiceException("抖音券核销失败"); + } + Order one = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getTripartiteOrderId, data.getOrderId())); + if (null != one) { + throw new ServiceException("该抖音券不能重复核销"); + } + + TradeOrderQueryResponseData tradeOrderQueryResponseData = OrderUtil.queryOrderList(1, 10, data.getOrderId()); + //原始金额 + BigDecimal originAmount = BigDecimal.ZERO; + //支付金额 + BigDecimal payAmount = BigDecimal.ZERO; + //优惠金额 + BigDecimal payDiscountAmount = BigDecimal.ZERO; + if (null != tradeOrderQueryResponseData) { + TradeOrderQueryResponseDataOrdersItem ordersItem = tradeOrderQueryResponseData.getOrders().get(0); + TradeOrderQueryResponseDataOrdersItemAmountInfo amountInfo = ordersItem.getAmountInfo(); + originAmount = BigDecimal.valueOf(amountInfo.getOriginAmount()).divide(new BigDecimal(100)); + payAmount = BigDecimal.valueOf(amountInfo.getPayAmount()).divide(new BigDecimal(100)); + payDiscountAmount = BigDecimal.valueOf(amountInfo.getPayDiscountAmount()).divide(new BigDecimal(100)); + } + + Date nowTime = new Date(); + Member member = remoteMemberService.getMemberByMobile(phone).getData(); + //开始添加订单数据 + Order order = new Order(); + order.setOrderId(IdUtils.fastSimpleUUID()); + order.setDelFlag(0); + order.setOrderStatus(3); + order.setOrderNo(CodeFactoryUtil.getShopOrderNo()); + order.setOrderFrom(6); + order.setShopId(shopId); + order.setUserId(member.getUserId()); + order.setOrderMoney(originAmount); + order.setDiscountMoney(payDiscountAmount); + order.setReceivableMoney(payAmount); + order.setPayType(1); + order.setPayMoney(payAmount); + order.setOnlinePayMoney(payAmount); + order.setOrderRemark("抖音订单"); + order.setCreateTime(nowTime); + order.setPayTime(nowTime); + order.setTripartiteOrderId(data.getOrderId()); + + //绑定用户判断核销商户 + if (member.getBindingFlag() == 1) { + if (!member.getRelationShopId().equals(shopId)) { + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + } + order.setUseTime(nowTime); + order.setUseUserId(merVerifyOrderDto.getUserId()); + order.setCloseFlag(1); + this.save(order); + //创建服务商品 + //获取商品信息(商品简介,调理问题) + //商品信息 + CertificatePrepareResponseDataCertificatesItemSku sku = certificatesItem.getSku(); + //次卡信息 + CertificatePrepareResponseDataCertificatesItemTimeCard timeCard = certificatesItem.getTimeCard(); + + OrderGoods orderGoods = new OrderGoods(); + orderGoods.setOrderGoodsId(IdUtils.simpleUUID()); + orderGoods.setDelFlag(0); + orderGoods.setOrderId(order.getOrderId()); + orderGoods.setBuyNum(timeCard.getTimesCount()); + orderGoods.setCycleNumFlag(1); + orderGoods.setServiceNum(timeCard.getTimesCount()); + orderGoods.setGoodsType(2); + orderGoods.setGoodsName(sku.getTitle()); + orderGoodsService.save(orderGoods); + + ConsumerGoods consumerGoods = new ConsumerGoods(); + consumerGoods.setConsumerGoodsId(IdUtils.simpleUUID()); + consumerGoods.setDelFlag(0); + consumerGoods.setServiceStatus(1); + consumerGoods.setShopId(order.getShopId()); + consumerGoods.setUserId(order.getUserId()); + consumerGoods.setOrderId(orderId); + consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId()); + consumerGoods.setGoodsName(sku.getTitle()); + consumerGoods.setCycleNumFlag(1); + consumerGoods.setServiceNum(timeCard.getTimesCount()); + consumerGoods.setCreateTime(nowTime); + consumerGoods.setGoodsType(2); + consumerGoods.setSourceFrom(1); + consumerGoodsService.save(consumerGoods); + //生成返回 + MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); + merVerifyOrderVo.setOrderId(orderId); + merVerifyOrderVo.setOrderNo(order.getOrderNo()); + merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); + merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); + merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney()); + merVerifyOrderVo.setCouponDiscount(order.getCouponMoney()); + merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit()); + merVerifyOrderVo.setPayMoney(order.getPayMoney()); + merVerifyOrderVo.setOrderRemark(order.getOrderRemark()); + merVerifyOrderVo.setAppUserOrderGoodsPageVoList(new ArrayList<AppUserOrderGoodsPageVo>() {{ + add(new AppUserOrderGoodsPageVo() {{ + setOrderGoodsId(orderGoods.getOrderGoodsId()); + setGoodsName(orderGoods.getGoodsName()); + setGoodsType(orderGoods.getGoodsType()); + setBuyNum(orderGoods.getBuyNum()); + }}); + }}); + merVerifyOrderVo.setCreateTime(order.getCreateTime()); + merVerifyOrderVo.setPayTime(order.getPayTime()); + merVerifyOrderVo.setUseTime(order.getUseTime()); + merVerifyOrderVo.setPayType(order.getPayType()); + merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney()); + //根据支付方式返回应收金额和已收金额 + if (order.getPayType() == 1) { + merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getPayMoney())); + merVerifyOrderVo.setReceiveMoney(order.getPayMoney()); + } else { + merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit())); + if (order.getOfflinePayMoney() != null) { + merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney()); + } else { + merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); + } + } + merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney())); + merVerifyOrderVo.setUserId(order.getUserId()); + merVerifyOrderVo.setUserName(member.getRealName()); + merVerifyOrderVo.setUserMobile(member.getMobile()); + merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); + //判断用户是否绑定 2023-09-05需求改变核销时绑定用户 + if (member.getBindingFlag() != 1) { + //绑定商户 + AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); + appMemberBindingDto.setShopId(order.getShopId()); + appMemberBindingDto.setUserId(order.getUserId()); + appMemberBindingDto.setBindingFlag(1); + if (order.getOrderFrom() == 1) { + appMemberBindingDto.setBindingType(1); + } else if (order.getOrderFrom() == 2) { + appMemberBindingDto.setBindingType(2); + } + remoteMemberService.updateMemberBinding(appMemberBindingDto); + order.setNewMemberFlag(1); + } else { + order.setNewMemberFlag(0); + } + this.saveOrUpdate(order); + //更新用户积分和消费统计 + MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); + memberTotalChangeDto.setUserId(order.getUserId()); + // 如果存在积分兑换比例,则计算积分 + if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { + Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); + BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); + BigDecimal integralBig = moneyValueBig.multiply(order.getOnlinePayMoney()).setScale(0, BigDecimal.ROUND_HALF_UP); + Integer integral = Integer.valueOf(integralBig.toString()); + if (integral > 0) { + memberTotalChangeDto.setChangeIntegral(integral); + memberTotalChangeDto.setTypeIntegral(1); + memberTotalChangeDto.setOrderId(orderId); + memberTotalChangeDto.setOrderNo(order.getOrderNo()); + } + } + //更新消费时间 + memberTotalChangeDto.setConsumeTime(nowTime); + remoteMemberService.changeMemberTotal(memberTotalChangeDto); + return merVerifyOrderVo; + } + + + /** * @param orderId * @param orderNo * @param shopId * @param orderMoney * @param orderFrom - * @return void + * @return void + * @description 分账实现 + * @author jqs + * @date 2023/9/8 11:56 */ private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney, Integer orderFrom) { String sendMessage = ""; @@ -2262,7 +2549,7 @@ */ @Override @Transactional - @GlobalTransactional(rollbackFor = Exception.class) +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) { R<MerVerifyCouponGetVo> verifyCoupon = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()); if(verifyCoupon.getCode() != 200){ @@ -2402,7 +2689,7 @@ */ @Override @Transactional - @GlobalTransactional(rollbackFor = Exception.class) +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto) { MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo(); MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData(); @@ -2641,7 +2928,7 @@ */ @Override @Transactional - @GlobalTransactional(rollbackFor = Exception.class) +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 public void createNewOrder(MerNewOrderDto merNewOrderDto) { Long userId = merNewOrderDto.getBuyUserId(); Date nowTime = new Date(); @@ -3032,9 +3319,27 @@ if (merMemberNoClearOrderVo.getUnPaidMoney() == null) { merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); } - if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){ + if (merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig) < 0) { merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); } + List<MerCouponGoodsListVo> goodsList = new ArrayList<>(); + orderGoodsService.listByOrderId(merMemberNoClearOrderVo.getOrderId()).forEach(orderGoodsVo -> { + MerCouponGoodsListVo merCouponGoodsListVo = new MerCouponGoodsListVo(); + merCouponGoodsListVo.setGoodsId(orderGoodsVo.getGoodsId()); + merCouponGoodsListVo.setGoodsName(orderGoodsVo.getGoodsName()); + merCouponGoodsListVo.setGoodsNum(orderGoodsVo.getBuyNum()); + if (orderGoodsVo.getGoodsType() == 1) { + merCouponGoodsListVo.setGoodsType("周期"); + } else if (orderGoodsVo.getGoodsType() == 2) { + merCouponGoodsListVo.setGoodsType("服务"); + } else if (orderGoodsVo.getGoodsType() == 3) { + merCouponGoodsListVo.setGoodsType("体验"); + } else if (orderGoodsVo.getGoodsType() == 4) { + merCouponGoodsListVo.setGoodsType("单品"); + } + goodsList.add(merCouponGoodsListVo); + }); + merMemberNoClearOrderVo.setGoodsList(goodsList); } } return merMemberNoClearOrderVoList; @@ -4081,6 +4386,12 @@ mgtTotalOrderTotalVo.setExperienceTotal(0); mgtTotalOrderTotalVo.setServiceTotal(0); mgtTotalOrderTotalVo.setItemTotal(0); + mgtTotalOrderTotalVo.setMeituan(0); + mgtTotalOrderTotalVo.setDouyin(0); + mgtTotalOrderTotalVo.setKuaishou(0); + mgtTotalOrderTotalVo.setMeituanAmount(new BigDecimal("0")); + mgtTotalOrderTotalVo.setDouyinAmount(new BigDecimal("0")); + mgtTotalOrderTotalVo.setKuaishouAmount(new BigDecimal("0")); mgtTotalOrderTotalVo.setOrderMoney(new BigDecimal("0")); mgtTotalOrderTotalVo.setOnlineMoney(new BigDecimal("0")); mgtTotalOrderTotalVo.setOfflineMoney(new BigDecimal("0")); @@ -4118,6 +4429,12 @@ mgtTotalOrderTotalVo.setOnlineMoney(totalOrderTotalVo.getOnlineMoney()); mgtTotalOrderTotalVo.setOfflineMoney(totalOrderTotalVo.getOfflineMoney()); mgtTotalOrderTotalVo.setActivityMoney(totalOrderTotalVo.getActivityMoney()); + mgtTotalOrderTotalVo.setMeituan(totalOrderTotalVo.getMeituan()); + mgtTotalOrderTotalVo.setDouyin(totalOrderTotalVo.getDouyin()); + mgtTotalOrderTotalVo.setKuaishou(totalOrderTotalVo.getKuaishou()); + mgtTotalOrderTotalVo.setMeituanAmount(totalOrderTotalVo.getMeituanAmount()); + mgtTotalOrderTotalVo.setDouyinAmount(totalOrderTotalVo.getDouyinAmount()); + mgtTotalOrderTotalVo.setKuaishouAmount(totalOrderTotalVo.getKuaishouAmount()); //获取商品分类销售数据 List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalOrderTotalGoodsType(mgtBasePlatformDto); List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); @@ -4801,17 +5118,17 @@ if (memberGiftRecord.getGiftFrom() == 1) { BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData(); //判断生日活动状态 - if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){ + if (birthdayCard != null && birthdayCard.getCardStatus() == 1) { shop = remoteShopService.getShop(shopId).getData(); //判断指定区域全部店铺 - if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){ + 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())){ + if (birthdayCard.getShopFlag() == 2 && !StringUtils.checkString(birthdayCard.getApplicableShop(), shopId.toString())) { throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); } - }else{ + } else { throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR); } } @@ -4819,16 +5136,20 @@ if (memberGiftRecord.getGiftFrom() == 2 && !memberGiftRecord.getShopId().equals(shopId)) { throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); } - + merVerifyAwardVo.setUserName(member.getRealName()); merVerifyAwardVo.setUserMobile(member.getMobile()); - if (memberGiftRecord.getGiftFrom() == 1) { - merVerifyAwardVo.setGiftFrom("平台生日卡"); + if (1 == memberGiftRecord.getPrizeFrom()) { + if (memberGiftRecord.getGiftFrom() == 1) { + merVerifyAwardVo.setGiftFrom("平台生日卡"); + } else { + merVerifyAwardVo.setGiftFrom("商户生日卡"); + } } else { - merVerifyAwardVo.setGiftFrom("商户生日卡"); + merVerifyAwardVo.setGiftFrom("平台抽奖"); } merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType()); - //礼物类型1优惠券2商品3现金4实物 + //礼物类型1优惠券2商品3现金4实物5积分 switch (memberGiftRecord.getGiftType()) { case 1: merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); @@ -5253,7 +5574,7 @@ */ @Override @Transactional - @GlobalTransactional(rollbackFor = Exception.class) +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 public void autoCancelOrder(String orderId) { //更新订单信息 Order order = this.getById(orderId); @@ -5323,7 +5644,7 @@ */ @Override @Transactional - @GlobalTransactional(rollbackFor = Exception.class) +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 public void payBack(PartnerTransactionsResult transaction, BigDecimal feeAmount) { log.info("订单支付回调---"+transaction.toString()); // 更新订单状态 outTradeNo @@ -5469,7 +5790,7 @@ */ @Override @Transactional - @GlobalTransactional(rollbackFor = Exception.class) +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 public void refundOrder(String orderId) { // 更新订单信息 Order order = this.getById(orderId); @@ -6213,7 +6534,7 @@ } } - @GlobalTransactional(rollbackFor = Exception.class) +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 private void autoTimeCancelOrder(Order order) { String orderId = order.getOrderId(); order.setOrderStatus(0); @@ -6411,4 +6732,169 @@ } return new ArrayList<>(); } + /** + * 后台取消订单 + * 订单状态变为已取消 不退款 + * @param dto + */ + @Override + public R cancelOrderBySys(CancelOrderDTO dto) { + Order order = this.getById(dto.getOrderId()); + // 订单状态-1.删除 0.已取消 1.待支付 2.待核销 3.已完成 + if(null == order || order.getDelFlag() == -1){ + return R.fail("订单不存在"); + } + + if (order.getOrderStatus() == 0) { + return R.fail(AppErrorConstant.CANCEL_CANCEL_ORDER); + } else if (order.getOrderStatus() == 1) { + //删除待支付超时取消延时任务 + redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId()); + remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+order.getOrderId()); + order.setOrderStatus(0); + order.setCancelTime(new Date()); + this.saveOrUpdate(order); + } else if (order.getOrderStatus() == 2) { + // 2.待核销 + order.setOrderStatus(0); + order.setCancelTime(new Date()); + this.saveOrUpdate(order); + } else { + return R.fail(AppErrorConstant.CANCEL_ERROR_ORDER); + } + return R.ok(); + } + + @Override + public R refundOrderBySys(CancelOrderDTO dto) { + Order order = this.getById(dto.getOrderId()); + // 订单状态-1.删除 0.已取消 1.待支付 2.待核销 3.已完成 + if(null == order || order.getDelFlag() == -1){ + return R.fail("订单不存在"); + } + if (order.getOrderStatus() == 0) { + return R.fail(AppErrorConstant.CANCEL_CANCEL_ORDER); + }else if (order.getOrderStatus() == 1) { + //删除待支付超时取消延时任务 + redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId()); + remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+ order.getOrderId()); + this.autoCancelOrder( order.getOrderId()); + } else if (order.getOrderStatus() == 2) { + // 2.待核销 -> 订单退款 + this.refundOrder( order.getOrderId()); + } else { + return R.fail("已核销订单不能退款"); + } + return R.ok(); + + } + + @Override + public List<MgtThirdOrderPageVo> pageMgtThirdOrder(Page<MgtThirdOrderPageVo> page, MgtThirdOrderPageDto dto) { + //如果区域代码不为null获取对应的商户id + if (StringUtils.isNotBlank(dto.getKeyword()) || StringUtils.isNotBlank(dto.getShopProvinceCode()) || StringUtils.isNotBlank(dto.getShopCityCode()) || StringUtils.isNotBlank(dto.getShopAreaCode())) { + MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto(); + mgtShopIdByCodeDto.setShopProvinceCode(dto.getShopProvinceCode()); + mgtShopIdByCodeDto.setShopCityCode(dto.getShopCityCode()); + mgtShopIdByCodeDto.setShopAreaCode(dto.getShopAreaCode()); + MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData(); + if (StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())) { + dto.setShopIds(mgtShopIdByCodeVo.getShopIds()); + } + } + //如果关键词不为null获取对应的用户id + if (StringUtils.isNotBlank(dto.getKeyword())) { + MgtUserIdByKeywordDto mgtUserIdByKeywordDto = new MgtUserIdByKeywordDto(); + mgtUserIdByKeywordDto.setKeyword(dto.getKeyword()); + MgtUserIdByKeywordVo mgtUserIdByKeywordVo = remoteMemberService.getUserIdByKeyword(mgtUserIdByKeywordDto).getData(); + if (StringUtils.isNotBlank(mgtUserIdByKeywordVo.getUserIds())) { + dto.setUserIds(mgtUserIdByKeywordVo.getUserIds()); + } + } + //数据权限 + List<Long> userId = remoteUserService.getScopeOfAuthorityUserId(); + BoardMemberTotalDto boardMemberTotalDto = new BoardMemberTotalDto(); + boardMemberTotalDto.setUserIds(userId); + List<Shop> shops = remoteShopService.getShopBySysUserIds(boardMemberTotalDto); + if (!shops.isEmpty()) { + List<Long> collect = shops.stream().map(Shop::getShopId).collect(Collectors.toList()); + String join = collect.stream().map(Object::toString).collect(Collectors.joining(",")); + String shopIds = dto.getShopIds(); + if(StringUtils.isNotEmpty(shopIds)){ + shopIds = shopIds + "," + join; + }else{ + shopIds = join; + } + dto.setShopIds(shopIds); + } + + // 从数据库中获取第三方订单列表 + List<MgtThirdOrderPageVo> thirdOrderPageVoList = orderMapper.pageMgtThirdOrder(page, dto); + // 如果列表不为空 + if (!thirdOrderPageVoList.isEmpty()) { + // 定义变量 + HashSet<Long> shopIdSet = new HashSet<>(); + BigDecimal zeroBig = new BigDecimal("0.00"); + // 遍历列表,获取店铺 ID 和用户 ID + for (MgtThirdOrderPageVo mgtActivityOrderPageVo : thirdOrderPageVoList) { + if(mgtActivityOrderPageVo.getShopId()!=null){ + shopIdSet.add(mgtActivityOrderPageVo.getShopId()); + } + } + // 将店铺 ID 和用户 ID 转换为逗号分隔的字符串 + String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList())); + // 从远程服务获取店铺和用户信息 + MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(shopJoinedString); + List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); + Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream() + .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); + mgtBaseBathDto = new MgtBaseBathDto(); + // 遍历列表,设置店铺名称 + for (MgtThirdOrderPageVo mgtActivityOrderPageVo : thirdOrderPageVoList) { + if(mgtActivityOrderPageVo.getShopId()!=null){ + MgtSimpleShopVo mgtSimpleShopVo = shopMap.get(mgtActivityOrderPageVo.getShopId()); + mgtActivityOrderPageVo.setShopName(null == mgtSimpleShopVo ? "" : mgtSimpleShopVo.getShopName()); + } + } + } + + return thirdOrderPageVoList; + + } + + @Override + public MgtPlTotalThirdOrderStaticsVO getPlTotalThirdOrderStatics(MgtBasePlatformDto mgtBasePlatformDto) { + MgtPlTotalThirdOrderStaticsVO vo = new MgtPlTotalThirdOrderStaticsVO(); + //数据权限 + List<Long> userIdList = mgtBasePlatformDto.getUserIdList(); + List<Long> userIds = remoteUserService.getScopeOfAuthorityUserId(); + if(null != userIds){ + if(null != userIdList){ + userIdList.addAll(userIds); + }else{ + userIdList = userIds; + } + mgtBasePlatformDto.setUserIdList(userIdList); + } + List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); + if (mgtBasePlatformDto.getUserId() != null || StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) { + if(shopIdList==null||shopIdList.isEmpty()){ + return vo; + } + } + if(mgtBasePlatformDto.getShopId()!=null){ + shopIdList = new ArrayList<>(); + shopIdList.add(mgtBasePlatformDto.getShopId()); + } + mgtBasePlatformDto.setShopIdList(shopIdList); + // 从数据库中获取第三方订单统计 + vo = orderMapper.getPlTotalThirdOrderStatics(mgtBasePlatformDto); + return vo; + } + + @Override + public StaticsShopMgtGoodsVO getGoodsSellStatic(List<String> goodsIdList) { + return orderGoodsService.getGoodsSellStatic(goodsIdList); + } } -- Gitblit v1.7.1