自动化立体仓库 - WMS系统
pang.jiabao
2024-10-25 2f63acadcd111fe47b2feedf13adb9cffcd64b2c
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
package com.zy.asrs.task.handler;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.WaitPakin;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.service.MatService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.service.WaitPakinService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
 
/**
 * @author pang.jiabao
 * @description 自动组托定时任务处理器
 * @createDate 2024/10/23 13:14
 */
@Slf4j
@Service
public class AutoGroupingHandler {
 
    @Resource
    private OrderDetlService orderDetlService;
 
    @Resource
    private MatService matService;
 
    @Resource
    private WaitPakinService waitPakinService;
 
    @Resource
    private OrderService orderService;
 
    @Resource
    private OrderMapper orderMapper;
 
    public void autoGrouping(Order order) {
 
        Date now = new Date();
 
        // 获取订单明细
        List<OrderDetl> orderDetlList = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo()));
 
        // 生成入库通知档
        for (OrderDetl orderDetl : orderDetlList) {
            if (orderDetl.getAnfme() > orderDetl.getEnableQty()) {
                throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
            }
            // 修改订单作业数量
            if (!orderDetlService.increaseWorkQty(orderDetl, orderDetl.getAnfme())) {
                throw new CoolException("修改单据作业数量失败");
            }
 
            Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(orderDetl.getMatnr() + "商品档案不存在");
            }
            WaitPakin waitPakin = new WaitPakin();
            waitPakin.sync(mat);
            waitPakin.setOrderNo(order.getOrderNo());   // 单据编号
            waitPakin.setBatch(orderDetl.getBatch());     // 序列码
            waitPakin.setZpallet(orderDetlList.size() == 1 ? order.getTemp2() : orderDetl.getTemp2());   // 托盘码
            waitPakin.setIoStatus("N");     // 入出状态
            waitPakin.setAnfme(orderDetl.getAnfme());  // 数量
            waitPakin.setStatus("Y");    // 状态
            waitPakin.setAppeTime(now);
            waitPakin.setModiTime(now);
            // @可以了主、从表中Temp2存的就是托盘号,如果一托一个单子存的就是主表的Temp2字段,
            // 否则存的就是从表的Temp2字段,从表中:产品ID:ItemId,产品代号:ItemCode,批号:ItemBatch,
            // 属性:ProType,颜色:sColor,订单号:OrderNo,炉号:LuHao,客户ID:Packing,工单号:sPgNo
            waitPakin.setSPgNO(orderDetl.getSPgNO());
            waitPakin.setOutOrderNo(orderDetl.getOutOrderNo());
            waitPakin.setProType(orderDetl.getProType());
            waitPakin.setLuHao(orderDetl.getLuHao());
            waitPakin.setPacking(orderDetl.getPacking());
            if (!waitPakinService.insert(waitPakin)) {
                throw new CoolException("保存入库通知档失败");
            }
        }
 
        orderMapper.updateSettleAndGroupingFlag(order.getId(), 2L, 1);
    }
}