From d8150effd61b8c22eea031de7789ecd610435b3b Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期三, 14 八月 2024 10:16:36 +0800
Subject: [PATCH] 小程序扫一扫选择优惠券

---
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponListVOVO.java                        |    2 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java         |    6 ++
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java                        |    9 ++
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java                        |   10 +++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java           |   61 ++++++++++++++++++++
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java |    1 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java              |    4 -
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java              |   10 +++
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java                   |    5 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java                     |   23 -------
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TChargingCountQuery.java                    |   21 +++++++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java              |   21 +++++-
 12 files changed, 141 insertions(+), 32 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponListVOVO.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponListVOVO.java
index ca3ede2..28287eb 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponListVOVO.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponListVOVO.java
@@ -38,4 +38,6 @@
     private BigDecimal payMoney;
     @ApiModelProperty(value = "最高折扣金额 用于判断哪一张优惠券优惠力度最大 前端忽略")
     private BigDecimal money;
+    @ApiModelProperty(value = "当前用户是否为会员0否1是 前端忽略")
+    private Integer isVip;
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java
index 024bd8a..7487856 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java
@@ -25,4 +25,5 @@
     @PostMapping(value = "/t-charging-pile/getChargingPileBySiteId")
     public R<List<TChargingPile>> getChargingPileBySiteId(@RequestParam("siteId") Integer siteId);
 
+
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
index 5ad039d..f29864d 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
@@ -3,6 +3,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.query.TChargingCountQuery;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
@@ -33,6 +34,11 @@
             public R<TChargingOrder> orderDetail(Long orderId) {
                 return R.fail("订单详情:" + throwable.getMessage());
             }
+
+            @Override
+            public R<Integer> getChargingCount(TChargingCountQuery req) {
+                return R.fail("根据会员id和有效期查询有效期内享受充电折扣次数:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
index 6fcf8eb..3765568 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
@@ -4,8 +4,10 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory;
 import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.query.TChargingCountQuery;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 /**
@@ -20,5 +22,11 @@
     @PostMapping(value = "/t-charging-order/detail")
     R<TChargingOrder> orderDetail(@RequestParam Long orderId);
 
-
+    /**
+     * 查询会员在本月有多少次享受了充电折扣
+     * @param req
+     * @return
+     */
+    @PostMapping(value = "/t-charging-order/getChargingCount")
+    public R<Integer> getChargingCount(@RequestBody TChargingCountQuery req);
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TChargingCountQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TChargingCountQuery.java
new file mode 100644
index 0000000..d42d8fa
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TChargingCountQuery.java
@@ -0,0 +1,21 @@
+package com.ruoyi.order.api.query;
+
+import com.ruoyi.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "查询用户在会员期 有多少次享用了充电折扣订单")
+public class TChargingCountQuery  {
+    @ApiModelProperty(value = "会员开始时间")
+    private LocalDateTime startTime;
+    @ApiModelProperty(value = "会员结束时间")
+    private LocalDateTime endTime;
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+}
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java
index 0965d9a..a4e1f0a 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java
@@ -28,6 +28,11 @@
                 return R.fail("获取最高抵扣、最低起步价,最高折扣的会员失败:" + throwable.getMessage());
 
             }
+
+            @Override
+            public R<TVip> getInfo1(Integer id) {
+                return R.fail("根据会员id 获取会员信息:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java
index b1a8126..305c332 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java
@@ -5,6 +5,7 @@
 import com.ruoyi.other.api.domain.TVip;
 import com.ruoyi.other.api.factory.VipFallbackFactory;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
@@ -23,5 +24,11 @@
     @PostMapping(value = "/vip/getVipInfoByType")
     R<TVip> getVipInfoByType(@RequestParam Integer type);
 
-
+    /**
+     * 远程调用
+     * @param id
+     * @return
+     */
+    @PostMapping("/vip/getInfo1")
+    public R<TVip> getInfo1(@RequestParam("id") Integer id);
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
index bf67953..5f5f700 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -52,9 +52,7 @@
     @ApiOperation(value = "选择优惠券分页查询", tags = {"小程序-扫一扫"})
     @PostMapping(value = "/scan/couponList")
     public AjaxResult<PageInfo<CouponListVOVO>> couponList(@RequestBody CouponListDto dto) {
-        // todo token获取用户id
-        Long userId = 11L;
-        dto.setUserId(userId);
+
         PageInfo<CouponListVOVO> res = tAppCouponService.couponList(dto);
         return AjaxResult.ok(res);
     }
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 a821517..d7c6dcc 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,25 +1,38 @@
 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.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.text.SimpleDateFormat;
+import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
 
@@ -38,6 +51,15 @@
     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");
@@ -105,15 +127,54 @@
         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;// 是否能享受会员折扣
+        if (tAppUser.getVipEndTime() == null){
+            // 不是会员
+        }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){
+                    // 不能再享受会员折扣
+                }else{
+                    isVip = 1;
+                }
+            }
+        }
         for (CouponListVOVO couponListVOVO : list) {
             couponListVOVO.setValidityTime("有效期:"+format.format(couponListVOVO.getCreateTime())+" - "+format.format(couponListVOVO.getEndTime()));
         }
         List<CouponListVOVO> data = otherClient.getCouponInfoByCouponIds(list).getData();
+        for (CouponListVOVO datum : data) {
+            // 根据当前时间段和预付金额计算服务费
+
+        }
         pageInfo.setRecords(data);
         return pageInfo;
     }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
index 8d13b9d..f93fba8 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -1,14 +1,13 @@
 package com.ruoyi.order.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.query.TChargingCountQuery;
 import com.ruoyi.order.service.TChargingOrderService;
 import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 
@@ -27,6 +26,20 @@
 
     @Resource
     private TChargingOrderService chargingOrderService;
+
+    /**
+     * 查询会员在本月有多少次享受了充电折扣
+     * @param req
+     * @return
+     */
+    @PostMapping(value = "/getChargingCount")
+    public R<Integer> getChargingCount(@RequestBody TChargingCountQuery req) {
+        int size = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>()
+                .eq(TChargingOrder::getAppUserId, req.getUserId())
+                        .eq(TChargingOrder::getRechargePaymentStatus,2)
+                .between(TChargingOrder::getStartTime, req.getStartTime(), req.getEndTime())).size();
+        return R.ok(size);
+    }
     //用户订单数量
     @PostMapping(value = "/useOrderCount")
     public R<Long> useOrderCount(@RequestParam Long userId) {
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
index cbcd8b3..f2d803e 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
@@ -124,29 +124,6 @@
             TCoupon byId = tCouponService.getById(couponListVOVO.getCouponId());
             BeanUtils.copyProperties(byId,couponListVOVO);
             couponListVOVO.setCouponName(byId.getName());
-            // 根据预付金额 判断是否满足
-            if (byId.getMeetTheConditions().compareTo(BigDecimal.ZERO) == 0){
-                // 无门槛
-                couponListVOVO.setIsUse(1);
-            }else if (couponListVOVO.getPayMoney().compareTo(byId.getMeetTheConditions()) < 0){
-                couponListVOVO.setIsUse(0);
-            }else{
-                couponListVOVO.setIsUse(1);
-            }
-            // 根据优惠券类型和预付金额 判断哪一个优惠券减免的金额最大 将其排在第一位
-            if (couponListVOVO.getIsUse() == 1){
-                switch (byId.getPreferentialMode()){
-                    case 1:
-                            couponListVOVO.setMoney(byId.getDiscountAmount());
-                        break;
-                    case 2:
-                        
-                        break;
-                }
-            }else{
-                couponListVOVO.setMoney(BigDecimal.ZERO);
-            }
-
         }
         return R.ok(list);
     }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
index 6942f7e..69430e4 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
@@ -56,6 +56,16 @@
     public AjaxResult<TVip> getInfo(Integer id) {
         return AjaxResult.ok(vipService.getById(id));
     }
+
+    /**
+     * 远程调用
+     * @param id
+     * @return
+     */
+    @PostMapping("/getInfo1")
+    public R<TVip> getInfo1(@RequestParam("id")Integer id) {
+        return R.ok(vipService.getById(id));
+    }
     @ApiOperation(value = "会员列表分页查询")
     @PostMapping(value = "/pageList")
     @ApiImplicitParams({

--
Gitblit v1.7.1