订单退款,即刻扣减分销员冻结佣金

This commit is contained in:
pikachu1995@126.com 2023-09-21 18:46:32 +08:00
parent 25582e2958
commit 39e22f5561
5 changed files with 28 additions and 25 deletions

View File

@ -5,9 +5,7 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.json.JSONUtil;
import cn.lili.event.AfterSaleStatusChangeEvent;
import cn.lili.event.OrderStatusChangeEvent;
import cn.lili.modules.distribution.entity.dos.DistributionOrder;
import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum;
import cn.lili.modules.distribution.mapper.DistributionOrderMapper;
import cn.lili.modules.distribution.service.DistributionOrderService;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
@ -17,13 +15,10 @@ import cn.lili.modules.system.entity.dto.DistributionSetting;
import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService;
import cn.lili.timetask.handler.EveryDayExecute;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 分销订单入库
*
@ -78,14 +73,14 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa
//当前时间-结算天数=最终结算时间
dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay());
//分销人员订单结算
distributionOrderService.updateRebate(dateTime,DistributionOrderStatusEnum.WAIT_BILL.name());
distributionOrderService.updateRebate(dateTime, DistributionOrderStatusEnum.WAIT_BILL.name());
}
@Override
public void afterSaleStatusChange(AfterSale afterSale) {
if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) {
distributionOrderService.refundOrder(afterSale.getSn());
distributionOrderService.refundOrder(afterSale);
}
}

View File

@ -3,6 +3,7 @@ package cn.lili.modules.distribution.service;
import cn.hutool.core.date.DateTime;
import cn.lili.modules.distribution.entity.dos.DistributionOrder;
import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@ -47,7 +48,7 @@ public interface DistributionOrderService extends IService<DistributionOrder> {
*
* @param afterSaleSn 售后单号
*/
void refundOrder(String afterSaleSn);
void refundOrder(AfterSale afterSale);
/**
* 分销订单状态修改

View File

@ -16,6 +16,7 @@ import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams;
import cn.lili.modules.distribution.mapper.DistributionOrderMapper;
import cn.lili.modules.distribution.service.DistributionOrderService;
import cn.lili.modules.distribution.service.DistributionService;
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.dos.OrderItem;
import cn.lili.modules.order.order.entity.dos.StoreFlow;
@ -189,28 +190,27 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
}
@Override
public void refundOrder(String afterSaleSn) {
public void refundOrder(AfterSale afterSale) {
//判断是否为分销订单
StoreFlow storeFlow = storeFlowService.queryOne(StoreFlowQueryDTO.builder().justDistribution(true).refundSn(afterSaleSn).build());
if (storeFlow != null) {
StoreFlow refundStoreFlow = storeFlowService.queryOne(StoreFlowQueryDTO.builder().justDistribution(true).refundSn(afterSale.getSn()).build());
if (refundStoreFlow != null) {
//获取收款分销订单
DistributionOrder distributionOrder = this.getOne(new LambdaQueryWrapper<DistributionOrder>()
.eq(DistributionOrder::getOrderItemSn, storeFlow.getOrderItemSn()));
.eq(DistributionOrder::getOrderItemSn, afterSale.getOrderItemSn()));
//分销订单不存在则直接返回
if (distributionOrder == null) {
return;
}
if (distributionOrder.getDistributionOrderStatus().equals(DistributionOrderStatusEnum.WAIT_BILL.name())) {
this.update(new LambdaUpdateWrapper<DistributionOrder>()
.eq(DistributionOrder::getOrderItemSn, storeFlow.getOrderItemSn())
.set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name()));
}
//如果已结算则创建退款分销订单
else {
//修改分销员提成金额
distributionService.subCanRebate(CurrencyUtil.sub(0, storeFlow.getDistributionRebate()), distributionOrder.getDistributionId());
distributionOrder.setSellBackRebate(CurrencyUtil.add(distributionOrder.getSellBackRebate(), refundStoreFlow.getDistributionRebate()));
distributionOrder.setRebate(CurrencyUtil.sub(distributionOrder.getSellBackRebate(), refundStoreFlow.getDistributionRebate()));
if (distributionOrder.getRebate() == 0) {
distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.REFUND.name());
}
this.updateById(distributionOrder);
// 修改分销员提成金额
distributionService.subCanRebate(CurrencyUtil.sub(0, refundStoreFlow.getDistributionRebate()), distributionOrder.getDistributionId());
}
}
@ -310,7 +310,8 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
* @param distributionList 分销列表
* @return
*/
public Distribution checkDistribution(String distributionId, List<DistributionOrder> list, List<Distribution> distributionList) {
public Distribution checkDistribution(String
distributionId, List<DistributionOrder> list, List<Distribution> distributionList) {
//获取所有待结算订单分销人员信息
Distribution distribution = distributionList.parallelStream().filter(a -> StrUtil.equals(a.getId(), distributionId)).collect(Collectors.toList()).get(0);

View File

@ -23,9 +23,12 @@ public class StoreFlowQueryDTO {
@ApiModelProperty(value = "售后编号")
private String refundSn;
@ApiModelProperty(value = "售后编号")
@ApiModelProperty(value = "订单编号")
private String orderSn;
@ApiModelProperty(value = "订单货物编号")
private String orderItemSn;
@ApiModelProperty(value = "过滤只看分销订单")
private Boolean justDistribution;

View File

@ -198,10 +198,13 @@ public class StoreFlowServiceImpl extends ServiceImpl<StoreFlowMapper, StoreFlow
lambdaQueryWrapper.eq(CharSequenceUtil.isNotEmpty(storeFlowQueryDTO.getRefundSn()),
StoreFlow::getRefundSn, storeFlowQueryDTO.getRefundSn());
//售后编号判定
//订单编号判定
lambdaQueryWrapper.eq(CharSequenceUtil.isNotEmpty(storeFlowQueryDTO.getOrderSn()),
StoreFlow::getOrderSn, storeFlowQueryDTO.getOrderSn());
//订单货物编号
lambdaQueryWrapper.eq(CharSequenceUtil.isNotEmpty(storeFlowQueryDTO.getOrderItemSn()),
StoreFlow::getOrderItemSn, storeFlowQueryDTO.getOrderItemSn());
//结算单非空则校对结算单参数
if (storeFlowQueryDTO.getBill() != null) {
Bill bill = storeFlowQueryDTO.getBill();