自动化立体仓库 - WMS系统
LSH
2023-01-04 5e897ddc2d95be29dd322e53738a2d2157a9ee20
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
package com.zy.ints.task.scheduler;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.ints.entity.ErpDetTb;
import com.zy.ints.entity.ErpDetTbBak;
import com.zy.ints.entity.LkDetTb;
import com.zy.ints.entity.LkDetTbBak;
import com.zy.ints.erp.ErpSqlServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
 
/**
 * erp任务控制器
 * Created by vincent on 2020/11/27
 */
@Slf4j
@Component
public class LkDetTbScheduler {
    /**
     * ERP接口是否启用
     */
    @Value("${erp.enabled}")
    private Boolean erpEnabled;
    @Value("${erp.useName.ip}")
    private String ip;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private ErpSqlServer erpSqlServer;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private DocTypeService docTypeService;
 
    /**
     * 上报入出库完结订单信息
     */
    @Scheduled(cron = "${erp.refreshtime}")
    public void reportOrder() {
        if (!erpEnabled) return;
        String sqlSelectLkDetTb = "select bill_no as billNo,prd_no as prdNo,iokindid,add_id as addId,qty,prd_mark as prdMark,wh,billdate,status,temp1,temp2,temp3 from lk_det_tb where 1=1";
        String sqlSelectLkDetTbBak = "select bill_no as billNo,prd_no as prdNo,iokindid,add_id as addId,qty,prd_mark as prdMark,wh,billdate,status,temp1,temp2,temp3 from lk_det_tb_bak where 1=1";
 
        try {
            List<Order> orders = orderService.selectList(new EntityWrapper<Order>().eq("settle", 4L));
            if (orders.size() > 0) {
                for (Order order : orders) {
                    List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
                    if (!Cools.isEmpty(orderDetls)) {
                        for (OrderDetl orderDetl : orderDetls) {
                            Date now = new Date();
                            List<LkDetTb> lkDetTbs = erpSqlServer.select(sqlSelectLkDetTb +
                                            " and bill_no='" + orderDetl.getOrderNo() + "'" +
                                            " and prd_no='" + orderDetl.getMatnr() + "'" +
                                            " and prd_mark='" + orderDetl.getBatch() + "'"
                                    , LkDetTb.class);
                            List<LkDetTbBak> lkDetTbBaks = erpSqlServer.select(sqlSelectLkDetTbBak +
                                            " and bill_no='" + orderDetl.getOrderNo() + "'" +
                                            " and prd_no='" + orderDetl.getMatnr() + "'" +
                                            " and prd_mark='" + orderDetl.getBatch() + "'"
                                    , LkDetTbBak.class);
                            if (lkDetTbs.size() == 1) {
                                callApiLogSaveLkDetTb(lkDetTbs.get(0), "erp_det_tb", "已经上报但是明细依旧存在,请联系开发人员!!!", false);
                                continue;
                            } else if (lkDetTbBaks.size() == 1) {
                                callApiLogSaveLkDetTbBak(lkDetTbBaks.get(0), "erp_det_tb_bak", "已经上报但是明细依旧存在,请联系开发人员!!!", false);
                                continue;
                            } else if (lkDetTbs.size() > 1) {
                                callApiLogSaveLkDetTb(lkDetTbs.get(0), "erp_det_tb", "存在重复资料,联系开发人员!!!", false);
                                continue;
                            } else if (lkDetTbBaks.size() > 1) {
                                callApiLogSaveLkDetTbBak(lkDetTbBaks.get(0), "erp_det_tb_bak", "存在重复资料,联系开发人员!!!", false);
                                continue;
                            } else {
                                String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now);
                                HashMap<String, Object> condition = new HashMap<>();
                                condition.put("bill_no", "'" + orderDetl.getOrderNo() + "'");
                                condition.put("prd_no", "'" + orderDetl.getMatnr() + "'");
 
                                DocType docType = docTypeService.selectById(order.getDocType());
                                if (!Cools.isEmpty(docType)) {
                                    int addid = docType.getPakin() == 1 ? 1 : 2;
                                    condition.put("iokindid", "'" + docType.getDocName$() + "'");
                                    condition.put("add_id", "'" + addid + "'");
                                }
 
                                condition.put("qty", "'" + orderDetl.getQty() + "'");
                                condition.put("prd_mark", "'" + orderDetl.getBatch() + "'");
                                condition.put("wh", "'" + orderDetl.getMemo() + "'");
                                condition.put("billdate", "'" + format + "'");
                                condition.put("status", "'" + 0 + "'");
                                erpSqlServer.insert(LkDetTb.class, condition);
                                callApiLogSaveOrderDetl(orderDetl, "完结订单明细上报完成", true);
                            }
                            //保存订单明细历史档
                            if (orderDetlService.addToLogTable(orderDetl)) {
                                callApiLogSaveOrderDetl(orderDetl, "保存订单明细历史档成功!", true);
                                //删除订单明细
                                orderDetlService.deleteById(orderDetl.getId());
                                callApiLogSaveOrderDetl(orderDetl, "订单明细档保存后删除成功!", true);
                            }
                        }
                        //保存订单历史档
                        if (orderService.addToLogTable(order)) {
                            callApiLogSaveOrder(order, "完结订单上报完成,并保存订单历史档成功!!!", true);
                            //删除完结订单
                            orderService.deleteById(order.getId());
                            callApiLogSaveOrder(order, "完结订单上报完成,并保存订单历史档后删除完结订单成功!!!", true);
                        }
                    }
                }
            }
 
        } catch (Exception e) {
            Date date = new Date();
            log.error(date + ": 表名:lk_det_tb :" + e);
        }
    }
 
    public void callApiLogSaveLkDetTb(LkDetTb lkDetTb, String tableName, String response, Boolean bool) {
        apiLogService.save("ERP下发订单信息", "中间表:" + tableName, "null", ip,
                "订单号:" + lkDetTb.getBillNo() + "、品号:" + lkDetTb.getPrdNo() + "、货品特征:" + lkDetTb.getPrdMark() + "、状态:" + lkDetTb.getStatus(),
                response, bool);
    }
 
    public void callApiLogSaveLkDetTbBak(LkDetTbBak lkDetTbBak, String tableName, String response, Boolean bool) {
        apiLogService.save("ERP下发订单信息", "中间表:" + tableName, "null", ip,
                "订单号:" + lkDetTbBak.getBillNo() + "、品号:" + lkDetTbBak.getPrdNo() + "、货品特征:" + lkDetTbBak.getPrdMark() + "、状态:" + lkDetTbBak.getStatus(),
                response, bool);
    }
 
    public void callApiLogSaveOrderDetl(OrderDetl orderDetl, String response, Boolean bool) {
        apiLogService.save("上报完结订单明细信息", "中间表:lk_det_tb", "null", ip,
                "订单号:" + orderDetl.getOrderNo() + "、品号:" + orderDetl.getMatnr() + "、货品特征:" + orderDetl.getBatch(),
                response, bool);
    }
 
    public void callApiLogSaveOrder(Order order, String response, Boolean bool) {
        apiLogService.save("完结订单信息上报完成", "中间表:lk_det_tb", "null", ip,
                "订单号:" + order.getOrderNo(), response, bool);
    }
}