From e32fe26a1945fb44100d06b7049ccce865b11d4a Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期二, 03 九月 2024 14:14:38 +0800
Subject: [PATCH] add:用户成长值降级规则开发

---
 src/main/java/com/mzl/flower/entity/menber/MemberDowngradeRecord.java               |   28 ++++
 src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java                        |   12 +
 src/main/java/com/mzl/flower/schedule/ScheduleService.java                          |   34 ++--
 src/main/java/com/mzl/flower/service/menber/impl/FirstDeductionStrategy.java        |   26 +++
 src/main/java/com/mzl/flower/constant/Constants.java                                |    2 
 src/main/java/com/mzl/flower/service/menber/impl/GrowthValueDealService.java        |   48 ++++++
 src/main/java/com/mzl/flower/service/menber/GrowthValueDeductionStrategy.java       |   16 ++
 src/main/java/com/mzl/flower/web/member/MemberController.java                       |    7 +
 src/main/java/com/mzl/flower/service/menber/impl/GrowthValueStrategyContext.java    |   24 +++
 src/main/java/com/mzl/flower/service/menber/impl/SecondDeductionStrategy.java       |   30 ++++
 src/main/java/com/mzl/flower/mapper/member/MemberDowngradeRecordMapper.java         |   24 +++
 src/main/java/com/mzl/flower/service/menber/impl/ThirdDeductionStrategy.java        |   91 +++++++++++++
 src/main/java/com/mzl/flower/mapper/member/MemberMapper.java                        |    4 
 src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java |   38 +++++
 src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java          |    3 
 15 files changed, 371 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/mzl/flower/constant/Constants.java b/src/main/java/com/mzl/flower/constant/Constants.java
index eae0d70..5e55cf9 100644
--- a/src/main/java/com/mzl/flower/constant/Constants.java
+++ b/src/main/java/com/mzl/flower/constant/Constants.java
@@ -529,7 +529,7 @@
     }
 
     public enum GROWTH_SOURCE {
-        sign("签到"), consume("消费");
+        sign("签到"), consume("消费"), downgrading("降级");
 
         GROWTH_SOURCE(String desc) {
             this.desc = desc;
diff --git a/src/main/java/com/mzl/flower/entity/menber/MemberDowngradeRecord.java b/src/main/java/com/mzl/flower/entity/menber/MemberDowngradeRecord.java
new file mode 100644
index 0000000..a55894a
--- /dev/null
+++ b/src/main/java/com/mzl/flower/entity/menber/MemberDowngradeRecord.java
@@ -0,0 +1,28 @@
+package com.mzl.flower.entity.menber;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mzl.flower.base.BaseAutoEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * @author fanghaowei
+ * @version version2.0
+ * @className Member
+ * @date 2024/9/02
+ * @description 会员降级记录表
+ */
+@Data
+@TableName("t_member_downgrade_record")
+public class MemberDowngradeRecord extends BaseAutoEntity {
+
+    @ApiModelProperty("用户ID")
+    private String userId;
+
+    @ApiModelProperty("会员等级ID")
+    private Long memberId;
+
+    @ApiModelProperty("会员等级名称")
+    private String memberName;
+}
diff --git a/src/main/java/com/mzl/flower/mapper/member/MemberDowngradeRecordMapper.java b/src/main/java/com/mzl/flower/mapper/member/MemberDowngradeRecordMapper.java
new file mode 100644
index 0000000..587a31b
--- /dev/null
+++ b/src/main/java/com/mzl/flower/mapper/member/MemberDowngradeRecordMapper.java
@@ -0,0 +1,24 @@
+package com.mzl.flower.mapper.member;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mzl.flower.entity.menber.MemberDowngradeRecord;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+
+
+
+/**
+ * @author fanghaowei
+ * @version version2.0
+ * @className MemberMapper
+ * @date 2024/9/2
+ * @description 会员降级mapper
+ */
+@SuppressWarnings("ALL")
+@Repository
+public interface MemberDowngradeRecordMapper extends BaseMapper<MemberDowngradeRecord> {
+
+    @Select("select count(1) from t_member_downgrade_record where user_id = #{userId} and deleted = '0' ")
+    Integer getMemberByName(@Param("userId") String userId);
+}
diff --git a/src/main/java/com/mzl/flower/mapper/member/MemberMapper.java b/src/main/java/com/mzl/flower/mapper/member/MemberMapper.java
index 9c8ddf6..7ba6090 100644
--- a/src/main/java/com/mzl/flower/mapper/member/MemberMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/member/MemberMapper.java
@@ -33,6 +33,10 @@
     @Select("select * from t_member where start_point > #{growthValue} and deleted = '0' ")
     List<Member> getgtMembersByGrowthValue(@Param("growthValue") Integer growthValue);
 
+    //获取成长值区间最大值小于当前值的会员
+    @Select("select * from t_member where end_point < #{growthValue} and deleted = '0' ORDER BY end_point DESC LIMIT 1")
+    Member getgtMembersByEndPoint(@Param("growthValue") Integer growthValue);
+
     List<MemberVO> queryPage(@Param("dto") MemberQueryDTO dto, Page page);
 
 }
diff --git a/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java b/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
index 8068b0d..1d0f7a6 100644
--- a/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
@@ -6,6 +6,7 @@
 import com.mzl.flower.dto.response.payment.*;
 import com.mzl.flower.entity.payment.Order;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
 import java.time.LocalDateTime;
@@ -36,4 +37,15 @@
     Order getUserLastOrder(@Param("userId") String userId);
 
     List<OrderPointGoodsListDTO> getPointGoodsList(@Param("orderId") String orderId);
+
+    @Select("SELECT t1.* " +
+            "FROM t_order t1 " +
+            "JOIN ( " +
+            "    SELECT create_by, MAX(receive_time) AS max_time " +
+            "    FROM t_order " +
+            "    where receive_time is not null  and DATE(receive_time) < DATE(NOW()) - INTERVAL 30 DAY" +
+            "    GROUP BY create_by " +
+            ") t2 ON t1.create_by = t2.create_by AND t1.receive_time = t2.max_time " +
+            "LEFT JOIN t_customer_info c ON t1.create_by = c.user_id ")
+    List<Order> getOrderInfoByReceiveTime();
 }
diff --git a/src/main/java/com/mzl/flower/schedule/ScheduleService.java b/src/main/java/com/mzl/flower/schedule/ScheduleService.java
index 75f9e07..f4b6603 100644
--- a/src/main/java/com/mzl/flower/schedule/ScheduleService.java
+++ b/src/main/java/com/mzl/flower/schedule/ScheduleService.java
@@ -9,15 +9,16 @@
 import com.mzl.flower.mapper.flower.FlowerCategoryMapper;
 import com.mzl.flower.mapper.partner.PartnerMapper;
 import com.mzl.flower.mapper.payment.OrderMapper;
-import com.mzl.flower.service.coupon.CouponRecordService;
 import com.mzl.flower.service.flower.FlowerCategoryService;
 import com.mzl.flower.service.flower.FlowerService;
+import com.mzl.flower.service.menber.impl.GrowthValueDealService;
 import com.mzl.flower.service.payment.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -59,7 +60,7 @@
     private OrderItemSettlementService orderItemSettlementService;
 
     @Autowired
-    private CouponRecordService couponRecordService;
+    private GrowthValueDealService growthValueDealService;
 
     @Scheduled(cron = "1 0/20 * * * ?")
     public void calculateAvePrice() {
@@ -190,18 +191,23 @@
         log.info("账单结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
     }
 
-    @Scheduled(cron = "0 30 0 1 * ?")
-    public void grantVipCouponRecordList() {
-        log.info("会员优惠券开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
-        couponRecordService.grantVipCouponRecordList();
-        log.info("会员优惠券结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
-    }
-
-    @Scheduled(cron = "0 30 0 1 * ?")
-    public void expiredVipCouponRecordList() {
-        log.info("会员优惠券过期开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
-        couponRecordService.expiredCouponRecordByListCurMonth();
-        log.info("会员优惠券过期结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    //成长值降级定时任务
+    @Scheduled(cron = "0 0 5 * * ?")
+    public void deductGrowthValue() {
+        log.info("成长值扣除开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+        //获取当前员工
+        List<Order> orderList = orderMapper.getOrderInfoByReceiveTime();
+        if(!CollectionUtils.isEmpty(orderList)){
+            orderList.forEach(o->{
+                try {
+                    growthValueDealService.deductionGrowthValue(o);
+                } catch (Exception e) {
+                    // 记录错误信息,例如将错误信息写入日志
+                    log.info("处理订单 " + o.getId() + " 时出错: " + e.getMessage());
+                }
+            });
+        }
+        log.info("成长值扣除结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
     }
 
 }
diff --git a/src/main/java/com/mzl/flower/service/menber/GrowthValueDeductionStrategy.java b/src/main/java/com/mzl/flower/service/menber/GrowthValueDeductionStrategy.java
new file mode 100644
index 0000000..6f00da3
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/menber/GrowthValueDeductionStrategy.java
@@ -0,0 +1,16 @@
+package com.mzl.flower.service.menber;
+
+import com.mzl.flower.entity.payment.Order;
+
+/**
+ * packageName com.mzl.flower.service.menber
+ * @author fanghaowei
+ * @version version2.0
+ * @className GrowthValueDeductionStrategy
+ * @date 2024/9/2
+ * @description 成长值扣除策略
+ */
+public interface GrowthValueDeductionStrategy {
+    public void deduct(Order order);
+
+}
diff --git a/src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java b/src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java
index 06ebb43..39e41a3 100644
--- a/src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java
+++ b/src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java
@@ -9,6 +9,7 @@
 import com.mzl.flower.dto.response.member.MemberGrowthRecordVO;
 import com.mzl.flower.entity.menber.Member;
 import com.mzl.flower.entity.menber.MemberGrowthRecord;
+import com.mzl.flower.entity.payment.Order;
 
 
 public interface MemberGrowthRecordService extends IService<MemberGrowthRecord> {
@@ -21,4 +22,6 @@
     Page<MemberGrowthRecordVO> queryPage(MemberRecordQueryDTO memberRecordQueryDTO, Page page);
 
     Member getMemberByUserId(String userId);
+
+    void growthValueDeduct(Order order);
 }
diff --git a/src/main/java/com/mzl/flower/service/menber/impl/FirstDeductionStrategy.java b/src/main/java/com/mzl/flower/service/menber/impl/FirstDeductionStrategy.java
new file mode 100644
index 0000000..fc3731e
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/menber/impl/FirstDeductionStrategy.java
@@ -0,0 +1,26 @@
+package com.mzl.flower.service.menber.impl;
+
+import com.mzl.flower.entity.payment.Order;
+import com.mzl.flower.service.menber.GrowthValueDeductionStrategy;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * packageName com.mzl.flower.service.menber.impl
+ * @author fanghaowei
+ * @version version2.0
+ * @className FristDeductionStrategy
+ * @date 2024/9/2
+ * @description TODO
+ */
+@Transactional
+@RequiredArgsConstructor
+@Service("FirstDeduction")
+public class FirstDeductionStrategy implements GrowthValueDeductionStrategy {
+
+    @Override
+    public void deduct(Order order) {
+
+    }
+}
diff --git a/src/main/java/com/mzl/flower/service/menber/impl/GrowthValueDealService.java b/src/main/java/com/mzl/flower/service/menber/impl/GrowthValueDealService.java
new file mode 100644
index 0000000..df6e4ea
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/menber/impl/GrowthValueDealService.java
@@ -0,0 +1,48 @@
+package com.mzl.flower.service.menber.impl;
+
+import com.mzl.flower.entity.payment.Order;
+import com.mzl.flower.service.menber.GrowthValueDeductionStrategy;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+
+/**
+ * packageName com.mzl.flower.service.menber.impl
+ * @author fanghaowei
+ * @version version2.0
+ * @className GrowthValueDealService
+ * @date 2024/9/2
+ * @description TODO
+ */
+
+@Service
+public class GrowthValueDealService {
+
+    @Resource
+    private GrowthValueStrategyContext growthValueStrategyContext;
+    public void deductionGrowthValue(Order order) {
+        //当前时间
+        LocalDateTime now = LocalDateTime.now();
+
+        //最后消费时间
+        LocalDateTime receiveTime = order.getReceiveTime();
+
+        // 将时间转换为LocalDate,只保留年月日部分
+        LocalDate nowDate = now.toLocalDate();
+        LocalDate receiveTimeDate = receiveTime.toLocalDate();
+        long daysBetween = ChronoUnit.DAYS.between(receiveTimeDate, nowDate);
+
+        if (daysBetween > 30 && daysBetween <= 90) {
+            GrowthValueDeductionStrategy growthInfo = growthValueStrategyContext.getGrowthInfo("SecondDeduction");
+            growthInfo.deduct(order);
+        } else if (daysBetween > 90) {
+            GrowthValueDeductionStrategy growthInfo = growthValueStrategyContext.getGrowthInfo("ThirdDeduction");
+            growthInfo.deduct(order);
+        }
+    }
+
+
+}
diff --git a/src/main/java/com/mzl/flower/service/menber/impl/GrowthValueStrategyContext.java b/src/main/java/com/mzl/flower/service/menber/impl/GrowthValueStrategyContext.java
new file mode 100644
index 0000000..fd8b775
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/menber/impl/GrowthValueStrategyContext.java
@@ -0,0 +1,24 @@
+package com.mzl.flower.service.menber.impl;
+
+import com.mzl.flower.service.menber.GrowthValueDeductionStrategy;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+@Service
+public class GrowthValueStrategyContext {
+    @Autowired
+    private final Map<String, GrowthValueDeductionStrategy> growthValueDeductionStrategyMap = new HashMap<>();
+
+    public GrowthValueStrategyContext(Map<String, GrowthValueDeductionStrategy> growthValueDeductionStrategyMap) {
+        this.growthValueDeductionStrategyMap.clear();
+        growthValueDeductionStrategyMap.forEach((k, v) -> this.growthValueDeductionStrategyMap.put(k, v));
+    }
+
+    public GrowthValueDeductionStrategy getGrowthInfo(String growthInfo) {
+        return growthValueDeductionStrategyMap.get(growthInfo);
+    }
+}
diff --git a/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java
index a113506..2866b32 100644
--- a/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java
@@ -14,6 +14,7 @@
 import com.mzl.flower.entity.customer.Customer;
 import com.mzl.flower.entity.menber.Member;
 import com.mzl.flower.entity.menber.MemberGrowthRecord;
+import com.mzl.flower.entity.payment.Order;
 import com.mzl.flower.mapper.customer.CustomerMapper;
 import com.mzl.flower.mapper.member.MemberGrowthRecordMapper;
 import com.mzl.flower.mapper.member.MemberMapper;
@@ -77,7 +78,7 @@
 
         //保存会员记录逻辑:
         if (Constants.GROWTH_SOURCE.consume.name().equals(memberGrowthRecordDTO.getSource())) {
-            //消费:成长值=消费金额/消费金额(元)*已消费产生的成长值
+            //消费:成长值=消费金额/消费金额(元)*已消费产生的成长值C
             BigDecimal totalAmount = memberGrowthRecordDTO.getTotalAmount();
             int consumptionAmount = memberBefore.getConsumptionAmount();
             int growthValue = memberBefore.getGrowthValue();
@@ -169,4 +170,39 @@
         page.setRecords(list);
         return page;
     }
+
+    @Override
+    public void growthValueDeduct(Order order) {
+        //超过30天不到90天,每天处理当前会员等级的成长值
+        CustomerDTO customerDTO = customerMapper.getCurrentCustomer(order.getCreateBy());
+        Customer customer = customerMapper.selectById(customerDTO.getId());
+        Member member = memberMapper.selectById(customer.getLevelId());
+        if(ObjectUtils.isEmpty(member)){
+            throw new ValidationException("用户会员等级未维护");
+        }
+        int deductGrowthValue = member.getDowngradeValue();
+        Integer sumGrowthByUserId = memberGrowthRecordMapper.getSumGrowthByUsertId(order.getCreateBy());
+
+        //当前成长值如果是等于0不需要走扣除逻辑
+        if (sumGrowthByUserId != 0) {
+        int waitDeductGrowthValue = 0;
+
+        //判断当前用户的成长值是够扣除,如果够扣除直接减去成长值,如果不够扣除则全部减去
+        if (sumGrowthByUserId - deductGrowthValue > 0) {
+            waitDeductGrowthValue = deductGrowthValue;
+        } else {
+            waitDeductGrowthValue = sumGrowthByUserId;
+        }
+
+        //保存会员成长记录到记录表
+        MemberGrowthRecordDTO memberGrowthRecordDTO = new MemberGrowthRecordDTO();
+        memberGrowthRecordDTO.setUserId(order.getCreateBy());
+        memberGrowthRecordDTO.setRecordDate(new Date());
+        memberGrowthRecordDTO.setGrowth(-waitDeductGrowthValue);
+        memberGrowthRecordDTO.setSource(Constants.GROWTH_SOURCE.downgrading.name());
+        memberGrowthRecordDTO.setType(Constants.GROWTH_TYPE.reduce.name());
+        memberGrowthRecordDTO.setRemarks("自动扣除");
+        saveMemberGrowthRecord(memberGrowthRecordDTO);
+        }
+    }
 }
diff --git a/src/main/java/com/mzl/flower/service/menber/impl/SecondDeductionStrategy.java b/src/main/java/com/mzl/flower/service/menber/impl/SecondDeductionStrategy.java
new file mode 100644
index 0000000..3f814b9
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/menber/impl/SecondDeductionStrategy.java
@@ -0,0 +1,30 @@
+package com.mzl.flower.service.menber.impl;
+
+import com.mzl.flower.entity.payment.Order;
+import com.mzl.flower.service.menber.GrowthValueDeductionStrategy;
+import com.mzl.flower.service.menber.MemberGrowthRecordService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * packageName com.mzl.flower.service.menber.impl
+ * @author fanghaowei
+ * @version version2.0
+ * @className SecondDeductionStrategy
+ * @date 2024/9/2
+ * @description TODO
+ */
+@Transactional
+@RequiredArgsConstructor
+@Service("SecondDeduction")
+public class SecondDeductionStrategy  implements GrowthValueDeductionStrategy {
+
+    private final MemberGrowthRecordService memberGrowthRecordService;
+
+    @Override
+    public void deduct(Order order) {
+        memberGrowthRecordService.growthValueDeduct(order);
+    }
+
+}
diff --git a/src/main/java/com/mzl/flower/service/menber/impl/ThirdDeductionStrategy.java b/src/main/java/com/mzl/flower/service/menber/impl/ThirdDeductionStrategy.java
new file mode 100644
index 0000000..6a29e76
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/menber/impl/ThirdDeductionStrategy.java
@@ -0,0 +1,91 @@
+package com.mzl.flower.service.menber.impl;
+
+import com.mzl.flower.constant.Constants;
+import com.mzl.flower.dto.request.menber.MemberGrowthRecordDTO;
+import com.mzl.flower.entity.menber.Member;
+import com.mzl.flower.entity.menber.MemberDowngradeRecord;
+import com.mzl.flower.entity.payment.Order;
+import com.mzl.flower.mapper.member.MemberDowngradeRecordMapper;
+import com.mzl.flower.mapper.member.MemberGrowthRecordMapper;
+import com.mzl.flower.mapper.member.MemberMapper;
+import com.mzl.flower.service.menber.GrowthValueDeductionStrategy;
+import com.mzl.flower.service.menber.MemberGrowthRecordService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
+
+/**
+ * packageName com.mzl.flower.service.menber.impl
+ * @author fanghaowei
+ * @version version2.0
+ * @className ThirdDeductionStrategy
+ * @date 2024/9/2
+ * @description TODO
+ */
+@Transactional
+@RequiredArgsConstructor
+@Service("ThirdDeduction")
+public class ThirdDeductionStrategy  implements GrowthValueDeductionStrategy {
+
+    private final MemberDowngradeRecordMapper memberDowngradeRecordMapper;
+    private final MemberGrowthRecordService memberGrowthRecordService;
+    private final MemberGrowthRecordMapper memberGrowthRecordMapper;
+
+    private final MemberMapper memberMapper;
+
+    @Override
+    public void deduct(Order order) {
+        LocalDate nowDate = LocalDateTime.now().toLocalDate();
+        LocalDate receiveTimeDate = order.getReceiveTime().toLocalDate();
+        long daysBetween = ChronoUnit.DAYS.between(receiveTimeDate, nowDate);
+        //判断是否有会员降级记录
+        Integer countByUserId = memberDowngradeRecordMapper.getMemberByName(order.getCreateBy());
+        int day = (int) (daysBetween - countByUserId * 90);
+        //扣除记录数*90
+        //0-90;1-180;2-270
+        if (countByUserId == 0 || day > 90) {
+            //保存会员降级记录
+            Member member = memberGrowthRecordService.getMemberByUserId(order.getCreateBy());
+            MemberDowngradeRecord memberDowngradeRecord = new MemberDowngradeRecord();
+            memberDowngradeRecord.setUserId(order.getCreateBy());
+            memberDowngradeRecord.setMemberId(member.getId());
+            memberDowngradeRecord.setMemberName(member.getName());
+            memberDowngradeRecord.create();
+            memberDowngradeRecordMapper.insert(memberDowngradeRecord);
+
+            //统计当前人员现有成长值
+            Integer sumGrowthByUserId = memberGrowthRecordMapper.getSumGrowthByUsertId(order.getCreateBy());
+
+            //当前人员需要降到的成长值
+            Member targetMember = memberMapper.getgtMembersByEndPoint(sumGrowthByUserId);
+            if (!ObjectUtils.isEmpty(targetMember)) {
+                //有降级目标
+                int targetGrowth = targetMember.getEndPoint() - 1;
+                //需要降级扣除的成长值是目标值减去当前值
+                int needDeductGrowthValue = targetGrowth-sumGrowthByUserId;
+                //保存会员成长记录到记录表
+                MemberGrowthRecordDTO memberGrowthRecordDTO = new MemberGrowthRecordDTO();
+                memberGrowthRecordDTO.setUserId(order.getCreateBy());
+                memberGrowthRecordDTO.setRecordDate(new Date());
+                memberGrowthRecordDTO.setGrowth(needDeductGrowthValue);
+                memberGrowthRecordDTO.setSource(Constants.GROWTH_SOURCE.downgrading.name());
+                memberGrowthRecordDTO.setType(Constants.GROWTH_TYPE.reduce.name());
+                memberGrowthRecordDTO.setRemarks("自动降级");
+                memberGrowthRecordService.saveMemberGrowthRecord(memberGrowthRecordDTO);
+            } else {
+                memberGrowthRecordService.growthValueDeduct(order);
+            }
+        } else if (countByUserId > 0) {
+            if (day > 30 && day <= 90) {
+                memberGrowthRecordService.growthValueDeduct(order);
+            }
+
+        }
+    }
+}
diff --git a/src/main/java/com/mzl/flower/web/member/MemberController.java b/src/main/java/com/mzl/flower/web/member/MemberController.java
index 039a77d..be871ab 100644
--- a/src/main/java/com/mzl/flower/web/member/MemberController.java
+++ b/src/main/java/com/mzl/flower/web/member/MemberController.java
@@ -102,5 +102,12 @@
         UserGrowthRecordDTO userGrowthRecordDTO = memberGrowthRecordService.getInfoByUserId(String.valueOf(userId));
         return returnData(R.SUCCESS.getCode(), userGrowthRecordDTO);
     }
+
+    @GetMapping(value = "/app/member/info")
+    @ApiOperation(value = "当前用户会员信息 ", httpMethod = "GET", notes = "ID")
+    public ResponseEntity memberInfo2() {
+        UserGrowthRecordDTO userGrowthRecordDTO = memberGrowthRecordService.getInfoByUserId(SecurityUtils.getUserId());
+        return returnData(R.SUCCESS.getCode(), userGrowthRecordDTO);
+    }
 }
 

--
Gitblit v1.9.3