作者 钟来

plc004指令控制返回

... ... @@ -10,6 +10,8 @@ import com.zhonglai.luhui.device.analysis.dto.MessageCodeType;
public class ClienConnectionImpl implements ClienConnection {
private Message message = new Message(MessageCode.DEFAULT_FAIL_CODE,"控制失败,请稍后重试!");
private byte[] commd;
@Override
public void close() {
this.message.setCode(MessageCode.DEFAULT_FAIL_CODE);
... ... @@ -44,4 +46,12 @@ public class ClienConnectionImpl implements ClienConnection {
this.message.setMessage(message);
return this;
}
public byte[] getCommd() {
return commd;
}
public void setCommd(byte[] commd) {
this.commd = commd;
}
}
... ...
... ... @@ -149,10 +149,12 @@ public abstract class ThingsModelItemBase<T> implements ThingsModelBase<T>
private Integer is_save_log;
/** 模型类别(1-属性,2-功能,3-事件) */
private Integer mode_type;
/** 模型类别(1-属性,2-功能,3-事件) */
/** 对应配置属性名称集合(英文逗号分割) */
private String config_names;
/** 物模型id */
private Integer mode_id;
/** 页面展示类型 */
private String view_type;
public void conversionThingsModel(IotThingsModel thingsModel)
{
id = thingsModel.getIdentifier();
... ... @@ -164,6 +166,7 @@ public abstract class ThingsModelItemBase<T> implements ThingsModelBase<T>
mode_type = thingsModel.getType();
config_names = thingsModel.getConfig_names();
mode_id = thingsModel.getModel_id();
view_type = thingsModel.getView_type();
}
}
... ...
... ... @@ -176,9 +176,38 @@ public class IotDeviceController extends BaseController
if(iotDevice.getCompletion_auth()==1)
{
String name= "";
for (int i=0;i<sts.length;i++)
{
sts[i] = "/"+iotProduct.getRole_id()+"/"+iotProduct.getMqtt_username()+"/"+iotDevice.getClient_id()+"/"+iotDevice.getPayload_type()+"/"+sts[i];
name=sts[i]+": ";
switch (sts[i].toUpperCase())
{
case "ALL_POST":
name+="【终端发布】全量上报数据"+": ";
break;
case "ADD_POST":
name+="【终端发布】增量上报数据"+": ";
break;
case "PUT_REQ":
name+="【终端发布】写数据的执行结果"+": ";
break;
case "GET":
name+="【终端发布】获取数据"+": ";
break;
case "READ_REQ":
name+="【终端发布】读数据的执行结果"+": ";
break;
case "PUT":
name+="【终端订阅】写数据"+": ";
break;
case "GET_REQ":
name+="【终端订阅】获取数据的返回结果"+": ";
break;
case "READ":
name+="【终端订阅】读数据"+": ";
break;
}
sts[i] = name+"/"+iotProduct.getRole_id()+"/"+iotProduct.getMqtt_username()+"/"+iotDevice.getClient_id()+"/"+iotDevice.getPayload_type()+"/"+sts[i];
}
}
... ...
... ... @@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletResponse;
import com.google.gson.JsonObject;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.dao.service.PublicService;
import com.zhonglai.luhui.device.domain.IotDevice;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
... ... @@ -120,6 +121,18 @@ public class IotProductController extends BaseController
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Integer[] ids)
{
for (Integer id:ids)
{
IotDevice iotDevice = new IotDevice();
iotDevice.setProduct_id(id);
Long st = publicService.getObjectListTotle(iotDevice,null);
if(st>0)
{
IotProduct iotProduct = IotProductService.selectIotProductById(id);
return AjaxResult.error("产品"+iotProduct.getProduct_name()+"下存在设备,无法删除");
}
}
return toAjax(IotProductService.deleteIotProductByIds(ids));
}
... ...
... ... @@ -3,6 +3,8 @@ package com.zhonglai.luhui.device.protocol.plc004.analysis;
import com.google.gson.JsonObject;
import com.ruoyi.common.utils.GsonConstructor;
import com.ruoyi.common.utils.StringUtils;
import com.zhonglai.luhui.device.analysis.comm.clien.ClienConnection;
import com.zhonglai.luhui.device.analysis.comm.clien.impl.ClienConnectionImpl;
import com.zhonglai.luhui.device.analysis.comm.dto.ApiClientRePlyDto;
import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
import com.zhonglai.luhui.device.analysis.dto.Message;
... ... @@ -13,6 +15,7 @@ import com.zhonglai.luhui.device.protocol.factory.analysis.ProtocolParserFactory
import com.zhonglai.luhui.device.protocol.factory.analysis.topic.*;
import com.zhonglai.luhui.device.protocol.factory.config.DeviceCach;
import com.zhonglai.luhui.device.protocol.factory.config.ProductPayloadModelNumberCach;
import com.zhonglai.luhui.device.protocol.factory.control.DeviceCommandListenService;
import com.zhonglai.luhui.device.protocol.factory.dto.AnalysisResult;
import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceHostDto;
... ... @@ -34,15 +37,29 @@ public class PLC004ProtocolParserFactoryImpl implements ProtocolParserFactory<by
case "ONLINE":
return new Online().analysisPayload(payload);
case "ADD_POST":
return new AddPost().analysisPayload(toformatPayLoad(topic.getClientid(),payload));
return new AddPost().analysisPayload(toformatPayLoad(topic.getClientid(),GsonConstructor.get().fromJson(new String(payload),JsonObject.class)));
case "PUT_REQ":
JsonObject data = null;
if(DeviceCommandListenService.hasClienConnection(topic.getClientid()))
{
ClienConnection clienConnection = DeviceCommandListenService.getClienConnection(topic.getClientid());
if(null != clienConnection && clienConnection instanceof ClienConnectionImpl)
{
ClienConnectionImpl clienConnectionImpl = (ClienConnectionImpl) clienConnection;
if(null != clienConnectionImpl.getCommd())
{
data = GsonConstructor.get().fromJson(toformatPayLoad(topic.getClientid(),GsonConstructor.get().fromJson(new String(clienConnectionImpl.getCommd()),JsonObject.class)),JsonObject.class);
}
}
}
JsonObject jsonObject = GsonConstructor.get().fromJson(new String(payload),JsonObject.class);
return new AnalysisResult(false, false, null, new ApiClientRePlyDto() {
return new AnalysisResult(false, true, data, new ApiClientRePlyDto() {
@Override
public void setReplyMessage(Message message) {
if(jsonObject.has("result") && "1".equals(jsonObject.get("result").getAsString()))
{
message.setCode(MessageCode.DEFAULT_SUCCESS_CODE);
message.setMessage("操作成功");
}
}
});
... ... @@ -51,14 +68,16 @@ public class PLC004ProtocolParserFactoryImpl implements ProtocolParserFactory<by
}
}
private String toformatPayLoad(String clientid,byte[] payload)
private String toformatPayLoad(String clientid, JsonObject jsonObject)
{
JsonObject jsonObject = GsonConstructor.get().fromJson(new String(payload),JsonObject.class);
ParserDeviceHostDto parserDeviceHostDto = DeviceCach.getDeviceHost(clientid);
if(null != parserDeviceHostDto && null != parserDeviceHostDto.getIotProduct())
{
Integer iotProductid = parserDeviceHostDto.getIotProduct().getId();
if(!ProductPayloadModelNumberCach.hasProduct(iotProductid))
{
return jsonObject.toString();
}
JsonObject rj = new JsonObject();
for (String key : jsonObject.keySet())
{
... ...
... ... @@ -40,4 +40,9 @@ public class ProductPayloadModelNumberCach {
productPayloadModelNumber.remove(model);
}
}
public static boolean hasProduct(Integer product_id)
{
return map.containsKey(product_id);
}
}
... ...
... ... @@ -148,8 +148,9 @@ public class DeviceCommandListenService implements RocketMQReplyListener<Message
Topic topic = noticeMessageDomain.getTopic();
//设置通知渠道
ClienConnection clienConnection = new ClienConnectionImpl();
ClienConnectionImpl clienConnection = new ClienConnectionImpl();
log.info("设置通知渠道 {} {}",topic.getClientid(),clienConnection);
clienConnection.setCommd(noticeMessageDomain.getCommd());
clienConnectionMap.put(topic.getClientid(),clienConnection);
clienNoticeServiceFactory.sendMessage(noticeMessageDomain);
synchronized(clienConnection)
... ... @@ -166,7 +167,7 @@ public class DeviceCommandListenService implements RocketMQReplyListener<Message
return message;
}
public ClienConnection getClienConnection(String clientid)
public static ClienConnection getClienConnection(String clientid)
{
return clienConnectionMap.get(clientid);
}
... ...
... ... @@ -29,7 +29,7 @@ mqtt:
client:
#客户端操作时间
operationTime: 10
productids: 13
productids: 30
#rocketmq配置信息
rocketmq:
... ...