diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/bean/common/ConfigAttribute.java b/src/main/java/com/genersoft/iot/vmp/jt1078/bean/common/ConfigAttribute.java index 22a780dfe..26fb32584 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/bean/common/ConfigAttribute.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/bean/common/ConfigAttribute.java @@ -1,8 +1,12 @@ package com.genersoft.iot.vmp.jt1078.bean.common; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) public @interface ConfigAttribute { - int id(); + byte id(); String description(); } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java b/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java index 5b0d30e9f..43f6edfad 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java @@ -17,6 +17,8 @@ public class JT1078Template { private final Random random = new Random(); + private static final String H8104 = "8104"; + private static final String H8106 = "8106"; private static final String H9101 = "9101"; private static final String H9102 = "9102"; private static final String H9201 = "9201"; @@ -32,6 +34,7 @@ public class JT1078Template { private static final String H9306 = "9306"; private static final String H0001 = "0001"; + private static final String H0104 = "0104"; private static final String H1205 = "1205"; /** @@ -255,6 +258,23 @@ public class JT1078Template { return SessionManager.INSTANCE.request(cmd, timeOut); } + /** + * 查询终端参数 + * + * @param devId 设备号 + */ + public String getDeviceConfig(String devId, J8106 j8106, Integer timeOut) { + + Cmd cmd = new Cmd.Builder() + .setDevId(devId) + .setPackageNo(randomInt()) + .setMsgId(H8106) + .setRespId(H0104) + .setRs(j8106) + .build(); + return SessionManager.INSTANCE.request(cmd, timeOut); + } + private Long randomInt() { return (long) random.nextInt(1000) + 1; } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java b/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java similarity index 96% rename from src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java rename to src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java index c65c83e7a..9c29f815d 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java @@ -1,10 +1,9 @@ -package com.genersoft.iot.vmp.jt1078.config; +package com.genersoft.iot.vmp.jt1078.controller; import com.genersoft.iot.vmp.conf.UserSetting; -import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.conf.security.JwtUtils; -import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.jt1078.bean.JTDevice; +import com.genersoft.iot.vmp.jt1078.bean.JTDeviceConfig; import com.genersoft.iot.vmp.jt1078.proc.request.J1205; import com.genersoft.iot.vmp.jt1078.service.Ijt1078Service; import com.genersoft.iot.vmp.service.bean.InviteErrorCode; @@ -25,11 +24,8 @@ import org.springframework.web.context.request.async.DeferredResult; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import javax.sip.InvalidArgumentException; -import javax.sip.SipException; import java.net.MalformedURLException; import java.net.URL; -import java.text.ParseException; import java.util.List; @@ -315,5 +311,14 @@ public class JT1078Controller { service.wiper(deviceId, channelId, command); } + @Operation(summary = "查询终端参数", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "deviceId", description = "设备国标编号", required = true) + @GetMapping("/config") + public void config(String deviceId, String[] params){ + + logger.info("[1078-查询终端参数] deviceId:{}", deviceId); + service.config(deviceId, params, null); + } + } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0104.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0104.java new file mode 100644 index 000000000..b40e1a4a7 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0104.java @@ -0,0 +1,49 @@ +package com.genersoft.iot.vmp.jt1078.proc.request; + +import com.genersoft.iot.vmp.jt1078.annotation.MsgId; +import com.genersoft.iot.vmp.jt1078.bean.JTDevice; +import com.genersoft.iot.vmp.jt1078.proc.Header; +import com.genersoft.iot.vmp.jt1078.proc.response.J8001; +import com.genersoft.iot.vmp.jt1078.proc.response.Rs; +import com.genersoft.iot.vmp.jt1078.service.Ijt1078Service; +import com.genersoft.iot.vmp.jt1078.session.Session; +import io.netty.buffer.ByteBuf; +import org.springframework.context.ApplicationEvent; + +import java.nio.charset.Charset; + +/** + * 查询终端参数应答 + * + */ +@MsgId(id = "0104") +public class J0104 extends Re { + + Integer respNo; + Integer paramLength; + + @Override + protected Rs decode0(ByteBuf buf, Header header, Session session) { + respNo = buf.readUnsignedShort(); + paramLength = (int)buf.readUnsignedByte(); + System.out.println(respNo); + System.out.println(paramLength); + + return null; + } + + @Override + protected Rs handler(Header header, Session session, Ijt1078Service service) { + J8001 j8001 = new J8001(); + j8001.setRespNo(header.getSn()); + j8001.setRespId(header.getMsgId()); + j8001.setResult(J8001.SUCCESS); + return j8001; + } + + @Override + public ApplicationEvent getEvent() { + return null; + } + +} diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J8106.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J8106.java new file mode 100644 index 000000000..72ef761de --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J8106.java @@ -0,0 +1,42 @@ +package com.genersoft.iot.vmp.jt1078.proc.response; + +import com.genersoft.iot.vmp.jt1078.annotation.MsgId; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.util.CharsetUtil; + +import java.util.Arrays; + +/** + * 查询指定终端参数 + */ +@MsgId(id = "8106") +public class J8106 extends Rs { + + private byte[] params; + + @Override + public ByteBuf encode() { + ByteBuf buffer = Unpooled.buffer(); + buffer.writeByte(params.length); + for (int param : params) { + buffer.writeByte(param); + } + return buffer; + } + + public byte[] getParams() { + return params; + } + + public void setParams(byte[] params) { + this.params = params; + } + + @Override + public String toString() { + return "J8106{" + + "params=" + Arrays.toString(params) + + '}'; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java b/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java index 55d0574a3..49fe21c0b 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java @@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.jt1078.service; import com.genersoft.iot.vmp.common.GeneralCallback; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.jt1078.bean.JTDevice; +import com.genersoft.iot.vmp.jt1078.bean.JTDeviceConfig; import com.genersoft.iot.vmp.jt1078.proc.request.J1205; import com.github.pagehelper.PageInfo; @@ -40,4 +41,6 @@ public interface Ijt1078Service { void supplementaryLight(String deviceId, String channelId, String command); void wiper(String deviceId, String channelId, String command); + + void config(String deviceId, String[] params, GeneralCallback callback); } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java index 0fc0e0b4b..b98a60205 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java @@ -8,6 +8,8 @@ import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.jt1078.bean.JTDevice; +import com.genersoft.iot.vmp.jt1078.bean.JTDeviceConfig; +import com.genersoft.iot.vmp.jt1078.bean.common.ConfigAttribute; import com.genersoft.iot.vmp.jt1078.cmd.JT1078Template; import com.genersoft.iot.vmp.jt1078.dao.JTDeviceMapper; import com.genersoft.iot.vmp.jt1078.event.CallbackManager; @@ -35,6 +37,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import java.beans.IntrospectionException; +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -487,4 +494,32 @@ public class jt1078ServiceImpl implements Ijt1078Service { } jt1078Template.ptzWiper(deviceId, j9304, 6); } + + @Override + public void config(String deviceId, String[] params, GeneralCallback callback) { + if (deviceId == null) { + return; + } + if (params == null || params.length == 0) { + return; + } + byte[] paramBytes = new byte[params.length]; + for (int i = 0; i < params.length; i++) { + try { + Field field = JTDeviceConfig.class.getDeclaredField(params[i]); + if (field.isAnnotationPresent(ConfigAttribute.class) ) { + ConfigAttribute configAttribute = field.getAnnotation(ConfigAttribute.class); + byte id = configAttribute.id(); + String description = configAttribute.description(); + System.out.println(description + ": " + id); + paramBytes[i] = configAttribute.id(); + } + } catch (NoSuchFieldException e) { + throw new RuntimeException(e); + } + } + J8106 j8106 = new J8106(); + j8106.setParams(paramBytes); + jt1078Template.getDeviceConfig(deviceId, j8106, 6); + } }