自动化立体仓库 - WMS系统
zwl
21 小时以前 6e18b1e086f202512eeb9aa988a8b9026cfccec3
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
package com.zy.asrs.task.handler;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.OrderDetlPakinServiceImpl;
import com.zy.asrs.service.impl.OrderPakinServiceImpl;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.OrderInAndOutUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
import java.util.Date;
import java.util.List;
 
@Service
@Slf4j
public class OrderMoveHistoryHandler extends AbstractHandler<String> {
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderPakinService orderPakinService;
    @Autowired
    private OrderPakoutService orderPakoutService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private OrderDetlPakinServiceImpl orderDetlPakinService;
    @Autowired
    private OrderDetlPakoutService orderDetlPakoutService;
    @Autowired
    private JdbcTemplate jdbcTemplate;
 
    public ReturnT<String> start(){
//        List<Order> settleEqual6 = orderService.selectList(new EntityWrapper<Order>()
//                .eq("settle", 6));
        List<Order> settleEqual6 = OrderInAndOutUtil.selectBySettle(null, 6L);
        for (Order order : settleEqual6) {
//            List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>()
//                    .eq("order_no", order.getOrderNo()));
            List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId());
            moveBoth(order,orderDetls);
            log.info("已完成单据移动至历史表成功 =====>" +order);
        }
        return SUCCESS;
    }
 
    public ReturnT<String> startOrder(){
        List<Order> settleEqual6 = orderService.selectList(new EntityWrapper<Order>()
                .eq("settle", 6));
//        List<Order> settleEqual6 = OrderInAndOutUtil.selectBySettle(null, 6L);
        for (Order order : settleEqual6) {
            List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>()
                    .eq("order_no", order.getOrderNo()));
//            List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId());
            moveBothOrder(order,orderDetls);
            log.info("已完成单据移动至历史表成功 =====>" +order);
        }
        return SUCCESS;
    }
 
    /**
     * 每天 0 点将未执行的出库单转入历史档,并标记为系统自动删除。
     */
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> startPakoutAutoArchive() {
        try {
            Integer orderCount = jdbcTemplate.queryForObject(
                    "select count(1) from man_order_pakout where settle = 1",
                    Integer.class
            );
            if (orderCount == null || orderCount == 0) {
                return SUCCESS;
            }
 
            int detailLogCount = jdbcTemplate.update(
                    "insert into man_order_detl_log_pakout " +
                            "select * from man_order_detl_pakout " +
                            "where order_id in (select id from man_order_pakout where settle = 1)"
            );
            jdbcTemplate.update(
                    "update logDetl " +
                            "set logDetl.memo = case " +
                            "when logDetl.memo is null or logDetl.memo = '' " +
                            "then '系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " +
                            "else logDetl.memo + ';系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " +
                            "end, " +
                            "logDetl.update_by = 0, " +
                            "logDetl.update_time = getdate() " +
                            "from man_order_detl_log_pakout logDetl " +
                            "where exists (" +
                            "select 1 " +
                            "from man_order_detl_pakout detl " +
                            "inner join man_order_pakout pakout on detl.order_id = pakout.id " +
                            "where pakout.settle = 1 and detl.id = logDetl.id)"
            );
            int detailDeleteCount = jdbcTemplate.update(
                    "delete from man_order_detl_pakout " +
                            "where order_id in (select id from man_order_pakout where settle = 1)"
            );
 
            int orderLogCount = jdbcTemplate.update(
                    "insert into man_order_log_pakout " +
                            "select * from man_order_pakout " +
                            "where settle = 1"
            );
            jdbcTemplate.update(
                    "update logOrder " +
                            "set logOrder.memo = case " +
                            "when logOrder.memo is null or logOrder.memo = '' " +
                            "then '系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " +
                            "else logOrder.memo + ';系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " +
                            "end, " +
                            "logOrder.update_by = 0, " +
                            "logOrder.update_time = getdate() " +
                            "from man_order_log_pakout logOrder " +
                            "where exists (" +
                            "select 1 " +
                            "from man_order_pakout pakout " +
                            "where pakout.settle = 1 and pakout.id = logOrder.id)"
            );
            int orderDeleteCount = jdbcTemplate.update(
                    "delete from man_order_pakout where settle = 1"
            );
 
            log.info(
                    "0点自动迁移出库单至历史档完成, 订单数={}, 订单历史数={}, 明细历史数={}, 订单删除数={}, 明细删除数={}",
                    orderCount, orderLogCount, detailLogCount, orderDeleteCount, detailDeleteCount
            );
            return SUCCESS;
        } catch (Exception e) {
            log.error("0点自动迁移出库单至历史档失败", e);
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
    }
 
    private void moveBoth(Order order, List<OrderDetl> orderDetls){
        Date now = new Date();
        if (!Cools.isEmpty(orderDetls)) {
            for (OrderDetl orderDetl : orderDetls) {
                orderDetl.setUpdateBy(0L);
                orderDetl.setUpdateTime(now);
//                orderDetlService.addToLogTable(orderDetl);
                OrderInAndOutUtil.addToLogTableOrderDetl(order.getPakinPakoutStatus$(),orderDetl);
                if (order.getPakinPakoutStatus() == 1){
                    orderDetlPakinService.delete(new EntityWrapper<OrderDetlPakin>()
                            .eq("id",orderDetl.getId()));
                } else {
                    orderDetlPakoutService.delete(new EntityWrapper<OrderDetlPakout>()
                            .eq("id",orderDetl.getId()));
                }
            }
        }
        if (!Cools.isEmpty(order)){
            order.setUpdateBy(0L);
            order.setUpdateTime(now);
//            orderService.addToLogTable(order);
            OrderInAndOutUtil.addToLogTableOrder(order.getPakinPakoutStatus$(),order);
//            orderService.delete(new EntityWrapper<Order>()
//                    .eq("id",order.getId()));
            if (order.getPakinPakoutStatus() == 1){
                orderPakinService.delete(new EntityWrapper<OrderPakin>()
                        .eq("id",order.getId()));
            } else {
                orderPakoutService.delete(new EntityWrapper<OrderPakout>()
                        .eq("id",order.getId()));
            }
        }
    }
 
    private void moveBothOrder(Order order, List<OrderDetl> orderDetls){
        Date now = new Date();
        if (!Cools.isEmpty(orderDetls)) {
            for (OrderDetl orderDetl : orderDetls) {
                orderDetl.setUpdateBy(0L);
                orderDetl.setUpdateTime(now);
                orderDetlService.addToLogTable(orderDetl);
                orderDetlService.delete(new EntityWrapper<OrderDetl>()
                        .eq("id",orderDetl.getId()));
            }
        }
        if (!Cools.isEmpty(order)){
            order.setUpdateBy(0L);
            order.setUpdateTime(now);
            orderService.addToLogTable(order);
            orderService.delete(new EntityWrapper<Order>()
                    .eq("id",order.getId()));
        }
    }
 
}