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());
|
|
}
|
}
|