fix: 2024-03-25被错误的修改一个问题,导致分销订单无法结算,当前 commit 修复问题并优化问题,解决可能出现的事务问题,采用一条 sql 执行

This commit is contained in:
Chopper711 2024-06-18 09:55:15 +08:00
parent cb776eb4c0
commit 8c5ce396b2
4 changed files with 95 additions and 119 deletions

View File

@ -25,12 +25,12 @@ import cn.lili.modules.system.service.SettingService;
import cn.lili.timetask.handler.EveryDayExecute; import cn.lili.timetask.handler.EveryDayExecute;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import java.util.List;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @author paulG * @author paulG
@ -92,7 +92,7 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute {
} }
try { try {
//关闭允许售后申请 //关闭允许售后申请
closeAfterSale(orderSetting); this.closeAfterSale(orderSetting);
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
@ -111,7 +111,6 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute {
*/ */
private void completedOrder(OrderSetting orderSetting) { private void completedOrder(OrderSetting orderSetting) {
//订单自动收货时间 = 当前时间 - 自动收货时间天数 //订单自动收货时间 = 当前时间 - 自动收货时间天数
DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoReceive()); DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoReceive());
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
@ -144,7 +143,9 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute {
DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoEvaluation()); DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoEvaluation());
//订单完成时间 <= 订单自动好评时间 //订单完成时间 <= 订单自动好评时间
OrderItemOperationDTO orderItemOperationDTO = OrderItemOperationDTO.builder().receiveTime(receiveTime).commentStatus(CommentStatusEnum.UNFINISHED.name()).build(); OrderItemOperationDTO orderItemOperationDTO =
OrderItemOperationDTO.builder().receiveTime(receiveTime).commentStatus(CommentStatusEnum.UNFINISHED.name())
.build();
List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(orderItemOperationDTO); List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(orderItemOperationDTO);
//判断是否有符合条件的订单进行自动评价处理 //判断是否有符合条件的订单进行自动评价处理
@ -170,25 +171,23 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute {
} }
} }
/** /**
* 关闭允许售后申请 * 关闭允许售后申请
* *
* @param orderSetting 订单设置 * @param orderSetting 订单设置
*/ */
private void closeAfterSale(OrderSetting orderSetting) { @Transactional(rollbackFor = Exception.class)
public void closeAfterSale(OrderSetting orderSetting) {
//订单关闭售后申请时间 = 当前时间 - 自动关闭售后申请天数 //订单关闭售后申请时间 = 当前时间 - 自动关闭售后申请天数
DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getCloseAfterSale()); DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getCloseAfterSale());
//关闭售后订单=未售后订单+小于订单关闭售后申请时间
OrderItemOperationDTO build = OrderItemOperationDTO.builder().receiveTime(receiveTime).afterSaleStatus(OrderItemAfterSaleStatusEnum.NOT_APPLIED.name()).build();
List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(build);
//判断是否有符合条件的订单关闭允许售后申请处理 // OrderItemOperationDTO build = OrderItemOperationDTO.builder().receiveTime(receiveTime)
if (!orderItems.isEmpty()) { // .afterSaleStatus(OrderItemAfterSaleStatusEnum.NOT_APPLIED.name()).build();
orderItemService.expiredAfterSaleStatus(receiveTime); // List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(build);
//修改对应分销订单状态 //关闭售后订单=未售后订单+小于订单关闭售后申请时间
distributionOrderService.updateDistributionOrderStatus(orderItems); orderItemService.expiredAfterSaleStatus(receiveTime);
} //修改对应分销订单状态
distributionOrderService.updateDistributionOrderStatus();
} }
@ -207,7 +206,8 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute {
DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getCloseComplaint()); DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getCloseComplaint());
//关闭售后订单=未售后订单+小于订单关闭售后申请时间 //关闭售后订单=未售后订单+小于订单关闭售后申请时间
OrderItemOperationDTO build = OrderItemOperationDTO.builder().receiveTime(receiveTime).complainStatus(OrderComplaintStatusEnum.NO_APPLY.name()).build(); OrderItemOperationDTO build = OrderItemOperationDTO.builder().receiveTime(receiveTime)
.complainStatus(OrderComplaintStatusEnum.NO_APPLY.name()).build();
List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(build); List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(build);
//判断是否有符合条件的订单关闭允许售后申请处理 //判断是否有符合条件的订单关闭允许售后申请处理
@ -217,9 +217,9 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute {
List<String> orderItemIdList = orderItems.stream().map(OrderItem::getId).collect(Collectors.toList()); List<String> orderItemIdList = orderItems.stream().map(OrderItem::getId).collect(Collectors.toList());
//修改订单投诉状态 //修改订单投诉状态
LambdaUpdateWrapper<OrderItem> lambdaUpdateWrapper = new LambdaUpdateWrapper<OrderItem>() LambdaUpdateWrapper<OrderItem> lambdaUpdateWrapper =
.set(OrderItem::getComplainStatus, OrderItemAfterSaleStatusEnum.EXPIRED.name()) new LambdaUpdateWrapper<OrderItem>().set(OrderItem::getComplainStatus,
.in(OrderItem::getId, orderItemIdList); OrderItemAfterSaleStatusEnum.EXPIRED.name()).in(OrderItem::getId, orderItemIdList);
orderItemService.update(lambdaUpdateWrapper); orderItemService.update(lambdaUpdateWrapper);
} }

View File

@ -3,6 +3,9 @@ package cn.lili.modules.distribution.mapper;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.dos.DistributionOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; import org.apache.ibatis.annotations.Update;
/** /**
@ -24,4 +27,15 @@ public interface DistributionOrderMapper extends BaseMapper<DistributionOrder> {
",d.commission_frozen =(ifnull(d.commission_frozen,0) -(SELECT SUM( dorder.rebate ) FROM li_distribution_order AS dorder WHERE dorder.distribution_order_status = #{distributionOrderStatus} AND dorder.settle_cycle< #{settleCycle} AND dorder.distribution_id = d.id ) )") ",d.commission_frozen =(ifnull(d.commission_frozen,0) -(SELECT SUM( dorder.rebate ) FROM li_distribution_order AS dorder WHERE dorder.distribution_order_status = #{distributionOrderStatus} AND dorder.settle_cycle< #{settleCycle} AND dorder.distribution_id = d.id ) )")
void rebate(String distributionOrderStatus, DateTime settleCycle); void rebate(String distributionOrderStatus, DateTime settleCycle);
/**
* 查询待结算的分销订单
* @return 待结算的分销订单
*/
@Select("UPDATE li_distribution_order distribution_order"
+ " INNER JOIN li_order_item oi ON oi.sn = distribution_order.order_item_sn"
+ " SET distribution_order.distribution_order_status = 'WAIT_BILL',"
+ " distribution_order.settle_cycle = #{settleCycle} "
+ " WHERE distribution_order.distribution_order_status = 'NO_COMPLETED'"
+ " AND oi.after_sale_status = 'EXPIRED';")
List<DistributionOrder> distributionSettlementOrder(Date settleCycle);
} }

View File

@ -45,17 +45,13 @@ public interface DistributionOrderService extends IService<DistributionOrder> {
/** /**
* 订单退款 * 订单退款
* 记录分销订单 * 记录分销订单
*
* @param afterSaleSn 售后单号
*/ */
void refundOrder(AfterSale afterSale); void refundOrder(AfterSale afterSale);
/** /**
* 分销订单状态修改 * 分销订单状态修改
*
* @param orderItems
*/ */
void updateDistributionOrderStatus(List<OrderItem> orderItems); void updateDistributionOrderStatus();
/** /**
* 分销订单结算 * 分销订单结算

View File

@ -1,13 +1,11 @@
package cn.lili.modules.distribution.serviceimpl; package cn.lili.modules.distribution.serviceimpl;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.CurrencyUtil;
import cn.lili.common.utils.SpringContextUtil;
import cn.lili.modules.distribution.entity.dos.Distribution; import cn.lili.modules.distribution.entity.dos.Distribution;
import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.dos.DistributionOrder;
import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum; import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum;
@ -18,10 +16,8 @@ import cn.lili.modules.distribution.service.DistributionOrderService;
import cn.lili.modules.distribution.service.DistributionService; import cn.lili.modules.distribution.service.DistributionService;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale; 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.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.dos.StoreFlow; import cn.lili.modules.order.order.entity.dos.StoreFlow;
import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO; import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO;
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.order.service.StoreFlowService; import cn.lili.modules.order.order.service.StoreFlowService;
@ -34,17 +30,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/** /**
* 分销订单接口实现 * 分销订单接口实现
@ -54,7 +48,8 @@ import java.util.stream.Collectors;
*/ */
@Slf4j @Slf4j
@Service @Service
public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderMapper, DistributionOrder> implements DistributionOrderService { public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderMapper, DistributionOrder>
implements DistributionOrderService {
/** /**
* 订单 * 订单
@ -78,15 +73,15 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
private SettingService settingService; private SettingService settingService;
@Override @Override
public IPage<DistributionOrder> getDistributionOrderPage(DistributionOrderSearchParams distributionOrderSearchParams) { public IPage<DistributionOrder> getDistributionOrderPage(
return this.page(PageUtil.initPage(distributionOrderSearchParams), distributionOrderSearchParams.queryWrapper()); DistributionOrderSearchParams distributionOrderSearchParams) {
return this.page(PageUtil.initPage(distributionOrderSearchParams),
distributionOrderSearchParams.queryWrapper());
} }
/** /**
* 1.查看订单是否为分销订单 * 1.查看订单是否为分销订单 2.查看店铺流水计算分销总佣金 3.修改分销员的分销总金额冻结金额
* 2.查看店铺流水计算分销总佣金
* 3.修改分销员的分销总金额冻结金额
* *
* @param orderSn 订单编号 * @param orderSn 订单编号
*/ */
@ -100,8 +95,8 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
//判断是否为分销订单如果为分销订单则获取分销佣金 //判断是否为分销订单如果为分销订单则获取分销佣金
if (order.getDistributionId() != null) { if (order.getDistributionId() != null) {
//根据订单编号获取有分销金额的店铺流水记录 //根据订单编号获取有分销金额的店铺流水记录
List<StoreFlow> storeFlowList = storeFlowService List<StoreFlow> storeFlowList = storeFlowService.listStoreFlow(
.listStoreFlow(StoreFlowQueryDTO.builder().justDistribution(true).orderSn(orderSn).build()); StoreFlowQueryDTO.builder().justDistribution(true).orderSn(orderSn).build());
double rebate = 0.0; double rebate = 0.0;
//循环店铺流水记录判断是否包含分销商品 //循环店铺流水记录判断是否包含分销商品
//包含分销商品则进行记录分销订单计算分销总额 //包含分销商品则进行记录分销订单计算分销总额
@ -118,8 +113,8 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
//设置结算天数(解冻日期) //设置结算天数(解冻日期)
Setting setting = settingService.get(SettingEnum.DISTRIBUTION_SETTING.name()); Setting setting = settingService.get(SettingEnum.DISTRIBUTION_SETTING.name());
DistributionSetting distributionSetting = JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class); DistributionSetting distributionSetting =
JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class);
//添加分销订单 //添加分销订单
this.save(distributionOrder); this.save(distributionOrder);
@ -129,26 +124,23 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
distributionService.addRebate(rebate, order.getDistributionId()); distributionService.addRebate(rebate, order.getDistributionId());
//如果天数写0则立即进行结算 //如果天数写0则立即进行结算
// if (distributionSetting.getCashDay().equals(0)) { // if (distributionSetting.getCashDay().equals(0)) {
// DateTime dateTime = new DateTime(); // DateTime dateTime = new DateTime();
// dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay()); // dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay());
// //防止事务失效采用上下文获取bean // //防止事务失效采用上下文获取bean
// DistributionOrderService bean = SpringContextUtil.getBean(DistributionOrderService.class); // DistributionOrderService bean = SpringContextUtil.getBean(DistributionOrderService.class);
// //分销订单结算 // //分销订单结算
// bean.updateRebate(dateTime, DistributionOrderStatusEnum.WAIT_BILL.name()); // bean.updateRebate(dateTime, DistributionOrderStatusEnum.WAIT_BILL.name());
// } // }
} }
} }
} }
} }
/** /**
* 1.获取订单判断是否为已付款的分销订单 * 1.获取订单判断是否为已付款的分销订单 2.查看店铺流水记录分销佣金 3.修改分销员的分销总金额可提现金额
* 2.查看店铺流水记录分销佣金
* 3.修改分销员的分销总金额可提现金额
* *
* @param orderSn 订单编号 * @param orderSn 订单编号
*/ */
@ -162,8 +154,8 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
if (order.getDistributionId() != null && order.getPayStatus().equals(PayStatusEnum.PAID.name())) { if (order.getDistributionId() != null && order.getPayStatus().equals(PayStatusEnum.PAID.name())) {
//根据订单编号获取有分销金额的店铺流水记录 //根据订单编号获取有分销金额的店铺流水记录
List<DistributionOrder> distributionOrderList = this.list(new LambdaQueryWrapper<DistributionOrder>() List<DistributionOrder> distributionOrderList =
.eq(DistributionOrder::getOrderSn, orderSn)); this.list(new LambdaQueryWrapper<DistributionOrder>().eq(DistributionOrder::getOrderSn, orderSn));
//如果没有分销定单则直接返回 //如果没有分销定单则直接返回
if (distributionOrderList.isEmpty()) { if (distributionOrderList.isEmpty()) {
@ -185,18 +177,20 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
//修改分销订单的状态 //修改分销订单的状态
this.update(new LambdaUpdateWrapper<DistributionOrder>().eq(DistributionOrder::getOrderSn, orderSn) this.update(new LambdaUpdateWrapper<DistributionOrder>().eq(DistributionOrder::getOrderSn, orderSn)
.set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name())); .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name()));
} }
@Override @Override
public void refundOrder(AfterSale afterSale) { public void refundOrder(AfterSale afterSale) {
//判断是否为分销订单 //判断是否为分销订单
StoreFlow refundStoreFlow = storeFlowService.queryOne(StoreFlowQueryDTO.builder().justDistribution(true).refundSn(afterSale.getSn()).build()); StoreFlow refundStoreFlow = storeFlowService.queryOne(
StoreFlowQueryDTO.builder().justDistribution(true).refundSn(afterSale.getSn()).build());
if (refundStoreFlow != null) { if (refundStoreFlow != null) {
//获取收款分销订单 //获取收款分销订单
DistributionOrder distributionOrder = this.getOne(new LambdaQueryWrapper<DistributionOrder>() DistributionOrder distributionOrder = this.getOne(
.eq(DistributionOrder::getOrderItemSn, afterSale.getOrderItemSn())); new LambdaQueryWrapper<DistributionOrder>().eq(DistributionOrder::getOrderItemSn,
afterSale.getOrderItemSn()));
//分销订单不存在则直接返回 //分销订单不存在则直接返回
if (distributionOrder == null) { if (distributionOrder == null) {
return; return;
@ -204,59 +198,27 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
if (distributionOrder.getSellBackRebate() == null) { if (distributionOrder.getSellBackRebate() == null) {
distributionOrder.setSellBackRebate(refundStoreFlow.getDistributionRebate()); distributionOrder.setSellBackRebate(refundStoreFlow.getDistributionRebate());
} else { } else {
distributionOrder.setSellBackRebate(CurrencyUtil.add(distributionOrder.getSellBackRebate(), refundStoreFlow.getDistributionRebate())); distributionOrder.setSellBackRebate(
CurrencyUtil.add(distributionOrder.getSellBackRebate(), refundStoreFlow.getDistributionRebate()));
} }
distributionOrder.setRebate(CurrencyUtil.sub(distributionOrder.getRebate(), refundStoreFlow.getDistributionRebate())); distributionOrder.setRebate(
CurrencyUtil.sub(distributionOrder.getRebate(), refundStoreFlow.getDistributionRebate()));
if (distributionOrder.getRebate() == 0) { if (distributionOrder.getRebate() == 0) {
distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.REFUND.name()); distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.REFUND.name());
} }
this.updateById(distributionOrder); this.updateById(distributionOrder);
// 修改分销员提成金额 // 修改分销员提成金额
distributionService.subCanRebate(CurrencyUtil.sub(0, refundStoreFlow.getDistributionRebate()), distributionOrder.getDistributionId()); distributionService.subCanRebate(CurrencyUtil.sub(0, refundStoreFlow.getDistributionRebate()),
distributionOrder.getDistributionId());
} }
} }
@Override @Override
public void updateDistributionOrderStatus(List<OrderItem> orderItems) { public void updateDistributionOrderStatus() {
if (orderItems.isEmpty()) {
return;
}
//获取未完成分销订单 //获取未完成分销订单
List<DistributionOrder> distributionOrderList = this.list(new LambdaQueryWrapper<DistributionOrder>() baseMapper.distributionSettlementOrder(new Date());
.eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.NO_COMPLETED.name()));
if (distributionOrderList.isEmpty()) {
return;
}
List<DistributionOrder> list = ListUtil.list(false);
orderItems.stream().forEach(orderItem -> {
//订单售后状态为已失效并且投诉状态为已失效
if (StrUtil.equals(OrderItemAfterSaleStatusEnum.EXPIRED.name(), orderItem.getAfterSaleStatus())) {
List<DistributionOrder> collect = distributionOrderList.stream()
.filter(distributionOrder -> StrUtil.equals(distributionOrder.getOrderItemSn(), orderItem.getSn()))
.map((distributionOrder) -> {
distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.WAIT_BILL.name());
distributionOrder.setSettleCycle(new Date());
return distributionOrder;
})
.collect(Collectors.toList());
list.addAll(collect);
}
});
if (!list.isEmpty()) {
//批量修改分销订单结算状态
this.updateBatchById(list);
}
} }
@Override @Override
@ -264,20 +226,21 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
//结算时间延后五分钟 //结算时间延后五分钟
dateTime = dateTime.offsetNew(DateField.MINUTE, 5); dateTime = dateTime.offsetNew(DateField.MINUTE, 5);
//获取待结算订单 //获取待结算订单
List<DistributionOrder> distributionOrderList = this.list(new LambdaQueryWrapper<DistributionOrder>() List<DistributionOrder> distributionOrderList = this.list(
.eq(DistributionOrder::getDistributionOrderStatus, distributionOrderStatus) new LambdaQueryWrapper<DistributionOrder>().eq(DistributionOrder::getDistributionOrderStatus,
.isNotNull(DistributionOrder::getSettleCycle) distributionOrderStatus).isNotNull(DistributionOrder::getSettleCycle)
.le(DistributionOrder::getSettleCycle, dateTime)); .le(DistributionOrder::getSettleCycle, dateTime));
//校验待结算订单 //校验待结算订单
if (ObjectUtil.isNotNull(distributionOrderList) && distributionOrderList.size() > 0) { if (ObjectUtil.isNotNull(distributionOrderList) && distributionOrderList.size() > 0) {
//结算分销人员信息列表 //结算分销人员信息列表
List<Distribution> distributionUpdateList = new ArrayList<>(); List<Distribution> distributionUpdateList = new ArrayList<>();
//获取分销员信息 //获取分销员信息
List<Distribution> distributionList = distributionService.list(new LambdaQueryWrapper<Distribution>() List<Distribution> distributionList = distributionService.list(
.eq(Distribution::getDistributionStatus, DistributionStatusEnum.PASS.name())); new LambdaQueryWrapper<Distribution>().eq(Distribution::getDistributionStatus,
DistributionStatusEnum.PASS.name()));
//根据销人员获取对应分销订单 //根据销人员获取对应分销订单
Map<String, List<DistributionOrder>> distributionOrderList1 = distributionOrderList.stream() Map<String, List<DistributionOrder>> distributionOrderList1 =
.collect(Collectors.groupingBy(DistributionOrder::getDistributionId)); distributionOrderList.stream().collect(Collectors.groupingBy(DistributionOrder::getDistributionId));
//校验分销订单不为空 //校验分销订单不为空
if (ObjectUtil.isNotNull(distributionOrderList1) && distributionOrderList1.size() > 0) { if (ObjectUtil.isNotNull(distributionOrderList1) && distributionOrderList1.size() > 0) {
@ -302,10 +265,8 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
this.updateBatchById(distributionOrderList); this.updateBatchById(distributionOrderList);
} }
} }
/** /**
* 计算分销结算金额 * 计算分销结算金额
* *
@ -314,20 +275,25 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
* @param distributionList 分销列表 * @param distributionList 分销列表
* @return * @return
*/ */
public Distribution checkDistribution(String public Distribution checkDistribution(String distributionId, List<DistributionOrder> list,
distributionId, List<DistributionOrder> list, List<Distribution> distributionList) { List<Distribution> distributionList) {
//获取所有待结算订单分销人员信息 //获取所有待结算订单分销人员信息
Distribution distribution = distributionList.parallelStream().filter(a -> StrUtil.equals(a.getId(), distributionId)).collect(Collectors.toList()).get(0); Distribution distribution =
distributionList.parallelStream().filter(a -> StrUtil.equals(a.getId(), distributionId))
.collect(Collectors.toList()).get(0);
//获取分销订单总金额 //获取分销订单总金额
double rebate = list.stream().mapToDouble(DistributionOrder::getRebate).sum(); double rebate = list.stream().mapToDouble(DistributionOrder::getRebate).sum();
//检验单分销人员冻结金额为负数时.扣除负数冻结金额后再结算 //检验单分销人员冻结金额为负数时.扣除负数冻结金额后再结算
if (distribution.getCommissionFrozen() < 0) { if (distribution.getCommissionFrozen() < 0) {
rebate = CurrencyUtil.add(distribution.getCommissionFrozen() == null ? 0.0 : distribution.getCommissionFrozen(), rebate); rebate =
CurrencyUtil.add(distribution.getCommissionFrozen() == null ? 0.0 : distribution.getCommissionFrozen(),
rebate);
} }
//结算订单总金额+分销可提现金额 //结算订单总金额+分销可提现金额
Double canRebate = CurrencyUtil.add(rebate, distribution.getCanRebate() == null ? 0.0 : distribution.getCanRebate()); Double canRebate =
CurrencyUtil.add(rebate, distribution.getCanRebate() == null ? 0.0 : distribution.getCanRebate());
//结算金额小于0 //结算金额小于0
if (canRebate < 0) { if (canRebate < 0) {
//结算订单总金额+分销可提现金额 //结算订单总金额+分销可提现金额