123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- package com.warewms.hailiang.MES.impl;
- import cn.hutool.extra.spring.SpringUtil;
- import cn.hutool.http.HttpRequest;
- import cn.hutool.http.HttpResponse;
- import cn.hutool.http.HttpUtil;
- import cn.hutool.json.JSONObject;
- import cn.hutool.json.JSONUtil;
- import com.github.rholder.retry.*;
- import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
- import com.warewms.common.annotation.Log;
- import com.warewms.common.exception.ServiceException;
- import com.warewms.hailiang.MES.MesService;
- import com.warewms.hailiang.config.DeviceMessageSocket;
- import com.warewms.hailiang.domain.Device;
- import com.warewms.hailiang.domain.DeviceLog;
- import com.warewms.hailiang.enums.DaSanPanPlcEnum;
- import com.warewms.hailiang.enums.DeviceNameEnum;
- import com.warewms.hailiang.init.PlcConnectServiceRunner;
- import io.swagger.util.Json;
- import lombok.extern.slf4j.Slf4j;
- import org.jetbrains.annotations.Nullable;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
- import org.springframework.stereotype.Service;
- import java.util.concurrent.ExecutionException;
- import java.util.concurrent.TimeUnit;
- /**
- * Created with IntelliJ IDEA.
- *
- * @author: liuzhifei
- * Date: 2023/8/9
- * Time: 11:20
- * To change this template use File | Settings | File Templates.
- * Description: MES对接实现类
- **/
- @Service
- @Slf4j
- public class MesServiceImpl implements MesService {
- @Value("${MES.address}")
- private String MESAddress;
- @Value("${MES.getBatchNoUrl}")
- private String getBatchNoUrl;
- @Value("${MES.getBatchNoResultUrl}")
- private String getBatchNoResultURl;
- @Value("${MES.processFeedbackUrl}")
- private String processFeedbackUrl;
- @Value("${MES.sanPanGetBatchNoUrl}")
- private String sanPanGetBatchNoUrl;
- @Autowired
- private DeviceMessageSocket deviceMessageSocket;
- @Autowired
- private ThreadPoolTaskExecutor threadPoolTaskExecutor;
- @Autowired
- private PlcConnectServiceRunner plcConnectServiceRunner;
- @Override
- public String getBatchNoByWeight(Double weight, String prodLine) {
- JSONObject entries = new JSONObject();
- entries.set("Weight", weight);
- entries.set("prodLine", prodLine);
- log.info("调用MES系统拿铜管批次号,body:{}", entries);
- String body = null;
- try {
- body = HttpRequest.post(MESAddress + getBatchNoUrl).body(entries.toString()).execute().body();
- } catch (Exception e) {
- log.error("调用MES系统拿铜管批次号失败,msg:{}", e.getMessage());
- return invokeAlarms("称重辊道PLC", "获取MES铜管批次号失败!"+e.getMessage());
- }
- JSONObject jsonObject = JSONUtil.parseObj(body);
- if ("false".equals(jsonObject.get("ret").toString())) {
- log.error("调用MES系统拿铜管批次号失败,msg:{}", jsonObject.get("message"));
- return invokeAlarms("称重辊道PLC", "获取MES铜管批次号失败!"+jsonObject.get("message"));
- }
- return JSONUtil.parseObj(body).get("BatchNo").toString();
- }
- @Nullable
- private String invokeAlarms(String deviceName, String content) {
- DeviceLog deviceLog = new DeviceLog("", deviceName, content, "2");
- JSONObject jsonObject = new JSONObject();
- jsonObject.set("type", "notify");
- jsonObject.set("content", JSONUtil.parse(deviceLog));
- deviceMessageSocket.sendAllMessage(jsonObject.toString());
- return null;
- }
- @Override
- public JSONObject getBatchNoResult(String batchNo, int result) {
- JSONObject entries = new JSONObject();
- entries.set("BatchNo", batchNo);
- entries.set("type", result);
- String body = HttpRequest.post(MESAddress + getBatchNoResultURl).body(entries.toString()).execute().body();
- JSONObject jsonObject = JSONUtil.parseObj(body);
- if ("false".equals(jsonObject.get("ret").toString())) {
- retryTofeedback(MESAddress + processFeedbackUrl, entries, "BatchNoResult");
- return null;
- }
- return jsonObject;
- }
- @Override
- public JSONObject processFeedback(String batchNo, String type) {
- JSONObject entries = new JSONObject();
- entries.set("BatchNo", batchNo);
- entries.set("Type", type);
- entries.set("LineNo", "Z1");
- String body = HttpRequest.post(MESAddress + processFeedbackUrl).body(entries.toString()).execute().body();
- JSONObject jsonObject = JSONUtil.parseObj(body);
- if ("false".equals(jsonObject.get("ret"))) {
- retryTofeedback(MESAddress + processFeedbackUrl, entries, "process");
- return null;
- }
- return jsonObject;
- }
- @Override
- public String bindLotNo(String deviceId,String lotNot) {
- JSONObject entries = null;
- String body = null;
- try {
- log.info("散盘产出设备:{}",deviceId);
- entries = new JSONObject();
- entries.set("StockNo", lotNot);
- entries.set("UnitNo",deviceId );
- entries.set("LineNo", "Z1");
- body = HttpRequest.post( MESAddress+ sanPanGetBatchNoUrl).body(entries.toString()).execute().body();
- JSONObject jsonObject = JSONUtil.parseObj(body);
- if ("0".equals(jsonObject.get("RES_FLAG").toString())) {
- retryTofeedback(MESAddress + sanPanGetBatchNoUrl, entries, "sanpan");
- }
- return JSONUtil.parseObj(jsonObject.get("Result")).get("mat_no").toString();
- }catch (Exception e){
- log.error("大散盘绑定批次号发生错误,json:{},body:{},msg",entries,body,e);
- return null;
- }
- }
- /**
- * MES反馈重试
- * @param URl
- * @param body
- * @param type
- */
- private void retryTofeedback(String URl, JSONObject body, String type) {
- threadPoolTaskExecutor.execute(() -> {
- Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
- .retryIfResult(Boolean.FALSE::equals)
- .retryIfExceptionOfType(Exception.class)
- .withStopStrategy(StopStrategies.stopAfterAttempt(3))
- .withWaitStrategy(WaitStrategies.fixedWait(5, TimeUnit.SECONDS))
- .build();
- try {
- retryer.call(() -> {
- log.info("MES对接进行重试,url:{},body{}", URl, body);
- String data = HttpRequest.post(URl).body(body.toString()).execute().body();
- JSONObject jsonObject = JSONUtil.parseObj(data);
- if ("process".equals(type)) {
- if ("false".equals(jsonObject.get("ret").toString())) {
- log.error("工序读码成功反馈失败,msg:{}", jsonObject.get("message"));
- invokeAlarms("1".equals(type) ? "铣面工序" : "轧制工序", "工序读码成功反馈MES失败!"+ jsonObject.get("message"));
- return false;
- }
- }
- if ("BatchNoResult".equals(type)){
- if ("false".equals(jsonObject.get("ret").toString())) {
- log.error("喷码成功反馈MES失败,msg:{}", jsonObject.get("message"));
- invokeAlarms("喷码器", "喷码成功反馈MES失败!"+ jsonObject.get("message"));
- return false;
- }
- }
- if ("sanpan".equals(type)){
- if ("false".equals(jsonObject.get("ret").toString())) {
- log.error("散盘托盘号反馈MES失败,msg:{}", jsonObject.get("message"));
- invokeAlarms("大散盘", "获取批次号失败!"+ jsonObject.get("message"));
- return false;
- }
- }
- return true;
- });
- } catch (RetryException | ExecutionException e) {
- e.printStackTrace();
- }
- });
- }
- }
|