From 35309b932b738d5a8537e53207d28004a8da0f89 Mon Sep 17 00:00:00 2001
From: gongzuming <gongzuming>
Date: 星期五, 20 九月 2024 17:17:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master-v2'

---
 src/main/java/com/mzl/flower/service/menber/impl/ThirdDeductionStrategy.java |   91 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 91 insertions(+), 0 deletions(-)

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);
+            }
+
+        }
+    }
+}

--
Gitblit v1.9.3