订单优化
parent
0386d78377
commit
080603909e
|
|
@ -1111,7 +1111,7 @@ public class XktTask {
|
|||
}
|
||||
|
||||
public void autoCompleteStoreOrder() {
|
||||
log.info("-------------自动完成订单开始-------------");
|
||||
log.info("-------------自动完成已发货订单开始-------------");
|
||||
Integer batchCount = 20;
|
||||
Date beforeDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, -15);
|
||||
List<Long> storeOrderIds = storeOrderService.listNeedAutoCompleteOrder(beforeDate, batchCount);
|
||||
|
|
@ -1120,11 +1120,26 @@ public class XktTask {
|
|||
try {
|
||||
storeOrderService.completeOrder(storeOrderId, -1L);
|
||||
} catch (Exception e) {
|
||||
log.error("自动完成订单异常", e);
|
||||
fsNotice.sendMsg2DefaultChat("自动完成订单异常", "订单ID:" + storeOrderId);
|
||||
log.error("自动完成已发货订单异常", e);
|
||||
fsNotice.sendMsg2DefaultChat("自动完成已发货订单异常", "订单ID:" + storeOrderId);
|
||||
}
|
||||
}
|
||||
log.info("-------------自动完成订单结束-------------");
|
||||
log.info("-------------自动完成已发货订单结束-------------");
|
||||
}
|
||||
|
||||
public void autoCompletePendingShipmentStoreOrder() {
|
||||
log.info("-------------自动完成待发货订单开始-------------");
|
||||
List<Long> storeOrderIds = storeOrderService.listNeedAutoCompletePendingShipmentOrderIds();
|
||||
for (Long storeOrderId : storeOrderIds) {
|
||||
log.info("开始处理: {}", storeOrderId);
|
||||
try {
|
||||
storeOrderService.completeOrder(storeOrderId, -1L);
|
||||
} catch (Exception e) {
|
||||
log.error("自动完成待发货订单异常", e);
|
||||
fsNotice.sendMsg2DefaultChat("自动完成待发货订单异常", "订单ID:" + storeOrderId);
|
||||
}
|
||||
}
|
||||
log.info("-------------自动完成待发货订单结束-------------");
|
||||
}
|
||||
|
||||
public void autoRefundStoreOrder() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
package com.ruoyi.xkt.dto.order;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author liangyq
|
||||
* @date 2025-11-22
|
||||
*/
|
||||
@Data
|
||||
public class StoreOrderDetailStatusDTO {
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private Long orderId;
|
||||
/**
|
||||
* 订单明细ID
|
||||
*/
|
||||
private Long detailId;
|
||||
/**
|
||||
* 订单明细状态(同订单状态)[10:已取消 11:待付款 12:待发货 13:已发货 14:已完成 21:售后中 22:售后拒绝 23:平台介入 24:售后完成]
|
||||
*/
|
||||
private Integer detailStatus;
|
||||
/**
|
||||
* 退货订单明细ID
|
||||
*/
|
||||
private Long refundDetailId;
|
||||
/**
|
||||
* 退货订单明细状态(同订单状态)[10:已取消 11:待付款 12:待发货 13:已发货 14:已完成 21:售后中 22:售后拒绝 23:平台介入 24:售后完成]
|
||||
*/
|
||||
private Integer refundDetailStatus;
|
||||
}
|
||||
|
|
@ -2,13 +2,11 @@ package com.ruoyi.xkt.mapper;
|
|||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.ruoyi.xkt.domain.StoreOrder;
|
||||
import com.ruoyi.xkt.dto.order.StoreOrderCountDTO;
|
||||
import com.ruoyi.xkt.dto.order.StoreOrderCountQueryDTO;
|
||||
import com.ruoyi.xkt.dto.order.StoreOrderPageItemDTO;
|
||||
import com.ruoyi.xkt.dto.order.StoreOrderQueryDTO;
|
||||
import com.ruoyi.xkt.dto.order.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -28,4 +26,8 @@ public interface StoreOrderMapper extends BaseMapper<StoreOrder> {
|
|||
List<StoreOrder> listNeedAutoCompleteOrder(@Param("deliveryBeforeTime") Date deliveryBeforeTime);
|
||||
|
||||
List<StoreOrder> listNeedAutoRefundOrder();
|
||||
|
||||
List<StoreOrder> listNeedAutoCheckCompletePendingShipmentOrders();
|
||||
|
||||
List<StoreOrderDetailStatusDTO> listOrderDetailStatusByOrderIds(@Param("orderIds") Collection<Long> orderIds);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -322,4 +322,11 @@ public interface IStoreOrderService {
|
|||
* @param storeOrderId
|
||||
*/
|
||||
void completeRefundByUser(Long storeOrderId);
|
||||
|
||||
/**
|
||||
* 获取需要自动完成的待发货订单
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<Long> listNeedAutoCompletePendingShipmentOrderIds();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1784,6 +1784,45 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
new Date());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> listNeedAutoCompletePendingShipmentOrderIds() {
|
||||
List<StoreOrder> orders = storeOrderMapper.listNeedAutoCheckCompletePendingShipmentOrders();
|
||||
if (CollUtil.isEmpty(orders)) {
|
||||
return ListUtil.empty();
|
||||
}
|
||||
Set<Long> orderIds = orders.stream().map(SimpleEntity::getId).collect(Collectors.toSet());
|
||||
Map<Long, List<StoreOrderDetailStatusDTO>> detailMap = storeOrderMapper.listOrderDetailStatusByOrderIds(orderIds)
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(StoreOrderDetailStatusDTO::getOrderId));
|
||||
List rtn = new ArrayList();
|
||||
long currentTimeMillis = System.currentTimeMillis();
|
||||
for (StoreOrder order : orders) {
|
||||
List<StoreOrderDetailStatusDTO> details = detailMap.get(order.getId());
|
||||
if (CollUtil.isEmpty(details)) {
|
||||
log.warn("订单数据异常:{}", order);
|
||||
continue;
|
||||
}
|
||||
boolean autoComplete = true;
|
||||
long createTimeMillis = order.getCreateTime().getTime();
|
||||
for (StoreOrderDetailStatusDTO detail : details) {
|
||||
if (EOrderStatus.PENDING_SHIPMENT.getValue().equals(detail.getDetailStatus())
|
||||
&& !EOrderStatus.AFTER_SALE_COMPLETED.getValue().equals(detail.getRefundDetailStatus())) {
|
||||
//明细=待发货 & 明细售后≠已完成
|
||||
autoComplete = false;
|
||||
}
|
||||
if (EOrderStatus.SHIPPED.getValue().equals(detail.getDetailStatus())
|
||||
&& ((currentTimeMillis - createTimeMillis) < 31 * 24 * 60 * 60 * 1000L)) {
|
||||
//明细=已发货 & 当前时间 - 订单创建时间 < 31d
|
||||
autoComplete = false;
|
||||
}
|
||||
}
|
||||
if (autoComplete) {
|
||||
rtn.add(order.getId());
|
||||
}
|
||||
}
|
||||
return rtn;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查:若存在已完成售后的订单明细则报错
|
||||
*
|
||||
|
|
|
|||
|
|
@ -143,4 +143,33 @@
|
|||
AND NOT EXISTS (SELECT 1 FROM store_order rso WHERE rso.origin_order_id = so.id AND rso.del_flag = '0' AND rso.order_type = 2)
|
||||
AND NOT EXISTS (SELECT 1 FROM store_order_detail sod WHERE so.id = sod.store_order_id AND sod.del_flag = '0' AND sod.detail_status != 12)
|
||||
</select>
|
||||
<select id="listNeedAutoCheckCompletePendingShipmentOrders" resultType="com.ruoyi.xkt.domain.StoreOrder">
|
||||
SELECT DISTINCT
|
||||
so2.*
|
||||
FROM
|
||||
store_order so1
|
||||
JOIN store_order so2 ON so1.origin_order_id = so2.id
|
||||
WHERE
|
||||
so1.order_status = 24
|
||||
AND so2.order_status = 12
|
||||
AND so2.del_flag = '0'
|
||||
</select>
|
||||
<select id="listOrderDetailStatusByOrderIds"
|
||||
resultType="com.ruoyi.xkt.dto.order.StoreOrderDetailStatusDTO">
|
||||
SELECT
|
||||
sod1.store_order_id AS order_id,
|
||||
sod1.id AS detail_id,
|
||||
sod1.detail_status,
|
||||
sod2.id AS refund_detail_id,
|
||||
sod2.detail_status AS refund_detail_status
|
||||
FROM
|
||||
store_order_detail sod1
|
||||
LEFT JOIN store_order_detail sod2 ON sod1.id = sod2.origin_order_detail_id
|
||||
WHERE
|
||||
sod1.del_flag = '0'
|
||||
AND sod1.store_order_id IN
|
||||
<foreach collection="orderIds" item="obj" open="(" close=")" separator=",">
|
||||
#{obj}
|
||||
</foreach>
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue