From 63c6a6e9557d6a45418147565b2617bfb818921f Mon Sep 17 00:00:00 2001 From: jun Date: Mon, 3 Jun 2024 12:50:46 +0800 Subject: [PATCH] =?UTF-8?q?OPCLink=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/busi/IWriteOPCEquipmentService.java | 13 ++-- .../controller/opc/MesOpcLinkController.java | 57 +++++++++++++++++ .../equiplog/WriteOPCEquipmentServiceImpl.java | 74 ++++++++++++++++++++-- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 13 +++- 4 files changed, 145 insertions(+), 12 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/MesOpcLinkController.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteOPCEquipmentService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteOPCEquipmentService.java index b3cc547..4c08b1a 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteOPCEquipmentService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteOPCEquipmentService.java @@ -1,9 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; -import cn.estsh.i3plus.pojo.base.bean.ListPager; -import cn.estsh.i3plus.pojo.base.common.Pager; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel; +import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkReturnModel; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.ApiOperation; @@ -25,4 +23,11 @@ public interface IWriteOPCEquipmentService { @ApiOperation(value = "writeVariableHttp") String writeVariableHttp(String equipmentId,String channel,String clientHandle,String v, String wsUrl)throws Exception; + @ApiOperation(value = "写值") + MesOpcLinkReturnModel writeVariable(MesOpcLinkModel mesOpcLinkModel); + + @ApiOperation(value = "读取") + MesOpcLinkReturnModel readVariable(MesOpcLinkModel mesOpcLinkModel); + + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/MesOpcLinkController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/MesOpcLinkController.java new file mode 100644 index 0000000..effbfbe --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/MesOpcLinkController.java @@ -0,0 +1,57 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.opc; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IWriteOPCEquipmentService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description :opc + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/3 10:24 + * @Modify: + **/ +@RestController +@Api(tags = "opc") +@RequestMapping(MesCommonConstant.MES_YANFEN + "/opc") +@Slf4j +public class MesOpcLinkController { + + @Autowired + private IWriteOPCEquipmentService iWriteOPCEquipmentService; + + @PostMapping("/write-variable") + @ApiOperation(value = "写值") + public ResultBean writeVariable(MesOpcLinkModel mesOpcLinkModel) { + try { + return ResultBean.success("执行成功").setResultObject(iWriteOPCEquipmentService.writeVariable(mesOpcLinkModel)); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping("/read-variable") + @ApiOperation(value = "读值") + public ResultBean readVariable(MesOpcLinkModel mesOpcLinkModel) { + try { + return ResultBean.success("执行成功").setResultObject(iWriteOPCEquipmentService.readVariable(mesOpcLinkModel)); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/WriteOPCEquipmentServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/WriteOPCEquipmentServiceImpl.java index c735cef..b108f55 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/WriteOPCEquipmentServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/WriteOPCEquipmentServiceImpl.java @@ -1,19 +1,30 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IWriteOPCEquipmentService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; import cn.estsh.i3plus.mes.pcn.util.datatable.DataColumnCollection; +import cn.estsh.i3plus.platform.common.tool.HttpClientTool; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.WmsEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; +import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel; +import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkReturnModel; import cn.estsh.impp.framework.boot.exception.ImppBusiException; - +import cn.estsh.impp.framework.boot.util.ResultBean; import cn.hutool.json.XML; import com.alibaba.excel.util.StringUtils; - -import cn.estsh.impp.framework.boot.util.ResultBean; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @@ -21,8 +32,10 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; /** * @Description : WriteOPCEquipmentServiceImpl @@ -33,6 +46,10 @@ import java.util.Map; @Slf4j @Service("WriteOPCEquipmentServiceImpl") public class WriteOPCEquipmentServiceImpl implements IWriteOPCEquipmentService { + + @Autowired + private IConfigService configService; + @Override public ResultBean doOPCEquipment(List> listData,String xmlString) { @@ -111,6 +128,53 @@ public class WriteOPCEquipmentServiceImpl implements IWriteOPCEquipmentService { return s; } + + @Override + public MesOpcLinkReturnModel writeVariable(MesOpcLinkModel mesOpcLinkModel) { + MesConfig mesConfigByCfgCode = configService.getMesConfigByCfgCode(MesPcnExtConstWords.OPC_LINK_URL); + if (Objects.isNull(mesConfigByCfgCode) || StringUtil.isEmpty(mesConfigByCfgCode.getCfgValue())) { + MesPcnException.throwFlowException("系统参数【%s】未维护",MesPcnExtConstWords.OPC_LINK_URL); + } + String requestUrl = mesConfigByCfgCode.getCfgValue() + MesPcnExtConstWords.OPC_WRITE_VARIABLE; + Map params = new HashMap<>(); + params.put(MesPcnExtConstWords.VALUE, mesOpcLinkModel.getValue()); + params.put(MesPcnExtConstWords.CLIENT_HANDLE, mesOpcLinkModel.getClientHandle()); + params.put(MesPcnExtConstWords.CHANNEL, mesOpcLinkModel.getChannel()); + params.put(MesPcnExtConstWords.EQUIPMENT_ID, mesOpcLinkModel.getEquipmentId()); + String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, requestUrl, params, null, null); + MesOpcLinkReturnModel returnModel = null; + if (!StringUtils.isEmpty(data)) { + returnModel = JsonUtilTool.decode(data, MesOpcLinkReturnModel.class); + } else { + log.error("HTTP[{}]调用opcLink写值接口失败", requestUrl); + } + + return returnModel; + } + + @Override + public MesOpcLinkReturnModel readVariable(MesOpcLinkModel mesOpcLinkModel) { + MesConfig mesConfigByCfgCode = configService.getMesConfigByCfgCode(MesPcnExtConstWords.OPC_LINK_URL); + if (Objects.isNull(mesConfigByCfgCode) || StringUtil.isEmpty(mesConfigByCfgCode.getCfgValue())) { + MesPcnException.throwFlowException("系统参数【%s】未维护",MesPcnExtConstWords.OPC_LINK_URL); + } + String requestUrl = mesConfigByCfgCode.getCfgValue() + MesPcnExtConstWords.OPC_READ_VARIABLE; + Map params = new HashMap<>(); + params.put(MesPcnExtConstWords.VALUE, mesOpcLinkModel.getValue()); + params.put(MesPcnExtConstWords.CLIENT_HANDLE, mesOpcLinkModel.getClientHandle()); + params.put(MesPcnExtConstWords.CHANNEL, mesOpcLinkModel.getChannel()); + params.put(MesPcnExtConstWords.EQUIPMENT_ID, mesOpcLinkModel.getEquipmentId()); + String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, requestUrl, params, null, null); + MesOpcLinkReturnModel returnModel = null; + if (!StringUtils.isEmpty(data)) { + returnModel = JsonUtilTool.decode(data, MesOpcLinkReturnModel.class); + } else { + log.error("HTTP[{}]调用opcLink读取接口失败", requestUrl); + } + + return returnModel; + } + private String convertListToXml(DataColumnCollection newTable, List> listData, String rootNodeName, String nodeName, String rootClassName, String nodeClassName) { if (listData == null || listData.size() == 0) { diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index ec90c84..7df7e6f 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -166,7 +166,14 @@ public class MesPcnExtConstWords { // 上下文: 非排序产品加工规则信息 public static final String PROD_RULE_NOSORT_DATA_CONTEXT = "PROD_RULE_NOSORT_DATA_CONTEXT"; - - - + /*** + * OPC + */ + public static final String OPC_LINK_URL="OPC_LINK_URL"; + public static final String VALUE="value"; + public static final String CLIENT_HANDLE="clientHandle"; + public static final String CHANNEL="channel"; + public static final String EQUIPMENT_ID="equipmentId"; + public static final String OPC_WRITE_VARIABLE="/api/OPCService/WriteVariable"; + public static final String OPC_READ_VARIABLE="/api/OPCService/ReadVariable"; }