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 { @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 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 requestParamMap = MesSyncUtil.getRequestParamMap(); Mat mat = matService.selectOne(new EntityWrapper().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 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 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()); } }