diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTDevice.java b/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTDevice.java index 749313189..925be278d 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTDevice.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTDevice.java @@ -8,6 +8,8 @@ import io.swagger.v3.oas.annotations.media.Schema; @Schema(description = "jt808设备") public class JTDevice { + private int id; + /** * 省域ID */ @@ -69,6 +71,14 @@ public class JTDevice { private Double latitude; + @Schema(description = "创建时间") + private String createTime; + + @Schema(description = "更新时间") + private String updateTime; + + @Schema(description = "状态") + private boolean status; public int getProvinceId() { return provinceId; @@ -149,4 +159,36 @@ public class JTDevice { public void setLatitude(Double latitude) { this.latitude = latitude; } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public boolean isStatus() { + return status; + } + + public void setStatus(boolean status) { + this.status = status; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java b/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java index 75533fdc3..139f010d2 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java @@ -1,15 +1,21 @@ package com.genersoft.iot.vmp.jt1078.config; +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.cmd.JT1078Template; import com.genersoft.iot.vmp.jt1078.proc.response.*; +import com.genersoft.iot.vmp.jt1078.service.Ijt1078Service; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; +import com.github.pagehelper.PageInfo; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; /** * curl http://localhost:18080/api/jt1078/start/live/18864197066/1 @@ -26,6 +32,9 @@ public class JT1078Controller { @Resource JT1078Template jt1078Template; + @Resource + Ijt1078Service service; + /** * jt1078Template 调用示例 */ @@ -47,5 +56,26 @@ public class JT1078Controller { return wvpResult; } + @Operation(summary = "分页查询部标设备", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "page", description = "当前页", required = true) + @Parameter(name = "count", description = "每页查询数量", required = true) + @Parameter(name = "query", description = "查询内容") + @Parameter(name = "online", description = "是否在线") + @GetMapping("/device/list") + public PageInfo getDevices(int page, int count, + @RequestParam(required = false) String query, + @RequestParam(required = false) Boolean online) { + return service.getDeviceList(page, count, query, online); + } + + @Operation(summary = "更新设备信息", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "device", description = "设备", required = true) + @PostMapping("/device/update") + public void updateDevice(JTDevice device){ + assert device.getId() > 0; + assert device.getDeviceId() != null; + service.updateDevice(device); + } + } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/dao/JTDeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/jt1078/dao/JTDeviceMapper.java index 762aa9cc5..c2c70e94a 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/dao/JTDeviceMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/dao/JTDeviceMapper.java @@ -3,6 +3,8 @@ package com.genersoft.iot.vmp.jt1078.dao; import com.genersoft.iot.vmp.jt1078.bean.JTDevice; import org.apache.ibatis.annotations.*; +import java.util.List; + @Mapper public interface JTDeviceMapper { @@ -25,4 +27,23 @@ public interface JTDeviceMapper { "WHERE device_id=#{deviceId}"+ " "}) void updateDevice(JTDevice device); + @Select(value = {" "}) + List getDeviceList(@Param("query") String query, @Param("online") Boolean online); } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0100.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0100.java index b211c4e51..5a8025646 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0100.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0100.java @@ -2,6 +2,7 @@ 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.codec.netty.Jt808Handler; import com.genersoft.iot.vmp.jt1078.event.RegisterEvent; import com.genersoft.iot.vmp.jt1078.proc.Header; import com.genersoft.iot.vmp.jt1078.proc.response.J8100; @@ -9,6 +10,8 @@ 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.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationEvent; import java.io.UnsupportedEncodingException; @@ -24,6 +27,7 @@ import java.util.UUID; @MsgId(id = "0100") public class J0100 extends Re { + private final static Logger log = LoggerFactory.getLogger(J0100.class); private JTDevice device; @Override @@ -92,10 +96,16 @@ public class J0100 extends Re { String authenticationCode = UUID.randomUUID().toString(); j8100.setCode(authenticationCode); deviceInDb.setAuthenticationCode(authenticationCode); + deviceInDb.setStatus(true); service.updateDevice(deviceInDb); + log.info("[注册成功] 设备: {}", device.getDeviceId()); }else { + log.info("[注册失败] 未授权设备: {}", device.getDeviceId()); j8100.setResult(J8100.FAIL); - // TODO 断开连接,清理资源 + // 断开连接,清理资源 + if (session.isRegistered()) { + session.unregister(); + } } return j8100; } 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 aed1cbeaf..359810ee2 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 @@ -1,9 +1,14 @@ package com.genersoft.iot.vmp.jt1078.service; import com.genersoft.iot.vmp.jt1078.bean.JTDevice; +import com.github.pagehelper.PageInfo; + +import java.util.List; public interface Ijt1078Service { JTDevice getDevice(String devId); void updateDevice(JTDevice deviceInDb); + + PageInfo getDeviceList(int page, int count, String query, Boolean online); } 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 df5cf2151..b9bca1259 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 @@ -3,9 +3,14 @@ package com.genersoft.iot.vmp.jt1078.service.impl; import com.genersoft.iot.vmp.jt1078.bean.JTDevice; import com.genersoft.iot.vmp.jt1078.dao.JTDeviceMapper; import com.genersoft.iot.vmp.jt1078.service.Ijt1078Service; +import com.genersoft.iot.vmp.utils.DateUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class jt1078ServiceImpl implements Ijt1078Service { @@ -20,6 +25,14 @@ public class jt1078ServiceImpl implements Ijt1078Service { @Override public void updateDevice(JTDevice device) { + device.setUpdateTime(DateUtil.getNow()); jtDeviceMapper.updateDevice(device); } + + @Override + public PageInfo getDeviceList(int page, int count, String query, Boolean online) { + PageHelper.startPage(page, count); + List all = jtDeviceMapper.getDeviceList(query, online); + return new PageInfo<>(all); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/session/Session.java b/src/main/java/com/genersoft/iot/vmp/jt1078/session/Session.java index f7df8de0d..d79e59d57 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/session/Session.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/session/Session.java @@ -111,4 +111,9 @@ public class Session { ",ip=" + channel.remoteAddress() + ']'; } + + public void unregister() { + channel.close(); + SessionManager.INSTANCE.remove(this.devId); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java b/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java index c2876e561..93546e42c 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java @@ -124,4 +124,7 @@ public enum SessionManager { return String.join("_", devId.replaceFirst("^0*", ""), respId, requestNo.toString()); } + public void remove(String devId) { + sessionMap.remove(devId); + } } diff --git a/web_src/src/components/JTDeviceList.vue b/web_src/src/components/JTDeviceList.vue new file mode 100755 index 000000000..96b2370a1 --- /dev/null +++ b/web_src/src/components/JTDeviceList.vue @@ -0,0 +1,322 @@ + + + + + diff --git a/web_src/src/layout/UiHeader.vue b/web_src/src/layout/UiHeader.vue index fdfcb9f91..b71341a3c 100755 --- a/web_src/src/layout/UiHeader.vue +++ b/web_src/src/layout/UiHeader.vue @@ -7,6 +7,7 @@ 控制台 分屏监控 国标设备 + 部标设备 电子地图 推流列表 拉流代理 diff --git a/web_src/src/router/index.js b/web_src/src/router/index.js index d5e9f7ed5..6f4d30049 100755 --- a/web_src/src/router/index.js +++ b/web_src/src/router/index.js @@ -4,6 +4,7 @@ import Layout from "../layout/index.vue" import console from '../components/console.vue' import deviceList from '../components/DeviceList.vue' +import jtDeviceList from '../components/JTDeviceList.vue' import channelList from '../components/channelList.vue' import gbRecordDetail from '../components/GBRecordDetail.vue' import pushVideoList from '../components/PushVideoList.vue' @@ -53,6 +54,10 @@ export default new VueRouter({ path: '/deviceList', component: deviceList, }, + { + path: '/jtDeviceList', + component: jtDeviceList, + }, { path: '/pushVideoList', component: pushVideoList,