From 878ac7cc8e1951bbc7b27619c4e7ece1e3d331ff Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期三, 16 七月 2025 16:41:12 +0800 Subject: [PATCH] 新增加快手团购券核销功能 --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 475 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 375 insertions(+), 100 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 bc08919..7e10468 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 @@ -17,6 +17,12 @@ import com.github.binarywang.wxpay.service.WxPayService; import com.google.common.collect.Lists; import com.google.gson.Gson; +import com.kuaishou.locallife.open.api.domain.locallife_order.OpenApiOrderAmountV1; +import com.kuaishou.locallife.open.api.domain.locallife_order.OpenApiQueryOrderDetailInfoV1; +import com.kuaishou.locallife.open.api.domain.locallife_trade.SimpleCertificateTimesCard; +import com.kuaishou.locallife.open.api.domain.locallife_trade.SkuTImesCard; +import com.kuaishou.locallife.open.api.domain.locallife_trade.VerifyPrepareDataNew; +import com.kuaishou.locallife.open.api.domain.locallife_trade.VerifyResult; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.UserStatus; @@ -72,7 +78,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; @@ -85,6 +90,8 @@ import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.TimeUnit; @@ -1515,6 +1522,7 @@ delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); } appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime)); + appUserOrderGetVo.setCancelType(order.getCancelType()); return appUserOrderGetVo; } @@ -1533,10 +1541,10 @@ //删除待支付超时取消延时任务 redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+orderId); - this.autoCancelOrder(orderId); + this.autoCancelOrder(orderId, 3); } else if (order.getOrderStatus() == 2) { // 2.待核销 -> 订单退款 - this.refundOrder(orderId); + this.refundOrder(orderId, 3); } else { throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER); } @@ -1691,12 +1699,12 @@ shopId = merHomeShopTotalVo.getShopId(); //获取今日到店 - Integer todayShop = userServiceRecordService.countShopServicePerson(shopId); + List<Integer> todayShop = userServiceRecordService.countShopServicePerson(shopId); //获取待处理订单和营业额 merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId); //获取服务统计 MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId); - merHomeShopTotalVo.setTodayShop(todayShop); + merHomeShopTotalVo.setTodayShop(todayShop.size()); merHomeShopTotalVo.setCycleSurp(serviceTotalVo.getCycleSurp()); merHomeShopTotalVo.setExplorationSurp(serviceTotalVo.getExplorationSurp()); return merHomeShopTotalVo; @@ -1875,6 +1883,40 @@ appUserOrderGoodsPageVoList.add(orderGoodsPageVo); merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); merVerifyOrderVo.setLaveTime(timeCard.getTimesCount() - timeCard.getTimesUsed()); + // 返回结果 + return merVerifyOrderVo; + } + + + @Override + public MerVerifyOrderVo verifyOrderKuaiShou(String orderId, Long shopId) { + VerifyPrepareDataNew data = com.ruoyi.order.util.kuaishou.VerifyUtil.certificatePrepare(redisService, orderId); + if (null == data) { + throw new ServiceException("查询券信息失败"); + } + List<SimpleCertificateTimesCard> itemList = data.getCertificates(); + if (null == itemList || itemList.isEmpty()) { + throw new ServiceException("查询券信息失败"); + } + SimpleCertificateTimesCard certificatesItem = itemList.get(0); + Long expire_time = certificatesItem.getExpire_time(); + if(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) > expire_time){ + throw new ServiceException("优惠券已过期"); + } + //商品信息 + SkuTImesCard sku = certificatesItem.getSku(); + // 创建返回对象 + MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); + // 设置返回对象的属性值 + merVerifyOrderVo.setOrderId(orderId); + merVerifyOrderVo.setOrderFrom(7); + merVerifyOrderVo.setOrderStatus(2); + List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = new ArrayList<>(); + AppUserOrderGoodsPageVo orderGoodsPageVo = new AppUserOrderGoodsPageVo(); + orderGoodsPageVo.setGoodsName(sku.getTitle()); + appUserOrderGoodsPageVoList.add(orderGoodsPageVo); + merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); + merVerifyOrderVo.setLaveTime(sku.getTimes_count()); // 返回结果 return merVerifyOrderVo; } @@ -2324,6 +2366,208 @@ remoteMemberService.changeMemberTotal(memberTotalChangeDto); return merVerifyOrderVo; } + + + /** + * 核销快手券 + * + * @return + */ + @Override + @Transactional +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 + public MerVerifyOrderVo sureVerifyOrderKuaiShou(MerVerifyOrderDto merVerifyOrderDto) { + String phone = merVerifyOrderDto.getPhone(); + String orderId = merVerifyOrderDto.getOrderId(); + Long shopId = merVerifyOrderDto.getShopId(); + //获取核销商户 + Shop shop = remoteShopService.getShop(shopId).getData(); + VerifyPrepareDataNew data = com.ruoyi.order.util.kuaishou.VerifyUtil.certificatePrepare(redisService, orderId); + if (null == data) { + throw new ServiceException("查询券信息失败"); + } + List<SimpleCertificateTimesCard> itemList = data.getCertificates(); + if (null == itemList || itemList.isEmpty()) { + throw new ServiceException("查询券信息失败"); + } + SimpleCertificateTimesCard certificatesItem = itemList.get(0); + Long expire_time = certificatesItem.getExpire_time(); + if(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) > expire_time){ + throw new ServiceException("优惠券已过期"); + } + + String encryptedCode = certificatesItem.getEncrypted_code(); + List<VerifyResult> items = com.ruoyi.order.util.kuaishou.VerifyUtil.certificateVerify(redisService, data.getVerify_token(), shop.getPoiId(), new ArrayList<String>() {{ + add(encryptedCode); + }}, data.getOrder_id()); + if (null == items || items.isEmpty()) { + throw new ServiceException("快手券核销失败"); + } + Order one = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getTripartiteOrderId, data.getOrder_id())); + if (null != one) { + throw new ServiceException("该快手券不能重复核销"); + } + + OpenApiQueryOrderDetailInfoV1 orderDetailInfoV1 = com.ruoyi.order.util.kuaishou.OrderUtil.queryOrderInfo(redisService, data.getOrder_id()); + //原始金额 + BigDecimal originAmount = BigDecimal.ZERO; + //支付金额 + BigDecimal payAmount = BigDecimal.ZERO; + //优惠金额 + BigDecimal payDiscountAmount = BigDecimal.ZERO; + if (null != orderDetailInfoV1) { + OpenApiOrderAmountV1 amountInfo = orderDetailInfoV1.getAmount(); + originAmount = BigDecimal.valueOf(amountInfo.getTotal_amount()); + payAmount = BigDecimal.valueOf(amountInfo.getPay_amount()); + payDiscountAmount = originAmount.subtract(payAmount); + } + + 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(7); + 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.getOrder_id()); + + //绑定用户判断核销商户 + 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); + //创建服务商品 + //获取商品信息(商品简介,调理问题) + //商品信息 + SkuTImesCard sku = certificatesItem.getSku(); + + OrderGoods orderGoods = new OrderGoods(); + orderGoods.setOrderGoodsId(IdUtils.simpleUUID()); + orderGoods.setDelFlag(0); + orderGoods.setOrderId(order.getOrderId()); + orderGoods.setGoodsId(sku.getSku_id()); + orderGoods.setBuyNum(sku.getTimes_count()); + orderGoods.setCycleNumFlag(1); + orderGoods.setServiceNum(sku.getTimes_count()); + 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.setGoodsId(sku.getSku_id()); + consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId()); + consumerGoods.setGoodsName(sku.getTitle()); + consumerGoods.setCycleNumFlag(1); + consumerGoods.setServiceNum(sku.getTimes_count()); + 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; + } + /** @@ -3256,7 +3500,7 @@ Long userId; Member member; Integer orderFrom; - String orderFromDesc; + String orderFromDesc = ""; BigDecimal zeroBig = new BigDecimal("0.00"); StringJoiner userIdSj = new StringJoiner(","); // 遍历订单列表 @@ -3270,8 +3514,16 @@ orderFromDesc = "商城订单"; } else if (orderFrom == 2) { orderFromDesc = "平台秒杀活动(" + merOrderPageVo.getActivityName() + ")"; - } else { + } else if(orderFrom == 3) { orderFromDesc = "线下创建"; + }else if(orderFrom == 4) { + orderFromDesc = "抽奖"; + }else if(orderFrom == 5) { + orderFromDesc = "美团"; + }else if(orderFrom == 6) { + orderFromDesc = "抖音"; + }else if(orderFrom == 7) { + orderFromDesc = "快手"; } } else { orderFromDesc = "商城订单"; @@ -4387,6 +4639,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")); @@ -4424,6 +4682,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<>(); @@ -5564,11 +5828,12 @@ @Override @Transactional // @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 - public void autoCancelOrder(String orderId) { + public void autoCancelOrder(String orderId, Integer cancelType) { //更新订单信息 Order order = this.getById(orderId); order.setOrderStatus(0); order.setCancelTime(new Date()); + order.setCancelType(cancelType); this.saveOrUpdate(order); //活动订单回退库存 if (order.getOrderFrom() == 2) { @@ -5780,11 +6045,12 @@ @Override @Transactional // @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 - public void refundOrder(String orderId) { + public void refundOrder(String orderId, Integer cancelType) { // 更新订单信息 Order order = this.getById(orderId); order.setOrderStatus(0); order.setCancelTime(new Date()); + order.setCancelType(cancelType); this.saveOrUpdate(order); OrderRefund orderRefund = new OrderRefund(); String refundId = IdUtils.simpleUUID(); @@ -6523,64 +6789,39 @@ } } -// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 - 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()); - if(null == surpNum){ - surpNum = 0; - } - 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()); - - } - } - } + /** + * 后台取消订单 + * 订单状态变为已取消 不退款 + * @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()); + order.setCancelType(1); + this.saveOrUpdate(order); + } else if (order.getOrderStatus() == 2) { + // 2.待核销 + order.setOrderStatus(0); + order.setCancelTime(new Date()); + order.setCancelType(1); + this.saveOrUpdate(order); + } else { + return R.fail(AppErrorConstant.CANCEL_ERROR_ORDER); + } + return R.ok(); } /** @@ -6721,38 +6962,6 @@ } 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) { @@ -6767,15 +6976,76 @@ //删除待支付超时取消延时任务 redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId()); remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+ order.getOrderId()); - this.autoCancelOrder( order.getOrderId()); + this.autoCancelOrder( order.getOrderId(), 1); } else if (order.getOrderStatus() == 2) { // 2.待核销 -> 订单退款 - this.refundOrder( order.getOrderId()); + this.refundOrder( order.getOrderId(), 1); } else { return R.fail("已核销订单不能退款"); } return R.ok(); + } + +// @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 + private void autoTimeCancelOrder(Order order) { + String orderId = order.getOrderId(); + order.setOrderStatus(0); + order.setCancelTime(new Date()); + order.setCancelType(1); + 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()); + if(null == surpNum){ + surpNum = 0; + } + 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()); + + } + } + } + } } @Override @@ -6881,4 +7151,9 @@ vo = orderMapper.getPlTotalThirdOrderStatics(mgtBasePlatformDto); return vo; } + + @Override + public StaticsShopMgtGoodsVO getGoodsSellStatic(List<String> goodsIdList) { + return orderGoodsService.getGoodsSellStatic(goodsIdList); + } } -- Gitblit v1.7.1