自动化立体仓库 - WMS系统
zyx
2023-07-26 20e8b29ab26083c26b755d4c1087af2116d22262
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
package com.zy.asrs.task.handler;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.MaterialInfo;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.MatService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.MesSyncUtil;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
 
@Slf4j
@Service
public class MesMatSyncHandler extends AbstractHandler<String> {
 
    @Value("${mes.mat-sync.uri}")
    private String uri;
 
    @Value("${mes.mat-sync.path}")
    private String path;
 
    @Autowired
    private ApiLogService apiLogService;
 
    @Autowired
    MatService matService;
 
    @Transactional
    public ReturnT<String> start() throws IOException {
        boolean success = true;
        JSONObject jsonObject = doPostJsonData();
        log.info("MesMatSync jsonObject: " + jsonObject.toJSONString());
 
        int code = jsonObject.getInteger("code");
 
        if(code == 200){
            insertOrUpdateMat(jsonObject);
 
        }else {
            success = false;
            log.error("请求mes接口响应错误,响应码为: " + code);
        }
        saveApiLog(jsonObject.toJSONString(),success);
        return SUCCESS;
    }
 
    /*
    保存请求日志
     */
    private void saveApiLog(String response, boolean success) {
        apiLogService.save(
                "商品信息同步",
                uri + path,
                null,
                "127.0.0.1",
                null,
                response,
                success
        );
    }
 
    /*
    发起一个请求来获取商品信息
     */
    private JSONObject doPostJsonData() throws IOException {
 
        Map<String, Object> requestParamMap = MesSyncUtil.getRequestParamMap();
        Mat mat = matService.selectOne(new EntityWrapper<Mat>().orderBy("update_time", false));
        //如果WMS中有mat信息,则获取最新的mat修改时间,然后获取该时间之后所有更新过的隔膜卷信息。如果没有mat信息,则获取所有隔膜卷信息
        if(!Cools.isEmpty(mat)){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            requestParamMap.put("time",sdf.format(mat.getUpdateTime()));
        }
 
        return JSON.parseObject( new HttpHandler.Builder()
                .setUri(uri)
                .setPath(path)
                .setParams(requestParamMap)
                .build()
                .doPostWithParam());
    }
 
    /*
    插入或更改mat信息
     */
    private void insertOrUpdateMat(JSONObject jsonObject){
        List<MaterialInfo> dataList =  JSONObject.parseArray(jsonObject.getString("data"),MaterialInfo.class);
        //MaterialInfo data = jsonObject.getObject("data",MaterialInfo.class);
        dataList.forEach(data -> {
            Mat m = matService.selectByMatnr(data.getItemCode());
            if(m == null){
                m = new Mat();
                //m.setCreateTime(jsonObject.getDate("createDate"));
                matMapping(data,m);
                matService.insert(m);
            }else {
                matMapping(data,m);
                EntityWrapper<Mat> wrapper = new EntityWrapper<>();
                wrapper.eq("matnr",m.getMatnr());
                matService.update(m,wrapper);
            }
        });
    }
 
    /*
    映射mat和物料档案信息字段
     */
    private void matMapping(MaterialInfo data, Mat m){
        //
        m.setCreateTime((data.getMdate()));
        //修改时间 -- 更新时间
        m.setUpdateTime(new Date());
        //商品编码 -- 物料编码
        m.setMatnr(data.getItemCode());
        //商品名称 -- 物料名称
        m.setMaktx(data.getItemName());
        //规格 -- 规格
        m.setSpecs(data.getStd());
        //型号 -- 材质
        m.setModel(data.getMaterial());
        //品牌 -- 品牌
        m.setBrand(data.getBrand());
        //备注 --备注
        m.setMemo(data.getNote());
        //单位 -- 主单位
        m.setUnit(data.getUnitName());
        //品项数 -- 辅单位
        m.setItemNum(data.getAssUnitName());
        //单位量 -- 主辅关系
        m.setUnits(data.getRate() == null ? null : data.getRate().doubleValue());
        //长度 -- 宽
        m.setLength(data.getWidth() == null ? null : data.getWidth().doubleValue());
        //体积 -- 厚
        m.setVolume(data.getThickness() == null ? null : data.getThickness().doubleValue());
 
    }
}