自动化立体仓库 - WMS系统
#
zwl
2023-10-07 ffe47d904591be8cae513a75ac899dbf720a6e71
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
package com.zy.asrs.task.handler;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
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 org.springframework.util.DigestUtils;
 
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Slf4j
@Service
public class MesMatSyncHandler extends AbstractHandler<String> {
 
    @Value("${mes.mat-sync.url}")
    private String url;
 
    @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;
        log.info("url:" + url + path);
        JSONObject jsonObject = doGetJsonData();
 
        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(
                "商品信息同步",
                url + path,
                null,
                "127.0.0.1",
                null,
                response,
                success
        );
    }
 
    /*
    发起一个doGet请求
     */
    private JSONObject doGetJsonData() throws IOException {
 
        return JSON.parseObject( new HttpHandler.Builder()
                .setUri(url)
                .setPath(path)
                .setParams(MesSyncUtil.getRequestParamMap())
                .build()
                .doGet());
    }
 
    /*
    插入或更改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.setUpdateTime(data.getMdate());
        //商品编码 -- 物料编码
        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());
 
    }
}