fix: 2024-03-25被错误的修改一个问题,导致分销订单无法结算,当前 commit 修复问题并优化问题,解决可能出现的事务问题,采用一条 sql 执行
This commit is contained in:
parent
cb776eb4c0
commit
8c5ce396b2
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分销订单结算
|
* 分销订单结算
|
||||||
|
@ -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) {
|
||||||
//结算订单总金额+分销可提现金额
|
//结算订单总金额+分销可提现金额
|
||||||
|
Loading…
x
Reference in New Issue
Block a user