| | |
| | | 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; |
| | |
| | | List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData(); |
| | | |
| | | // 将优惠券列表转换为Map,以优惠券ID为键 |
| | | Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); |
| | | Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>(); |
| | | if(appMemberCouponVoList!=null&&!appMemberCouponVoList.isEmpty()){ |
| | | appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); |
| | | } |
| | | AppMemberCouponVo appMemberCouponVo; |
| | | Integer couponType; |
| | | BigDecimal moneyThreshold; |
| | |
| | | couponType = appMemberCouponVo.getCouponType(); |
| | | if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) { |
| | | moneyThreshold = appMemberCouponVo.getMoneyThreshold(); |
| | | if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { |
| | | discountMoney = appMemberCouponVo.getDiscountMoney(); |
| | | discountMoney = appMemberCouponVo.getDiscountMoney(); |
| | | if (goodsTotalPrice.compareTo(moneyThreshold) >= 0 && goodsTotalPrice.compareTo(discountMoney)>0) { |
| | | goodsRealPrice = goodsTotalPrice.subtract(discountMoney); |
| | | useCoupon = 1; |
| | | userCouponIdSet.add(memberCouponId); |
| | |
| | | appSureOrderGoodsVo.setMemberCouponId(memberCouponId); |
| | | } else if (couponType == 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); |
| | | appSureOrderGoodsVo.setCouponDiscount(discountMoney); |
| | | appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); |
| | | goodsDeposit = goods.getSubscription(); |
| | | // 获取商品押金 |
| | | goodsDeposit = goods.getSubscription(); |
| | | if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) { |
| | |
| | | }else{ |
| | | entity.setUseFlag(0); |
| | | } |
| | | |
| | | |
| | | } |
| | | // 过滤商品优惠券列表 |
| | | List<AppMemberCouponVo> appGoodsMemberCouponVoList; |
| | |
| | | appGoodsMemberCouponVoList = new ArrayList<>(); |
| | | for(AppMemberCouponVo entity : appMemberCouponVoList){ |
| | | if(StringUtils.isBlank(entity.getRelGoodsIds())||entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())){ |
| | | if(entity.getCouponType()!=1){ |
| | | if(entity.getCouponType()==1){ |
| | | if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0&&entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){ |
| | | appGoodsMemberCouponVoList.add(entity); |
| | | } |
| | | }else if(entity.getCouponType()==2){ |
| | | appGoodsMemberCouponVoList.add(entity); |
| | | }else{ |
| | | if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){ |
| | | }else if(entity.getCouponType()==3){ |
| | | if(entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){ |
| | | appGoodsMemberCouponVoList.add(entity); |
| | | } |
| | | } |
| | |
| | | } |
| | | if (activityGoodsGetVo.getAvailableBuyNum() < 1) { |
| | | throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); |
| | | } |
| | | if (activityGoodsGetVo.getAvailableBuyNum() < buyNum) { |
| | | throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND); |
| | | } |
| | | Goods goods = remoteGoodsService.getGoods(goodsId).getData(); |
| | | if(goods.getGoodsStatus()!=1){ |
| | |
| | | |
| | | |
| | | //减去优惠券 |
| | | if(memberCouponSJ!=null){ |
| | | if(memberCouponSJ!=null&&StringUtils.isNotBlank(memberCouponSJ.toString())){ |
| | | remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); |
| | | } |
| | | //生成自动取消订单延时任务 |
| | |
| | | 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(); |
| | |
| | | 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)){ |
| | |
| | | merVerifyOrderVo.setUseTime(order.getUseTime()); |
| | | merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); |
| | | // 根据订单用户ID获取用户信息 |
| | | SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData(); |
| | | merVerifyOrderVo.setUserName(sysUser.getNickName()); |
| | | merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber()); |
| | | Member member = remoteMemberService.getMember(order.getUserId()).getData(); |
| | | merVerifyOrderVo.setUserName(member.getRealName()); |
| | | merVerifyOrderVo.setUserMobile(member.getMobile()); |
| | | merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); |
| | | // 返回结果 |
| | | return merVerifyOrderVo; |
| | |
| | | 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); |
| | |
| | | merVerifyOrderVo.setCreateTime(order.getCreateTime()); |
| | | merVerifyOrderVo.setPayTime(order.getPayTime()); |
| | | merVerifyOrderVo.setUseTime(order.getUseTime()); |
| | | SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData(); |
| | | merVerifyOrderVo.setUserName(sysUser.getNickName()); |
| | | merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber()); |
| | | Member member = remoteMemberService.getMember(order.getUserId()).getData(); |
| | | merVerifyOrderVo.setUserName(member.getRealName()); |
| | | merVerifyOrderVo.setUserMobile(member.getMobile()); |
| | | merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); |
| | | // |
| | | if(order.getOrderFrom()==2){ |
| | | |
| | |
| | | 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()); |
| | |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); |
| | | merVerifyAwardVo.setUserName(member.getNickName()); |
| | | merVerifyAwardVo.setUserName(member.getRealName()); |
| | | merVerifyAwardVo.setUserMobile(member.getMobile()); |
| | | if(memberGiftRecord.getGiftFrom()==1){ |
| | | merVerifyAwardVo.setGiftFrom("平台生日卡"); |
| | |
| | | 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(); |
| | |
| | | member.setMobile(mobile); |
| | | member.setRealName(name); |
| | | member.setNickName(name); |
| | | member.setBindingFlag(1); |
| | | member.setRelationShopId(shopId); |
| | | member.setRelationShopName(shop.getShopName()); |
| | | remoteMemberService.createNewMember(member); |
| | | } |
| | | userId = sysUser.getUserId(); |
| | |
| | | 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); |
| | |
| | | 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()); |
| | |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); |
| | | merVerifyAwardVo.setUserName(member.getNickName()); |
| | | merVerifyAwardVo.setUserName(member.getRealName()); |
| | | merVerifyAwardVo.setUserMobile(member.getMobile()); |
| | | if(memberGiftRecord.getGiftFrom()==1){ |
| | | merVerifyAwardVo.setGiftFrom("平台生日卡"); |
| | |
| | | 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{ |
| | |
| | | agStockChangeDto.setShopId(order.getShopId()); |
| | | agStockChangeDto.setUserId(order.getUserId()); |
| | | remoteActivityService.changeActivityStock(agStockChangeDto); |
| | | //删除活动记录 |
| | | ActivityRecord activityRecord = new ActivityRecord(); |
| | | activityRecord.setActivityId(order.getActivityId()); |
| | | activityRecord.setGoodsId(orderGoods.getGoodsId()); |
| | | activityRecord.setUserId(order.getUserId()); |
| | | activityRecord.setOrderTime(order.getCreateTime()); |
| | | remoteActivityService.delActivityRecord(activityRecord); |
| | | }else{ |
| | | memberCouponSJ.add(orderGoods.getCouponId()); |
| | | } |
| | |
| | | } |
| | | return dateList; |
| | | } |
| | | |
| | | /** |
| | | * @description 检查订单状态定时任务 |
| | | * @author jqs |
| | | * @date 2023/7/25 14:40 |
| | | * @param |
| | | * @return void |
| | | */ |
| | | @Override |
| | | public void checkOrderStatus(){ |
| | | Integer delayTime = 30; |
| | | if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ |
| | | delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); |
| | | } |
| | | delayTime = delayTime + 5; |
| | | Date checkTime = DateUtils.addMinutes(new Date(),delayTime); |
| | | LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(Order::getDelFlag,0); |
| | | queryWrapper.lt(Order::getCreateTime,checkTime); |
| | | queryWrapper.eq(Order::getOrderStatus,1); |
| | | List<Order> orderList = this.list(queryWrapper); |
| | | if(orderList!=null&&!orderList.isEmpty()){ |
| | | for(Order order: orderList){ |
| | | autoTimeCancelOrder(order); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void autoTimeCancelOrder(Order order){ |
| | | String orderId = order.getOrderId(); |
| | | order.setOrderStatus(0); |
| | | order.setCancelTime(new Date()); |
| | | this.saveOrUpdate(order); |
| | | //活动订单回退库存 |
| | | if(order.getOrderFrom()==2){ |
| | | List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); |
| | | if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ |
| | | for(OrderGoods orderGoods : orderGoodsList){ |
| | | //redis库存控制极简版 |
| | | String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); |
| | | RLock redissonLock = redissonClient.getLock(goodsLock); |
| | | try{ |
| | | redissonLock.lock(30, TimeUnit.SECONDS); |
| | | Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); |
| | | redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); |
| | | }finally{ |
| | | redissonLock.unlock(); |
| | | } |
| | | //改变活动库存 |
| | | AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); |
| | | agStockChangeDto.setActivityId(order.getActivityId()); |
| | | agStockChangeDto.setGoodsId(orderGoods.getGoodsId()); |
| | | agStockChangeDto.setChangeType(1); |
| | | agStockChangeDto.setChangeNum(orderGoods.getBuyNum()); |
| | | agStockChangeDto.setShopId(order.getShopId()); |
| | | agStockChangeDto.setUserId(order.getUserId()); |
| | | remoteActivityService.changeActivityStock(agStockChangeDto); |
| | | //删除活动记录 |
| | | ActivityRecord activityRecord = new ActivityRecord(); |
| | | activityRecord.setActivityId(order.getActivityId()); |
| | | activityRecord.setGoodsId(orderGoods.getGoodsId()); |
| | | activityRecord.setUserId(order.getUserId()); |
| | | activityRecord.setOrderTime(order.getCreateTime()); |
| | | remoteActivityService.delActivityRecord(activityRecord); |
| | | } |
| | | } |
| | | }else{ |
| | | if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){ |
| | | //回退优惠券 |
| | | List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); |
| | | if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) { |
| | | StringJoiner memberCouponSJ = new StringJoiner(","); |
| | | for (OrderGoods orderGoods : orderGoodsList) { |
| | | memberCouponSJ.add(orderGoods.getCouponId()); |
| | | } |
| | | if(memberCouponSJ!=null){ |
| | | remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |