OPCLink调用

tags/yfai-pcn-ext-v1.0
jun 12 months ago
parent ed187a2a84
commit 63c6a6e955

@ -1,9 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi; package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel;
import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkReturnModel;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -25,4 +23,11 @@ public interface IWriteOPCEquipmentService {
@ApiOperation(value = "writeVariableHttp") @ApiOperation(value = "writeVariableHttp")
String writeVariableHttp(String equipmentId,String channel,String clientHandle,String v, String wsUrl)throws Exception; 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);
} }

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

@ -1,19 +1,30 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog; 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.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.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.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.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.hutool.json.XML; import cn.hutool.json.XML;
import com.alibaba.excel.util.StringUtils; import com.alibaba.excel.util.StringUtils;
import cn.estsh.impp.framework.boot.util.ResultBean;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; 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.stereotype.Service;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
@ -21,8 +32,10 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* @Description : WriteOPCEquipmentServiceImpl * @Description : WriteOPCEquipmentServiceImpl
@ -33,6 +46,10 @@ import java.util.Map;
@Slf4j @Slf4j
@Service("WriteOPCEquipmentServiceImpl") @Service("WriteOPCEquipmentServiceImpl")
public class WriteOPCEquipmentServiceImpl implements IWriteOPCEquipmentService { public class WriteOPCEquipmentServiceImpl implements IWriteOPCEquipmentService {
@Autowired
private IConfigService configService;
@Override @Override
public ResultBean doOPCEquipment(List<Map<String, Object>> listData,String xmlString) { public ResultBean doOPCEquipment(List<Map<String, Object>> listData,String xmlString) {
@ -111,6 +128,53 @@ public class WriteOPCEquipmentServiceImpl implements IWriteOPCEquipmentService {
return s; 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<String, String> 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<String, String> 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<Map<String, Object>> listData, String rootNodeName, String nodeName, private String convertListToXml(DataColumnCollection newTable, List<Map<String, Object>> listData, String rootNodeName, String nodeName,
String rootClassName, String nodeClassName) { String rootClassName, String nodeClassName) {
if (listData == null || listData.size() == 0) { if (listData == null || listData.size() == 0) {

@ -166,7 +166,14 @@ public class MesPcnExtConstWords {
// 上下文: 非排序产品加工规则信息 // 上下文: 非排序产品加工规则信息
public static final String PROD_RULE_NOSORT_DATA_CONTEXT = "PROD_RULE_NOSORT_DATA_CONTEXT"; 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";
} }

Loading…
Cancel
Save