Compare commits
12 Commits
main
...
dev_xq_0.0
| Author | SHA1 | Date |
|---|---|---|
|
|
9ee720b792 | 3 weeks ago |
|
|
da8f4f3307 | 3 weeks ago |
|
|
8fcae28c5e | 3 weeks ago |
|
|
e1bbab6710 | 3 weeks ago |
|
|
4cbb8e9b89 | 3 weeks ago |
|
|
d5892fc679 | 3 weeks ago |
|
|
95b62c3b0d | 3 weeks ago |
|
|
52f8c1ad80 | 3 weeks ago |
|
|
abc58af9d2 | 3 weeks ago |
|
|
417322f1f4 | 3 weeks ago |
|
|
17bc3392ad | 4 weeks ago |
|
|
c5cdcd4730 | 4 weeks ago |
@ -0,0 +1,51 @@
|
|||||||
|
package com.sz.admin.monitor.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.dev33.satoken.annotation.SaIgnore;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.DataModelDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.que.dataModel.DataModelQue;
|
||||||
|
import com.sz.admin.monitor.service.impl.DataModelServiceImpl;
|
||||||
|
import com.sz.core.common.entity.ApiResult;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:
|
||||||
|
* @date 2026/3/14 12:35
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/data/model")
|
||||||
|
public class DataModelController {
|
||||||
|
@Autowired
|
||||||
|
private DataModelServiceImpl dataModelService;
|
||||||
|
|
||||||
|
@PostMapping("/getModelData")
|
||||||
|
@SaIgnore
|
||||||
|
public ApiResult<DataModelDTO> getModelData(@RequestBody DataModelQue que) {
|
||||||
|
return dataModelService.getModelData(que);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存或者更新数据模型
|
||||||
|
*
|
||||||
|
* @param dataModelDTO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/saveOrUpdate/modelData")
|
||||||
|
public ApiResult saveOrUpdateModelData(
|
||||||
|
@RequestBody DataModelDTO dataModelDTO,
|
||||||
|
HttpServletRequest request,
|
||||||
|
HttpServletResponse response) {
|
||||||
|
return dataModelService.saveOrUpdateModelData(dataModelDTO, request, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/test")
|
||||||
|
public ApiResult test() {
|
||||||
|
return ApiResult.success(dataModelService.getList());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,67 @@
|
|||||||
|
package com.sz.admin.monitor.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.dev33.satoken.annotation.SaIgnore;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.file.FileEntityDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.file.FileStorageDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.que.file.FileStorageQue;
|
||||||
|
import com.sz.admin.monitor.service.impl.FileServiceImpl;
|
||||||
|
import com.sz.core.common.entity.ApiResult;
|
||||||
|
import com.sz.core.common.entity.PageResult;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:
|
||||||
|
* @date 2026/2/2 22:31
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/fileStorage")
|
||||||
|
public class FileController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FileServiceImpl fileService;
|
||||||
|
|
||||||
|
@GetMapping("/deleteFileById")
|
||||||
|
public ApiResult<String> deleteFileById(@RequestParam("id") String id){
|
||||||
|
return fileService.deleteFileById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/editFileNameById")
|
||||||
|
public ApiResult<String> editFileNameById(@RequestBody FileEntityDTO dto){
|
||||||
|
return fileService.editFileNameById(dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/file/list")
|
||||||
|
public ApiResult<PageResult<FileEntityDTO>> getFileObjectList(@RequestBody FileStorageQue que){
|
||||||
|
return fileService.getFileObjectList(que);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getPreviewFile/{id}")
|
||||||
|
@SaIgnore
|
||||||
|
public ResponseEntity<byte[]> getPreviewFile(@PathVariable String id){
|
||||||
|
return fileService.getPreviewFile(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getFile")
|
||||||
|
@SaIgnore
|
||||||
|
public ApiResult<FileStorageDTO> getFile(@RequestParam("id") String id) {
|
||||||
|
return fileService.getFile(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/saveFile")
|
||||||
|
@SaIgnore
|
||||||
|
public ApiResult<FileStorageDTO> saveFile(@RequestParam("file") MultipartFile file) {
|
||||||
|
return fileService.saveFile(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/test")
|
||||||
|
public void test01(){
|
||||||
|
fileService.test01();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,18 +0,0 @@
|
|||||||
package com.sz.admin.monitor.listener.mode;
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ClassName: CameraDeleteEvent
|
|
||||||
* Package: com.sz.admin.monitor.listener.mode
|
|
||||||
* Description:
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@AllArgsConstructor
|
|
||||||
public class CameraDeleteEvent {
|
|
||||||
// 携带需要删除的摄像头 ID 集合
|
|
||||||
private List<Long> cameraIds;
|
|
||||||
}
|
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
package com.sz.admin.monitor.mapper;
|
||||||
|
|
||||||
|
|
||||||
|
import com.mybatisflex.core.BaseMapper;
|
||||||
|
import com.sz.admin.monitor.pojo.po.CanvasCfgDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description:画板
|
||||||
|
* @author xq
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public interface CanvasCfgMapper extends BaseMapper<CanvasCfgDO> {
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
package com.sz.admin.monitor.mapper;
|
||||||
|
|
||||||
|
import com.mybatisflex.core.BaseMapper;
|
||||||
|
import com.sz.admin.monitor.pojo.po.FileStorageDO;
|
||||||
|
|
||||||
|
public interface FileStorageMapper extends BaseMapper<FileStorageDO> {
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
package com.sz.admin.monitor.mapper;
|
||||||
|
|
||||||
|
|
||||||
|
import com.mybatisflex.core.BaseMapper;
|
||||||
|
import com.sz.admin.monitor.pojo.po.GridCfgDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 网格
|
||||||
|
* @author xq
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public interface GridCfgMapper extends BaseMapper<GridCfgDO> {
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
package com.sz.admin.monitor.mapper;
|
||||||
|
|
||||||
|
|
||||||
|
import com.mybatisflex.core.BaseMapper;
|
||||||
|
import com.sz.admin.monitor.pojo.po.ModelContentDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 存储模型的基本信息和配置
|
||||||
|
* @author xq
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public interface ModelContentMapper extends BaseMapper<ModelContentDO> {
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
package com.sz.admin.monitor.mapper;
|
||||||
|
|
||||||
|
import com.mybatisflex.core.BaseMapper;
|
||||||
|
import com.sz.admin.monitor.pojo.po.Substation;
|
||||||
|
import com.sz.admin.monitor.pojo.po.UserModelContentDO;
|
||||||
|
|
||||||
|
public interface UserModelContentMapper extends BaseMapper<UserModelContentDO> {
|
||||||
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.dto.dataModel;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:返回给前端的数据对象
|
||||||
|
* @date 2026/1/29 11:47
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class DataModelDTO {
|
||||||
|
/**
|
||||||
|
* 模型数据对象
|
||||||
|
*/
|
||||||
|
private CanvasCfgDTO canvasCfg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 画布配置数据对象
|
||||||
|
*/
|
||||||
|
private GridCfgDTO gridCfg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模型数据对象
|
||||||
|
*/
|
||||||
|
private List<ModelContentDTO> json;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 目录类型
|
||||||
|
*/
|
||||||
|
private String menuType;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.dto.dataModel;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.sz.admin.monitor.pojo.po.GridCfgDO;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网格配置数据对象
|
||||||
|
* @description: 存储网格的基本配置信息
|
||||||
|
* @author xq
|
||||||
|
* @date 2026/1/29 11:35
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class GridCfgDTO {
|
||||||
|
/**
|
||||||
|
* 网格id
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网格是否启用
|
||||||
|
*/
|
||||||
|
private Boolean enabled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对齐
|
||||||
|
*/
|
||||||
|
private Boolean align;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 大小
|
||||||
|
*/
|
||||||
|
private Integer size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转换为数据库对象
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static GridCfgDO dtoConvertDO(GridCfgDTO dto){
|
||||||
|
GridCfgDO gridCfgDO = BeanUtil.copyProperties(dto, GridCfgDO.class);
|
||||||
|
return gridCfgDO;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
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;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:
|
||||||
|
* @date 2026/1/29 11:50
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class UserModelContentDTO {
|
||||||
|
/**
|
||||||
|
* 表id
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
private String userId;
|
||||||
|
/**
|
||||||
|
* 目录类型
|
||||||
|
*/
|
||||||
|
private String menuType;
|
||||||
|
/**
|
||||||
|
* 模型内容
|
||||||
|
*/
|
||||||
|
private String modelContentId;
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.dto.file;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:
|
||||||
|
* @date 2026/2/3 14:27
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class FileEntityDTO {
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件名称
|
||||||
|
*/
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加时间
|
||||||
|
*/
|
||||||
|
private Long addTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取文件的path
|
||||||
|
*/
|
||||||
|
private String filePath;
|
||||||
|
}
|
||||||
@ -0,0 +1,61 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.dto.file;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.sz.admin.monitor.pojo.po.FileStorageDO;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:文件存储数据对象
|
||||||
|
* @date 2026/2/2 22:18
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class FileStorageDTO {
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件路径
|
||||||
|
*/
|
||||||
|
private String fileUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件大小
|
||||||
|
*/
|
||||||
|
private String fileSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件名称
|
||||||
|
*/
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件后缀
|
||||||
|
*/
|
||||||
|
private String fileSuffix;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* base64数据
|
||||||
|
*/
|
||||||
|
private String base64Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加时间
|
||||||
|
*/
|
||||||
|
private Date addTime;
|
||||||
|
|
||||||
|
public static FileStorageDO dtoConvertDO(FileStorageDTO dto) {
|
||||||
|
return BeanUtil.copyProperties(dto, FileStorageDO.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,69 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.po;
|
||||||
|
|
||||||
|
import com.mybatisflex.annotation.Id;
|
||||||
|
import com.mybatisflex.annotation.KeyType;
|
||||||
|
import com.mybatisflex.annotation.Table;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:文件存储数据对象
|
||||||
|
* @date 2026/2/2 22:18
|
||||||
|
*/
|
||||||
|
@Table("ry_file_storage")
|
||||||
|
@Schema(description = "文件存储数据对象")
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class FileStorageDO {
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
@Id(keyType = KeyType.Generator, value = "uuid")
|
||||||
|
@Schema(description = "主键ID")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件路径
|
||||||
|
*/
|
||||||
|
@Schema(description = "文件路径")
|
||||||
|
private String fileUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件大小
|
||||||
|
*/
|
||||||
|
@Schema(description = "文件大小")
|
||||||
|
private String fileSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件名称
|
||||||
|
*/
|
||||||
|
@Schema(description = "文件名称")
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件后缀
|
||||||
|
*/
|
||||||
|
@Schema(description = "文件后缀")
|
||||||
|
private String fileSuffix;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加时间
|
||||||
|
*/
|
||||||
|
@Schema(description = "添加时间")
|
||||||
|
private Date addTime;
|
||||||
|
|
||||||
|
public static final String ID="id";
|
||||||
|
public static final String FILE_URL="file_url";
|
||||||
|
public static final String FILE_SIZE="file_size";
|
||||||
|
public static final String FILE_NAME="file_name";
|
||||||
|
public static final String FILE_SUFFIX="file_suffix";
|
||||||
|
public static final String ADD_TIME="add_time";
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.po;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.mybatisflex.annotation.Id;
|
||||||
|
import com.mybatisflex.annotation.KeyType;
|
||||||
|
import com.mybatisflex.annotation.Table;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.GridCfgDTO;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网格配置数据对象
|
||||||
|
* @description: 存储网格的基本配置信息
|
||||||
|
* @author xq
|
||||||
|
* @date 2026/1/29 11:35
|
||||||
|
*/
|
||||||
|
@Table("ry_grid_cfg")
|
||||||
|
@Schema(description = "存储网格的基本配置信息")
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class GridCfgDO {
|
||||||
|
/**
|
||||||
|
* 网格id
|
||||||
|
*/
|
||||||
|
@Id(keyType = KeyType.Generator, value = "uuid")
|
||||||
|
@Schema(description = "主键ID")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
@Schema(description = "用户id")
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网格是否启用
|
||||||
|
*/
|
||||||
|
@Schema(description = "网格是否启用")
|
||||||
|
private Boolean enabled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对齐
|
||||||
|
*/
|
||||||
|
@Schema(description = "对齐")
|
||||||
|
private Boolean align;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 大小
|
||||||
|
*/
|
||||||
|
@Schema(description = "大小")
|
||||||
|
private Integer size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转换为DTO对象
|
||||||
|
* @param gridCfgDO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static GridCfgDTO doConvertDTO(GridCfgDO gridCfgDO){
|
||||||
|
GridCfgDTO gridCfgDTO = BeanUtil.copyProperties(gridCfgDO, GridCfgDTO.class);
|
||||||
|
return gridCfgDTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static final String ID = "id";
|
||||||
|
public static final String USER_ID = "user_id";
|
||||||
|
public static final String ENABLED = "enabled";
|
||||||
|
public static final String ALIGN = "align";
|
||||||
|
public static final String SIZE = "size";
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.po;
|
||||||
|
|
||||||
|
import com.mybatisflex.annotation.Id;
|
||||||
|
import com.mybatisflex.annotation.KeyType;
|
||||||
|
import com.mybatisflex.annotation.Table;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/** 用户模型中间表
|
||||||
|
* @description:
|
||||||
|
* @author xq
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@Table("ry_user_model_content")
|
||||||
|
@Schema(description = "用户模型中间表")
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class UserModelContentDO implements Serializable {
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
@Id(keyType = KeyType.Generator, value = "uuid")
|
||||||
|
@Schema(description = "主键ID")
|
||||||
|
private String id;
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
@Schema(description = "用户id")
|
||||||
|
private String userId;
|
||||||
|
/**
|
||||||
|
* 目录类型
|
||||||
|
*/
|
||||||
|
@Schema(description = "目录类型")
|
||||||
|
private String menuType;
|
||||||
|
/**
|
||||||
|
* 模型内容
|
||||||
|
*/
|
||||||
|
@Schema(description = "模型内容")
|
||||||
|
private String modelContentId;
|
||||||
|
|
||||||
|
public static final String ID="id";
|
||||||
|
public static final String USER_ID="user_id";
|
||||||
|
public static final String MENU_TYPE="menu_type";
|
||||||
|
public static final String MODEL_CONTENT_ID="model_content_id";
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.que;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:
|
||||||
|
* @date 2026/2/3 14:21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class BasePage<T> {
|
||||||
|
private List<T> list;
|
||||||
|
/**
|
||||||
|
* 总数
|
||||||
|
*/
|
||||||
|
private long total;
|
||||||
|
/**
|
||||||
|
* 每页数量
|
||||||
|
*/
|
||||||
|
private long size;
|
||||||
|
/**
|
||||||
|
* 当前页
|
||||||
|
*/
|
||||||
|
private long current;
|
||||||
|
/**
|
||||||
|
* 总页数
|
||||||
|
*/
|
||||||
|
private long pages;
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.que;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description: 公共查询父类
|
||||||
|
* @date 2026/2/3 13:36
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class BaseQue {
|
||||||
|
/**
|
||||||
|
* 当前页数
|
||||||
|
*/
|
||||||
|
private Integer pageNum;
|
||||||
|
/**
|
||||||
|
* 当前页数量
|
||||||
|
*/
|
||||||
|
private Integer pageSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化分页参数
|
||||||
|
* @param base
|
||||||
|
*/
|
||||||
|
// public static <T> Page<T> init(BaseQue base,Class<T> cla){
|
||||||
|
// if(ObjectUtil.isEmpty(base))
|
||||||
|
// return null;
|
||||||
|
// base.setPageNum(ObjectUtil.isNotEmpty(base.getPageNum())?base.getPageNum():0);
|
||||||
|
// base.setPageSize(ObjectUtil.isNotEmpty(base.getPageSize())?base.getPageSize():10);
|
||||||
|
// return new Page<>(base.getPageNum(), base.getPageSize());
|
||||||
|
// }
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.que.dataModel;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description: 查询参数对象
|
||||||
|
* @date 2026/1/29 21:47
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class DataModelQue {
|
||||||
|
/**
|
||||||
|
* 用户ID
|
||||||
|
*/
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 目录类型
|
||||||
|
*/
|
||||||
|
private String menuType;
|
||||||
|
}
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
package com.sz.admin.monitor.pojo.que.file;
|
||||||
|
|
||||||
|
|
||||||
|
import com.sz.admin.monitor.pojo.que.BaseQue;
|
||||||
|
import com.sz.core.common.entity.PageQuery;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:
|
||||||
|
* @date 2026/2/3 13:35
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Schema(description = "文件查询Que")
|
||||||
|
public class FileStorageQue extends PageQuery {
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
@Schema(description = "id")
|
||||||
|
private String id;
|
||||||
|
/**
|
||||||
|
* 文件名称
|
||||||
|
*/
|
||||||
|
@Schema(description = "文件名称")
|
||||||
|
private String fileName;
|
||||||
|
/**
|
||||||
|
* 开始时间
|
||||||
|
*/
|
||||||
|
@Schema(description = "开始时间")
|
||||||
|
private Long startTime;
|
||||||
|
/**
|
||||||
|
* 结束时间
|
||||||
|
*/
|
||||||
|
@Schema(description = "结束时间")
|
||||||
|
private Long endTime;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
package com.sz.admin.monitor.service;
|
||||||
|
|
||||||
|
|
||||||
|
import com.mybatisflex.core.service.IService;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.CanvasCfgDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.CanvasCfgDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 画板
|
||||||
|
* @author xq
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public interface CanvasCfgService extends IService<CanvasCfgDO> {
|
||||||
|
void saveOrUpdateCanvas(CanvasCfgDTO canvasCfgDTO);
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
package com.sz.admin.monitor.service;
|
||||||
|
|
||||||
|
|
||||||
|
import com.mybatisflex.core.service.IService;
|
||||||
|
import com.sz.admin.monitor.pojo.po.FileStorageDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:文件存储数据对象
|
||||||
|
* @date 2026/2/2 22:18
|
||||||
|
*/
|
||||||
|
public interface FileStorageService extends IService<FileStorageDO> {
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
package com.sz.admin.monitor.service;
|
||||||
|
|
||||||
|
|
||||||
|
import com.mybatisflex.core.service.IService;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.GridCfgDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.GridCfgDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:网格
|
||||||
|
* @date 2026/1/29 11:45
|
||||||
|
*/
|
||||||
|
public interface GridCfgService extends IService<GridCfgDO> {
|
||||||
|
void saveOrUpdateGrid(GridCfgDTO gridCfgDTO);
|
||||||
|
}
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
package com.sz.admin.monitor.service;
|
||||||
|
|
||||||
|
|
||||||
|
import com.mybatisflex.core.service.IService;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.ModelContentDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.ModelContentDO;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 存储模型的基本信息和配置
|
||||||
|
* @author xq
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public interface ModelContentService extends IService<ModelContentDO> {
|
||||||
|
HashMap<String, List<String>> saveOrUpdateModel(List<ModelContentDTO> list,String menuType);
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
package com.sz.admin.monitor.service;
|
||||||
|
|
||||||
|
import com.mybatisflex.core.service.IService;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.ModelContentDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.Substation;
|
||||||
|
import com.sz.admin.monitor.pojo.po.UserModelContentDO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface UserModelContentService extends IService<UserModelContentDO> {
|
||||||
|
public void saveOrUpdateModel(List<ModelContentDTO> list);
|
||||||
|
}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
package com.sz.admin.monitor.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
|
import com.sz.admin.monitor.mapper.CanvasCfgMapper;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.CanvasCfgDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.CanvasCfgDO;
|
||||||
|
import com.sz.admin.monitor.service.CanvasCfgService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description: 画板
|
||||||
|
* @date 2026/1/29 11:34
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class CanvasCfgServiceImpl extends ServiceImpl<CanvasCfgMapper, CanvasCfgDO> implements CanvasCfgService {
|
||||||
|
@Override
|
||||||
|
public void saveOrUpdateCanvas(CanvasCfgDTO canvasCfgDTO) {
|
||||||
|
if(ObjectUtil.isEmpty(canvasCfgDTO))
|
||||||
|
return;
|
||||||
|
CanvasCfgDO canvasCfgDO = CanvasCfgDTO.dtoConvertDO(canvasCfgDTO);
|
||||||
|
if(StrUtil.isEmpty(canvasCfgDO.getUserId())) {
|
||||||
|
saveOrUpdate(canvasCfgDO);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryWrapper queryWrapper = QueryWrapper
|
||||||
|
.create()
|
||||||
|
.from(CanvasCfgDO.class)
|
||||||
|
.eq(CanvasCfgDO.USER_ID, canvasCfgDTO.getUserId())
|
||||||
|
.limit(1);
|
||||||
|
|
||||||
|
CanvasCfgDO one = getOne(queryWrapper);
|
||||||
|
|
||||||
|
// CanvasCfgDO one = getOne(new QueryWrapper<CanvasCfgDO>()
|
||||||
|
// .eq(CanvasCfgDO.USER_ID, canvasCfgDTO.getUserId())
|
||||||
|
// .last("limit 1")
|
||||||
|
// );
|
||||||
|
|
||||||
|
if(ObjectUtil.isEmpty(one)) {
|
||||||
|
saveOrUpdate(canvasCfgDO);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
canvasCfgDO.setId(one.getId());
|
||||||
|
saveOrUpdate(canvasCfgDO);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,272 @@
|
|||||||
|
package com.sz.admin.monitor.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.CanvasCfgDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.DataModelDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.GridCfgDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.ModelContentDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.CanvasCfgDO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.GridCfgDO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.ModelContentDO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.UserModelContentDO;
|
||||||
|
import com.sz.admin.monitor.pojo.que.dataModel.DataModelQue;
|
||||||
|
import com.sz.admin.monitor.service.CanvasCfgService;
|
||||||
|
import com.sz.admin.monitor.service.GridCfgService;
|
||||||
|
import com.sz.admin.monitor.service.ModelContentService;
|
||||||
|
import com.sz.admin.monitor.service.UserModelContentService;
|
||||||
|
import com.sz.core.common.entity.ApiResult;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:
|
||||||
|
* @date 2026/1/29 10:51
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class DataModelServiceImpl {
|
||||||
|
@Autowired
|
||||||
|
private CanvasCfgService canvasCfgService; // 画板
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private GridCfgService gridCfgService; // 网格
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ModelContentService modelContentService; //模型
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserModelContentService userModelContentService; //用户模型中间表
|
||||||
|
|
||||||
|
private static final String userId = "1";
|
||||||
|
|
||||||
|
public ApiResult<DataModelDTO> getModelData(DataModelQue que) {
|
||||||
|
if (StrUtil.isEmpty(que.getUserId()))
|
||||||
|
que.setUserId(userId);
|
||||||
|
|
||||||
|
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||||
|
.from(CanvasCfgDO.class)
|
||||||
|
.eq(CanvasCfgDO.USER_ID, que.getUserId())
|
||||||
|
.limit(1);
|
||||||
|
|
||||||
|
// 获取画板数据
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取网格数据
|
||||||
|
GridCfgDO gridCfgDO = gridCfgService.getOne(QueryWrapper.create()
|
||||||
|
.from(GridCfgDO.class)
|
||||||
|
.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);
|
||||||
|
}
|
||||||
|
|
||||||
|
//中间表
|
||||||
|
List<UserModelContentDO> userModelList = userModelContentService.list(QueryWrapper.create()
|
||||||
|
.from(UserModelContentDO.class)
|
||||||
|
.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))
|
||||||
|
.gridCfg(GridCfgDO.doConvertDTO(gridCfgDO))
|
||||||
|
.json(objects)
|
||||||
|
.build();
|
||||||
|
return ApiResult.success(build);
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
.orderBy(ModelContentDO.MODEL_INDEX, true)
|
||||||
|
);
|
||||||
|
|
||||||
|
// List<ModelContentDO> modelContentDOS = modelContentService.listByIds(collect);
|
||||||
|
for (ModelContentDO modelContentDO : modelContentDOS) {
|
||||||
|
objects.add(ModelContentDO.doConvertDTO(modelContentDO));
|
||||||
|
}
|
||||||
|
DataModelDTO build = DataModelDTO.builder()
|
||||||
|
.canvasCfg(CanvasCfgDO.doConvertDTO(canvasCfgDO))
|
||||||
|
.gridCfg(GridCfgDO.doConvertDTO(gridCfgDO))
|
||||||
|
.json(objects)
|
||||||
|
.build();
|
||||||
|
return ApiResult.success(build);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化网格数据
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public GridCfgDO initGridCfg() {
|
||||||
|
return GridCfgDO.builder()
|
||||||
|
.userId(userId)
|
||||||
|
.enabled(true)
|
||||||
|
.align(true)
|
||||||
|
.size(10)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化画板数据
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public CanvasCfgDO initCanvasCfg() {
|
||||||
|
return CanvasCfgDO.builder()
|
||||||
|
.width(1920)
|
||||||
|
.userId(userId)
|
||||||
|
.height(1080)
|
||||||
|
.scale(1D)
|
||||||
|
.color("")
|
||||||
|
.img("")
|
||||||
|
.guide(true)
|
||||||
|
.adsorp(true)
|
||||||
|
.adsorpDiff(5D)
|
||||||
|
.transformOrigin("{\"x\":0,\"y\":0}")
|
||||||
|
.dragOffset("{\"x\":0,\"y\":0}")
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存模型数据
|
||||||
|
*
|
||||||
|
* @param dataModelDTO
|
||||||
|
* @param request
|
||||||
|
* @param response
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
public ApiResult saveOrUpdateModelData(DataModelDTO dataModelDTO, HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
if (ObjectUtil.isEmpty(dataModelDTO))
|
||||||
|
throw new IllegalArgumentException("传值错误");
|
||||||
|
CanvasCfgDTO canvasCfg = dataModelDTO.getCanvasCfg();
|
||||||
|
GridCfgDTO gridCfg = dataModelDTO.getGridCfg();
|
||||||
|
List<ModelContentDTO> json=new ArrayList<>();
|
||||||
|
for (int i = 0; i < dataModelDTO.getJson().size(); i++) {
|
||||||
|
ModelContentDTO modelContentDTO = dataModelDTO.getJson().get(i);
|
||||||
|
modelContentDTO.setModelIndex(i);
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
//增加的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();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<UserModelContentDO> getList() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,274 @@
|
|||||||
|
package com.sz.admin.monitor.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.codec.Base64;
|
||||||
|
import cn.hutool.core.io.FileUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.mybatisflex.core.paginate.Page;
|
||||||
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.camera.CameraListDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.file.FileEntityDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.file.FileStorageDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.Camera;
|
||||||
|
import com.sz.admin.monitor.pojo.po.FileStorageDO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.Nvr;
|
||||||
|
import com.sz.admin.monitor.pojo.que.file.FileStorageQue;
|
||||||
|
import com.sz.admin.monitor.pojo.vo.camera.CameraVO;
|
||||||
|
import com.sz.admin.monitor.service.FileStorageService;
|
||||||
|
import com.sz.core.common.entity.ApiResult;
|
||||||
|
import com.sz.core.common.entity.PageResult;
|
||||||
|
import com.sz.core.datascope.SimpleDataScopeHelper;
|
||||||
|
import com.sz.core.util.PageUtils;
|
||||||
|
import com.sz.core.util.Utils;
|
||||||
|
import com.sz.platform.enums.AdminResponseEnum;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:文件存储业务
|
||||||
|
* @date 2026/3/13 15:28
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class FileServiceImpl {
|
||||||
|
@Autowired
|
||||||
|
private FileStorageService fileStorageService;
|
||||||
|
|
||||||
|
@Value("${file.object.storage.targetDir:/defaultFile}")
|
||||||
|
private String targetDir;
|
||||||
|
|
||||||
|
// 获取当前操作系统的文件分隔符
|
||||||
|
private static String separator = "/";
|
||||||
|
|
||||||
|
//获取文件流路径(请求路径)
|
||||||
|
private static String path = "/fileStorage/getPreviewFile/";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除文件
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public ApiResult<String> deleteFileById(String id) {
|
||||||
|
if (ObjectUtil.isEmpty(id))
|
||||||
|
return ApiResult.error(AdminResponseEnum.OPERATION_FAIL);
|
||||||
|
FileStorageDO fileStorageDO = fileStorageService.getById(id);
|
||||||
|
if (ObjectUtil.isEmpty(fileStorageDO))
|
||||||
|
return ApiResult.error(AdminResponseEnum.OPERATION_FAIL);
|
||||||
|
fileStorageService.removeById(id);
|
||||||
|
return ApiResult.success("删除成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改文件名称
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public ApiResult<String> editFileNameById(FileEntityDTO dto) {
|
||||||
|
if (ObjectUtil.isEmpty(dto.getId()))
|
||||||
|
return ApiResult.error(AdminResponseEnum.OPERATION_FAIL);
|
||||||
|
FileStorageDO fileStorageDO = fileStorageService.getById(dto.getId());
|
||||||
|
if (ObjectUtil.isEmpty(fileStorageDO))
|
||||||
|
return ApiResult.error(AdminResponseEnum.OPERATION_FAIL);
|
||||||
|
fileStorageDO.setFileName(dto.getFileName());
|
||||||
|
fileStorageService.saveOrUpdate(fileStorageDO);
|
||||||
|
return ApiResult.success("修改成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询
|
||||||
|
*
|
||||||
|
* @param que
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public ApiResult<PageResult<FileEntityDTO>> getFileObjectList(FileStorageQue que) {
|
||||||
|
SimpleDataScopeHelper.start(FileStorageDO.class); // 指定要追加条件的表PO实体
|
||||||
|
|
||||||
|
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||||
|
.from(FileStorageDO.class)
|
||||||
|
.eq(FileStorageDO.ID, que.getId(), ObjectUtil.isNotEmpty(que.getId()))
|
||||||
|
.like(FileStorageDO.FILE_NAME, que.getFileName(), ObjectUtil.isNotEmpty(que.getFileName()));
|
||||||
|
if (ObjectUtil.isNotEmpty(que.getStartTime()) && ObjectUtil.isNotEmpty(que.getEndTime())) {
|
||||||
|
queryWrapper.between(
|
||||||
|
FileStorageDO.ADD_TIME,
|
||||||
|
new Date(que.getStartTime()),
|
||||||
|
new Date(que.getEndTime())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
queryWrapper.orderBy(FileStorageDO.ADD_TIME, false);
|
||||||
|
|
||||||
|
|
||||||
|
Page<FileStorageDO> page = fileStorageService.pageAs(PageUtils.getPage(que), queryWrapper, FileStorageDO.class);// 调试sql
|
||||||
|
if (ObjectUtil.isEmpty(page) || page.getRecords().isEmpty())
|
||||||
|
return ApiResult.success(new PageResult<>(que.getPage().longValue(), que.getLimit().longValue(), 0, 0, new ArrayList<>()));
|
||||||
|
|
||||||
|
List<FileEntityDTO> fileEntityDTOS = new ArrayList<>();
|
||||||
|
for (FileStorageDO record : page.getRecords()) {
|
||||||
|
FileEntityDTO fileEntityDTO = BeanUtil.copyProperties(record, FileEntityDTO.class);
|
||||||
|
fileEntityDTO.setFilePath(path + record.getId());
|
||||||
|
fileEntityDTOS.add(fileEntityDTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ApiResult.success(new PageResult<>(
|
||||||
|
page.getPageNumber(),
|
||||||
|
page.getPageSize(),
|
||||||
|
page.getTotalPage(),
|
||||||
|
page.getTotalRow(),
|
||||||
|
fileEntityDTOS));
|
||||||
|
}
|
||||||
|
|
||||||
|
// public ApiResult<PageResult<FileEntityDTO>> getFileObjectList(FileStorageQue que) {
|
||||||
|
// Page<FileStorageDO> doPage = BaseQue.init(que, FileStorageDO.class);
|
||||||
|
// Page<FileStorageDO> page = fileStorageService.page(doPage, new QueryWrapper<FileStorageDO>()
|
||||||
|
// .eq(ObjectUtil.isNotEmpty(que.getId()), FileStorageDO.ID, que.getId())
|
||||||
|
// .like(ObjectUtil.isNotEmpty(que.getFileName()), FileStorageDO.FILE_NAME, que.getFileName())
|
||||||
|
// .between(
|
||||||
|
// ObjectUtil.isNotEmpty(que.getStartTime()) && ObjectUtil.isNotEmpty(que.getEndTime())
|
||||||
|
// , FileStorageDO.ADD_TIME
|
||||||
|
// , que.getStartTime(), que.getEndTime())
|
||||||
|
// .orderByDesc(FileStorageDO.ADD_TIME)
|
||||||
|
// );
|
||||||
|
// if(ObjectUtil.isEmpty(page) || page.getRecords().isEmpty())
|
||||||
|
// return ResponseBody.ok();
|
||||||
|
//
|
||||||
|
// BasePage<FileEntityDTO> basePage = new BasePage();
|
||||||
|
// basePage.setTotal(page.getTotal());
|
||||||
|
// basePage.setSize(page.getSize());
|
||||||
|
// basePage.setCurrent(page.getCurrent());
|
||||||
|
// basePage.setPages(page.getPages());
|
||||||
|
//
|
||||||
|
// List<FileEntityDTO> fileEntityDTOS = new ArrayList<>();
|
||||||
|
// for (FileStorageDO record : page.getRecords()) {
|
||||||
|
// FileEntityDTO fileEntityDTO = BeanUtil.copyProperties(record, FileEntityDTO.class);
|
||||||
|
// fileEntityDTO.setFilePath(path+record.getId());
|
||||||
|
// fileEntityDTOS.add(fileEntityDTO);
|
||||||
|
// }
|
||||||
|
// basePage.setList(fileEntityDTOS);
|
||||||
|
// return ApiResult.success(basePage);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回文件流
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public ResponseEntity<byte[]> getPreviewFile(String id) {
|
||||||
|
FileStorageDO fileStorageDO = fileStorageService.getById(id);
|
||||||
|
String filePath = fileStorageDO.getFileUrl();
|
||||||
|
// 使用Hutool读取文件并转换为Base64编码
|
||||||
|
byte[] imageBytes = FileUtil.readBytes(filePath);
|
||||||
|
String mimeType = getMimeType(filePath);
|
||||||
|
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.setContentType(MediaType.parseMediaType(mimeType));
|
||||||
|
headers.setContentLength(imageBytes.length);
|
||||||
|
|
||||||
|
return new ResponseEntity<>(imageBytes, headers, HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取文件
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public ApiResult<FileStorageDTO> getFile(String id) {
|
||||||
|
FileStorageDO fileStorageDO = fileStorageService.getById(id);
|
||||||
|
if (ObjectUtil.isEmpty(fileStorageDO))
|
||||||
|
return ApiResult.error(AdminResponseEnum.OPERATION_FAIL);
|
||||||
|
|
||||||
|
String filePath = fileStorageDO.getFileUrl();
|
||||||
|
// 使用Hutool读取文件并转换为Base64编码
|
||||||
|
byte[] fileBytes = FileUtil.readBytes(filePath);
|
||||||
|
String base64Data = Base64.encode(fileBytes);
|
||||||
|
String mimeType = getMimeType(filePath);
|
||||||
|
String dataUrl = "data:" + mimeType + ";base64," + base64Data;
|
||||||
|
FileStorageDTO fileStorageDTO = BeanUtil.copyProperties(fileStorageDO, FileStorageDTO.class);
|
||||||
|
fileStorageDTO.setBase64Data(dataUrl);
|
||||||
|
return ApiResult.success(fileStorageDTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 图片存储
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public ApiResult<FileStorageDTO> saveFile(MultipartFile file) {
|
||||||
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
|
||||||
|
if (file.isEmpty())
|
||||||
|
return ApiResult.error(AdminResponseEnum.OPERATION_FAIL);
|
||||||
|
|
||||||
|
String path = targetDir;
|
||||||
|
try {
|
||||||
|
FileUtil.mkdir(path);
|
||||||
|
|
||||||
|
// 生成唯一文件名
|
||||||
|
String fileName = System.currentTimeMillis() + "_" + file.getOriginalFilename();
|
||||||
|
String filePath = path + separator + fileName;
|
||||||
|
|
||||||
|
// 使用Hutool保存文件
|
||||||
|
FileUtil.writeBytes(file.getBytes(), filePath);
|
||||||
|
|
||||||
|
String mimeType = getMimeType(filePath);
|
||||||
|
FileStorageDTO fileDTO = FileStorageDTO.builder()
|
||||||
|
.fileUrl(filePath)
|
||||||
|
.fileSize(ObjectUtil.isNotEmpty(file.getSize()) ? String.valueOf(file.getSize()) : "0")
|
||||||
|
.fileName(file.getOriginalFilename())
|
||||||
|
.fileSuffix(mimeType)
|
||||||
|
.addTime(new Date())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
FileStorageDO fileStorageDO = FileStorageDTO.dtoConvertDO(fileDTO);
|
||||||
|
fileStorageService.saveOrUpdate(fileStorageDO);
|
||||||
|
fileDTO.setId(fileStorageDO.getId());
|
||||||
|
|
||||||
|
String base64Data = Base64.encode(file.getBytes());
|
||||||
|
String dataUrl = "data:" + mimeType + ";base64," + base64Data;
|
||||||
|
fileDTO.setBase64Data(dataUrl);
|
||||||
|
|
||||||
|
return ApiResult.success(fileDTO);
|
||||||
|
} catch (IOException e) {
|
||||||
|
result.put("success", false);
|
||||||
|
result.put("message", "文件上传失败: " + e.getMessage());
|
||||||
|
return ApiResult.error(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void test01() {
|
||||||
|
fileStorageService.list().forEach(System.out::println);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据文件扩展名获取MIME类型
|
||||||
|
*/
|
||||||
|
private String getMimeType(String filePath) {
|
||||||
|
String lowerPath = filePath.toLowerCase();
|
||||||
|
if (lowerPath.endsWith(".jpg") || lowerPath.endsWith(".jpeg")) {
|
||||||
|
return "image/jpeg";
|
||||||
|
} else if (lowerPath.endsWith(".png")) {
|
||||||
|
return "image/png";
|
||||||
|
} else if (lowerPath.endsWith(".gif")) {
|
||||||
|
return "image/gif";
|
||||||
|
} else if (lowerPath.endsWith(".bmp")) {
|
||||||
|
return "image/bmp";
|
||||||
|
} else {
|
||||||
|
return "image/jpeg"; // 默认JPEG类型
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
package com.sz.admin.monitor.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
|
import com.sz.admin.monitor.mapper.FileStorageMapper;
|
||||||
|
import com.sz.admin.monitor.pojo.po.FileStorageDO;
|
||||||
|
import com.sz.admin.monitor.service.FileStorageService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:文件存储数据对象
|
||||||
|
* @date 2026/2/2 22:18
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class FileStorageServiceImpl extends ServiceImpl<FileStorageMapper, FileStorageDO> implements FileStorageService {
|
||||||
|
}
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
package com.sz.admin.monitor.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
|
import com.sz.admin.monitor.mapper.GridCfgMapper;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.GridCfgDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.GridCfgDO;
|
||||||
|
import com.sz.admin.monitor.service.GridCfgService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:网格
|
||||||
|
* @date 2026/1/29 11:45
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class GridCfgServiceImpl extends ServiceImpl<GridCfgMapper, GridCfgDO> implements GridCfgService {
|
||||||
|
@Override
|
||||||
|
public void saveOrUpdateGrid(GridCfgDTO dto) {
|
||||||
|
if (ObjectUtil.isEmpty(dto))
|
||||||
|
return;
|
||||||
|
GridCfgDO gridCfgDO = GridCfgDTO.dtoConvertDO(dto);
|
||||||
|
if (StrUtil.isEmpty(gridCfgDO.getUserId())) {
|
||||||
|
saveOrUpdate(gridCfgDO);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||||
|
.from(GridCfgDO.class)
|
||||||
|
.eq(GridCfgDO.USER_ID, gridCfgDO.getUserId())
|
||||||
|
.limit(1);
|
||||||
|
|
||||||
|
GridCfgDO one = getOne(queryWrapper);
|
||||||
|
|
||||||
|
// GridCfgDO one = getOne(new QueryWrapper<GridCfgDO>()
|
||||||
|
// .eq(GridCfgDO.USER_ID, gridCfgDO.getUserId())
|
||||||
|
// .last("limit 1")
|
||||||
|
// );
|
||||||
|
if (ObjectUtil.isEmpty(one)) {
|
||||||
|
saveOrUpdate(gridCfgDO);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
gridCfgDO.setId(one.getId());
|
||||||
|
saveOrUpdate(gridCfgDO);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
package com.sz.admin.monitor.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
|
import com.sz.admin.monitor.mapper.SubstationMapper;
|
||||||
|
import com.sz.admin.monitor.mapper.UserModelContentMapper;
|
||||||
|
import com.sz.admin.monitor.pojo.dto.dataModel.ModelContentDTO;
|
||||||
|
import com.sz.admin.monitor.pojo.po.Substation;
|
||||||
|
import com.sz.admin.monitor.pojo.po.UserModelContentDO;
|
||||||
|
import com.sz.admin.monitor.service.SubstationService;
|
||||||
|
import com.sz.admin.monitor.service.UserModelContentService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xq
|
||||||
|
* @description:
|
||||||
|
* @date 2026/3/13 10:23
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class UserModelContentServiceImpl extends ServiceImpl<UserModelContentMapper, UserModelContentDO> implements UserModelContentService {
|
||||||
|
@Override
|
||||||
|
public void saveOrUpdateModel(List<ModelContentDTO> list) {
|
||||||
|
if(CollectionUtil.isEmpty(list))
|
||||||
|
return;
|
||||||
|
for (ModelContentDTO modelContentDTO : list) {
|
||||||
|
ModelContentDTO.dtoConvertDO(modelContentDTO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue