From 745ae03c3a79de89696cb938729c0d305025b48a Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期一, 19 八月 2024 19:22:06 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java | 183 +++++++++++++++++++++++++++++++++++++++++----
1 files changed, 167 insertions(+), 16 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 6bc6d16..34f0530 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,18 +1,42 @@
package com.ruoyi.account.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.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.domain.R;
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.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.Comparator;
import java.util.Date;
import java.util.List;
@@ -27,36 +51,47 @@
@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;
+
@Override
public PageInfo<ExchangeRecordVO> pagelist(ExchangeRecordGoodsQuery dto) {
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);
- // 现金优惠券
+ // 订单ids
StringBuilder stringBuilder = new StringBuilder();
- // 积分优惠券
- StringBuilder stringBuilder1 = new StringBuilder();
-
for (ExchangeRecordVO exchangeRecordVO : list) {
switch (exchangeRecordVO.getWaysToObtain()){
case 1:
- if (exchangeRecordVO.getSerialNumber()!=null){
- stringBuilder.append(exchangeRecordVO.getSerialNumber()).append(",");
+ if (exchangeRecordVO.getOrderId()!=null){
+ stringBuilder.append(exchangeRecordVO.getOrderId()).append(",");
}else{
stringBuilder.append("0").append(",");
}
break;
case 2:
- if (exchangeRecordVO.getSerialNumber()!=null){
- stringBuilder1.append(exchangeRecordVO.getSerialNumber()).append(",");
+ if (exchangeRecordVO.getOrderId()!=null){
+ stringBuilder.append("-").append(exchangeRecordVO.getOrderId()).append(",");
}else{
- stringBuilder1.append("0").append(",");
+ stringBuilder.append("-").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() == 1){
// 删除了 就是已取消状态
@@ -80,19 +115,135 @@
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));
+ }
}
- if (StringUtils.hasText(stringBuilder.toString())){
- String string = stringBuilder.deleteCharAt(stringBuilder.length() - 1).toString();
- // 远程调用 查询关联的积分兑换优惠券订单编号
- }
+
pageInfo.setRecords(list);
return pageInfo;
}
+
+
+ @Autowired
+ private TAppUserMapper tAppUserMapper;
+ @Override
+ public PageInfo<CouponListVOVO> couponList(CouponListDto dto) {
+ // todo token获取用户id
+ Long userId = 11L;
+ dto.setUserId(userId);
+ 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