1078-添加部标通道页面

This commit is contained in:
648540858
2024-06-07 00:10:36 +08:00
parent f7d811a299
commit 5d5d654410
30 changed files with 887 additions and 198 deletions

View File

@@ -20,7 +20,7 @@ public class JTChannel {
* 设备的数据库ID
*/
@Schema(description = "设备的数据库ID")
private int deviceId;
private int terminalId;
/**
* 通道ID
@@ -51,12 +51,12 @@ public class JTChannel {
this.name = name;
}
public int getDeviceId() {
return deviceId;
public int getTerminalId() {
return terminalId;
}
public void setDeviceId(int deviceId) {
this.deviceId = deviceId;
public void setTerminalId(int terminalId) {
this.terminalId = terminalId;
}
public String getCreateTime() {
@@ -88,7 +88,7 @@ public class JTChannel {
return "JTChannel{" +
"id=" + id +
", name='" + name + '\'' +
", deviceId=" + deviceId +
", terminalId=" + terminalId +
", channelId=" + channelId +
", createTime='" + createTime + '\'' +
", updateTime='" + updateTime + '\'' +

View File

@@ -44,7 +44,7 @@ public class JTDevice {
* 终端型号
*/
@Schema(description = "终端型号")
private String deviceModel;
private String model;
/**
* 终端手机号
@@ -89,6 +89,10 @@ public class JTDevice {
private Double latitude;
@Schema(description = "注册时间")
private String registerTime;
@Schema(description = "创建时间")
private String createTime;
@@ -146,12 +150,12 @@ public class JTDevice {
this.makerId = makerId;
}
public String getDeviceModel() {
return deviceModel;
public String getModel() {
return model;
}
public void setDeviceModel(String deviceModel) {
this.deviceModel = deviceModel;
public void setModel(String model) {
this.model = model;
}
public String getPhoneNumber() {
@@ -234,6 +238,14 @@ public class JTDevice {
this.status = status;
}
public String getRegisterTime() {
return registerTime;
}
public void setRegisterTime(String registerTime) {
this.registerTime = registerTime;
}
@Override
public String toString() {
return "JTDevice{" +
@@ -242,11 +254,12 @@ public class JTDevice {
", 市县域ID='" + cityId + '\'' +
", 市县域文字描述='" + cityText + '\'' +
", 制造商ID='" + makerId + '\'' +
", 终端型号='" + deviceModel + '\'' +
", 终端型号='" + model + '\'' +
", 终端手机号='" + phoneNumber + '\'' +
", 设备ID='" + terminalId + '\'' +
", 车牌颜色=" + plateColor +
", 车牌='" + plateNo + '\'' +
", 注册时间='" + registerTime + '\'' +
", 鉴权码='" + authenticationCode + '\'' +
", status=" + status +
'}';

View File

@@ -81,7 +81,7 @@ public class JT1078Template {
*/
public Object startLive(String devId, J9101 j9101, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9101)
.setRespId(H0001)
@@ -98,7 +98,7 @@ public class JT1078Template {
*/
public Object stopLive(String devId, J9102 j9102, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9102)
.setRespId(H0001)
@@ -115,7 +115,7 @@ public class JT1078Template {
*/
public Object queryBackTime(String devId, J9205 j9205, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9205)
.setRespId(H1205)
@@ -132,7 +132,7 @@ public class JT1078Template {
*/
public Object startBackLive(String devId, J9201 j9201, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9201)
.setRespId(H1205)
@@ -149,7 +149,7 @@ public class JT1078Template {
*/
public Object controlBackLive(String devId, J9202 j9202, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9202)
.setRespId(H0001)
@@ -166,7 +166,7 @@ public class JT1078Template {
*/
public Object fileUpload(String devId, J9206 j9206, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9206)
.setRespId(H0001)
@@ -183,7 +183,7 @@ public class JT1078Template {
*/
public Object fileUploadControl(String devId, J9207 j9207, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9207)
.setRespId(H0001)
@@ -200,7 +200,7 @@ public class JT1078Template {
*/
public Object ptzRotate(String devId, J9301 j9301, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9301)
.setRespId(H0001)
@@ -217,7 +217,7 @@ public class JT1078Template {
*/
public Object ptzFocal(String devId, J9302 j9302, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9302)
.setRespId(H0001)
@@ -234,7 +234,7 @@ public class JT1078Template {
*/
public Object ptzIris(String devId, J9303 j9303, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9303)
.setRespId(H0001)
@@ -251,7 +251,7 @@ public class JT1078Template {
*/
public Object ptzWiper(String devId, J9304 j9304, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9304)
.setRespId(H0001)
@@ -268,7 +268,7 @@ public class JT1078Template {
*/
public Object ptzSupplementaryLight(String devId, J9305 j9305, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9305)
.setRespId(H0001)
@@ -285,7 +285,7 @@ public class JT1078Template {
*/
public Object ptzZoom(String devId, J9306 j9306, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9306)
.setRespId(H0001)
@@ -302,7 +302,7 @@ public class JT1078Template {
public Object getDeviceConfig(String devId, J8104 j8104, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8104)
.setRespId(H0104)
@@ -319,7 +319,7 @@ public class JT1078Template {
public Object getDeviceSpecifyConfig(String devId, J8106 j8106, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8106)
.setRespId(H0104)
@@ -336,7 +336,7 @@ public class JT1078Template {
public Object setDeviceSpecifyConfig(String devId, J8103 j8103, Integer timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8103)
.setRespId(H0001)
@@ -354,7 +354,7 @@ public class JT1078Template {
*/
public Object deviceControl(String devId, J8105 j8105, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8105)
.setRespId(H0001)
@@ -368,7 +368,7 @@ public class JT1078Template {
*/
public Object deviceAttribute(String devId, J8107 j8107, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8107)
.setRespId(H0107)
@@ -382,7 +382,7 @@ public class JT1078Template {
*/
public Object queryPositionInfo(String devId, J8201 j8201, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8201)
.setRespId(H0201)
@@ -393,7 +393,7 @@ public class JT1078Template {
public Object tempPositionTrackingControl(String devId, J8202 j8202, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8202)
.setRespId(H0001)
@@ -404,7 +404,7 @@ public class JT1078Template {
public Object confirmationAlarmMessage(String devId, J8203 j8203, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8203)
.setRespId(H0001)
@@ -415,7 +415,7 @@ public class JT1078Template {
public Object linkDetection(String devId, J8204 j8204, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8204)
.setRespId(H0001)
@@ -426,7 +426,7 @@ public class JT1078Template {
public Object textMessage(String devId, J8300 j8300, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8300)
.setRespId(H0001)
@@ -437,7 +437,7 @@ public class JT1078Template {
public Object telephoneCallback(String devId, J8400 j8400, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8400)
.setRespId(H0001)
@@ -448,7 +448,7 @@ public class JT1078Template {
public Object setPhoneBook(String devId, J8401 j8401, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8401)
.setRespId(H0001)
@@ -459,7 +459,7 @@ public class JT1078Template {
public Object vehicleControl(String devId, J8500 j8500, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8500)
.setRespId(H0500)
@@ -470,7 +470,7 @@ public class JT1078Template {
public Object setAreaForCircle(String devId, J8600 j8600, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8600)
.setRespId(H0001)
@@ -481,7 +481,7 @@ public class JT1078Template {
public Object deleteAreaForCircle(String devId, J8601 j8601, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8601)
.setRespId(H0001)
@@ -492,7 +492,7 @@ public class JT1078Template {
public Object setAreaForRectangle(String devId, J8602 j8602, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8602)
.setRespId(H0001)
@@ -503,7 +503,7 @@ public class JT1078Template {
public Object deleteAreaForRectangle(String devId, J8603 j8603, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8603)
.setRespId(H0001)
@@ -514,7 +514,7 @@ public class JT1078Template {
public Object setAreaForPolygon(String devId, J8604 j8604, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8604)
.setRespId(H0001)
@@ -525,7 +525,7 @@ public class JT1078Template {
public Object deleteAreaForPolygon(String devId, J8605 j8605, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8605)
.setRespId(H0001)
@@ -536,7 +536,7 @@ public class JT1078Template {
public Object setRoute(String devId, J8606 j8606, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8606)
.setRespId(H0001)
@@ -547,7 +547,7 @@ public class JT1078Template {
public Object deleteRoute(String devId, J8607 j8607, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8607)
.setRespId(H0001)
@@ -558,7 +558,7 @@ public class JT1078Template {
public Object queryAreaOrRoute(String devId, J8608 j8608, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8608)
.setRespId(H0608)
@@ -569,7 +569,7 @@ public class JT1078Template {
public Object queryDriverInformation(String devId, J8702 j8702, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8702)
.setRespId(H0702)
@@ -580,7 +580,7 @@ public class JT1078Template {
public Object shooting(String devId, J8801 j8801, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8801)
.setRespId(H0805)
@@ -591,7 +591,7 @@ public class JT1078Template {
public Object queryMediaData(String devId, J8802 j8802, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8802)
.setRespId(H0802)
@@ -602,7 +602,7 @@ public class JT1078Template {
public Object uploadMediaData(String devId, J8803 j8803, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8803)
.setRespId(H0801)
@@ -613,7 +613,7 @@ public class JT1078Template {
public Object record(String devId, J8804 j8804, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8804)
.setRespId(H0001)
@@ -624,7 +624,7 @@ public class JT1078Template {
public Object uploadMediaDataForSingle(String devId, J8805 j8805, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H8805)
.setRespId(H0801)
@@ -635,7 +635,7 @@ public class JT1078Template {
public Object queryMediaAttribute(String devId, J9003 j9003, int timeOut) {
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPhoneNumber(devId)
.setPackageNo(randomInt())
.setMsgId(H9003)
.setRespId(H1003)

View File

@@ -12,7 +12,6 @@ import com.genersoft.iot.vmp.service.bean.InviteErrorCode;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
import com.genersoft.iot.vmp.vmanager.bean.StreamContent;
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;

View File

@@ -21,11 +21,11 @@ import java.util.List;
@ConditionalOnProperty(value = "jt1078.enable", havingValue = "true")
@RestController
@Tag(name = "部标设备管理")
@RequestMapping("/api/jt1078/device")
public class JT1078DeviceController {
@Tag(name = "部标终端以及通道管理")
@RequestMapping("/api/jt1078/terminal")
public class JT1078TerminalController {
private final static Logger logger = LoggerFactory.getLogger(JT1078DeviceController.class);
private final static Logger logger = LoggerFactory.getLogger(JT1078TerminalController.class);
@Resource
Ijt1078Service service;
@@ -71,18 +71,21 @@ public class JT1078DeviceController {
@Operation(summary = "1078-查询部标通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "page", description = "当前页", required = true)
@Parameter(name = "count", description = "每页查询数量", required = true)
@Parameter(name = "deviceId", description = "设备ID", required = true)
@Parameter(name = "query", description = "查询内容")
@GetMapping("/channel/list")
public List<JTChannel> getChannels(@RequestParam(required = true) Integer deviceId,
@RequestParam(required = false) String query) {
public PageInfo<JTChannel> getChannels(int page, int count,
@RequestParam(required = true) Integer deviceId,
@RequestParam(required = false) String query) {
assert deviceId != null;
return service.getChannelList(deviceId, query);
return service.getChannelList(page, count, deviceId, query);
}
@Operation(summary = "1078-更新通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "channel", description = "通道", required = true)
@PostMapping("/update")
@PostMapping("/channel/update")
public void updateChannel(JTChannel channel){
assert channel.getId() > 0;
assert channel.getChannelId() != null;
@@ -91,14 +94,14 @@ public class JT1078DeviceController {
@Operation(summary = "1078-新增通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "channel", description = "通道", required = true)
@PostMapping("/add")
@PostMapping("/channel/add")
public void addChannel(JTChannel channel){
assert channel.getChannelId() != null;
service.addChannel(channel);
}
@Operation(summary = "1078-删除通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "id", description = "通道的数据库ID", required = true)
@DeleteMapping("/delete")
@DeleteMapping("/channel/delete")
public void deleteChannel(Integer id){
service.deleteChannelById(id);
}

View File

@@ -9,7 +9,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
@Schema(description = "人工确认报警消息参数")
public class ConfirmationAlarmMessageParam {
@Schema(description = "设备")
@Schema(description = "终端手机号")
private String phoneNumber;
@Schema(description = "报警消息流水号")
private int alarmPackageNo;

View File

@@ -1,9 +1,11 @@
package com.genersoft.iot.vmp.jt1078.controller.bean;
import com.genersoft.iot.vmp.jt1078.bean.JTDeviceConnectionControl;
import io.swagger.v3.oas.annotations.media.Schema;
public class ConnectionControlParam {
@Schema(description = "终端手机号")
private String phoneNumber;
private JTDeviceConnectionControl control;

View File

@@ -7,7 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
@Schema(description = "存储多媒体数据参数")
public class QueryMediaDataParam {
@Schema(description = "设备")
@Schema(description = "终端手机号")
private String phoneNumber;
@Schema(description = "多媒体 ID, 单条存储多媒体数据检索上传时有效")

View File

@@ -8,7 +8,7 @@ import java.util.List;
@Schema(description = "设置区域参数")
public class SetAreaParam {
@Schema(description = "设备")
@Schema(description = "终端手机号")
private String phoneNumber;
@Schema(description = "圆形区域项")

View File

@@ -1,10 +1,15 @@
package com.genersoft.iot.vmp.jt1078.controller;
package com.genersoft.iot.vmp.jt1078.controller.bean;
import com.genersoft.iot.vmp.jt1078.bean.JTDeviceConfig;
import io.swagger.v3.oas.annotations.media.Schema;
@Schema(description = "终端参数设置")
public class SetConfigParam {
@Schema(description = "终端手机号")
private String phoneNumber;
@Schema(description = "终端参数设置")
private JTDeviceConfig config;
public String getPhoneNumber() {

View File

@@ -9,7 +9,7 @@ import java.util.List;
@Schema(description = "设置电话本")
public class SetPhoneBookParam {
@Schema(description = "设备手机号")
@Schema(description = "终端手机号")
private String phoneNumber;
@Schema(description = "设置类型:\n" +

View File

@@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
@Schema(description = "摄像头立即拍摄命令参数")
public class ShootingParam {
@Schema(description = "设备")
@Schema(description = "终端手机号")
private String phoneNumber;
@Schema(description = "拍摄命令参数")

View File

@@ -9,7 +9,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
@Schema(description = "人工确认报警消息参数")
public class TextMessageParam {
@Schema(description = "设备手机号")
@Schema(description = "终端手机号")
private String phoneNumber;
@Schema(description = "标志")
private JTTextSign sign;

View File

@@ -14,18 +14,18 @@ public interface JTChannelMapper {
"from " +
"wvp_jt_channel jc " +
"WHERE " +
"device_id = #{deviceId}" +
"terminal_id = #{terminalId}" +
" <if test='query != null'> AND " +
"jc.name LIKE concat('%',#{query},'%') " +
"</if> " +
"ORDER BY jc.update_time " +
" </script>"})
List<JTChannel> getAll(@Param("deviceId") int deviceId, @Param("query") String query);
List<JTChannel> getAll(@Param("terminalId") int terminalId, @Param("query") String query);
@Update(value = {" <script>" +
"UPDATE wvp_jt_channel " +
"SET update_time=#{updateTime}" +
"<if test=\"deviceId != null\">, device_id=#{deviceId}</if>" +
"<if test=\"terminalId != null\">, terminal_id=#{terminalId}</if>" +
"<if test=\"name != null\">, name=#{name}</if>" +
"<if test=\"channelId != null\">, channelId=#{channelId}</if>" +
"WHERE id=#{id}"+
@@ -33,13 +33,13 @@ public interface JTChannelMapper {
void update(JTChannel channel);
@Insert("INSERT INTO wvp_jt_channel (" +
"device_id,"+
"terminal_id,"+
"channel_id,"+
"name,"+
"create_time,"+
"update_time"+
") VALUES (" +
"#{deviceId}," +
"#{terminalId}," +
"#{channelId}," +
"#{name}," +
"#{createTime}," +

View File

@@ -14,18 +14,19 @@ public interface JTTerminalMapper {
@Update(value = {" <script>" +
"UPDATE wvp_jt_terminal " +
"SET update_time=#{updateTime}" +
"<if test=\"terminalId != null\">, terminal_id=#{terminalId}</if>" +
"<if test=\"provinceId != null\">, province_id=#{provinceId}</if>" +
"<if test=\"terminalId != null\">, terminal_id=#{terminalId}</if>" +
"<if test=\"provinceText != null\">, province_text=#{provinceText}</if>" +
"<if test=\"cityId != null\">, city_id=#{cityId}</if>" +
"<if test=\"cityText != null\">, city_text=#{cityText}</if>" +
"<if test=\"makerId != null\">, maker_id=#{makerId}</if>" +
"<if test=\"deviceModel != null\">, device_model=#{deviceModel}</if>" +
"<if test=\"model != null\">, model=#{model}</if>" +
"<if test=\"plateColor != null\">, plate_color=#{plateColor}</if>" +
"<if test=\"plateNo != null\">, plate_no=#{plateNo}</if>" +
"<if test=\"authenticationCode != null\">, authentication_code=#{authenticationCode}</if>" +
"<if test=\"longitude != null\">, longitude=#{longitude}</if>" +
"<if test=\"latitude != null\">, latitude=#{latitude}</if>" +
"<if test=\"registerTime != null\">, register_time=#{registerTime}</if>" +
"<if test=\"status != null\">, status=#{status}</if>" +
"WHERE phone_number=#{phoneNumber}"+
" </script>"})
@@ -38,11 +39,12 @@ public interface JTTerminalMapper {
"1=1" +
" <if test='query != null'> AND (" +
"jd.phone_number LIKE concat('%',#{query},'%') " +
"jd.terminal_id LIKE concat('%',#{query},'%') " +
"jd.province_id LIKE concat('%',#{query},'%') " +
"OR jd.city_id LIKE concat('%',#{query},'%') " +
"OR jd.maker_id LIKE concat('%',#{query},'%') " +
"OR jd.device_model LIKE concat('%',#{query},'%') " +
"OR jd.terminal_id LIKE concat('%',#{query},'%') " +
"OR jd.model LIKE concat('%',#{query},'%') " +
"OR jd.phone_number LIKE concat('%',#{query},'%') " +
"OR jd.plate_no LIKE concat('%',#{query},'%')" +
")</if> " +
" <if test='online == true' > AND jd.status= true</if>" +
@@ -52,36 +54,38 @@ public interface JTTerminalMapper {
List<JTDevice> getDeviceList(@Param("query") String query, @Param("online") Boolean online);
@Insert("INSERT INTO wvp_jt_terminal (" +
"phone_number,"+
"terminal_id,"+
"province_id,"+
"province_text,"+
"city_id,"+
"city_text,"+
"maker_id,"+
"terminal_id,"+
"device_model,"+
"phone_number,"+
"model,"+
"plate_color,"+
"plate_no,"+
"authentication_code,"+
"longitude,"+
"latitude,"+
"create_time,"+
"register_time,"+
"update_time"+
") VALUES (" +
"#{phoneNumber}," +
"#{terminalId}," +
"#{provinceId}," +
"#{provinceText}," +
"#{cityId}," +
"#{cityText}," +
"#{makerId}," +
"#{terminalId}," +
"#{deviceModel}," +
"#{phoneNumber}," +
"#{model}," +
"#{plateColor}," +
"#{plateNo}," +
"#{authenticationCode}," +
"#{longitude}," +
"#{latitude}," +
"#{createTime}," +
"#{registerTime}," +
"#{updateTime}" +
")")
void addDevice(JTDevice device);

View File

@@ -20,7 +20,6 @@ public class Header {
// 消息体流水号
Integer sn;
// 协议版本号
Short version = -1;

View File

@@ -8,7 +8,7 @@ import com.genersoft.iot.vmp.jt1078.proc.response.Rs;
* @email qingtaij@163.com
*/
public class Cmd {
String devId;
String phoneNumber;
Long packageNo;
String msgId;
String respId;
@@ -18,19 +18,19 @@ public class Cmd {
}
public Cmd(Builder builder) {
this.devId = builder.devId;
this.phoneNumber = builder.phoneNumber;
this.packageNo = builder.packageNo;
this.msgId = builder.msgId;
this.respId = builder.respId;
this.rs = builder.rs;
}
public String getDevId() {
return devId;
public String getPhoneNumber() {
return phoneNumber;
}
public void setDevId(String devId) {
this.devId = devId;
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public Long getPackageNo() {
@@ -66,14 +66,14 @@ public class Cmd {
}
public static class Builder {
String devId;
String phoneNumber;
Long packageNo;
String msgId;
String respId;
Rs rs;
public Builder setDevId(String devId) {
this.devId = devId.replaceFirst("^0*", "");
public Builder setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber.replaceFirst("^0*", "");
return this;
}
@@ -106,7 +106,7 @@ public class Cmd {
@Override
public String toString() {
return "Cmd{" +
"devId='" + devId + '\'' +
"devId='" + phoneNumber + '\'' +
", packageNo=" + packageNo +
", msgId='" + msgId + '\'' +
", respId='" + respId + '\'' +

View File

@@ -10,6 +10,7 @@ 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 com.genersoft.iot.vmp.utils.CivilCodeUtil;
import com.genersoft.iot.vmp.utils.DateUtil;
import io.netty.buffer.ByteBuf;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,7 +44,7 @@ public class J0100 extends Re {
device.setMakerId(buf.readCharSequence(11, Charset.forName("GBK"))
.toString().trim());
device.setDeviceModel(buf.readCharSequence(30, Charset.forName("GBK"))
device.setModel(buf.readCharSequence(30, Charset.forName("GBK"))
.toString().trim());
device.setTerminalId(buf.readCharSequence(30, Charset.forName("GBK"))
@@ -62,7 +63,7 @@ public class J0100 extends Re {
byte[] bytes20 = new byte[20];
buf.readBytes(bytes20);
device.setDeviceModel(new String(bytes20).trim());
device.setModel(new String(bytes20).trim());
byte[] bytes7 = new byte[7];
buf.readBytes(bytes7);
@@ -93,6 +94,7 @@ public class J0100 extends Re {
deviceInDb.setAuthenticationCode(authenticationCode);
deviceInDb.setStatus(true);
deviceInDb.setProvinceId(device.getProvinceId());
deviceInDb.setRegisterTime(DateUtil.getNow());
CivilCodePo provinceCivilCodePo = CivilCodeUtil.INSTANCE.get(device.getProvinceId());
if (provinceCivilCodePo != null) {
deviceInDb.setProvinceText(provinceCivilCodePo.getName());
@@ -103,7 +105,7 @@ public class J0100 extends Re {
if (cityCivilCodePo != null) {
deviceInDb.setCityText(cityCivilCodePo.getName());
}
deviceInDb.setDeviceModel(device.getDeviceModel());
deviceInDb.setModel(device.getModel());
deviceInDb.setMakerId(device.getMakerId());
deviceInDb.setTerminalId(device.getTerminalId());
// TODO 支持直接展示车牌颜色的描述

View File

@@ -118,7 +118,7 @@ public interface Ijt1078Service {
void recordDownload(String phoneNumber, String channelId, String startTime, String endTime, Integer type, Integer rate, GeneralCallback<String> fileCallback);
List<JTChannel> getChannelList(int deviceId, String query);
PageInfo<JTChannel> getChannelList(int page, int count, int deviceId, String query);
void updateChannel(JTChannel channel);

View File

@@ -113,6 +113,10 @@ public class jt1078ServiceImpl implements Ijt1078Service {
@Override
public void addDevice(JTDevice device) {
JTDevice deviceInDb = jtDeviceMapper.getDevice(device.getPhoneNumber());
if (deviceInDb != null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "设备" + device.getPhoneNumber() + "已存在");
}
device.setCreateTime(DateUtil.getNow());
device.setUpdateTime(DateUtil.getNow());
jtDeviceMapper.addDevice(device);
@@ -1006,17 +1010,22 @@ public class jt1078ServiceImpl implements Ijt1078Service {
}
@Override
public List<JTChannel> getChannelList(int deviceId, String query) {
return jtChannelMapper.getAll(deviceId, query);
public PageInfo<JTChannel> getChannelList(int page, int count, int deviceId, String query) {
PageHelper.startPage(page, count);
List<JTChannel> all = jtChannelMapper.getAll(deviceId, query);
return new PageInfo<>(all);
}
@Override
public void updateChannel(JTChannel channel) {
channel.setUpdateTime(DateUtil.getNow());
jtChannelMapper.update(channel);
}
@Override
public void addChannel(JTChannel channel) {
channel.setCreateTime(DateUtil.getNow());
channel.setUpdateTime(DateUtil.getNow());
jtChannelMapper.add(channel);
}

View File

@@ -5,8 +5,6 @@ import io.netty.channel.Channel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.SynchronousQueue;
@@ -75,16 +73,16 @@ public enum SessionManager {
}
public Object request(Cmd cmd, Integer timeOut) {
Session session = this.get(cmd.getDevId());
Session session = this.get(cmd.getPhoneNumber());
if (session == null) {
log.error("DevId: {} not online!", cmd.getDevId());
log.error("DevId: {} not online!", cmd.getPhoneNumber());
return null;
}
String requestKey = requestKey(cmd.getDevId(), cmd.getRespId(), cmd.getPackageNo());
String requestKey = requestKey(cmd.getPhoneNumber(), cmd.getRespId(), cmd.getPackageNo());
System.out.println("requestKey==" + requestKey);
SynchronousQueue<Object> subscribe = subscribe(requestKey);
if (subscribe == null) {
log.error("DevId: {} key:{} send repaid", cmd.getDevId(), requestKey);
log.error("DevId: {} key:{} send repaid", cmd.getPhoneNumber(), requestKey);
return null;
}
session.writeObject(cmd);

View File

@@ -0,0 +1,544 @@
<template>
<div id="channelList" style="width: 100%">
<div class="page-header">
<div class="page-title">
<el-button icon="el-icon-back" size="mini" style="font-size: 20px; color: #000;" type="text" @click="showDevice" ></el-button>
<el-divider direction="vertical"></el-divider>
通道列表
</div>
<div class="page-header-btn">
<div style="display: inline;">
搜索:
<el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="关键字"
prefix-icon="el-icon-search" v-model="searchSrt" clearable></el-input>
<el-button icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary" @click="add">添加通道</el-button>
<el-button icon="el-icon-refresh-right" circle size="mini" @click="refresh()"></el-button>
</div>
</div>
</div>
<devicePlayer ref="devicePlayer"></devicePlayer>
<el-container v-loading="isLoging" style="height: 82vh;">
<el-main style="padding: 5px;">
<el-table ref="channelListTable" :data="deviceChannelList" :height="winHeight" style="width: 100%"
header-row-class-name="table-header">
<el-table-column prop="channelId" label="通道编号" min-width="180">
</el-table-column>
<el-table-column prop="name" label="名称" min-width="180">
</el-table-column>
<el-table-column label="快照" min-width="100">
<template v-slot:default="scope">
<el-image
:src="getSnap(scope.row)"
:preview-src-list="getBigSnap(scope.row)"
@error="getSnapErrorEvent(scope.row.deviceId, scope.row.channelId)"
:fit="'contain'"
style="width: 60px">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
</el-image>
</template>
</el-table-column>
<el-table-column label="开启音频" min-width="100">
<template slot-scope="scope">
<el-switch @change="updateChannel(scope.row)" v-model="scope.row.hasAudio" active-color="#409EFF">
</el-switch>
</template>
</el-table-column>
<el-table-column label="操作" min-width="340" fixed="right">
<template slot-scope="scope">
<el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-video-play"
type="text" @click="sendDevicePush(scope.row)">播放
</el-button>
<el-button size="medium" v-bind:disabled="device == null || device.online === 0"
icon="el-icon-switch-button"
type="text" style="color: #f56c6c" v-if="!!scope.row.streamId"
@click="stopDevicePush(scope.row)">停止
</el-button>
<el-divider direction="vertical"></el-divider>
<el-button
v-if="scope.row.edit"
size="medium"
type="text"
icon="el-icon-edit-outline"
@click="handleSave(scope.row)"
>
保存
</el-button>
<el-button
v-else
size="medium"
type="text"
icon="el-icon-edit"
@click="handleEdit(scope.row)"
>
编辑
</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="medium" icon="el-icon-s-open" type="text"
v-if="scope.row.subCount > 0 || scope.row.parental === 1"
@click="changeSubchannel(scope.row)">查看
</el-button>
<el-divider v-if="scope.row.subCount > 0 || scope.row.parental === 1" direction="vertical"></el-divider>
<!-- <el-button size="medium" v-bind:disabled="device == null || device.online === 0"-->
<!-- icon="el-icon-video-camera"-->
<!-- type="text" @click="queryRecords(scope.row)">设备录像-->
<!-- </el-button>-->
<!-- <el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-cloudy"-->
<!-- type="text" @click="queryCloudRecords(scope.row)">云端录像-->
<!-- </el-button>-->
<el-dropdown @command="(command)=>{moreClick(command, scope.row)}">
<el-button size="medium" type="text" >
更多功能<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="records" v-bind:disabled="device == null || device.online === 0">
设备录像</el-dropdown-item>
<el-dropdown-item command="cloudRecords" v-bind:disabled="device == null || device.online === 0" >
云端录像</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<el-pagination
style="float: right"
@size-change="handleSizeChange"
@current-change="currentChange"
:current-page="currentPage"
:page-size="count"
:page-sizes="[15, 25, 35, 50]"
layout="total, sizes, prev, pager, next"
:total="total">
</el-pagination>
</el-main>
</el-container>
<channelEdit ref="channelEdit"></channelEdit>
<!--设备列表-->
</div>
</template>
<script>
import devicePlayer from './dialog/devicePlayer.vue'
import uiHeader from '../layout/UiHeader.vue'
import DeviceService from "./service/DeviceService";
import DeviceTree from "./common/DeviceTree";
import channelEdit from "./dialog/jtChannelEdit.vue";
export default {
name: 'channelList',
components: {
channelEdit,
devicePlayer,
uiHeader,
DeviceTree
},
data() {
return {
deviceService: new DeviceService(),
device: null,
deviceId: this.$route.params.deviceId,
parentChannelId: this.$route.params.parentChannelId,
deviceChannelList: [],
videoComponentList: [],
currentPlayerInfo: {}, //当前播放对象
updateLooper: 0, //数据刷新轮训标志
searchSrt: "",
channelType: "",
online: "",
subStream: "",
winHeight: window.innerHeight - 200,
currentPage: 1,
count: 15,
total: 0,
beforeUrl: "/jtDeviceList",
isLoging: false,
loadSnap: {},
ptzTypes: {
0: "未知",
1: "球机",
2: "半球",
3: "固定枪机",
4: "遥控枪机"
}
};
},
mounted() {
if (this.deviceId) {
this.deviceService.getDevice(this.deviceId, (result) => {
this.device = result;
}, (error) => {
console.log("获取设备信息失败")
console.error(error)
})
}
this.initData();
},
destroyed() {
this.$destroy('videojs');
clearTimeout(this.updateLooper);
},
methods: {
initData: function () {
this.getDeviceChannelList();
},
initParam: function () {
this.deviceId = this.$route.params.deviceId;
this.parentChannelId = this.$route.params.parentChannelId;
this.currentPage = 1;
this.count = 15;
if (this.parentChannelId == "" || this.parentChannelId == 0) {
this.beforeUrl = "/deviceList"
}
},
currentChange: function (val) {
this.currentPage = val;
this.initData();
},
handleSizeChange: function (val) {
this.count = val;
this.getDeviceChannelList();
},
getDeviceChannelList: function () {
let that = this;
if (typeof (this.$route.params.deviceId) == "undefined") return;
this.$axios({
method: 'get',
url: `/api/jt1078/terminal/channel/list`,
params: {
page: that.currentPage,
count: that.count,
query: that.searchSrt,
deviceId: this.$route.params.deviceId,
}
}).then(function (res) {
if (res.data.code === 0) {
that.total = res.data.data.total;
that.deviceChannelList = res.data.data.list;
// 防止出现表格错位
that.$nextTick(() => {
that.$refs.channelListTable.doLayout();
})
}
}).catch(function (error) {
console.log(error);
});
},
//通知设备上传媒体流
sendDevicePush: function (itemData) {
let deviceId = this.deviceId;
this.isLoging = true;
let channelId = itemData.channelId;
console.log("通知设备推流1" + deviceId + " : " + channelId);
let that = this;
this.$axios({
method: 'get',
url: '/api/play/start/' + deviceId + '/' + channelId,
params: {
isSubStream: this.isSubStream
}
}).then(function (res) {
console.log(res)
that.isLoging = false;
if (res.data.code === 0) {
setTimeout(() => {
let snapId = deviceId + "_" + channelId;
that.loadSnap[deviceId + channelId] = 0;
that.getSnapErrorEvent(snapId)
}, 5000)
itemData.streamId = res.data.data.stream;
that.$refs.devicePlayer.openDialog("media", deviceId, channelId, {
streamInfo: res.data.data,
hasAudio: itemData.hasAudio
});
setTimeout(() => {
that.initData();
}, 1000)
} else {
that.$message.error(res.data.msg);
}
}).catch(function (e) {
console.error(e)
that.isLoging = false;
// that.$message.error("请求超时");
});
},
moreClick: function (command, itemData) {
if (command === "records") {
this.queryRecords(itemData)
}else if (command === "cloudRecords") {
this.queryCloudRecords(itemData)
}
},
queryRecords: function (itemData) {
let deviceId = this.deviceId;
let channelId = itemData.channelId;
this.$router.push(`/gbRecordDetail/${deviceId}/${channelId}`)
},
queryCloudRecords: function (itemData) {
let deviceId = this.deviceId;
let channelId = itemData.channelId;
this.$router.push(`/cloudRecordDetail/rtp/${deviceId}_${channelId}`)
},
stopDevicePush: function (itemData) {
var that = this;
this.$axios({
method: 'get',
url: '/api/play/stop/' + this.deviceId + "/" + itemData.channelId,
params: {
isSubStream: this.isSubStream
}
}).then(function (res) {
that.initData();
}).catch(function (error) {
if (error.response.status === 402) { // 已经停止过
that.initData();
} else {
console.log(error)
}
});
},
getSnap: function (row) {
let baseUrl = window.baseUrl ? window.baseUrl : "";
return ((process.env.NODE_ENV === 'development') ? process.env.BASE_API : baseUrl) + '/api/device/query/snap/' + row.deviceId + '/' + row.channelId;
},
getBigSnap: function (row) {
return [this.getSnap(row)]
},
getSnapErrorEvent: function (deviceId, channelId) {
if (typeof (this.loadSnap[deviceId + channelId]) != "undefined") {
console.log("下载截图" + this.loadSnap[deviceId + channelId])
if (this.loadSnap[deviceId + channelId] > 5) {
delete this.loadSnap[deviceId + channelId];
return;
}
setTimeout(() => {
let url = (process.env.NODE_ENV === 'development' ? "debug" : "") + '/api/device/query/snap/' + deviceId + '/' + channelId
this.loadSnap[deviceId + channelId]++
document.getElementById(deviceId + channelId).setAttribute("src", url + '?' + new Date().getTime())
}, 1000)
}
},
showDevice: function () {
this.$router.push(this.beforeUrl).then(() => {
this.initParam();
this.initData();
})
},
changeSubchannel(itemData) {
this.beforeUrl = this.$router.currentRoute.path;
var url = `/${this.$router.currentRoute.name}/${this.$router.currentRoute.params.deviceId}/${itemData.channelId}`
this.$router.push(url).then(() => {
this.searchSrt = "";
this.channelType = "";
this.online = "";
this.initParam();
this.initData();
})
},
search: function () {
this.currentPage = 1;
this.total = 0;
this.initData();
},
updateChannel: function (row) {
this.$axios({
method: 'post',
url: `/api/device/query/channel/update/${this.deviceId}`,
params: row
}).then(function (res) {
console.log(JSON.stringify(res));
});
},
subStreamChange: function () {
this.$confirm('确定重置所有通道的码流类型?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$axios({
method: 'post',
url: `/api/device/query/channel/stream/identification/update/`,
params: {
deviceId: this.deviceId,
streamIdentification: this.subStream
}
}).then((res)=> {
console.log(JSON.stringify(res));
this.initData()
}).finally(()=>{
this.subStream = ""
})
}).catch(() => {
this.subStream = ""
});
},
channelSubStreamChange: function (row) {
this.$axios({
method: 'post',
url: `/api/device/query/channel/stream/identification/update/`,
params: {
deviceId: this.deviceId,
channelId: row.channelId,
streamIdentification: row.streamIdentification
}
}).then(function (res) {
console.log(JSON.stringify(res));
});
},
refresh: function () {
this.initData();
},
add: function () {
this.$refs.channelEdit.openDialog(null, this.deviceId, () => {
this.$refs.channelEdit.close();
this.$message({
showClose: true,
message: "添加成功",
type: "success",
});
setTimeout(this.getList, 200)
})
},
treeNodeClickEvent: function (device, data, isCatalog) {
console.log(device)
if (!!!data.channelId) {
this.parentChannelId = device.deviceId;
} else {
this.parentChannelId = data.channelId;
}
this.initData();
},
// 保存
handleSave(row) {
if (row.location) {
const segements = row.location.split(",");
if (segements.length !== 2) {
this.$message.warning("位置信息格式有误117.234,36.378");
return;
} else {
row.customLongitude = parseFloat(segements[0]);
row.custom_latitude = parseFloat(segements[1]);
if (!(row.longitude && row.latitude)) {
this.$message.warning("位置信息格式有误117.234,36.378");
return;
}
}
} else {
delete row.longitude;
delete row.latitude;
}
Object.keys(row).forEach(key => {
const value = row[key];
if (value === null || value === undefined || (typeof value === "string" && value.trim() === "")) {
delete row[key];
}
});
this.$axios({
method: 'post',
url: `/api/device/query/channel/update/${this.deviceId}`,
params: row
}).then(response => {
if (response.data.code === 0) {
this.$message.success("修改成功!");
this.initData();
} else {
this.$message.error("修改失败!");
}
}).catch(_ => {
this.$message.error("修改失败!");
})
},
// 是否正在编辑
isEdit() {
let editing = false;
this.deviceChannelList.forEach(e => {
if (e.edit) {
editing = true;
}
});
return editing;
},
// 编辑
handleEdit(row) {
if (this.isEdit()) {
this.$message.warning('请保存当前编辑项!');
} else {
row.edit = true;
}
}
}
};
</script>
<style>
.videoList {
display: flex;
flex-wrap: wrap;
align-content: flex-start;
}
.video-item {
position: relative;
width: 15rem;
height: 10rem;
margin-right: 1rem;
background-color: #000000;
}
.video-item-img {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
width: 100%;
height: 100%;
}
.video-item-img:after {
content: "";
display: inline-block;
position: absolute;
z-index: 2;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
width: 3rem;
height: 3rem;
background-image: url("../assets/loading.png");
background-size: cover;
background-color: #000000;
}
.video-item-title {
position: absolute;
bottom: 0;
color: #000000;
background-color: #ffffff;
line-height: 1.5rem;
padding: 0.3rem;
width: 14.4rem;
}
</style>

View File

@@ -3,25 +3,25 @@
<div class="page-header">
<div class="page-title">设备列表</div>
<div class="page-header-btn">
<el-button icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary" @click="add">添加设备
<el-button icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary" @click="add">接入新设备
</el-button>
<el-button icon="el-icon-refresh-right" circle size="mini" :loading="getDeviceListLoading"
@click="getDeviceList()"></el-button>
<el-button icon="el-icon-refresh-right" circle size="mini" :loading="getListLoading"
@click="getList()"></el-button>
</div>
</div>
<!--设备列表-->
<el-table :data="deviceList" style="width: 100%;font-size: 12px;" :height="winHeight" header-row-class-name="table-header">
<el-table-column prop="terminalId" label="终端ID" min-width="160">
<el-table-column prop="phoneNumber" label="终端手机号" min-width="160">
</el-table-column>
<el-table-column prop="terminalId" label="终端ID" min-width="160" >
</el-table-column>
<el-table-column prop="provinceText" label="省域" min-width="160">
</el-table-column>
<el-table-column prop="cityText" label="市县域" min-width="160" >
</el-table-column>
<el-table-column prop="makerId" label="制造商ID" min-width="160" >
<el-table-column prop="makerId" label="制造商" min-width="160" >
</el-table-column>
<el-table-column prop="deviceModel" label="终端型号" min-width="160" >
</el-table-column>
<el-table-column prop="deviceId" label="设备ID" min-width="160" >
<el-table-column prop="model" label="型号" min-width="160" >
</el-table-column>
<el-table-column label="车牌颜色" min-width="160" >
<template slot-scope="scope">
@@ -41,6 +41,8 @@
</el-table-column>
<el-table-column prop="plateNo" label="车牌" min-width="160" >
</el-table-column>
<el-table-column prop="registerTime" label="注册时间" min-width="160" >
</el-table-column>
<el-table-column label="状态" min-width="160">
<template slot-scope="scope">
<div slot="reference" class="name-wrapper">
@@ -51,6 +53,10 @@
</el-table-column>
<el-table-column label="操作" min-width="450" fixed="right">
<template slot-scope="scope">
<el-divider direction="vertical"></el-divider>
<el-button type="text" size="medium" icon="el-icon-video-camera"
@click="showChannelList(scope.row)">通道
</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="medium" icon="el-icon-edit" type="text" @click="edit(scope.row)">编辑</el-button>
<el-divider direction="vertical"></el-divider>
@@ -97,7 +103,7 @@ export default {
currentPage: 1,
count: 15,
total: 0,
getDeviceListLoading: false,
getListLoading: false,
};
},
computed: {
@@ -123,21 +129,21 @@ export default {
},
methods: {
initData: function () {
this.getDeviceList();
this.getList();
},
currentChange: function (val) {
this.currentPage = val;
this.getDeviceList();
this.getList();
},
handleSizeChange: function (val) {
this.count = val;
this.getDeviceList();
this.getList();
},
getDeviceList: function () {
this.getDeviceListLoading = true;
getList: function () {
this.getListLoading = true;
this.$axios({
method: 'get',
url: `/api/jt1078/device/list`,
url: `/api/jt1078/terminal/list`,
params: {
page: this.currentPage,
count: this.count
@@ -147,10 +153,10 @@ export default {
this.total = res.data.data.total;
this.deviceList = res.data.data.list;
}
this.getDeviceListLoading = false;
this.getListLoading = false;
}).catch( (error)=> {
console.error(error);
this.getDeviceListLoading = false;
this.getListLoading = false;
});
},
deleteDevice: function (row) {
@@ -163,12 +169,12 @@ export default {
}).then(() => {
this.$axios({
method: 'delete',
url: '/api/jt1078/device/delete',
url: '/api/jt1078/terminal/delete',
params: {
deviceId: row.deviceId
}
}).then((res) => {
this.getDeviceList();
this.getList();
}).catch((error) => {
console.error(error);
});
@@ -184,10 +190,13 @@ export default {
message: "设备修改成功,通道字符集将在下次更新生效",
type: "success",
});
setTimeout(this.getDeviceList, 200)
setTimeout(this.getList, 200)
})
},
showChannelList: function (row) {
this.$router.push(`/jtChannelList/${row.id}`);
},
add: function () {
this.$refs.deviceEdit.openDialog(null, () => {
this.$refs.deviceEdit.close();
@@ -196,7 +205,7 @@ export default {
message: "添加成功",
type: "success",
});
setTimeout(this.getDeviceList, 200)
setTimeout(this.getList, 200)
})
}

View File

@@ -0,0 +1,97 @@
<template>
<div id="deviceEdit" v-loading="isLoging">
<el-dialog
title="通道编辑"
width="40%"
top="2rem"
:close-on-click-modal="false"
:visible.sync="showDialog"
:destroy-on-close="true"
@close="close()"
>
<div id="shared" style="margin-top: 1rem;margin-right: 100px;">
<el-form ref="form" :rules="rules" :model="form" label-width="100px" >
<el-form-item label="编号" prop="channelId">
<el-input v-model="form.channelId" clearable></el-input>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" clearable></el-input>
</el-form-item>
<el-form-item>
<div style="float: right;">
<el-button type="primary" @click="onSubmit" >确认</el-button>
<el-button @click="close">取消</el-button>
</div>
</el-form-item>
</el-form>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: "deviceEdit",
props: {},
computed: {},
created() {},
data() {
return {
listChangeCallback: null,
showDialog: false,
isLoging: false,
form: {},
deviceId: "",
isEdit: false,
rules: {
deviceId: [{ required: true, message: "请输入设备编号", trigger: "blur" }]
},
};
},
methods: {
openDialog: function (row, deviceId, callback) {
console.log(row)
this.showDialog = true;
this.isEdit = false;
if (row) {
this.isEdit = true;
}
this.form = {};
this.deviceId = deviceId;
this.listChangeCallback = callback;
if (row != null) {
this.form = row;
}
},
onSubmit: function () {
console.log("onSubmit");
this.$axios({
method: 'post',
url:`/api/jt1078/terminal/channel/${this.isEdit?'update':'add'}/`,
params: {
terminalId: this.deviceId,
name: this.form.name,
channelId: this.form.channelId,
}
}).then((res) => {
console.log(res.data)
if (res.data.code === 0) {
this.listChangeCallback()
}else {
this.$message({
showClose: true,
message: res.data.msg,
type: "error",
});
}
}).catch(function (error) {
console.log(error);
});
},
close: function () {
this.showDialog = false;
this.$refs.form.resetFields();
},
},
};
</script>

View File

@@ -11,8 +11,8 @@
>
<div id="shared" style="margin-top: 1rem;margin-right: 100px;">
<el-form ref="form" :rules="rules" :model="form" label-width="200px" >
<el-form-item label="终端ID" prop="terminalId">
<el-input v-model="form.terminalId" clearable></el-input>
<el-form-item label="终端手机号" prop="phoneNumber">
<el-input v-model="form.phoneNumber" clearable></el-input>
</el-form-item>
<el-form-item>
<div style="float: right;">
@@ -62,7 +62,7 @@ export default {
console.log("onSubmit");
this.$axios({
method: 'post',
url:`/api/jt1078/device/${this.isEdit?'update':'add'}/`,
url:`/api/jt1078/terminal/${this.isEdit?'update':'add'}/`,
params: this.form
}).then((res) => {
console.log(res.data)

View File

@@ -5,6 +5,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 jtChannelList from '../components/JTChannelList.vue'
import channelList from '../components/channelList.vue'
import gbRecordDetail from '../components/GBRecordDetail.vue'
import pushVideoList from '../components/PushVideoList.vue'
@@ -58,6 +59,10 @@ export default new VueRouter({
path: '/jtDeviceList',
component: jtDeviceList,
},
{
path: '/jtChannelList/:deviceId',
component: jtChannelList,
},
{
path: '/pushVideoList',
component: pushVideoList,

View File

@@ -317,21 +317,21 @@ create table wvp_resources_tree (
create table wvp_jt_terminal (
id serial primary key,
device_id character varying(50),
phone_number character varying(50),
terminal_id character varying(50),
province_id character varying(50),
province_text character varying(100),
city_id character varying(50),
city_text character varying(100),
maker_id character varying(50),
device_model character varying(50),
model character varying(50),
plate_color character varying(50),
plate_no character varying(50),
authentication_code character varying(255),
longitude double precision,
latitude double precision,
status bool default false,
register_time character varying(50) not null,
register_time character varying(50) default null,
update_time character varying(50) not null,
create_time character varying(50) not null,
constraint uk_jt_device_id_device_id unique (id, phone_number)
@@ -339,7 +339,7 @@ create table wvp_jt_terminal (
create table wvp_jt_channel (
id serial primary key,
channel_id integer,
device_id integer,
terminal_id integer,
name character varying(255),
update_time character varying(50) not null,
create_time character varying(50) not null,

View File

@@ -316,30 +316,30 @@ create table wvp_resources_tree (
);
create table wvp_jt_terminal (
id serial primary key,
device_id character varying(50),
phone_number character varying(50),
province_id character varying(50),
province_text character varying(100),
city_id character varying(50),
city_text character varying(100),
maker_id character varying(50),
device_model character varying(50),
plate_color character varying(50),
plate_no character varying(50),
authentication_code character varying(255),
longitude double precision,
latitude double precision,
status bool default false,
register_time character varying(50) not null,
update_time character varying(50) not null,
create_time character varying(50) not null,
constraint uk_jt_device_id_device_id unique (id, phone_number)
id serial primary key,
phone_number character varying(50),
terminal_id character varying(50),
province_id character varying(50),
province_text character varying(100),
city_id character varying(50),
city_text character varying(100),
maker_id character varying(50),
model character varying(50),
plate_color character varying(50),
plate_no character varying(50),
authentication_code character varying(255),
longitude double precision,
latitude double precision,
status bool default false,
register_time character varying(50) default null,
update_time character varying(50) not null,
create_time character varying(50) not null,
constraint uk_jt_device_id_device_id unique (id, phone_number)
);
create table wvp_jt_channel (
id serial primary key,
channel_id integer,
device_id integer,
terminal_id integer,
name character varying(255),
update_time character varying(50) not null,
create_time character varying(50) not null,

View File

@@ -1,28 +1,28 @@
create table wvp_jt_terminal (
id serial primary key,
device_id character varying(50),
phone_number character varying(50),
province_id character varying(50),
province_text character varying(100),
city_id character varying(50),
city_text character varying(100),
maker_id character varying(50),
device_model character varying(50),
plate_color character varying(50),
plate_no character varying(50),
authentication_code character varying(255),
longitude double precision,
latitude double precision,
status bool default false,
register_time character varying(50) not null,
update_time character varying(50) not null,
create_time character varying(50) not null,
constraint uk_jt_device_id_device_id unique (id, phone_number)
id serial primary key,
phone_number character varying(50),
terminal_id character varying(50),
province_id character varying(50),
province_text character varying(100),
city_id character varying(50),
city_text character varying(100),
maker_id character varying(50),
model character varying(50),
plate_color character varying(50),
plate_no character varying(50),
authentication_code character varying(255),
longitude double precision,
latitude double precision,
status bool default false,
register_time character varying(50) default null,
update_time character varying(50) not null,
create_time character varying(50) not null,
constraint uk_jt_device_id_device_id unique (id, phone_number)
);
create table wvp_jt_channel (
id serial primary key,
device_id integer,
terminal_id integer,
channel_id integer,
name character varying(255),
update_time character varying(50) not null,

View File

@@ -1,28 +1,28 @@
create table wvp_jt_terminal (
id serial primary key,
device_id character varying(50),
phone_number character varying(50),
province_id character varying(50),
province_text character varying(100),
city_id character varying(50),
city_text character varying(100),
maker_id character varying(50),
device_model character varying(50),
plate_color character varying(50),
plate_no character varying(50),
authentication_code character varying(255),
longitude double precision,
latitude double precision,
status bool default false,
register_time character varying(50) not null,
update_time character varying(50) not null,
create_time character varying(50) not null,
constraint uk_jt_device_id_device_id unique (id, phone_number)
id serial primary key,
phone_number character varying(50),
terminal_id character varying(50),
province_id character varying(50),
province_text character varying(100),
city_id character varying(50),
city_text character varying(100),
maker_id character varying(50),
model character varying(50),
plate_color character varying(50),
plate_no character varying(50),
authentication_code character varying(255),
longitude double precision,
latitude double precision,
status bool default false,
register_time character varying(50) default null,
update_time character varying(50) not null,
create_time character varying(50) not null,
constraint uk_jt_device_id_device_id unique (id, phone_number)
);
create table wvp_jt_channel (
id serial primary key,
channel_id integer,
device_id integer,
terminal_id integer,
name character varying(255),
update_time character varying(50) not null,
create_time character varying(50) not null,