package cc.mrbird.febs.mall.service.impl;
|
|
import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
|
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
|
import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
|
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.common.utils.AppContants;
|
import cc.mrbird.febs.common.utils.RedisUtils;
|
import cc.mrbird.febs.mall.entity.*;
|
import cc.mrbird.febs.mall.mapper.*;
|
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
|
import cc.mrbird.febs.mall.service.ICommonService;
|
import cc.mrbird.febs.mall.service.IMallAchieveService;
|
import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
|
import cc.mrbird.febs.pay.service.IAliPayService;
|
import cc.mrbird.febs.pay.service.IPayService;
|
import cc.mrbird.febs.pay.service.UnipayService;
|
import cc.mrbird.febs.rabbit.producter.AgentProducer;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.alibaba.fastjson.JSONObject;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @author wzy
|
* @date 2021-09-16
|
**/
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class CommonService implements ICommonService {
|
private final RedisUtils redisUtils;
|
private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
|
private final AppVersionMapper appVersionMapper;
|
|
|
private final MallGoodsMapper mallGoodsMapper;
|
private final MallMemberMapper memberMapper;
|
private final IApiMallMemberWalletService memberWalletService;
|
private final IMallMoneyFlowService mallMoneyFlowService;
|
private final MallAchieveRecordMapper mallAchieveRecordMapper;
|
private final MallMemberWalletMapper mallMemberWalletMapper;
|
private final MallOrderInfoMapper mallOrderInfoMapper;
|
|
@Override
|
public boolean verifyCode(String account, String code) {
|
if ("SMS_CODE".equals(code)) {
|
return true;
|
}
|
|
String cacheCode = redisUtils.getString(AppContants.VERIFY_CODE_PREFIX + account);
|
if (StrUtil.isBlank(cacheCode)) {
|
return false;
|
}
|
if (code.equals(cacheCode)) {
|
redisUtils.del(AppContants.VERIFY_CODE_PREFIX + account);
|
return true;
|
} else {
|
return false;
|
}
|
}
|
|
@Override
|
public List<DataDictionaryCustom> findDataDicByType(String type) {
|
return dataDictionaryCustomMapper.selectDicByType(type);
|
}
|
|
@Override
|
public List<AppVersion> findAppVersion() {
|
return appVersionMapper.selectList(null);
|
}
|
|
@Override
|
public void addDataDic(String type, String code, Object value, String description) {
|
DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(type, code);
|
|
String data = JSONObject.toJSONString(value);
|
if (dic != null) {
|
dic.setValue(data);
|
dataDictionaryCustomMapper.updateById(dic);
|
return;
|
}
|
|
dic = new DataDictionaryCustom();
|
dic.setCode(code);
|
dic.setType(type);
|
dic.setValue(data);
|
dic.setDescription(description);
|
dataDictionaryCustomMapper.insert(dic);
|
}
|
|
@Override
|
public void updateDataDic(String type, String code, String value) {
|
DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(type, code);
|
if (dic != null) {
|
dic.setValue(value);
|
dataDictionaryCustomMapper.updateById(dic);
|
}
|
}
|
|
/**
|
* 支付金额后的操作
|
* 减少积分,增加流水
|
* 购买套餐后,升级会员等级
|
* 增加支付金额流水
|
* 增加补贴额度
|
* 增加贡献值,增加流水
|
* 产生一条业绩记录
|
* @param orderId
|
*/
|
@Override
|
public void changeWallet(Long orderId, int payType) {
|
MallOrderInfo orderInfo = this.mallOrderInfoMapper.selectById(orderId);
|
Long memberId = orderInfo.getMemberId();
|
boolean hasTc = false;
|
//总贡献值
|
BigDecimal starSum = BigDecimal.ZERO;
|
/**
|
* 总补贴额度
|
* 所有合伙人补贴至消费礼包的三倍额度需要复购一次。
|
*/
|
BigDecimal scoreSum = BigDecimal.ZERO;
|
BigDecimal achieveSum = BigDecimal.ZERO;
|
List<MallOrderItem> orderItems = this.mallOrderInfoMapper.getMallOrderItemByOrderId(orderInfo.getId());
|
if (CollUtil.isNotEmpty(orderItems)) {
|
for (MallOrderItem orderItem : orderItems) {
|
MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId());
|
/**
|
* 购买套餐赠送贡献值
|
* 补贴3倍额度
|
*/
|
if (mallGoods.getIsNormal() == 2) {
|
hasTc = true;
|
BigDecimal star = (mallGoods.getStar()==null ? BigDecimal.ZERO : mallGoods.getStar())
|
.multiply(new BigDecimal(orderItem.getCnt()));
|
starSum = starSum.add(star);
|
// scoreSum = scoreSum.add(
|
// new BigDecimal(mallGoods.getPresentPrice())
|
// .multiply(new BigDecimal(3))
|
// .multiply(new BigDecimal(orderItem.getCnt()))
|
// .abs()
|
// .setScale(2,BigDecimal.ROUND_DOWN));
|
String goodsName = mallGoods.getGoodsName();
|
/**
|
* 1-2档投资级别,2.5倍
|
* 3-4档投资级别,2.8倍
|
* 5-6档投资级别,3倍
|
* 目前紧急修改成按照商品名称
|
*/
|
BigDecimal basePercent = new BigDecimal("3");
|
if(goodsName.equals("礼包一") || goodsName.equals("礼包二")){
|
basePercent = new BigDecimal("2.5");
|
}
|
if(goodsName.equals("礼包三") || goodsName.equals("礼包四")){
|
basePercent = new BigDecimal("2.8");
|
}
|
if(goodsName.equals("礼包五") || goodsName.equals("礼包六")){
|
basePercent = new BigDecimal("3");
|
}
|
scoreSum = scoreSum.add(
|
new BigDecimal(mallGoods.getPresentPrice())
|
.multiply(new BigDecimal(orderItem.getCnt()))
|
.multiply(basePercent)
|
.abs()
|
.setScale(2,BigDecimal.ROUND_DOWN));
|
achieveSum = achieveSum.add(
|
new BigDecimal(mallGoods.getPresentPrice())
|
.multiply(new BigDecimal(orderItem.getCnt()))
|
.abs()
|
.setScale(2,BigDecimal.ROUND_DOWN));
|
}
|
}
|
/**
|
* 增加贡献值,增加流水
|
*/
|
if (starSum.compareTo(BigDecimal.ZERO) > 0) {
|
//系统设置的个人贡献点最大值
|
DataDictionaryCustom starGetDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
|
DataDictionaryEnum.STAR_GET.getType(),
|
DataDictionaryEnum.STAR_GET.getCode());
|
if(ObjectUtil.isNotEmpty(starGetDic)){
|
String starGetStr = StrUtil.isEmpty(starGetDic.getValue()) ? "0" : starGetDic.getValue();
|
BigDecimal starGet = new BigDecimal(starGetStr);
|
|
MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
|
BigDecimal star = new BigDecimal(mallMemberWallet.getStar());
|
if(starGet.compareTo(star.add(starSum)) < 0){
|
if(starGet.compareTo(BigDecimal.ZERO) == 0){
|
mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId);
|
mallMoneyFlowService.addMoneyFlow(
|
memberId,
|
starSum,
|
MoneyFlowTypeEnum.STAR.getValue(),
|
orderInfo.getOrderNo(),
|
FlowTypeEnum.STAR.getValue(),
|
2);
|
}
|
if(starGet.compareTo(star) > 0){
|
BigDecimal subtract = starGet.subtract(star);
|
if(subtract.compareTo(starSum) < 0){
|
starSum = subtract;
|
}
|
mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId);
|
mallMoneyFlowService.addMoneyFlow(
|
memberId,
|
starSum,
|
MoneyFlowTypeEnum.STAR.getValue(),
|
orderInfo.getOrderNo(),
|
FlowTypeEnum.STAR.getValue(),
|
2);
|
}
|
}else{
|
mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId);
|
mallMoneyFlowService.addMoneyFlow(
|
memberId,
|
starSum,
|
MoneyFlowTypeEnum.STAR.getValue(),
|
orderInfo.getOrderNo(),
|
FlowTypeEnum.STAR.getValue(),
|
2);
|
}
|
}
|
}
|
/**
|
* 增加补贴额度
|
*/
|
if (scoreSum.compareTo(BigDecimal.ZERO) > 0) {
|
// MallMember mallMember = memberMapper.selectById(memberId);
|
// if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) >= 5){
|
// scoreSum = scoreSum.multiply(new BigDecimal(3));
|
// }
|
// if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) >= 3
|
// &&MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) < 5){
|
// scoreSum = scoreSum.multiply(new BigDecimal(2.8));
|
// }
|
// if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) < 3){
|
// scoreSum = scoreSum.multiply(new BigDecimal(2.5));
|
// }
|
memberWalletService.add(scoreSum, memberId, "totalScore");
|
mallMoneyFlowService.addMoneyFlow(
|
memberId,
|
scoreSum,
|
MoneyFlowTypeEnum.TOTAL_SCORE.getValue(),
|
orderInfo.getOrderNo(),
|
"",
|
scoreSum.toString(),
|
memberId,
|
1,
|
FlowTypeEnum.TOTAL_SCORE.getValue(),
|
2);
|
}
|
}
|
|
/**
|
* 购买套餐后,升级会员等级
|
*/
|
if (hasTc) {
|
MallMember mallMember = memberMapper.selectById(memberId);
|
if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) {
|
mallMember.setLevel(AgentLevelEnum.SECOND_LEVEL.name());
|
memberMapper.updateById(mallMember);
|
}
|
}
|
/**
|
* 增加支付金额流水
|
*/
|
mallMoneyFlowService.addMoneyFlow(
|
memberId,
|
orderInfo.getAmount().subtract(orderInfo.getScoreAmount()).negate(),
|
MoneyFlowTypeEnum.PAY.getValue(),
|
orderInfo.getOrderNo(),
|
payType);
|
/**
|
* 减少积分,增加流水
|
*/
|
if (orderInfo.getScoreCnt().compareTo(BigDecimal.ZERO) > 0) {
|
int reduce = memberWalletService.reduce(orderInfo.getScoreCnt(), memberId, "prizeScore");
|
if (reduce == 2) {
|
throw new FebsException("积分不足");
|
}
|
mallMoneyFlowService.addMoneyFlow(
|
memberId,
|
orderInfo.getScoreCnt().negate(),
|
MoneyFlowTypeEnum.PAY.getValue(),
|
orderInfo.getOrderNo(),
|
FlowTypeEnum.PRIZE_SCORE.getValue());
|
}
|
/**
|
* 产生一条业绩记录
|
*/
|
if(achieveSum.compareTo(BigDecimal.ZERO) > 0){
|
MallAchieveRecord mallAchieveRecord = new MallAchieveRecord();
|
mallAchieveRecord.setMemberId(memberId);
|
mallAchieveRecord.setAchieveTime(new Date());
|
mallAchieveRecord.setAmount(achieveSum.subtract(orderInfo.getScoreAmount()));
|
mallAchieveRecord.setOrderId(orderId);
|
mallAchieveRecord.setPayTime(orderInfo.getPayTime());
|
mallAchieveRecordMapper.insert(mallAchieveRecord);
|
}
|
}
|
}
|