rentaiming
2024-06-28 6fd0df694e49c75466e3adc778369a0b16e8b5da
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;
@@ -158,7 +150,7 @@
        order.setTotalAmount(OrderDTO.getTotalAmount());
        order.setOrderStatus(OrderStatusEnum.TO_PLAY);
        order.setPoints(OrderDTO.getPoints());
        order.setGoodsQuantity(OrderDTO.getGoodsQuantity());
        order.setGoodsQuantity(1);
        order.setReceiverName(OrderDTO.getReceiverName());
        order.setReceiverPhone(OrderDTO.getReceiverphone());
        order.setReceiverCity(OrderDTO.getReceiverCity());
@@ -188,8 +180,11 @@
                wrapper.eq(OrderAuctionBond::getAuctionSalesroomId,OrderDTO.getAuctionSalesroomId());
                wrapper.eq(OrderAuctionBond::getBondType,2);
                OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper);
                orderAuctionBond.setOrderId(order.getId());
                orderAuctionBondMapper.updateById(orderAuctionBond);
                if (orderAuctionBond!=null){
                    orderAuctionBond.setOrderId(order.getId());
                    orderAuctionBondMapper.updateById(orderAuctionBond);
                }
            }
        }
@@ -293,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 {
@@ -305,7 +300,7 @@
            }catch (Exception e){
                throw new ServiceException("reids 出错");
            }*/
            }
            order.setOrderFrom(OrderFromEnum.SNAP_ORDERS);
            GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(), SecurityConstants.INNER).getData();
@@ -330,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);
@@ -349,6 +344,7 @@
            order.setCoverPic(goodsSku.getCoverPic());
            order.setSjPrice(goodsSku.getPrice());
        }
        order.setOrderRemark(memberOrderDTO.getOrderRemark());
        order.setMemberId(memberOrderDTO.getMemberId());
        order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
        order.setOrderTime(LocalDateTime.now());
@@ -357,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());
@@ -398,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;
    }
@@ -406,6 +404,9 @@
    @Override
    public MemberTiOrderVO updMemberOrder(MemberOrderDTO memberOrderDTO) {
        Order order = baseMapper.selectById(memberOrderDTO.getId());
        if(memberOrderDTO.getOrderRemark()!=null){
            order.setOrderRemark(memberOrderDTO.getOrderRemark());
        }
        MemberTiOrderVO memberOrderVO=new MemberTiOrderVO();
        if (memberOrderDTO.getReceiverDetailAddress()!=null){
@@ -413,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());
@@ -448,7 +450,13 @@
                memberOrderDTO1.setMemberId(order.getMemberId());
                memberOrderDTO1.setGoodsSkuId(order.getGoodsSkuId());
                Integer num=baseMapper.getSeckillMembers1(memberOrderDTO1);
                Integer num1=num+order.getGoodsQuantity();
                Integer num1=0;
                if (num!=null){
                    num1 =num+order.getGoodsQuantity();
                }else{
                    num1=order.getGoodsQuantity();
                }
                GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
                GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(), SecurityConstants.INNER).getData();
                if (data.getLimitNumber()<=num1){
@@ -515,70 +523,93 @@
            }
        }
        BigDecimal pice=order.getPrice().multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity()));
        if (memberOrderDTO.getCouponId()!=null){
            CouponMemberDTO couponMemberDTO=new CouponMemberDTO();
            couponMemberDTO.setId(memberOrderDTO.getCouponId());
            CouponMember data = promotionClient.getCouponMember(couponMemberDTO, SecurityConstants.INNER).getData();
            if (order.getCouponId()!=0){
                CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
                couponMemberDTO1.setId(memberOrderDTO.getCouponId());
                couponMemberDTO1.setCouponStatus(0);
                promotionClient.updCouponMember(couponMemberDTO1, SecurityConstants.INNER);
            }
            order.setCouponId(data.getId());
            if (data.getCouponType().getCode()==1){
                if (pice.doubleValue()>=data.getFullReductionAmount().doubleValue()){
                    pice=pice.subtract(data.getReductionAmount());
                    order.setDiscountMoney(data.getReductionAmount());
        if (memberOrderDTO.getGoodsQuantity()!=null){
            BigDecimal pice=order.getPrice().multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity()));
            if (memberOrderDTO.getCouponId()!=null){
                CouponMemberDTO couponMemberDTO=new CouponMemberDTO();
                couponMemberDTO.setId(memberOrderDTO.getCouponId());
                CouponMember data = promotionClient.getCouponMember(couponMemberDTO, SecurityConstants.INNER).getData();
                if (order.getCouponId()!=0){
                    CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
                    couponMemberDTO1.setId(memberOrderDTO.getCouponId());
                    couponMemberDTO1.setCouponStatus(0);
                    promotionClient.updCouponMember(couponMemberDTO1, SecurityConstants.INNER);
                }
            }
            if (data.getCouponType().getCode()==2){
                pice= order.getTotalAmount();
                pice=pice.subtract(data.getVoucherAmount());
                order.setDiscountMoney(data.getVoucherAmount());
            }
            if (data.getCouponType().getCode()==3){
                pice= order.getTotalAmount();
                BigDecimal pice1=new BigDecimal(data.getDiscountRate());
                BigDecimal pice2=new BigDecimal(0.1);
                BigDecimal pice3=pice.multiply(pice1.multiply(pice2));
                BigDecimal pice4= pice.subtract(pice3);
               if (pice4.doubleValue()>data.getMaxDiscount().doubleValue()){
                   pice=pice.subtract(data.getMaxDiscount());
                   order.setDiscountMoney(data.getMaxDiscount());
               }else{
                   order.setDiscountMoney(pice4);
                   pice=pice3;
               }
                order.setCouponId(data.getId());
                if (data.getCouponType().getCode()==1){
                    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());
                }
                if (data.getCouponType().getCode()==3){
                    pice= order.getTotalAmount();
                    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());
                        order.setDiscountMoney(data.getMaxDiscount());
                    }else{
                        order.setDiscountMoney(pice4);
                        pice=pice3;
                    }
                }
                order.setCouponId(memberOrderDTO.getCouponId());
                CouponMemberDTO couponMemberDTO2=new CouponMemberDTO();
                couponMemberDTO2.setId(memberOrderDTO.getCouponId());
                couponMemberDTO2.setCouponStatus(1);
                promotionClient.updCouponMember(couponMemberDTO2, SecurityConstants.INNER);
            }else{
                if (order.getCouponId()!=null&&order.getCouponId()!=0){
                    CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
                    couponMemberDTO1.setCouponStatus(0);
                    couponMemberDTO1.setId(order.getCouponId());
                    promotionClient.updCouponMember(couponMemberDTO1, SecurityConstants.INNER);
                }
                order.setCouponId(0L);
                order.setDiscountMoney(new BigDecimal(0));
            }
            order.setCouponId(memberOrderDTO.getCouponId());
            CouponMemberDTO couponMemberDTO2=new CouponMemberDTO();
            couponMemberDTO2.setId(memberOrderDTO.getCouponId());
            couponMemberDTO2.setCouponStatus(1);
            promotionClient.updCouponMember(couponMemberDTO2, SecurityConstants.INNER);
        }else{
            if (order.getCouponId()!=null&&order.getCouponId()!=0){
                CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
                couponMemberDTO1.setCouponStatus(0);
                couponMemberDTO1.setId(order.getCouponId());
                promotionClient.updCouponMember(couponMemberDTO1, SecurityConstants.INNER);
            order.setTotalAmount(pice);
            CustomConfig memberPointsMoney = sysUserClient.getconfig("MEMBER_POINTS_MONEY").getData();
            CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData();
            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);
            }
            order.setCouponId(0L);
            order.setDiscountMoney(new BigDecimal(0));
            baseMapper.updateById(order);
        }
        order.setTotalAmount(pice);
        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());
        baseMapper.updateById(order);
        memberOrderVO.setId(order.getId());
        memberOrderVO.setOrderStatus(OrderStatusEnum.TO_PLAY);
@@ -868,9 +899,11 @@
        }
        page = this.lambdaQuery()
                .in(StringUtils.isNotEmpty(memberIdSet), Order::getMemberId, memberIdSet)
                .ne(query.getQueryType().equals(OrderTypeEnum.MALL_ODER), Order::getOrderFrom,
                .ne(StringUtils.isNotNull(query.getQueryType()) && query.getQueryType()
                                .equals(OrderTypeEnum.MALL_ODER), Order::getOrderFrom,
                        OrderFromEnum.AUCTION_ORDERS)
                .eq(query.getQueryType().equals(OrderTypeEnum.AUCTION_ORDER), Order::getOrderFrom,
                .eq(StringUtils.isNotNull(query.getQueryType()) && query.getQueryType()
                                .equals(OrderTypeEnum.AUCTION_ORDER), Order::getOrderFrom,
                        OrderFromEnum.AUCTION_ORDERS)
                .like(StringUtils.isNotBlank(query.getOrderNo()), Order::getOrderNo,
                        query.getOrderNo())
@@ -1182,4 +1215,16 @@
            }
        }
    }
    /**
     * 查询统计订单列表
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return List<Order>
     */
    @Override
    public List<Order> getStaticsOrderList(LocalDateTime startTime, LocalDateTime endTime) {
        return baseMapper.getStaticsOrderList(startTime, endTime);
    }
}