skyouc
5 天以前 273f2e5d3941b0e720e5eabd7dba9cfc042c3267
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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.enums.OrderType;
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.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::getType, OrderType.ORDER_IN.type)
                .eq(AsnOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val));
        if (asnOrders.isEmpty()) {
            return;
        }
        moveOrderToLog(asnOrders, OrderType.ORDER_IN.type);
    }
 
 
    /**
    * @author Ryan
    * @description 出库单完成后,状态修改
    * @param
    * @return
    * @time 2025/6/16 08:35
    */
    @Scheduled(cron = "0/30 * * * * ?  ")
    @Transactional(rollbackFor = Exception.class)
    public void outStockComplete() {
        List<AsnOrder> asnOrders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>()
                        .eq(AsnOrder::getType, OrderType.ORDER_OUT.type)
                .apply("anfme=work_qty")
        );
        if (asnOrders.isEmpty()) {
            return;
        }
        moveOrderToLog(asnOrders, OrderType.ORDER_OUT.type);
    }
 
    /**
     * @param
     * @param type
     * @return
     * @author Ryan
     * @description 添加历史单据
     * @time 2025/6/16 08:56
     */
    private void moveOrderToLog(List<AsnOrder> asnOrders, String type) {
        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();
            if (type.equals(OrderType.ORDER_OUT.type)) {
                order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val);
                order.setQty(order.getWorkQty());
            }
            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("原单据删除失败!!");
        }
    }
 
 
}