src/main/java/com/zy/asrs/task/MesMatSyncScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/handler/MesMatSyncHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/handler/MesPakinHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/handler/MesPakoutHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/MesSyncUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/utils/HttpHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/task/MesMatSyncScheduler.java
@@ -19,7 +19,8 @@ @Autowired MesMatSyncHandler handler; //@Scheduled(cron = "0/30 * * * * ?") @Scheduled(cron = "0/30 * * * * ?") //@Scheduled(cron = "0 0/2 * * * ?") private void execute() { ReturnT<String> result = null; src/main/java/com/zy/asrs/task/handler/MesMatSyncHandler.java
@@ -3,6 +3,7 @@ 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; @@ -18,14 +19,17 @@ 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.url}") private String url; @Value("${mes.mat-sync.uri}") private String uri; @Value("${mes.mat-sync.path}") private String path; @@ -39,8 +43,8 @@ @Transactional public ReturnT<String> start() throws IOException { boolean success = true; log.info("url:" + url + path); JSONObject jsonObject = doGetJsonData(); JSONObject jsonObject = doPostJsonData(); log.info("MesMatSync jsonObject: " + jsonObject.toJSONString()); int code = jsonObject.getInteger("code"); @@ -61,7 +65,7 @@ private void saveApiLog(String response, boolean success) { apiLogService.save( "商品信息同步", url + path, uri + path, null, "127.0.0.1", null, @@ -71,16 +75,24 @@ } /* 发起一个doGet请求 发起一个请求来获取商品信息 */ private JSONObject doGetJsonData() throws IOException { 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(url) .setUri(uri) .setPath(path) .setParams(MesSyncUtil.getRequestParamMap()) .setParams(requestParamMap) .build() .doGet()); .doPostWithParam()); } /* @@ -112,7 +124,7 @@ // m.setCreateTime((data.getMdate())); //修改时间 -- 更新时间 m.setUpdateTime(data.getMdate()); m.setUpdateTime(new Date()); //商品编码 -- 物料编码 m.setMatnr(data.getItemCode()); //商品名称 -- 物料名称 src/main/java/com/zy/asrs/task/handler/MesPakinHandler.java
@@ -27,12 +27,13 @@ import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @Slf4j @Service public class MesPakinHandler extends AbstractHandler<String> { @Value("${mes.pakin.url}") private String url; @Value("${mes.pakin.uri}") private String uri; @Value("${mes.pakin.path}") private String path; @@ -55,10 +56,10 @@ @Transactional public ReturnT<String> start() { boolean success = true; log.info("url:" + url + path); log.info("url:" + uri + path); JSONObject jsonObject = null; try { jsonObject = doGetJsonData(); jsonObject = doPostJsonData(); } catch (IOException e) { success = false; e.printStackTrace(); @@ -86,7 +87,7 @@ private void saveApiLog(String response, boolean success){ apiLogService.save( "生成入库单据", url + path, uri + path, null, "127.0.0.1", null, @@ -96,15 +97,20 @@ } /* 发起一个doGet请求 发起一个请求来获取未获取过的单据信息 */ private JSONObject doGetJsonData() throws IOException { private JSONObject doPostJsonData() throws IOException { Map<String, Object> requestParamMap = MesSyncUtil.getRequestParamMap(); //获取未获取过的所有单据 requestParamMap.put("type",0); return JSON.parseObject( new HttpHandler.Builder() .setUri(url) .setUri(uri) .setPath(path) .setParams(MesSyncUtil.getRequestParamMap()) .setParams(requestParamMap) .build() .doGet()); .doPostWithParam()); } /* @@ -164,8 +170,8 @@ o.setOrderTime(jsonData.getString("orderTime")); //单据类型 DocType docType = docTypeService.selectOrAdd(jsonData.getString("orderType"), Boolean.TRUE); //入库库房名称(立体库名称) jsonData.getString("storage"); //物流名称 -- 入库库房名称(立体库名称) o.setShipName(jsonData.getString("storage")); o.setDocType(docType.getDocId()); o.setCreateTime(new Date()); o.setUpdateTime(new Date()); src/main/java/com/zy/asrs/task/handler/MesPakoutHandler.java
@@ -1,37 +1,215 @@ 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.core.common.SnowflakeIdWorker; import com.core.exception.CoolException; import com.zy.asrs.entity.DiaphragmInfo; import com.zy.asrs.entity.DocType; import com.zy.asrs.entity.Order; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.DocTypeService; import com.zy.asrs.service.OrderDetlService; import com.zy.asrs.service.OrderService; 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.util.Date; import java.util.List; import java.util.Map; @Slf4j @Service public class MesPakoutHandler extends AbstractHandler<String> { @Value("${mes.pakin.url}") private String url; @Value("${mes.pakout.uri}") private String uri; @Value("${mes.pakin.path}") @Value("${mes.pakout.path}") private String path; @Autowired private DocTypeService docTypeService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; @Autowired private OrderService orderService; @Autowired private ApiLogService apiLogService; @Autowired private OrderDetlService orderDetlService; public ReturnT<String> start() throws IOException { @Transactional public ReturnT<String> start() { boolean success = true; log.info("url:" + uri + path); JSONObject jsonObject = null; try { jsonObject = doPostJsonData(); } catch (IOException e) { success = false; e.printStackTrace(); } int code = jsonObject.getInteger("code"); if(code == 200){ JSONObject jsonData = jsonObject.getJSONObject("data"); String orderNo = jsonData.getString("orderNo"); Order o = insertOrder(jsonData,orderNo); insertOrUpdateOrderDetl(jsonData, o); }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(); //获取未获取过的所有单据 requestParamMap.put("type",0); return JSON.parseObject( new HttpHandler.Builder() .setUri(uri) .setPath(path) .setParams(requestParamMap) .build() .doPostWithParam()); } /* 新增order信息 */ private Order insertOrder(JSONObject jsonData, String orderNo){ Order o = orderService.selectByNo(orderNo); if (!Cools.isEmpty(o)) { throw new CoolException(jsonData.getString("orderNo") + "单据已存在,请勿重复提交"); } o = orderMapping(jsonData); if (!orderService.insert(o)) { throw new CoolException("生成单据主档失败,请联系管理员"); } return o; } /* 根据orderNo、matnr、batch,新增或者更改orderDetl信息 */ private void insertOrUpdateOrderDetl(JSONObject jsonData, Order o){ List<DiaphragmInfo> diaphragmInfoList = JSONObject.parseArray(jsonData.getString("orderDetails"),DiaphragmInfo.class); diaphragmInfoList.forEach(d -> { EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>(); wrapper.eq("order_no",o.getOrderNo()).eq("matnr",d.getItemCode()).eq("batch",d.getBatchNo()); OrderDetl od = orderDetlService.selectOne(wrapper); if(od == null){ od = new OrderDetl(); od.setOrderNo(o.getOrderNo()); od.setOrderId(o.getId()); orderDetlMapping(d,od); orderDetlService.insert(od); }else { od.setQty(od.getQty() + d.getQuantity().doubleValue()); od.setAnfme(od.getAnfme() + d.getAssQuantity().doubleValue()); od.setUpdateTime(new Date()); orderDetlService.updateById(od); } }); } /* 映射Order类和jsonData的字段 */ private Order orderMapping(JSONObject jsonData){ Order o = new Order(); o.setStatus(1); //设置订单状态 --- 初始化状态 o.setSettle(0L); //uuid o.setUuid(String.valueOf(snowflakeIdWorker.nextId())); //单据编号 o.setOrderNo(jsonData.getString("orderNo")); //单据时间 o.setOrderTime(jsonData.getString("orderTime")); //单据类型 DocType docType = docTypeService.selectOrAdd(jsonData.getString("orderType"), Boolean.TRUE); //物流名称 -- 入库库房名称(立体库名称) o.setShipName(jsonData.getString("storage")); o.setDocType(docType.getDocId()); o.setCreateTime(new Date()); o.setUpdateTime(new Date()); return o; } /* 映射OrderDetl与隔膜信息类的字段关系 */ private void orderDetlMapping(DiaphragmInfo d, OrderDetl od){ //批号 -- 生产批号 od.setBatch(d.getBatchNo()); //商品编码 -- 物料编码 od.setMatnr(d.getItemCode()); //商品名称 -- 物料名称 od.setMaktx(d.getItemName()); //数量 -- 数量 od.setAnfme(d.getQuantity() == null ? null : d.getQuantity().doubleValue()); //完成数量 -- 辅数量 od.setQty(d.getAssQuantity() == null ? null : d.getAssQuantity().doubleValue()); //规格 -- 规格/型号 od.setSpecs(d.getStd()); //备注 -- 备注 od.setMemo(d.getNote()); //条形码 -- 条形码 od.setQrCode(d.getBarCode()); //颜色 -- 大卷位置 od.setColor(d.getPosition()); //型号 -- 小卷位置 od.setModel(d.getPosition2()); //品牌 -- 等级 od.setBrand(d.getGrade()); //收卷开始日期 od.setStartDate(d.getStartDate()); //收卷结束日期 od.setEndDate(d.getEndDate()); od.setCreateTime(new Date()); od.setUpdateTime(new Date()); } } src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -45,14 +45,14 @@ @Autowired private DocTypeService docTypeService; @Value("${mes.pakin-sync.url}") private String pakinUrl; @Value("${mes.pakin-sync.uri}") private String pakinUri; @Value("${mes.pakin-sync.path}") private String pakinPath; @Value("${mes.pakout-sync.url}") private String pakoutUrl; @Value("${mes.pakout-sync.uri}") private String pakoutUri; @Value("${mes.pakout-sync.path}") private String pakoutPath; @@ -183,7 +183,7 @@ boolean success = false; try { response = new HttpHandler.Builder() .setUri(pakoutUrl) .setUri(pakoutUri) .setPath(pakoutPath) .setJson(JSON.toJSONString(requestMap)) .build() @@ -198,7 +198,7 @@ // 保存接口日志 apiLogService.save( "成品库出库上报", pakoutUrl + pakoutPath, pakoutUri + pakoutPath, null, "127.0.0.1", JSON.toJSONString(requestMap), @@ -219,7 +219,7 @@ try { response = new HttpHandler.Builder() .setUri(pakinUrl) .setUri(pakinUri) .setPath(pakinPath) .setJson(JSON.toJSONString(requestMap)) .build() @@ -234,7 +234,7 @@ // 保存接口日志 apiLogService.save( "成品库入库上报", pakinUrl + pakinPath, pakinUri + pakinPath, null, "127.0.0.1", JSON.toJSONString(requestMap), @@ -253,6 +253,7 @@ requestMap.put("orderNo",order.getOrderNo()); requestMap.put("orderTime",order.getOrderTime()); requestMap.put("orderType",orderType); requestMap.put("storage",order.getShipName()); List<DiaphragmInfo> diaphragmInfoList = orderDetls.stream().map(od -> { DiaphragmInfo diaphragmInfo = new DiaphragmInfo(); src/main/java/com/zy/asrs/utils/MesSyncUtil.java
@@ -1,5 +1,6 @@ package com.zy.asrs.utils; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.DigestUtils; import java.nio.charset.StandardCharsets; @@ -9,13 +10,20 @@ public class MesSyncUtil { @Value("${mes.appkey}") private static String appkey; public static Map<String,Object> getRequestParamMap(){ Date date = new Date(); String ts = date.getTime() + ""; String key = DigestUtils.md5DigestAsHex(("appkey" + ts).getBytes(StandardCharsets.UTF_8)); String key = DigestUtils.md5DigestAsHex((appkey + ts).getBytes(StandardCharsets.UTF_8)); Map<String,Object> requestParamMap = new HashMap<>(); requestParamMap.put("ts",ts); requestParamMap.put("key",key); return requestParamMap; } public static void main(String[] args) { System.out.println(MesSyncUtil.getRequestParamMap()); } } src/main/java/com/zy/common/utils/HttpHandler.java
@@ -56,6 +56,37 @@ } /** * POST请求执行 并且url带参数请求 * @return the HttpHandler response */ public String doPostWithParam() throws IOException { Request request; Request.Builder headerBuilder = new Request.Builder(); if (headers != null && headers.size()>0){ for (Map.Entry<String, Object> entry : headers.entrySet()){ headerBuilder.addHeader(entry.getKey(), String.valueOf(entry.getValue())); } } if (json == null || "".equals(json)){ FormBody.Builder builder = new FormBody.Builder(); FormBody body = builder.build(); request = headerBuilder .url(paramsToUrl(uri, path, params, https)) .post(body) .build(); } else { RequestBody body = RequestBody.create(MEDIA_TYPE, json); Request.Builder builder = headerBuilder.url((https?"https://":"http://")+uri+path); builder.header("Content-Type", "application/json;charset=UTF-8"); request = builder.post(body).build(); } Call call = getClient(timeout, timeUnit).newCall(request); Response response = call.execute(); return response.body().string(); } /** * POST请求执行 * @return the HttpHandler response */ src/main/resources/application.yml
@@ -62,19 +62,20 @@ limit: 5000 mes: appkey: SX3WMS20230725 mat-sync: url: localhost:8080 path: /test/getMat uri: http://fmis.huashijie.com.cn:8082 path: /api/SX3WMS/Material pakin: url: localhost:8080 path: /test/getOrder uri: http://fmis.huashijie.com.cn:8082 path: /api/SX3WMS/StorageIn pakout: url: localhost:8080 path: /test/getOrder uri: http://fmis.huashijie.com.cn:8082 path: /api/SX3WMS/StorageInCheck pakin-sync: url: localhost:8080 path: /test/syncOrderPakin uri: http://fmis.huashijie.com.cn:8082 path: /api/SX3WMS/StorageOut pakout-sync: url: localhost:8080 path: /test/syncOrderPakout uri: http://fmis.huashijie.com.cn:8082 path: /api/SX3WMS/StorageOutCheck