package cc.mrbird.febs.vip.service.impl;
|
|
import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
|
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
|
import cc.mrbird.febs.common.enumerates.ScoreFlowTypeEnum;
|
import cc.mrbird.febs.mall.entity.MallOrderInfo;
|
import cc.mrbird.febs.mall.entity.MallOrderItem;
|
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
|
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
|
import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
|
import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
|
import cc.mrbird.febs.vip.entity.MallVipBenefits;
|
import cc.mrbird.febs.vip.service.IMallVipConfigService;
|
import cc.mrbird.febs.vip.service.IVipCommonService;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class VipCommonServiceImpl implements IVipCommonService {
|
|
private final MallOrderInfoMapper mallOrderInfoMapper;
|
private final IMallVipConfigService mallVipConfigService;
|
private final IMallMoneyFlowService mallMoneyFlowService;
|
private final IApiMallMemberWalletService mallMemberWalletService;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void getScore(Long orderId) {
|
MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectOrderDetailsById(orderId);
|
if (mallOrderInfo == null) {
|
return;
|
}
|
|
Long memberId = mallOrderInfo.getMemberId();
|
MallVipBenefits mallVipBenefits = mallVipConfigService.hasVipBenefits(memberId);
|
|
BigDecimal multiple = BigDecimal.ONE;
|
String name = "";
|
if (mallVipBenefits != null) {
|
multiple = mallVipBenefits.getScoreMultiple();
|
name = mallVipBenefits.getName();
|
}
|
|
double sum = mallOrderInfo.getItems().stream().map(MallOrderItem::getAmount).mapToDouble(BigDecimal::doubleValue).sum();
|
|
int score = multiple.multiply(BigDecimal.valueOf(sum)).intValue();
|
|
mallMoneyFlowService.addMoneyFlow(memberId, new BigDecimal(score), ScoreFlowTypeEnum.BUY.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue(), name, 2);
|
mallMemberWalletService.add(new BigDecimal(score), memberId, "prize_score");
|
}
|
}
|