From 6fd0df694e49c75466e3adc778369a0b16e8b5da Mon Sep 17 00:00:00 2001 From: rentaiming <806181062@qq.com> Date: 星期五, 28 六月 2024 18:25:40 +0800 Subject: [PATCH] 用户端商品 --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 93 +++++++++++++++++++++++++++------------------- 1 files changed, 54 insertions(+), 39 deletions(-) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index 4211c47..1f77906 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java @@ -17,6 +17,7 @@ import com.ruoyi.common.core.enums.RequestTypeEnum; import com.ruoyi.common.core.enums.ReturnRequestStatusEnum; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; import com.ruoyi.common.core.utils.page.PageDTO; @@ -35,16 +36,8 @@ import com.ruoyi.order.service.IPaylogService; import com.ruoyi.order.util.OrderUtil; import com.ruoyi.order.util.SinataUtil; -import com.ruoyi.system.api.domain.AuctionSalesroom; -import com.ruoyi.system.api.domain.CouponMember; -import com.ruoyi.system.api.domain.CustomConfig; -import com.ruoyi.system.api.domain.GoodsGroupPurchase; -import com.ruoyi.system.api.domain.GoodsSeckill; -import com.ruoyi.system.api.domain.GoodsSku; -import com.ruoyi.system.api.domain.Member; -import com.ruoyi.system.api.domain.MemberAddress; -import com.ruoyi.system.api.domain.Order; -import com.ruoyi.system.api.domain.OrderAuctionBond; +import com.ruoyi.system.api.constants.DelayTaskEnum; +import com.ruoyi.system.api.domain.*; import com.ruoyi.system.api.domain.dto.CouponMemberDTO; import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO; @@ -66,11 +59,9 @@ import com.ruoyi.system.api.feignClient.PromotionClient; import com.ruoyi.system.api.feignClient.SysUserClient; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.regex.Matcher; @@ -78,6 +69,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import lombok.Synchronized; +import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.stereotype.Service; @@ -296,7 +288,7 @@ } if (memberOrderDTO.getOrderFrom()==2){ GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(memberOrderDTO.getGoodsSkuId(), SecurityConstants.INNER).getData(); - /* String goodsLock = "goods_lock_" + CacheConstants.SECKILL_GOODS + data.getId(); + String goodsLock = "goods_lock_" + CacheConstants.SECKILL_GOODS + data.getId(); RLock redissonLock = redissonClient.getLock(goodsLock); Integer surpNum = 0; try { @@ -308,7 +300,7 @@ }catch (Exception e){ throw new ServiceException("reids 出错"); - }*/ + } order.setOrderFrom(OrderFromEnum.SNAP_ORDERS); GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(), SecurityConstants.INNER).getData(); @@ -333,7 +325,7 @@ order.setPrice(data.getSeckillPrice()); order.setCoverPic(goodsSku.getCoverPic()); order.setSjPrice(goodsSku.getPrice()); - /*redisService.setCacheObject(CacheConstants.SECKILL_GOODS + data.getId(), surpNum - memberOrderDTO.getGoodsQuantity());*/ + redisService.setCacheObject(CacheConstants.SECKILL_GOODS + data.getId(), surpNum - memberOrderDTO.getGoodsQuantity()); } if (memberOrderDTO.getOrderFrom()==3){ order.setOrderFrom(OrderFromEnum.GROUP_PURCHASE_ORDERS); @@ -361,26 +353,21 @@ CustomConfig memberPointsMoney = sysUserClient.getconfig("MEMBER_POINTS_MONEY").getData(); CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData(); - BigDecimal pic=pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())); - Double aDouble= Double.valueOf(memberPointsMoney.getConfigValue()) * Double.valueOf(memberPointsPoints.getConfigValue()); - BigDecimal pi=pic.multiply(new BigDecimal(aDouble)); - order.setPoints(pi.intValue()); + BigDecimal pic=pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())); + BigDecimal divide = pic.divide(new BigDecimal(memberPointsMoney.getConfigValue())); + BigDecimal roundedDown = divide.setScale(0, RoundingMode.DOWN); + BigDecimal aDouble= roundedDown.multiply(new BigDecimal(memberPointsPoints.getConfigValue())); + order.setPoints(aDouble.intValue()); + order.setOrderStatus(OrderStatusEnum.TO_PLAY); - if (memberOrderDTO.getOrderFrom()==3){ - order.setReceiverName(memberOrderDTO.getReceiverName()); - order.setReceiverCity(memberOrderDTO.getReceiverCity()); - order.setReceiverDetailAddress(memberOrderDTO.getReceiverDetailAddress()); - order.setReceiverPhone(memberOrderDTO.getReceiverphone()); - }else{ - MemberAddress data = memberClient.getMemberAddressOne( - memberOrderDTO.getMemberId(), SecurityConstants.INNER).getData(); - if (StringUtils.isNotNull(data)) { - order.setReceiverName(data.getRecipientName()); - order.setReceiverCity(data.getReceiverCity()); - order.setReceiverDetailAddress(data.getDetailedAddress()); - order.setReceiverPhone(data.getRecipientPhone()); - } + MemberAddress data = memberClient.getMemberAddressOne( + memberOrderDTO.getMemberId(), SecurityConstants.INNER).getData(); + if (StringUtils.isNotNull(data)) { + order.setReceiverName(data.getRecipientName()); + order.setReceiverCity(data.getReceiverCity()); + order.setReceiverDetailAddress(data.getDetailedAddress()); + order.setReceiverPhone(data.getRecipientPhone()); } order.setGoodsSkuId(memberOrderDTO.getGoodsSkuId()); @@ -402,7 +389,14 @@ memberOrderVO.setReceiverDetailAddress(order.getReceiverDetailAddress()); memberOrderVO.setReceiverphone(order.getReceiverPhone()); Integer delayTime = 30; - redisService.setCacheObject(CacheConstants.ORDER_AUTOMATIC_CANCEL + "-" + order.getId(), order.getId() , delayTime.longValue(), TimeUnit.MINUTES); + redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getId(), order.getId() , delayTime.longValue(), TimeUnit.MINUTES); + + DelayTask delayTask = new DelayTask(); + delayTask.setDelFlag(0); + delayTask.setCreateTime(LocalDateTime.now()); + delayTask.setExecuteTime(LocalDateTime.now().plusMinutes(30)); + delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getId()); + sysUserClient.addDelayTask(delayTask, SecurityConstants.INNER); return memberOrderVO; } @@ -420,6 +414,7 @@ order.setReceiverCity(memberOrderDTO.getReceiverCity()); order.setReceiverDetailAddress(memberOrderDTO.getReceiverDetailAddress()); order.setReceiverPhone(memberOrderDTO.getReceiverphone()); + baseMapper.updateById(order); } if (memberOrderDTO.getOrderRemark()!=null){ order.setOrderRemark(memberOrderDTO.getOrderRemark()); @@ -547,10 +542,16 @@ if (pice.doubleValue()>=data.getFullReductionAmount().doubleValue()){ pice=pice.subtract(data.getReductionAmount()); order.setDiscountMoney(data.getReductionAmount()); + }else{ + pice=new BigDecimal(0); + } } if (data.getCouponType().getCode()==2){ pice= order.getTotalAmount(); + if(pice.compareTo(data.getVoucherAmount())<0){ + throw new ServiceException("优惠卷抵扣金额不能大于实际支付金额"); + } pice=pice.subtract(data.getVoucherAmount()); order.setDiscountMoney(data.getVoucherAmount()); } @@ -559,6 +560,13 @@ BigDecimal pice1=new BigDecimal(data.getDiscountRate()); BigDecimal pice2=new BigDecimal(0.1); BigDecimal pice3=pice.multiply(pice1.multiply(pice2)); + if (pice3.compareTo(new BigDecimal(data.getMaxDiscount().doubleValue()))>0){ + pice3=new BigDecimal(data.getMaxDiscount().doubleValue()); + } + if(pice.compareTo(pice3)<0){ + throw new ServiceException("优惠卷抵扣金额不能大于实际支付金额"); + } + BigDecimal pice4= pice.subtract(pice3); if (pice4.doubleValue()>data.getMaxDiscount().doubleValue()){ pice=pice.subtract(data.getMaxDiscount()); @@ -589,9 +597,16 @@ CustomConfig memberPointsMoney = sysUserClient.getconfig("MEMBER_POINTS_MONEY").getData(); CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData(); - Double aDouble= Double.valueOf(memberPointsMoney.getConfigValue()) * Double.valueOf(memberPointsPoints.getConfigValue()); - BigDecimal pi=pice.multiply(new BigDecimal(aDouble)); - order.setPoints(pi.intValue()); + if (pice.intValue()>0){ + BigDecimal divide = pice.divide(new BigDecimal(memberPointsMoney.getConfigValue())); + BigDecimal roundedDown = divide.setScale(0, RoundingMode.DOWN); + BigDecimal aDouble= roundedDown.multiply(new BigDecimal(memberPointsPoints.getConfigValue())); + order.setPoints(aDouble.intValue()); + }else{ + order.setPoints(0); + } + + baseMapper.updateById(order); } -- Gitblit v1.7.1