From 8c5ce396b2e15f713a5e32156f2479ee5f332dfd Mon Sep 17 00:00:00 2001 From: Chopper711 Date: Tue, 18 Jun 2024 09:55:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=202024-03-25=E8=A2=AB=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9=E4=B8=80=E4=B8=AA=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E5=AF=BC=E8=87=B4=E5=88=86=E9=94=80=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E7=BB=93=E7=AE=97=EF=BC=8C=E5=BD=93=E5=89=8D?= =?UTF-8?q?=20commit=20=E4=BF=AE=E5=A4=8D=E9=97=AE=E9=A2=98=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=97=AE=E9=A2=98=EF=BC=8C=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E5=87=BA=E7=8E=B0=E7=9A=84=E4=BA=8B=E5=8A=A1?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E9=87=87=E7=94=A8=E4=B8=80=E6=9D=A1?= =?UTF-8?q?=20sql=20=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/order/OrderEveryDayTaskExecute.java | 42 ++--- .../mapper/DistributionOrderMapper.java | 14 ++ .../service/DistributionOrderService.java | 6 +- .../DistributionOrderServiceImpl.java | 152 +++++++----------- 4 files changed, 95 insertions(+), 119 deletions(-) diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java index e86aaf8c4..1fc1e301e 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java @@ -25,12 +25,12 @@ import cn.lili.modules.system.service.SettingService; import cn.lili.timetask.handler.EveryDayExecute; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import java.util.List; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.stream.Collectors; +import org.springframework.transaction.annotation.Transactional; /** * @author paulG @@ -92,7 +92,7 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { } try { //关闭允许售后申请 - closeAfterSale(orderSetting); + this.closeAfterSale(orderSetting); } catch (Exception e) { log.error(e.getMessage(), e); } @@ -111,7 +111,6 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { */ private void completedOrder(OrderSetting orderSetting) { - //订单自动收货时间 = 当前时间 - 自动收货时间天数 DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoReceive()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -144,7 +143,9 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { 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 orderItems = orderItemService.waitOperationOrderItem(orderItemOperationDTO); //判断是否有符合条件的订单,进行自动评价处理 @@ -170,25 +171,23 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { } } - /** * 关闭允许售后申请 * * @param orderSetting 订单设置 */ - private void closeAfterSale(OrderSetting orderSetting) { + @Transactional(rollbackFor = Exception.class) + public void closeAfterSale(OrderSetting orderSetting) { //订单关闭售后申请时间 = 当前时间 - 自动关闭售后申请天数 DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getCloseAfterSale()); - //关闭售后订单=未售后订单+小于订单关闭售后申请时间 - OrderItemOperationDTO build = OrderItemOperationDTO.builder().receiveTime(receiveTime).afterSaleStatus(OrderItemAfterSaleStatusEnum.NOT_APPLIED.name()).build(); - List orderItems = orderItemService.waitOperationOrderItem(build); - //判断是否有符合条件的订单,关闭允许售后申请处理 - if (!orderItems.isEmpty()) { - orderItemService.expiredAfterSaleStatus(receiveTime); - //修改对应分销订单状态 - distributionOrderService.updateDistributionOrderStatus(orderItems); - } +// OrderItemOperationDTO build = OrderItemOperationDTO.builder().receiveTime(receiveTime) +// .afterSaleStatus(OrderItemAfterSaleStatusEnum.NOT_APPLIED.name()).build(); +// List orderItems = orderItemService.waitOperationOrderItem(build); + //关闭售后订单=未售后订单+小于订单关闭售后申请时间 + orderItemService.expiredAfterSaleStatus(receiveTime); + //修改对应分销订单状态 + distributionOrderService.updateDistributionOrderStatus(); } @@ -207,7 +206,8 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { 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 orderItems = orderItemService.waitOperationOrderItem(build); //判断是否有符合条件的订单,关闭允许售后申请处理 @@ -217,9 +217,9 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { List orderItemIdList = orderItems.stream().map(OrderItem::getId).collect(Collectors.toList()); //修改订单投诉状态 - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() - .set(OrderItem::getComplainStatus, OrderItemAfterSaleStatusEnum.EXPIRED.name()) - .in(OrderItem::getId, orderItemIdList); + LambdaUpdateWrapper lambdaUpdateWrapper = + new LambdaUpdateWrapper().set(OrderItem::getComplainStatus, + OrderItemAfterSaleStatusEnum.EXPIRED.name()).in(OrderItem::getId, orderItemIdList); orderItemService.update(lambdaUpdateWrapper); } diff --git a/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionOrderMapper.java b/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionOrderMapper.java index 79b9b9bdb..350033f93 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionOrderMapper.java +++ b/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionOrderMapper.java @@ -3,6 +3,9 @@ package cn.lili.modules.distribution.mapper; import cn.hutool.core.date.DateTime; import cn.lili.modules.distribution.entity.dos.DistributionOrder; 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; /** @@ -24,4 +27,15 @@ public interface DistributionOrderMapper extends BaseMapper { ",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); + /** + * 查询待结算的分销订单 + * @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 distributionSettlementOrder(Date settleCycle); } diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java index 8063afda8..634c8b4fa 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java +++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java @@ -45,17 +45,13 @@ public interface DistributionOrderService extends IService { /** * 订单退款 * 记录分销订单 - * - * @param afterSaleSn 售后单号 */ void refundOrder(AfterSale afterSale); /** * 分销订单状态修改 - * - * @param orderItems */ - void updateDistributionOrderStatus(List orderItems); + void updateDistributionOrderStatus(); /** * 分销订单结算 diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java index f42d09612..b6211b028 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java @@ -1,13 +1,11 @@ package cn.lili.modules.distribution.serviceimpl; -import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; 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.DistributionOrder; 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.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; 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.service.OrderService; 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.metadata.IPage; 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.Date; import java.util.List; import java.util.Map; 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 @Service -public class DistributionOrderServiceImpl extends ServiceImpl implements DistributionOrderService { +public class DistributionOrderServiceImpl extends ServiceImpl + implements DistributionOrderService { /** * 订单 @@ -78,15 +73,15 @@ public class DistributionOrderServiceImpl extends ServiceImpl getDistributionOrderPage(DistributionOrderSearchParams distributionOrderSearchParams) { - return this.page(PageUtil.initPage(distributionOrderSearchParams), distributionOrderSearchParams.queryWrapper()); + public IPage getDistributionOrderPage( + DistributionOrderSearchParams distributionOrderSearchParams) { + return this.page(PageUtil.initPage(distributionOrderSearchParams), + distributionOrderSearchParams.queryWrapper()); } /** - * 1.查看订单是否为分销订单 - * 2.查看店铺流水计算分销总佣金 - * 3.修改分销员的分销总金额、冻结金额 + * 1.查看订单是否为分销订单 2.查看店铺流水计算分销总佣金 3.修改分销员的分销总金额、冻结金额 * * @param orderSn 订单编号 */ @@ -100,8 +95,8 @@ public class DistributionOrderServiceImpl extends ServiceImpl storeFlowList = storeFlowService - .listStoreFlow(StoreFlowQueryDTO.builder().justDistribution(true).orderSn(orderSn).build()); + List storeFlowList = storeFlowService.listStoreFlow( + StoreFlowQueryDTO.builder().justDistribution(true).orderSn(orderSn).build()); double rebate = 0.0; //循环店铺流水记录判断是否包含分销商品 //包含分销商品则进行记录分销订单、计算分销总额 @@ -118,8 +113,8 @@ public class DistributionOrderServiceImpl extends ServiceImpl distributionOrderList = this.list(new LambdaQueryWrapper() - .eq(DistributionOrder::getOrderSn, orderSn)); + List distributionOrderList = + this.list(new LambdaQueryWrapper().eq(DistributionOrder::getOrderSn, orderSn)); //如果没有分销定单,则直接返回 if (distributionOrderList.isEmpty()) { @@ -185,18 +177,20 @@ public class DistributionOrderServiceImpl extends ServiceImpl().eq(DistributionOrder::getOrderSn, orderSn) - .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name())); + .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name())); } @Override 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) { //获取收款分销订单 - DistributionOrder distributionOrder = this.getOne(new LambdaQueryWrapper() - .eq(DistributionOrder::getOrderItemSn, afterSale.getOrderItemSn())); + DistributionOrder distributionOrder = this.getOne( + new LambdaQueryWrapper().eq(DistributionOrder::getOrderItemSn, + afterSale.getOrderItemSn())); //分销订单不存在,则直接返回 if (distributionOrder == null) { return; @@ -204,59 +198,27 @@ public class DistributionOrderServiceImpl extends ServiceImpl orderItems) { - if (orderItems.isEmpty()) { - return; - } - + public void updateDistributionOrderStatus() { //获取未完成分销订单 - List distributionOrderList = this.list(new LambdaQueryWrapper() - .eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.NO_COMPLETED.name())); - - if (distributionOrderList.isEmpty()) { - return; - } - - List list = ListUtil.list(false); - - orderItems.stream().forEach(orderItem -> { - //订单售后状态为已失效并且投诉状态为已失效 - if (StrUtil.equals(OrderItemAfterSaleStatusEnum.EXPIRED.name(), orderItem.getAfterSaleStatus())) { - - - List 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); - } + baseMapper.distributionSettlementOrder(new Date()); } @Override @@ -264,20 +226,21 @@ public class DistributionOrderServiceImpl extends ServiceImpl distributionOrderList = this.list(new LambdaQueryWrapper() - .eq(DistributionOrder::getDistributionOrderStatus, distributionOrderStatus) - .isNotNull(DistributionOrder::getSettleCycle) + List distributionOrderList = this.list( + new LambdaQueryWrapper().eq(DistributionOrder::getDistributionOrderStatus, + distributionOrderStatus).isNotNull(DistributionOrder::getSettleCycle) .le(DistributionOrder::getSettleCycle, dateTime)); //校验待结算订单 if (ObjectUtil.isNotNull(distributionOrderList) && distributionOrderList.size() > 0) { //结算分销人员信息列表 List distributionUpdateList = new ArrayList<>(); //获取分销员信息 - List distributionList = distributionService.list(new LambdaQueryWrapper() - .eq(Distribution::getDistributionStatus, DistributionStatusEnum.PASS.name())); + List distributionList = distributionService.list( + new LambdaQueryWrapper().eq(Distribution::getDistributionStatus, + DistributionStatusEnum.PASS.name())); //根据销人员获取对应分销订单 - Map> distributionOrderList1 = distributionOrderList.stream() - .collect(Collectors.groupingBy(DistributionOrder::getDistributionId)); + Map> distributionOrderList1 = + distributionOrderList.stream().collect(Collectors.groupingBy(DistributionOrder::getDistributionId)); //校验分销订单不为空 if (ObjectUtil.isNotNull(distributionOrderList1) && distributionOrderList1.size() > 0) { @@ -302,10 +265,8 @@ public class DistributionOrderServiceImpl extends ServiceImpl list, List distributionList) { + public Distribution checkDistribution(String distributionId, List list, + List 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(); //检验单分销人员冻结金额为负数时.扣除负数冻结金额后再结算 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 if (canRebate < 0) { //结算订单总金额+分销可提现金额