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