| | |
| | | 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.account.api.vo.CouponListVOVO; |
| | | 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.TAppUserVipDetailService; |
| | | import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.common.core.web.page.BasePage; |
| | | 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.order.api.query.TChargingCountQuery; |
| | | import com.ruoyi.other.api.domain.TCoupon; |
| | | import com.ruoyi.other.api.domain.TVip; |
| | | import com.ruoyi.other.api.feignClient.OtherClient; |
| | | import com.ruoyi.other.api.feignClient.VipClient; |
| | | import io.swagger.models.auth.In; |
| | | import org.apache.poi.ss.formula.functions.T; |
| | | 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> |
| | |
| | | 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; |
| | | } |
| | |
| | | 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{ |
| | |
| | | } |
| | | } |
| | | if (exchangeRecordVO.getStatus()==2){ |
| | | if (exchangeRecordVO.getDelFlag() == 1){ |
| | | if (exchangeRecordVO.getDelFlag()){ |
| | | // 删除了 就是已取消状态 |
| | | exchangeRecordVO.setStatus(4); |
| | | }else{ |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 去除最后一个字符 |
| | | if (StringUtils.hasText(stringBuilder.toString())){ |
| | | String string = stringBuilder.deleteCharAt(stringBuilder.length() - 1).toString(); |
| | |
| | | list.get(i).setOrderId(data.get(i)); |
| | | } |
| | | } |
| | | |
| | | pageInfo.setRecords(list); |
| | | return pageInfo; |
| | | return list; |
| | | } |
| | | |
| | | |
| | | @Autowired |
| | | private TAppUserMapper tAppUserMapper; |
| | | |
| | | @Override |
| | | public PageInfo<CouponListVOVO> couponList(CouponListDto dto) { |
| | | // todo token获取用户id |
| | | Long userId = 11L; |
| | | dto.setUserId(userId); |
| | | 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;// 是否能享受会员折扣 |
| | | 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())){ |
| | |
| | | TVip data1 = vipClient.getInfo1(vipId).getData(); |
| | | Integer discountTimes = data1.getDiscountTimes(); |
| | | if (data>=discountTimes){ |
| | | // 不能再享受会员折扣 |
| | | // 折扣次数用光了 不能再享受会员折扣 |
| | | isVip = 0; |
| | | }else{ |
| | | isVip = 1; |
| | | 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; |
| | | } |