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 |  252 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 252 insertions(+), 0 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 cb258ba..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,10 +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.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>
@@ -17,4 +50,223 @@
 @Service
 public class TAppCouponServiceImpl extends ServiceImpl<TAppCouponMapper, TAppCoupon> implements TAppCouponService {
 
+    @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 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");
+        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.getId()!=null){
+                        stringBuilder.append("-").append(exchangeRecordVO.getId()).append(",");
+                    }else{
+                        stringBuilder.append("0").append(",");
+                    }
+                    break;
+                case 2:
+                    if (exchangeRecordVO.getId()!=null){
+                        stringBuilder.append(exchangeRecordVO.getId()).append(",");
+                    }else{
+                        stringBuilder.append("0").append(",");
+                    }
+                    break;
+            }
+            Date date = DateUtils.toDate(exchangeRecordVO.getEndTime());
+            Date date1 = DateUtils.toDate(exchangeRecordVO.getCreateTime());
+            exchangeRecordVO.setEndTime1(format.format(date));
+            exchangeRecordVO.setCreateTime1(format.format(date1));
+            if (exchangeRecordVO.getStatus()==1){
+                if (exchangeRecordVO.getDelFlag()){
+                    // 删除了 就是已取消状态
+                    exchangeRecordVO.setStatus(4);
+                }else{
+                    // 未删除 判断endTime是否过期
+                    // 设置了过期时间
+                    if (exchangeRecordVO.getEndTime().isBefore(java.time.LocalDateTime.now())){
+                        exchangeRecordVO.setStatus(3);
+                    }else{
+                        // 没过期
+                        exchangeRecordVO.setStatus(1);
+                    }
+                }
+            }
+            if (exchangeRecordVO.getStatus()==2){
+                if (exchangeRecordVO.getDelFlag()){
+                    // 删除了 就是已取消状态
+                    exchangeRecordVO.setStatus(4);
+                }else{
+                    exchangeRecordVO.setStatus(2);
+                }
+            }
+        }
+        // 去除最后一个字符
+        if (StringUtils.hasText(stringBuilder.toString())){
+            String string = stringBuilder.deleteCharAt(stringBuilder.length() - 1).toString();
+            // 远程调用 查询关联的订单编号
+            List<String> data = orderClient.getCodeByOrderId(string).getData();
+            for (int i = 0; i < list.size(); i++) {
+                list.get(i).setOrderId(data.get(i));
+            }
+        }
+        return 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