skyouc
6 天以前 6a4497d2fcd015f73856ce0f75e2c2832362c88f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.vincent.rsf.server.manager.schedules;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.manager.entity.AsnOrder;
import com.vincent.rsf.server.manager.entity.AsnOrderItem;
import com.vincent.rsf.server.manager.entity.AsnOrderItemLog;
import com.vincent.rsf.server.manager.entity.AsnOrderLog;
import com.vincent.rsf.server.manager.enums.AsnExceStatus;
import com.vincent.rsf.server.manager.service.AsnOrderItemLogService;
import com.vincent.rsf.server.manager.service.AsnOrderItemService;
import com.vincent.rsf.server.manager.service.AsnOrderLogService;
import com.vincent.rsf.server.manager.service.AsnOrderService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
 
/**
 * @author Ryan
 * @version 1.0
 * @title AsnOrderLogSchedule
 * @description
 * @create 2025/3/19 19:07
 */
@Component
public class AsnOrderLogSchedule {
 
    @Autowired
    private AsnOrderService asnOrderService;
    @Autowired
    private AsnOrderItemService asnOrderItemService;
 
    @Autowired
    private AsnOrderLogService asnOrderLogService;
 
    @Autowired
    private AsnOrderItemLogService asnOrderItemLogService;
 
    /**
     * @author Ryan
     * @description 删除已完成订单加入Log表
     * @param
     * @return
     * @time 2025/3/19 19:09
     */
    @Scheduled(cron = "0 0/05 * * * ?  ")
    @Transactional(rollbackFor = Exception.class)
    public void moveOrderToLog() {
        List<AsnOrder> asnOrders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val));
        if (asnOrders.isEmpty()) {
            return;
        }
        Set<Long> longSet = asnOrders.stream().map(AsnOrder::getId).collect(Collectors.toSet());
        List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getAsnId, longSet));
        if (orderItems.isEmpty()) {
            throw new CoolException("收货明细为空!!");
        }
 
        for (AsnOrder order : asnOrders) {
            AsnOrderLog orderLog = new AsnOrderLog();
            BeanUtils.copyProperties(order, orderLog);
            orderLog.setId(null);
            orderLog.setAsnId(order.getId());
 
            if (!asnOrderLogService.save(orderLog)) {
                throw new CoolException("主单历史档添加失败!!");
            }
 
            List<AsnOrderItemLog> logs = new ArrayList<>();
            List<AsnOrderItem> items = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, order.getId()));
            items.forEach(item -> {
                AsnOrderItemLog itemLog = new AsnOrderItemLog();
                BeanUtils.copyProperties(item, itemLog);
                itemLog.setAsnItemId(itemLog.getId())
                        .setLogId(orderLog.getId())
                        .setAsnId(item.getAsnId());
                logs.add(itemLog);
            });
 
            if (!asnOrderItemLogService.saveBatch(logs)) {
                throw new CoolException("通知单明细历史档保存失败!!");
            }
        }
 
        if (!asnOrderItemService.remove(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getAsnId, longSet))) {
            throw new CoolException("原单据明细删除失败!!");
        }
        if (!this.asnOrderService.removeByIds(longSet)) {
            throw new CoolException("原单据删除失败!!");
        }
    }
}