From c4664502dfdaffff555b532e65b51a57ac8b29c2 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期三, 16 十月 2024 17:51:32 +0800 Subject: [PATCH] 合并代码 --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java | 199 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 185 insertions(+), 14 deletions(-) diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java index 98dc39f..f4d78d6 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java @@ -1,23 +1,43 @@ package com.ruoyi.account.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.account.api.dto.CouponListDto; import com.ruoyi.account.api.model.TAppCoupon; +import com.ruoyi.account.api.model.TAppUser; +import com.ruoyi.account.api.model.TAppUserVipDetail; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; +import com.ruoyi.other.api.vo.CouponListVOVO; import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.account.mapper.TAppCouponMapper; +import com.ruoyi.account.mapper.TAppUserMapper; import com.ruoyi.account.service.TAppCouponService; +import com.ruoyi.account.service.TAppUserVipDetailService; +import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.feignClient.OrderClient; -import com.ruoyi.other.api.domain.TCoupon; -import org.apache.poi.ss.formula.functions.T; +import com.ruoyi.order.api.query.TChargingCountQuery; +import com.ruoyi.other.api.domain.TVip; +import com.ruoyi.other.api.feignClient.OtherClient; +import com.ruoyi.other.api.feignClient.VipClient; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import java.math.BigDecimal; +import java.math.BigInteger; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Comparator; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * <p> @@ -32,27 +52,67 @@ @Autowired private OrderClient orderClient; + @Autowired + private OtherClient otherClient; + @Autowired + private VipClient vipClient; + @Autowired + private ChargingPileClient chargingPileClient; + @Autowired + private ChargingOrderClient chargingOrderClient; + @Autowired + private TAppUserVipDetailService tAppUserVipDetailService; + @Autowired + private TAppUserMapper tAppUserMapper; + @Autowired + private TokenService tokenService; + @Override - public PageInfo<ExchangeRecordVO> pagelist(ExchangeRecordGoodsQuery dto) { + public List<ExchangeRecordVO> pagelist(ExchangeRecordGoodsQuery dto) { + List<Integer> integers = new ArrayList<>(); + integers.add(1); + integers.add(2); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - PageInfo<ExchangeRecordVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); - List<ExchangeRecordVO> list = this.baseMapper.pageList(pageInfo,dto); + QueryWrapper<TAppCoupon> wrapper = new QueryWrapper<>(); + wrapper.eq("coupon_id",dto.getCouponId()); + wrapper.in("ways_to_obtain",integers); + if (StringUtils.hasLength(dto.getPhone())){ + List<Long> collect = tAppUserMapper.selectList(new QueryWrapper<TAppUser>().like("phone", dto.getPhone())).stream() + .map(TAppUser::getId).collect(Collectors.toList()); + if(collect.isEmpty()){ + collect.add(-1L); + } + wrapper.in("app_user_id",collect); + } + if (dto.getStatus()!=null){ + wrapper.eq("status",dto.getStatus()); + } + List<TAppCoupon> tAppCoupons = this.baseMapper.selectList(wrapper); + List<ExchangeRecordVO> list = new ArrayList<>(); // 订单ids StringBuilder stringBuilder = new StringBuilder(); + for (TAppCoupon tAppCoupon : tAppCoupons) { + ExchangeRecordVO exchangeRecordVO = new ExchangeRecordVO(); + BeanUtils.copyProperties(tAppCoupon,exchangeRecordVO); + list.add(exchangeRecordVO); + } for (ExchangeRecordVO exchangeRecordVO : list) { + TAppUser tAppUser = tAppUserMapper.selectById(exchangeRecordVO.getAppUserId()); + if (tAppUser!=null)exchangeRecordVO.setPhone(tAppUser.getPhone()); switch (exchangeRecordVO.getWaysToObtain()){ case 1: - if (exchangeRecordVO.getOrderId()!=null){ - stringBuilder.append(exchangeRecordVO.getOrderId()).append(","); + if (exchangeRecordVO.getId()!=null){ + stringBuilder.append("-").append(exchangeRecordVO.getId()).append(","); }else{ stringBuilder.append("0").append(","); } break; case 2: - if (exchangeRecordVO.getOrderId()!=null){ - stringBuilder.append("-").append(exchangeRecordVO.getOrderId()).append(","); + if (exchangeRecordVO.getId()!=null){ + stringBuilder.append(exchangeRecordVO.getId()).append(","); }else{ - stringBuilder.append("-").append("0").append(","); + stringBuilder.append("0").append(","); } break; } @@ -61,7 +121,7 @@ exchangeRecordVO.setEndTime1(format.format(date)); exchangeRecordVO.setCreateTime1(format.format(date1)); if (exchangeRecordVO.getStatus()==1){ - if (exchangeRecordVO.getDelFlag() == 1){ + if (exchangeRecordVO.getDelFlag()){ // 删除了 就是已取消状态 exchangeRecordVO.setStatus(4); }else{ @@ -76,7 +136,7 @@ } } if (exchangeRecordVO.getStatus()==2){ - if (exchangeRecordVO.getDelFlag() == 1){ + if (exchangeRecordVO.getDelFlag()){ // 删除了 就是已取消状态 exchangeRecordVO.setStatus(4); }else{ @@ -84,7 +144,6 @@ } } } - // 去除最后一个字符 if (StringUtils.hasText(stringBuilder.toString())){ String string = stringBuilder.deleteCharAt(stringBuilder.length() - 1).toString(); @@ -94,8 +153,120 @@ list.get(i).setOrderId(data.get(i)); } } + return list; + } - pageInfo.setRecords(list); + + + @Override + public PageInfo<CouponListVOVO> couponList(CouponListDto dto) { + // todo token获取用户id + dto.setUserId(tokenService.getLoginUserApplet().getUserId()); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + PageInfo<CouponListVOVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); + List<CouponListVOVO> list = this.baseMapper.couponList(pageInfo,dto.getUserId()); + TAppUser tAppUser = tAppUserMapper.selectById(dto.getUserId()); + Integer isVip = 0;// 是否能享受会员折扣 0否 1是普通会员 2内部会员 + // 会员折扣 + Double discount = 0.0; + // 普通会员最高折扣金额 + Double discountMoney = 0.0; + if (tAppUser.getVipEndTime() == null){ + // 不是会员 + isVip = 0; + }else { + // 判断会员有没有过期 + if (tAppUser.getVipEndTime().isAfter(java.time.LocalDateTime.now())){ + // 没过期 判断用户本月会员充电折扣次数是否还有剩余 + TAppUserVipDetail tAppUserVipDetail = tAppUserVipDetailService.list(new LambdaQueryWrapper<TAppUserVipDetail>() + .orderByDesc(TAppUserVipDetail::getStartTime)).get(0); + LocalDateTime startTime = tAppUserVipDetail.getStartTime(); + LocalDateTime endTime = tAppUserVipDetail.getEndTime(); + TChargingCountQuery tChargingCountQuery = new TChargingCountQuery(); + tChargingCountQuery.setStartTime(startTime); + tChargingCountQuery.setEndTime(endTime); + tChargingCountQuery.setUserId(dto.getUserId()); + // 当月已享受会员折扣充电次数 + Integer data = chargingOrderClient.getChargingCount(tChargingCountQuery).getData(); + // 查询用户当前会员每月享受折扣次数和折扣比例是多少 + Integer vipId = tAppUser.getVipId(); + TVip data1 = vipClient.getInfo1(vipId).getData(); + Integer discountTimes = data1.getDiscountTimes(); + if (data>=discountTimes){ + // 折扣次数用光了 不能再享受会员折扣 + isVip = 0; + }else{ + if (data1.getType() == 2){ + // 如果内部会员 使用该折扣 + discount = data1.getDiscount().doubleValue(); + isVip = 2; + }else{ + // 普通会员 最高折扣金额 + discountMoney = data1.getMaximumDeduction().doubleValue(); + isVip = 1; + } + + } + }else{ + // 会员过期 不能享受 + isVip = 0; + } + } + for (CouponListVOVO couponListVOVO : list) { + couponListVOVO.setValidityTime("有效期:"+format.format(couponListVOVO.getCreateTime())+" - "+format.format(couponListVOVO.getEndTime())); + } + List<CouponListVOVO> data = otherClient.getCouponInfoByCouponIds(list).getData(); + // 桩编号 + 是否是会员 + 内部会员折扣 + 普通会员最高折扣金额 + 预付金额 + String temp = dto.getNumber()+"-"+isVip+"-"+discount+"-"+discountMoney+"-"+dto.getPayMoney(); + // 根据当前时间段和预付金额计算服务费 + BigDecimal serviceMoney = chargingPileClient.getServiceMoney(temp).getData(); + for (CouponListVOVO datum : data) { + // 判断优惠券类型 + switch (datum.getPreferentialMode()){ + case 1: + datum.setIsUse(1); + // 满减券 判断服务费是否满足满减条件 + if (datum.getMeetTheConditions().compareTo(new BigDecimal(BigInteger.ZERO)) == 0){ + // 无门槛优惠券 + datum.setMoney(serviceMoney.subtract(datum.getDiscountAmount())); + }else if (serviceMoney.compareTo(datum.getMeetTheConditions())>=0){ + // 满足条件 + datum.setMoney(serviceMoney.subtract(datum.getDiscountAmount())); + }else{ + // 不满足条件 + datum.setMoney(serviceMoney); + datum.setIsUse(0); + } + break; + case 2: + datum.setIsUse(1); + // 折扣券 判断 + if (datum.getMeetTheConditions().compareTo(new BigDecimal(BigInteger.ZERO)) == 0){ + // 无门槛优惠券 + datum.setMoney(serviceMoney.subtract(datum.getDiscountAmount())); + }else if (serviceMoney.compareTo(datum.getMeetTheConditions())>=0){ + // 折扣后的服务费 + BigDecimal divide = serviceMoney.multiply(datum.getDiscount()).divide(new BigDecimal(10), 2, BigDecimal.ROUND_HALF_UP); + // 计算折扣了多少钱 判断是否超过最高折扣金额 + BigDecimal subtract = serviceMoney.subtract(divide); + if (subtract.compareTo(datum.getMaximumDiscountAmount())>0){ + // 超过最高折扣金额 减去最高折扣金额 + datum.setMoney(serviceMoney.subtract(datum.getMaximumDiscountAmount())); + }else{ + // 没超过最高折扣金额 + datum.setMoney(divide); + } + }else{ + // 不满足条件 + datum.setMoney(serviceMoney); + datum.setIsUse(0); + } + break; + } + } + // 通过集合的money、isUse字段 将money、isUse从大到小排序 将不可用的排在最后 + data.sort(Comparator.comparing(CouponListVOVO::getMoney).reversed().thenComparing(CouponListVOVO::getIsUse)); + pageInfo.setRecords(data); return pageInfo; } } -- Gitblit v1.7.1