[录制计划] 修复关联通道

dev/数据库统合
648540858 2024-11-27 17:59:54 +08:00
parent c2ad767d89
commit 812ddd3bbc
7 changed files with 75 additions and 221 deletions

View File

@ -20,6 +20,7 @@ public class CatalogData {
private Device device; private Device device;
private String errorMsg; private String errorMsg;
private Set<String> redisKeysForChannel = new HashSet<>(); private Set<String> redisKeysForChannel = new HashSet<>();
private Set<String> errorChannel = new HashSet<>();
private Set<String> redisKeysForRegion = new HashSet<>(); private Set<String> redisKeysForRegion = new HashSet<>();
private Set<String> redisKeysForGroup = new HashSet<>(); private Set<String> redisKeysForGroup = new HashSet<>();

View File

@ -93,8 +93,10 @@ public interface DeviceChannelMapper {
@SelectProvider(type = DeviceChannelProvider.class, method = "queryChannelsByDeviceDbId") @SelectProvider(type = DeviceChannelProvider.class, method = "queryChannelsByDeviceDbId")
List<DeviceChannel> queryChannelsByDeviceDbId(@Param("deviceDbId") int deviceDbId); List<DeviceChannel> queryChannelsByDeviceDbId(@Param("deviceDbId") int deviceDbId);
@Select("select id from wvp_device_channel where device_db_id in " + @Select(value = {" <script> " +
" <foreach item='item' index='index' collection='deviceDbIds' open='(' separator=',' close=')'> #{item} </foreach> </if>") "select id from wvp_device_channel where device_db_id in " +
" <foreach item='item' index='index' collection='deviceDbIds' open='(' separator=',' close=')'> #{item} </foreach>" +
" </script>"})
List<Integer> queryChaneIdListByDeviceDbIds(List<Integer> deviceDbIds); List<Integer> queryChaneIdListByDeviceDbIds(List<Integer> deviceDbIds);
@Delete("DELETE FROM wvp_device_channel WHERE device_db_id=#{deviceId}") @Delete("DELETE FROM wvp_device_channel WHERE device_db_id=#{deviceId}")

View File

@ -283,7 +283,7 @@ public class CatalogDataManager implements CommandLineRunner {
if (catalogData == null) { if (catalogData == null) {
return 0; return 0;
} }
return catalogData.getRedisKeysForChannel().size(); return catalogData.getRedisKeysForChannel().size() + catalogData.getErrorChannel().size();
} }
public int sumNum(String deviceId, int sn) { public int sumNum(String deviceId, int sn) {

View File

@ -2,10 +2,8 @@ package com.genersoft.iot.vmp.service.impl;
import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel;
import com.genersoft.iot.vmp.gb28181.bean.PlatformChannel;
import com.genersoft.iot.vmp.gb28181.dao.CommonGBChannelMapper; import com.genersoft.iot.vmp.gb28181.dao.CommonGBChannelMapper;
import com.genersoft.iot.vmp.service.IRecordPlanService; import com.genersoft.iot.vmp.service.IRecordPlanService;
import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
import com.genersoft.iot.vmp.service.bean.RecordPlan; import com.genersoft.iot.vmp.service.bean.RecordPlan;
import com.genersoft.iot.vmp.service.bean.RecordPlanItem; import com.genersoft.iot.vmp.service.bean.RecordPlanItem;
import com.genersoft.iot.vmp.storager.dao.RecordPlanMapper; import com.genersoft.iot.vmp.storager.dao.RecordPlanMapper;
@ -99,8 +97,11 @@ public class RecordPlanServiceImpl implements IRecordPlanService {
@Override @Override
public void link(List<Integer> channelIds, Integer planId) { public void link(List<Integer> channelIds, Integer planId) {
if (channelIds == null || channelIds.isEmpty()) {
log.info("[录制计划] 关联/移除关联时, 通道编号必须存在");
throw new ControllerException(ErrorCode.ERROR100.getCode(), "通道编号必须存在");
}
if (planId == null) { if (planId == null) {
log.info("[录制计划] 移除通道关联的计划");
channelMapper.removeRecordPlan(channelIds); channelMapper.removeRecordPlan(channelIds);
}else { }else {
channelMapper.addRecordPlan(channelIds, planId); channelMapper.addRecordPlan(channelIds, planId);

View File

@ -3,7 +3,6 @@ package com.genersoft.iot.vmp.vmanager.recordPlan;
import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.conf.security.JwtUtils; import com.genersoft.iot.vmp.conf.security.JwtUtils;
import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel;
import com.genersoft.iot.vmp.gb28181.bean.PlatformChannel;
import com.genersoft.iot.vmp.gb28181.service.IDeviceChannelService; import com.genersoft.iot.vmp.gb28181.service.IDeviceChannelService;
import com.genersoft.iot.vmp.service.IRecordPlanService; import com.genersoft.iot.vmp.service.IRecordPlanService;
import com.genersoft.iot.vmp.service.bean.RecordPlan; import com.genersoft.iot.vmp.service.bean.RecordPlan;
@ -50,25 +49,27 @@ public class RecordPlanController {
@ResponseBody @ResponseBody
@PostMapping("/link") @PostMapping("/link")
@Operation(summary = "通道关联录制计划", security = @SecurityRequirement(name = JwtUtils.HEADER)) @Operation(summary = "通道关联录制计划", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "param", description = "通道关联录制计划", required = false) @Parameter(name = "param", description = "通道关联录制计划", required = true)
public void link(@RequestBody RecordPlanParam param) { public void link(@RequestBody RecordPlanParam param) {
if (param.getChannelIds() == null && param.getDeviceDbIds() == null) { if (param.getAllLink() != null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "通道ID和国标设备ID不可都为NULL"); if (param.getAllLink()) {
}
if (param.getAll() != null) {
if (param.getAll()) {
recordPlanService.linkAll(param.getPlanId()); recordPlanService.linkAll(param.getPlanId());
}else { }else {
recordPlanService.cleanAll(param.getPlanId()); recordPlanService.cleanAll(param.getPlanId());
} }
return; return;
} }
if (param.getChannelIds() == null && param.getDeviceDbIds() == null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "通道ID和国标设备ID不可都为NULL");
}
List<Integer> channelIds = new ArrayList<>(); List<Integer> channelIds = new ArrayList<>();
if (param.getChannelIds() != null) { if (param.getChannelIds() != null) {
channelIds.addAll(param.getChannelIds()); channelIds.addAll(param.getChannelIds());
}else { }else {
List<Integer> chanelIdList = deviceChannelService.queryChaneIdListByDeviceDbIds(param.getDeviceDbIds()); List<Integer> chanelIdList = deviceChannelService.queryChaneIdListByDeviceDbIds(param.getDeviceDbIds());
if (chanelIdList == null || chanelIdList.isEmpty()) { if (chanelIdList != null && !chanelIdList.isEmpty()) {
channelIds = chanelIdList; channelIds = chanelIdList;
} }
} }

View File

@ -1,7 +1,5 @@
package com.genersoft.iot.vmp.vmanager.recordPlan.bean; package com.genersoft.iot.vmp.vmanager.recordPlan.bean;
import com.genersoft.iot.vmp.service.bean.RecordPlan;
import com.genersoft.iot.vmp.service.bean.RecordPlanItem;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@ -18,7 +16,7 @@ public class RecordPlanParam {
private List<Integer> deviceDbIds; private List<Integer> deviceDbIds;
@Schema(description = "全部关联/全部取消关联") @Schema(description = "全部关联/全部取消关联")
private Boolean all; private Boolean allLink;
@Schema(description = "录制计划ID, ID为空是删除关联的计划") @Schema(description = "录制计划ID, ID为空是删除关联的计划")
private Integer planId; private Integer planId;

View File

@ -116,17 +116,19 @@ export default {
}; };
}, },
created() { created() {},
this.initData();
},
destroyed() {}, destroyed() {},
methods: { methods: {
openDialog(planId, closeCallback) { openDialog(planId, closeCallback) {
this.planId = planId this.planId = planId
this.showDialog = true this.showDialog = true
this.closeCallback = closeCallback this.closeCallback = closeCallback
this.initData()
}, },
initData: function () { initData: function () {
this.currentPage= 1;
this.count= 15;
this.total= 0;
this.getChannelList(); this.getChannelList();
}, },
currentChange: function (val) { currentChange: function (val) {
@ -168,6 +170,36 @@ export default {
handleSelectionChange: function (val){ handleSelectionChange: function (val){
this.multipleSelection = val; this.multipleSelection = val;
}, },
linkPlan: function (data){
this.loading = true
return this.$axios({
method: 'post',
url: `/api/record/plan/link`,
data: data
}).then((res)=> {
if (res.data.code === 0) {
this.$message.success({
showClose: true,
message: "保存成功"
})
this.getChannelList()
}else {
this.$message.error({
showClose: true,
message: res.data.msg
})
}
this.loading = false
}).catch((error)=> {
this.$message.error({
showClose: true,
message: error
})
this.loading = false
})
},
add: function (row) { add: function (row) {
let channels = [] let channels = []
for (let i = 0; i < this.multipleSelection.length; i++) { for (let i = 0; i < this.multipleSelection.length; i++) {
@ -180,41 +212,10 @@ export default {
}) })
return; return;
} }
this.loading = true
this.linkPlan({ this.linkPlan({
planId: this.planId, planId: this.planId,
channelIds: channels channelIds: channels
}).cache
this.$axios({
method: 'post',
url: `/api/record/plan/link`,
data: {
planId: this.planId,
channelIds: channels
}
}).then((res)=> {
if (res.data.code === 0) {
this.$message.success({
showClose: true,
message: "保存成功"
}) })
this.getChannelList()
}else {
this.$message.error({
showClose: true,
message: res.data.msg
})
}
this.loading = false
}).catch((error)=> {
this.$message.error({
showClose: true,
message: error
})
this.loading = false
});
}, },
addAll: function (row) { addAll: function (row) {
this.$confirm("确定全部添加?", '提示', { this.$confirm("确定全部添加?", '提示', {
@ -223,35 +224,10 @@ export default {
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.loading = true this.linkPlan({
this.$axios({
method: 'post',
url: `/api/record/plan/link`,
data: {
planId: this.planId, planId: this.planId,
all: true allLink: true
}
}).then((res)=> {
if (res.data.code === 0) {
this.$message.success({
showClose: true,
message: "保存成功"
}) })
this.getChannelList()
}else {
this.$message.error({
showClose: true,
message: res.data.msg
})
}
this.loading = false
}).catch((error)=> {
this.$message.error({
showClose: true,
message: error
})
this.loading = false
});
}).catch(() => { }).catch(() => {
}); });
}, },
@ -262,34 +238,10 @@ export default {
for (let i = 0; i < rows.length; i++) { for (let i = 0; i < rows.length; i++) {
deviceIds.push(rows[i].id) deviceIds.push(rows[i].id)
} }
this.$axios({ this.linkPlan({
method: 'post',
url: `/api/record/plan/link`,
data: {
planId: this.planId, planId: this.planId,
deviceDbIds: deviceIds deviceDbIds: deviceIds
}
}).then((res)=> {
if (res.data.code === 0) {
this.$message.success({
showClose: true,
message: "保存成功"
}) })
this.getChannelList()
}else {
this.$message.error({
showClose: true,
message: res.data.msg
})
}
this.loading = false
}).catch((error)=> {
this.$message.error({
showClose: true,
message: error
})
this.loading = false
});
}) })
}, },
@ -299,33 +251,9 @@ export default {
for (let i = 0; i < rows.length; i++) { for (let i = 0; i < rows.length; i++) {
deviceIds.push(rows[i].id) deviceIds.push(rows[i].id)
} }
this.$axios({ this.linkPlan({
method: 'post',
url: `/api/record/plan/link`,
data: {
deviceDbIds: deviceIds deviceDbIds: deviceIds
}
}).then((res)=> {
if (res.data.code === 0) {
this.$message.success({
showClose: true,
message: "保存成功"
}) })
this.getChannelList()
}else {
this.$message.error({
showClose: true,
message: res.data.msg
})
}
this.loading = false
}).catch((error)=> {
this.$message.error({
showClose: true,
message: error
})
this.loading = false
});
}) })
}, },
remove: function (row) { remove: function (row) {
@ -340,36 +268,10 @@ export default {
}) })
return; return;
} }
this.loading = true
this.$axios({ this.linkPlan({
method: 'delete',
url: `/api/platform/channel/remove`,
data: {
platformId: this.platformId,
channelIds: channels channelIds: channels
}
}).then((res)=> {
if (res.data.code === 0) {
this.$message.success({
showClose: true,
message: "保存成功"
}) })
this.getChannelList()
}else {
this.$message.error({
showClose: true,
message: res.data.msg
})
}
this.loading = false
}).catch((error)=> {
this.$message.error({
showClose: true,
message: error
})
this.loading = false
});
}, },
removeAll: function (row) { removeAll: function (row) {
@ -379,63 +281,12 @@ export default {
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.loading = true this.linkPlan({
this.$axios({ planId: this.planId,
method: 'delete', allLink: false
url: `/api/platform/channel/remove`,
data: {
platformId: this.platformId,
all: true
}
}).then((res)=> {
if (res.data.code === 0) {
this.$message.success({
showClose: true,
message: "保存成功"
}) })
this.getChannelList()
}else {
this.$message.error({
showClose: true,
message: res.data.msg
})
}
this.loading = false
}).catch((error)=> {
this.$message.error({
showClose: true,
message: error
})
this.loading = false
});
}).catch(() => { }).catch(() => {
}); });
},
saveCustom: function (row) {
this.$axios({
method: 'post',
url: `/api/platform/channel/custom/update`,
data: row
}).then((res)=> {
if (res.data.code === 0) {
this.$message.success({
showClose: true,
message: "保存成功"
})
this.initData()
}else {
this.$message.error({
showClose: true,
message: res.data.msg
})
}
}).catch((error)=> {
this.$message.error({
showClose: true,
message: error
})
});
}, },
search: function () { search: function () {
this.currentPage = 1; this.currentPage = 1;