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