修复bug

dev_xq_0.0.1-2
刘政 2 weeks ago
parent 9ee720b792
commit f856a9614d

@ -0,0 +1,34 @@
package com.sz.admin.monitor.controller;
import com.sz.admin.monitor.pojo.po.ComputerRoom;
import com.sz.admin.monitor.service.ComputerRoomService;
import com.sz.core.common.entity.ApiResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Profile;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* ClassName: ComputerRootController
* Package: com.sz.admin.monitor.controller
* Description:
*/
@Tag(name = "机房表")
@RestController
@RequestMapping("computerRoom")
@RequiredArgsConstructor
@Profile({"dev", "local", "preview"})
public class ComputerRoomController {
private final ComputerRoomService computerRoomService;
@Operation(summary = "获取变电站下的机房列表")
@GetMapping("/list")
public ApiResult<List<ComputerRoom>> getList(@RequestParam("substationId") Long substationId) {
return ApiResult.success(computerRoomService.getComputerRoomList(substationId));
}
}

@ -31,16 +31,14 @@ public class DataModelController {
}
/**
*
*
*
* @param dataModelDTO
* @return
*/
@PostMapping("/saveOrUpdate/modelData")
public ApiResult saveOrUpdateModelData(
@RequestBody DataModelDTO dataModelDTO,
HttpServletRequest request,
HttpServletResponse response) {
@RequestBody DataModelDTO dataModelDTO, HttpServletRequest request, HttpServletResponse response) {
return dataModelService.saveOrUpdateModelData(dataModelDTO, request, response);
}

@ -39,4 +39,9 @@ public class TreeController {
public ApiResult<List<TreeNodeVO>> getTreePreview() {
return ApiResult.success(treeService.buildTreePreview());
}
@Operation(summary = "获取变电站的机房的树型结构数据")
@GetMapping("/substation")
public ApiResult<List<TreeNodeVO>> getTreeSubstation() {
return ApiResult.success(treeService.buildTreeComputeRoom());
}
}

@ -0,0 +1,12 @@
package com.sz.admin.monitor.mapper;
import com.mybatisflex.core.BaseMapper;
import com.sz.admin.monitor.pojo.po.ComputerRoom;
/**
* ClassName: ComputeRoomMapper
* Package: com.sz.admin.monitor.mapper
* Description:
*/
public interface ComputeRoomMapper extends BaseMapper<ComputerRoom> {
}

@ -2,12 +2,24 @@ package com.sz.admin.monitor.mapper;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.update.UpdateChain;
import com.sz.admin.monitor.pojo.po.ModelContentDO;
import java.util.Set;
/**
* @description:
* @author xq
* @version 1.0
*/
public interface ModelContentMapper extends BaseMapper<ModelContentDO> {
default void deleteByRoomIds(Set<Long> roomIds)
{
QueryWrapper wrapper = QueryWrapper.create()
.select()
.from(ModelContentDO.class)
.where(ModelContentDO::getRoomId).in(roomIds);
this.deleteByQuery(wrapper);
}
}

@ -1,6 +1,7 @@
package com.sz.admin.monitor.pojo.dto.dataModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -22,6 +23,15 @@ public class DataModelDTO {
*
*/
private CanvasCfgDTO canvasCfg;
/**
* ID
*/
private Long substationId;
/**
*ID
*/
private Long roomId;
/**
*

@ -34,6 +34,16 @@ public class ModelContentDTO {
*/
private Integer modelIndex=99;
/**
* ID
*/
private Long substationId;
/**
*ID
*/
private Long roomId;
/**
*
*/

@ -0,0 +1,28 @@
package com.sz.admin.monitor.pojo.po;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import com.sz.mysql.EntityChangeListener;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* ClassName: ComputerRoom
* Package: com.sz.admin.monitor.pojo.po
* Description:
*/
@Data
@Table(value = "ry_computer_room", onInsert = EntityChangeListener.class, onUpdate = EntityChangeListener.class)
@Schema(description = "机房表")
public class ComputerRoom {
@Id(keyType = KeyType.Auto)
@Schema(description = "id")
private Long id;
@Schema(description = "名称")
private String name;
@Schema(description = "描述")
private String description;
@Schema(description = "变电站ID")
private Long substationId;
}

@ -34,6 +34,17 @@ public class ModelContentDO {
@Schema(description = "模型id")
private String id;
/**
* ID
*/
@Schema(description = "变电站ID")
private Long substationId;
/**
*ID
*/
@Schema(description = "机房ID")
private Long roomId;
/**
*
*/

@ -23,4 +23,9 @@ public class DataModelQue {
*
*/
private String menuType;
/**
* ID
*/
private Long roomId;
}

@ -0,0 +1,13 @@
package com.sz.admin.monitor.pojo.vo.tree;
import lombok.Data;
/**
* ClassName: ComputerRoomNodeVO
* Package: com.sz.admin.monitor.pojo.vo.tree
* Description:
*/
@Data
public class ComputerRoomNodeVO extends TreeNodeVO{
private Long substationId; //所属变电站
}

@ -17,7 +17,7 @@ import java.util.List;
public class TreeNodeVO {
private Long id;
private String name;
private Integer type; // 0: Region, 1: Substation, 2: NVR,3: Camera
private Integer type; // 0: Region, 1: Substation, 2: NVR,3: Camera,4: room
private List<TreeNodeVO> children;
public TreeNodeVO(Long id, String name, Integer type) {
this.id = id;

@ -0,0 +1,17 @@
package com.sz.admin.monitor.service;
import com.mybatisflex.core.service.IService;
import com.sz.admin.monitor.pojo.po.CanvasCfgDO;
import com.sz.admin.monitor.pojo.po.ComputerRoom;
import java.util.List;
/**
* ClassName: ComputerRoomService
* Package: com.sz.admin.monitor.service
* Description:
*/
public interface ComputerRoomService extends IService<ComputerRoom> {
// 获取变电站的机房列表
List<ComputerRoom> getComputerRoomList(Long substationId);
}

@ -14,5 +14,5 @@ import java.util.List;
* @version 1.0
*/
public interface ModelContentService extends IService<ModelContentDO> {
HashMap<String, List<String>> saveOrUpdateModel(List<ModelContentDTO> list,String menuType);
void saveOrUpdateModel(List<ModelContentDTO> list,String menuType);
}

@ -17,4 +17,7 @@ public interface TreeService {
// 获取视频预览的树型结构数据
List<TreeNodeVO> buildTreePreview();
List<TreeNodeVO> buildTreeComputeRoom();
}

@ -0,0 +1,48 @@
package com.sz.admin.monitor.service.impl;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.sz.admin.monitor.mapper.ComputeRoomMapper;
import com.sz.admin.monitor.mapper.NvrMapper;
import com.sz.admin.monitor.pojo.po.ComputerRoom;
import com.sz.admin.monitor.pojo.po.ModelContentDO;
import com.sz.admin.monitor.pojo.po.Nvr;
import com.sz.admin.monitor.pojo.po.table.ComputerRoomTableDef;
import com.sz.admin.monitor.pojo.po.table.ModelContentDOTableDef;
import com.sz.admin.monitor.pojo.po.table.NvrTableDef;
import com.sz.admin.monitor.service.ComputerRoomService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* ClassName: ComputerRoomServiceImpl
* Package: com.sz.admin.monitor.service.impl
* Description:
*/
@Service
public class ComputerRoomServiceImpl extends ServiceImpl<ComputeRoomMapper, ComputerRoom> implements ComputerRoomService {
@Resource
private ComputeRoomMapper computerRoomMapper;
@Override
public List<ComputerRoom> getComputerRoomList(Long substationId) {
// 构建 EXISTS 子查询
QueryWrapper queryWrapper = QueryWrapper.create()
.select(
ComputerRoomTableDef.COMPUTER_ROOM.ID,
ComputerRoomTableDef.COMPUTER_ROOM.SUBSTATION_ID,
ComputerRoomTableDef.COMPUTER_ROOM.NAME,
ComputerRoomTableDef.COMPUTER_ROOM.DESCRIPTION
)
.from(ComputerRoomTableDef.COMPUTER_ROOM)
.where(ComputerRoomTableDef.COMPUTER_ROOM.SUBSTATION_ID.eq(substationId))
.and(ComputerRoomTableDef.COMPUTER_ROOM.ID.in(
QueryWrapper.create()
.select(ModelContentDOTableDef.MODEL_CONTENT_DO.ROOM_ID)
.from(ModelContentDOTableDef.MODEL_CONTENT_DO)
));
return computerRoomMapper.selectListByQuery(queryWrapper);
}
}

@ -64,10 +64,6 @@ public class DataModelServiceImpl {
// 获取画板数据
CanvasCfgDO canvasCfgDO = canvasCfgService.getOne(queryWrapper);
// CanvasCfgDO canvasCfgDO = canvasCfgService.getOne(new QueryWrapper<CanvasCfgDO>()
// .eq(CanvasCfgDO.USER_ID, que.getUserId())
// .last("limit 1")
// );
if (ObjectUtil.isEmpty(canvasCfgDO)) {
canvasCfgDO = initCanvasCfg();
canvasCfgService.saveOrUpdate(canvasCfgDO);
@ -79,10 +75,6 @@ public class DataModelServiceImpl {
.eq(GridCfgDO.USER_ID, que.getUserId())
.limit(1)
);
// GridCfgDO gridCfgDO = gridCfgService.getOne(new QueryWrapper<GridCfgDO>()
// .eq(GridCfgDO.USER_ID, userId)
// .last("limit 1")
// );
if (ObjectUtil.isEmpty(gridCfgDO)) {
gridCfgDO = initGridCfg();
gridCfgService.saveOrUpdate(gridCfgDO);
@ -94,13 +86,8 @@ public class DataModelServiceImpl {
.eq(UserModelContentDO.USER_ID, userId)
.eq(UserModelContentDO.MENU_TYPE, que.getMenuType())
);
// List<UserModelContentDO> userModelList = userModelContentService.list(new QueryWrapper<UserModelContentDO>()
// .eq(UserModelContentDO.USER_ID, userId)
// .eq(UserModelContentDO.MENU_TYPE, que.getMenuType())
// );
ArrayList<ModelContentDTO> objects = new ArrayList<>();
if (CollectionUtil.isEmpty(userModelList)) {
DataModelDTO build = DataModelDTO.builder()
.canvasCfg(CanvasCfgDO.doConvertDTO(canvasCfgDO))
@ -110,17 +97,17 @@ public class DataModelServiceImpl {
return ApiResult.success(build);
}
List<String> collect = userModelList.stream()
.map(item -> item.getModelContentId())
.collect(Collectors.toList());
// List<String> collect = userModelList.stream()
// .map(item -> item.getModelContentId())
// .collect(Collectors.toList());
List<ModelContentDO> modelContentDOS = modelContentService.list(QueryWrapper.create()
.from(ModelContentDO.class)
.in(ModelContentDO.ID, collect)
.eq(ModelContentDO::getRoomId, que.getRoomId())
// .in(ModelContentDO.ID, collect)
.orderBy(ModelContentDO.MODEL_INDEX, true)
);
// List<ModelContentDO> modelContentDOS = modelContentService.listByIds(collect);
for (ModelContentDO modelContentDO : modelContentDOS) {
objects.add(ModelContentDO.doConvertDTO(modelContentDO));
}
@ -185,83 +172,19 @@ public class DataModelServiceImpl {
for (int i = 0; i < dataModelDTO.getJson().size(); i++) {
ModelContentDTO modelContentDTO = dataModelDTO.getJson().get(i);
modelContentDTO.setModelIndex(i);
modelContentDTO.setSubstationId(dataModelDTO.getSubstationId());
modelContentDTO.setRoomId(dataModelDTO.getRoomId());
json.add(modelContentDTO);
}
//保存、更新面板
canvasCfg.setUserId(userId);
canvasCfgService.saveOrUpdateCanvas(canvasCfg);
//保存、更新网格
gridCfg.setUserId(userId);
gridCfgService.saveOrUpdateGrid(gridCfg);
//保存数据模型
HashMap<String, List<String>> map = modelContentService.saveOrUpdateModel(json, dataModelDTO.getMenuType());
//获取中间表
List<UserModelContentDO> list = userModelContentService.list(QueryWrapper.create()
.from(UserModelContentDO.class)
.eq(UserModelContentDO.USER_ID, userId) //先写死
.eq(UserModelContentDO.MENU_TYPE, dataModelDTO.getMenuType())
);
// List<UserModelContentDO> list = userModelContentService.list(new QueryWrapper<UserModelContentDO>()
// .eq(UserModelContentDO.USER_ID, userId) //先写死
// .eq(UserModelContentDO.MENU_TYPE, dataModelDTO.getMenuType())
// );
if (CollectionUtil.isEmpty(map)) {
List<String> modelIds = list.stream()
.map(item -> item.getModelContentId())
.collect(Collectors.toList());
modelContentService.removeByIds(modelIds);
userModelContentService.remove(QueryWrapper.create()
.from(UserModelContentDO.class)
.eq(UserModelContentDO.USER_ID, userId)
.eq(UserModelContentDO.MENU_TYPE, dataModelDTO.getMenuType()));
return ApiResult.success();
}
modelContentService.saveOrUpdateModel(json, dataModelDTO.getMenuType());
//增加的id集合
List<String> addIdModels = map.get("addIdModels");
//跟新的id集合
List<String> updateIdModels = map.get("updateIdModels");
if (CollectionUtil.isEmpty(addIdModels))
return ApiResult.success();
//中间表没有数据,直接添加
if (CollectionUtil.isEmpty(list)) {
List<String> allModelIds = Stream.concat(addIdModels.stream(), updateIdModels.stream())
.distinct()
.collect(Collectors.toList());
for (String modelId : allModelIds) {
UserModelContentDO build = UserModelContentDO.builder()
.userId(userId)
.menuType(dataModelDTO.getMenuType())
.modelContentId(modelId)
.build();
userModelContentService.save(build);
}
return ApiResult.success();
} else { //中间表有数据
List<String> collect = list.stream().map(UserModelContentDO::getModelContentId).collect(Collectors.toList());
collect.removeAll(updateIdModels);
modelContentService.removeByIds(collect);
List<String> targetCollect = list.stream()
.filter(item -> collect.contains(item.getModelContentId()))
.map(UserModelContentDO::getId)
.collect(Collectors.toList());
userModelContentService.removeByIds(targetCollect);
for (String addIdModel : addIdModels) {
UserModelContentDO build = UserModelContentDO.builder()
.userId(userId)
.menuType(dataModelDTO.getMenuType())
.modelContentId(addIdModel)
.build();
userModelContentService.save(build);
}
}
return ApiResult.success();
}

@ -11,12 +11,15 @@ import com.sz.admin.monitor.pojo.po.ModelContentDO;
import com.sz.admin.monitor.pojo.po.UserModelContentDO;
import com.sz.admin.monitor.service.ModelContentService;
import com.sz.admin.monitor.service.UserModelContentService;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author xq
@ -28,7 +31,8 @@ public class ModelContentServiceImpl extends ServiceImpl<ModelContentMapper, Mod
@Autowired
private UserModelContentService userModelContentService;
@Resource
private ModelContentMapper modelContentMapper;
/**
*
*
@ -37,44 +41,21 @@ public class ModelContentServiceImpl extends ServiceImpl<ModelContentMapper, Mod
* @return map key addIdModelsid updateIdModelsid
*/
@Override
public HashMap<String, List<String>> saveOrUpdateModel(List<ModelContentDTO> list, String menuType) {
public void saveOrUpdateModel(List<ModelContentDTO> list, String menuType) {
if (CollectionUtil.isEmpty(list))
return null;
//获取需要保存的id,然后返回给中间表
List<String> addIdModels = new ArrayList<>();
List<String> updateIdModels = new ArrayList<>();
return;
// 获取所有roomIds
Set<Long> roomIds = list.stream().map(ModelContentDTO::getRoomId).collect(Collectors.toSet());
// DELETE FROM ry_model_content WHERE room_id in '1'
if (!roomIds.isEmpty())
{
modelContentMapper.deleteByRoomIds(roomIds);
}
for (ModelContentDTO modelContentDTO : list) {
ModelContentDO modelContentDO = ModelContentDTO.dtoConvertDO(modelContentDTO);
disposeDO(modelContentDO, updateIdModels);
//这种情况可能是直接复用其他组件
if (StrUtil.isNotEmpty(modelContentDO.getId())) {
QueryWrapper queryWrapper = QueryWrapper.create()
.select()
.from(UserModelContentDO.class)
.eq(UserModelContentDO.MODEL_CONTENT_ID, modelContentDO.getId())
.eq(UserModelContentDO.MENU_TYPE, menuType)
//true:ASC false:DESC
.orderBy(UserModelContentDO.ID, false)
.limit(1);
List<UserModelContentDO> doList = userModelContentService.list(queryWrapper);
if (CollectionUtil.isEmpty(doList))
modelContentDO.setId(null);
else
updateIdModels.add(modelContentDO.getId());
}
saveOrUpdate(modelContentDO);
if (!updateIdModels.contains(modelContentDO.getId()))
addIdModels.add(modelContentDO.getId());
disposeDO(modelContentDO);
save(modelContentDO);
}
HashMap<String, List<String>> map = new HashMap<>();
map.put("addIdModels", addIdModels);
map.put("updateIdModels", updateIdModels);
return map;
}
/**
@ -82,7 +63,7 @@ public class ModelContentServiceImpl extends ServiceImpl<ModelContentMapper, Mod
*
* @param modelContentDO
*/
public void disposeDO(ModelContentDO modelContentDO, List<String> updateIdModels) {
public void disposeDO(ModelContentDO modelContentDO) {
//这里是空肯定是add
if (StrUtil.isEmpty(modelContentDO.getId()))
return;

@ -1,16 +1,11 @@
package com.sz.admin.monitor.service.impl;
import com.mybatisflex.core.query.QueryWrapper;
import com.sz.admin.monitor.mapper.CameraMapper;
import com.sz.admin.monitor.mapper.NvrMapper;
import com.sz.admin.monitor.mapper.RegionMapper;
import com.sz.admin.monitor.mapper.SubstationMapper;
import com.sz.admin.monitor.mapper.*;
import com.sz.admin.monitor.pojo.po.Camera;
import com.sz.admin.monitor.pojo.po.Nvr;
import com.sz.admin.monitor.pojo.po.Region;
import com.sz.admin.monitor.pojo.po.Substation;
import com.sz.admin.monitor.pojo.po.*;
import com.sz.admin.monitor.pojo.vo.tree.CameraNodeVO;
import com.sz.admin.monitor.pojo.vo.tree.ComputerRoomNodeVO;
import com.sz.admin.monitor.pojo.vo.tree.NvrNodeVO;
import com.sz.admin.monitor.pojo.vo.tree.TreeNodeVO;
import com.sz.admin.monitor.service.TreeService;
@ -38,6 +33,8 @@ public class TreeServiceImpl implements TreeService {
private NvrMapper nvrMapper;
@Resource
private CameraMapper cameraMapper;
@Resource
private ComputeRoomMapper computeRoomMapper;
@Override
public List<TreeNodeVO> buildTree() {
@ -68,6 +65,37 @@ public class TreeServiceImpl implements TreeService {
return treeRootList;
}
@Override
public List<TreeNodeVO> buildTreeComputeRoom() {
// 查询出所有的边电站
List<Substation> substationList = substationMapper.selectAll();
List<TreeNodeVO> treeRootList = new ArrayList<>();
for (Substation substation : substationList) {
TreeNodeVO rootNode = new TreeNodeVO(substation.getId(), substation.getName(), 1, null);
List<TreeNodeVO> computeChildren = loadChildrenForRoom(substation.getId());
rootNode.setChildren(computeChildren);
treeRootList.add(rootNode);
}
return treeRootList;
}
private List<TreeNodeVO> loadChildrenForRoom(Long id) {
QueryWrapper computeRoomQuery = new QueryWrapper();
computeRoomQuery.eq("substation_id", id);
List<ComputerRoom> computeRoomList = computeRoomMapper.selectListByQuery(computeRoomQuery);
List<TreeNodeVO> children = new ArrayList<>();
for (ComputerRoom computeRoom : computeRoomList) {
ComputerRoomNodeVO computeRoomNode =new ComputerRoomNodeVO();
computeRoomNode.setId(computeRoom.getId());
computeRoomNode.setName(computeRoom.getName());
computeRoomNode.setType(4);
computeRoomNode.setSubstationId(computeRoom.getSubstationId());
computeRoomNode.setChildren(null);
children.add(computeRoomNode);
}
return children;
}
private List<TreeNodeVO> loadChildrenForRegion(Long id) {
QueryWrapper childRegionQuery = new QueryWrapper();
childRegionQuery.eq("parent_id", id);

@ -12,6 +12,8 @@ create table ry_model_content
(
id varchar(32) not null comment '模型id'
primary key,
substation_id bigint null comment '变电站ID',
room_id bigint null comment '机房ID',
title varchar(32) null comment '模型名称',
type varchar(32) null comment '模型类型',
binfo varchar(128) null comment '位置json',
@ -27,7 +29,15 @@ create table ry_model_content
`index` int null comment '索引'
)
comment '模型内容';
create table ry_computer_room
(
id bigint not null comment '机房id' auto_increment
primary key,
substation_id bigint null comment '变电站ID',
name varchar(32) null comment '机房名称',
description varchar(128) null comment '机房描述'
)
comment '机房表';
create table ry_canvas_cfg
(

Loading…
Cancel
Save