自动化立体仓库 - WMS系统
pang.jiabao
昨天 17080b28dc3fb0df12a5a4da76e10dd9203e5725
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
package com.zy.asrs.task.handler;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.U8Properties;
import com.zy.asrs.entity.result.OrderRsult;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Objects;
 
/**
 * @author pang.jiabao
 * @description 订单明细完成,定时上报u8
 * @createDate 2025/9/19 9:50
 */
@Slf4j
@Component
public class AutoReportingHandler {
 
    @Resource
    private U8Properties u8Properties;
 
    @Resource
    private OrderDetlService orderDetlService;
 
    @Resource
    private OrderService orderService;
 
    public void U8Reporting(OrderDetl orderDetl) {
 
        String orderNo = orderDetl.getOrderNo();
        Order order = orderService.selectByNo(orderNo);
 
        if (order == null) {
            throw new CoolException("没有找到该订单号:" + orderNo);
        }
 
        OrderRsult orderRsult = new OrderRsult();
        OrderRsult.Login login = new OrderRsult.Login();
        OrderRsult.HeadTable headTable = new OrderRsult.HeadTable();
        OrderRsult.BodyTable bodyTable = new OrderRsult.BodyTable();
 
        login.setSAccID(u8Properties.getSAccID()); //账套号    固定
        login.setSUserID(u8Properties.getSUserID());//U8登陆账号 固定
        login.setSPassword(u8Properties.getSPassword());//U8登陆密码 固定
        login.setSServer(u8Properties.getSServer());//U8服务器地址 固定
        orderRsult.setLogin(login);
 
        orderRsult.setVerifier("sys");//单据类型  固定
        orderRsult.setCommandType("关闭");//操作类型  固定
        orderRsult.setVouchName("");//审核人 填写则自动审核
 
        headTable.setCtvcode(orderNo);//调拨单号  默认
        //时间
        Date date = new Date();
        Format formatter = new SimpleDateFormat("yyyy-MM-dd");
        String format = formatter.format(date);
        headTable.setDtvdate(format);//单据日期
        headTable.setCmaker("sys");//制单人名称
        headTable.setVt_id("89");//模板号        默认
        headTable.setCiwhcode("1");//转入仓库编码
        headTable.setCowhcode("1");//转出仓库编码
        headTable.setCordcode("");//出库类别编码      默认
        headTable.setCirdcode("");//入库类别编码      默认
        headTable.setCodepcode("");//转出部门编码
        headTable.setCidepcode("");//转入部门编码
 
        bodyTable.setOrderNo(orderDetl.getOrderNo()); // 单据号
        bodyTable.setIrowno(orderDetl.getSku());//行号
        bodyTable.setCinvcode(orderDetl.getMatnr());//存货编码
        bodyTable.setCtvbatch(Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch());//批号(特殊说明)
        Double qty = orderDetl.getQty() - (Cools.isEmpty(orderDetl.getUnits()) ? 0 : orderDetl.getUnits());
        bodyTable.setItvquantity(String.valueOf(qty));//完成件数
        bodyTable.setCinposcode("1-1");//立库源货位
        bodyTable.setCoutposcode("");//目标货位
        bodyTable.setItrsid(orderDetl.getSku());//行主键
        bodyTable.setEditprop("A");//状态 A 新增
 
        ArrayList<OrderRsult.BodyTable> bodyTables = new ArrayList<>();
        bodyTables.add(bodyTable);
        orderRsult.setBodyTable(bodyTables);
 
        ArrayList<OrderRsult.HeadTable> headTables = new ArrayList<>();
        headTables.add(headTable);
        orderRsult.setHeadTable(headTables);
 
        String response = "";
        boolean success = false;
        try {
 
            response = new HttpHandler.Builder()
//                        .setHeaders(map)
                    .setUri(u8Properties.getURL())
                    .setPath(u8Properties.getResultReportPath())
                    .setJson(JSON.toJSONString(orderRsult))
                    .build()
                    .doPost();
            log.info("orderNo:{},matnr:{},qty:{}订单明细完成上报u8原始返回:{}",orderNo ,orderDetl.getMatnr() ,qty , response);
            JSONObject jsonObject = JSON.parseObject(response);
 
            if (jsonObject.getInteger("code").equals(200)) {
                orderDetl.setUnits(qty + (Cools.isEmpty(orderDetl.getUnits()) ? 0 : orderDetl.getUnits()));
                if (Objects.equals(orderDetl.getQty(), orderDetl.getAnfme())) {
                    orderDetl.setInspect(1);
                }
                orderDetlService.updateById(orderDetl);
                success = true;
            } else {
                log.error("订单明细完成上报u8失败!!!url:{};request:{};response:{}", u8Properties.getURL() + "/" + u8Properties.getResultReportPath(), JSON.toJSONString(orderRsult), response);
            }
        } catch (Exception e) {
            response = e.getMessage();
            log.error("订单明细完成上报u8异常!!!url:{};request:{};response:{}", u8Properties.getURL() + "/" + u8Properties.getResultReportPath(), JSON.toJSONString(orderRsult), response);
        } finally {
            try {
                // 保存接口日志
                ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class);
                apiLogService.save(
                        "订单完成上报u8",
                        u8Properties.getURL() + "/" + u8Properties.getResultReportPath(),
                        "",
                        "127.0.0.1",
                        JSON.toJSONString(orderRsult),
                        response,
                        success
                );
            } catch (Exception e) {
                log.error("订单完成上报u8接口日志保存异常", e);
            }
        }
    }
}