package cn.lili.event.impl;
|
|
|
import cn.hutool.core.text.CharSequenceUtil;
|
import cn.lili.common.utils.CurrencyUtil;
|
import cn.lili.event.AfterSaleStatusChangeEvent;
|
import cn.lili.event.GoodsCommentCompleteEvent;
|
import cn.lili.event.MemberRegisterEvent;
|
import cn.lili.event.OrderStatusChangeEvent;
|
import cn.lili.modules.member.entity.dos.Member;
|
import cn.lili.modules.member.entity.dos.MemberEvaluation;
|
import cn.lili.modules.member.entity.enums.PointTypeEnum;
|
import cn.lili.modules.member.service.MemberService;
|
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
|
import cn.lili.modules.order.order.entity.dos.Order;
|
import cn.lili.modules.order.order.entity.dto.OrderMessage;
|
import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum;
|
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
|
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
|
import cn.lili.modules.order.order.service.OrderService;
|
import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
|
import cn.lili.modules.system.entity.dos.Setting;
|
import cn.lili.modules.system.entity.dto.PointSetting;
|
import cn.lili.modules.system.entity.enums.SettingEnum;
|
import cn.lili.modules.system.service.SettingService;
|
import com.google.gson.Gson;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
/**
|
* 会员积分
|
*
|
* @author Bulbasaur
|
* @since 2020-07-03 11:20
|
*/
|
@Service
|
public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentCompleteEvent, OrderStatusChangeEvent, AfterSaleStatusChangeEvent {
|
|
/**
|
* 配置
|
*/
|
@Autowired
|
private SettingService settingService;
|
/**
|
* 会员
|
*/
|
@Autowired
|
private MemberService memberService;
|
/**
|
* 订单
|
*/
|
@Autowired
|
private OrderService orderService;
|
|
/**
|
* 会员注册赠送积分
|
*
|
* @param member 会员
|
*/
|
@Override
|
public void memberRegister(Member member) {
|
//获取积分设置
|
PointSetting pointSetting = getPointSetting();
|
//赠送会员积分
|
memberService.updateMemberPoint(pointSetting.getRegister().longValue(), PointTypeEnum.INCREASE.name(), member.getId(), "会员注册,赠送积分" + pointSetting.getRegister() + "分");
|
}
|
|
/**
|
* 会员评价赠送积分
|
*
|
* @param memberEvaluation 会员评价
|
*/
|
@Override
|
public void goodsComment(MemberEvaluation memberEvaluation) {
|
//获取积分设置
|
PointSetting pointSetting = getPointSetting();
|
//赠送会员积分
|
memberService.updateMemberPoint(pointSetting.getComment().longValue(), PointTypeEnum.INCREASE.name(), memberEvaluation.getMemberId(), "会员评价,赠送积分" + pointSetting.getComment() + "分");
|
}
|
|
/**
|
* 非积分订单订单完成后赠送积分
|
*
|
* @param orderMessage 订单消息
|
*/
|
@Override
|
public void orderChange(OrderMessage orderMessage) {
|
|
switch (orderMessage.getNewStatus()) {
|
case CANCELLED: {
|
Order order = orderService.getBySn(orderMessage.getOrderSn());
|
Long point = order.getPriceDetailDTO().getPayPoint();
|
if (point <= 0) {
|
return;
|
}
|
//如果未付款,则不去要退回相关代码执行
|
if (order.getPayStatus().equals(PayStatusEnum.UNPAID.name())) {
|
return;
|
}
|
String content = "订单取消,积分返还:" + point + "分";
|
//赠送会员积分
|
memberService.updateMemberPoint(point, PointTypeEnum.INCREASE.name(), order.getMemberId(), content);
|
break;
|
}
|
case COMPLETED: {
|
Order order = orderService.getBySn(orderMessage.getOrderSn());
|
//如果是积分订单 则直接返回
|
if (CharSequenceUtil.isNotEmpty(order.getOrderPromotionType())
|
&& order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name())) {
|
return;
|
}
|
//获取积分设置
|
PointSetting pointSetting = getPointSetting();
|
if (pointSetting.getConsumer() == 0) {
|
return;
|
}
|
//计算赠送积分数量
|
Double point = CurrencyUtil.mul(pointSetting.getConsumer(), order.getFlowPrice(), 0);
|
//赠送会员积分
|
memberService.updateMemberPoint(point.longValue(), PointTypeEnum.INCREASE.name(), order.getMemberId(), "会员下单,赠送积分" + point + "分");
|
break;
|
}
|
|
default:
|
break;
|
}
|
}
|
|
|
/**
|
* 提交售后后扣除积分
|
*
|
* @param afterSale 售后
|
*/
|
@Override
|
public void afterSaleStatusChange(AfterSale afterSale) {
|
if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) {
|
Order order = orderService.getBySn(afterSale.getOrderSn());
|
//获取积分设置
|
PointSetting pointSetting = getPointSetting();
|
if (pointSetting.getConsumer() == 0 || !OrderStatusEnum.COMPLETED.name().equals(order.getOrderStatus())) {
|
return;
|
}
|
//计算扣除积分数量
|
Double point = CurrencyUtil.mul(pointSetting.getConsumer(), afterSale.getActualRefundPrice(), 0);
|
//扣除会员积分
|
memberService.updateMemberPoint(point.longValue(), PointTypeEnum.REDUCE.name(), afterSale.getMemberId(), "会员退款,回退消费赠送积分" + point + "分");
|
|
}
|
}
|
|
/**
|
* 获取积分设置
|
*
|
* @return 积分设置
|
*/
|
private PointSetting getPointSetting() {
|
Setting setting = settingService.get(SettingEnum.POINT_SETTING.name());
|
return new Gson().fromJson(setting.getSettingValue(), PointSetting.class);
|
}
|
}
|