diff --git a/nex-be/src/main/java/com/unisinsight/project/controller/ClientController.java b/nex-be/src/main/java/com/unisinsight/project/controller/ClientController.java index caabb84..af47f90 100644 --- a/nex-be/src/main/java/com/unisinsight/project/controller/ClientController.java +++ b/nex-be/src/main/java/com/unisinsight/project/controller/ClientController.java @@ -1,20 +1,24 @@ package com.unisinsight.project.controller; +import cn.hutool.json.JSONUtil; +import com.unisinsight.project.entity.req.DeviceReq; import com.unisinsight.project.entity.req.DeviceUserReq; -import com.unisinsight.project.entity.res.ImageRes; +import com.unisinsight.project.entity.req.LoginReq; import com.unisinsight.project.exception.BaseErrorCode; import com.unisinsight.project.exception.Result; import com.unisinsight.project.service.ClientService; +import com.unisinsight.project.service.DeviceService; import com.unisinsight.project.service.DeviceUserMappingService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Objects; @@ -35,52 +39,77 @@ public class ClientController { @Resource private DeviceUserMappingService deviceUserMappingService; + @Resource + private DeviceService deviceService; @ApiOperation(value = "用户认证") - @PostMapping("/auth") - public Result> authentication(@RequestParam("deviceId") String deviceId) { - if (Objects.isNull(deviceId)) { + @PostMapping("/authentication") + public Result authentication(@RequestBody LoginReq loginReq) { + if (Objects.isNull(loginReq)) { return Result.errorResult(BaseErrorCode.PARAMS_CHK_ERROR); } - log.info("用户认证请求参数为:{}", deviceId); - return Result.successResult(); + log.info("用户认证请求参数为:{}", JSONUtil.toJsonStr(loginReq)); + DeviceReq deviceReq = new DeviceReq(); + deviceReq.setDeviceId(loginReq.getDeviceId()); + deviceReq.setDeviceName("默认终端"); + deviceReq.setDeviceGroupId(3L); + deviceReq.setDeviceGroupName("默认终端分组"); + return deviceService.insert(deviceReq); } @ApiOperation(value = "用户登录") @PostMapping("/login") - public Result loginUser(@RequestParam("deviceId") String deviceId, - @RequestParam("username") String username, - @RequestParam("password") String password) { - if (Objects.isNull(deviceId) || Objects.isNull(username) || Objects.isNull(password)) { + public Result loginUser(@RequestBody LoginReq loginReq) { + if (Objects.isNull(loginReq)) { return Result.errorResult(BaseErrorCode.PARAMS_CHK_ERROR); } - log.info("用户登录请求参数为,deviceId:{},username:{},password:{}", deviceId, username, password); + log.info("用户登录请求参数为:{}", JSONUtil.toJsonStr(loginReq)); DeviceUserReq deviceUserReq = new DeviceUserReq(); - deviceUserReq.setDeviceId(deviceId); - deviceUserReq.setUserName(username); - deviceUserReq.setPassword(password); - return deviceUserMappingService.loginUser(deviceUserReq); + deviceUserReq.setDeviceId(loginReq.getDeviceId()); + deviceUserReq.setUserName(loginReq.getUsername()); + deviceUserReq.setPassword(loginReq.getPassword()); + //todo 后面再调 +// Result result = deviceUserMappingService.loginUser(deviceUserReq); + HashMap hashMap = new HashMap<>(); + hashMap.put("token", "123456"); + return Result.successResult(hashMap); } @ApiOperation(value = "获取镜像列表") @PostMapping("/getImageList") - public Result getImageList(@RequestParam("deviceId") String deviceId, - @RequestParam("token") String token) { - if (Objects.isNull(deviceId) || Objects.isNull(token)) { + public Result getImageList(@RequestBody LoginReq loginReq) { + if (Objects.isNull(loginReq)) { return Result.errorResult(BaseErrorCode.PARAMS_CHK_ERROR); } - log.info("获取镜像列表请求参数为,deviceId:{},token:{}", deviceId, token); + log.info("获取镜像列表请求参数为:{}", JSONUtil.toJsonStr(loginReq)); - return clientService.getImageList(deviceId, token); +// Result imageList = clientService.getImageList(loginReq.getDeviceId(), loginReq.getToken()); + List> hashMaps = new ArrayList<>(); + HashMap map = new HashMap<>(); + map.put("name", "ubuntu-20.04.6-desktop-amd64.iso"); + map.put("torrent", "https://releases.ubuntu.com/20.04.6/ubuntu-20.04.6-desktop-amd64.iso.torrent"); + hashMaps.add(map); + HashMap map1 = new HashMap<>(); + map1.put("name", "uos_nbd_20250806.qcow2"); + map1.put("torrent", "http://10.100.51.86:8114/api/vdi/file/down/win10_v2307_uefi_demo.vhdx.torrent"); + hashMaps.add(map1); + HashMap map2 = new HashMap<>(); + map2.put("name", "win10_v2307_uefi_demo.vhdx"); + map2.put("torrent", "http://10.100.51.86:8114/api/vdi/file/down/win10_v2307_uefi_demo.vhdx.torrent"); + hashMaps.add(map2); + + HashMap hashMap = new HashMap<>(); + hashMap.put("list", hashMaps); + return Result.successResult(hashMap); } @ApiOperation(value = "版本更新") @PostMapping("/update") - public Result getImageUpdate(@RequestParam("deviceId") String deviceId) { - if (Objects.isNull(deviceId)) { + public Result getImageUpdate(@RequestBody LoginReq loginReq) { + if (Objects.isNull(loginReq)) { return Result.errorResult(BaseErrorCode.PARAMS_CHK_ERROR); } - log.info("获取镜像列表请求参数为,deviceId:{}", deviceId); + log.info("版本更新请求参数为:{}", JSONUtil.toJsonStr(loginReq)); HashMap hashMap = new HashMap<>(); hashMap.put("version", "1.0.0"); hashMap.put("url", "https://intent-bathhouse.name"); diff --git a/nex-be/src/main/java/com/unisinsight/project/controller/DeviceImageMappingController.java b/nex-be/src/main/java/com/unisinsight/project/controller/DeviceImageMappingController.java index 9248088..d7688bc 100644 --- a/nex-be/src/main/java/com/unisinsight/project/controller/DeviceImageMappingController.java +++ b/nex-be/src/main/java/com/unisinsight/project/controller/DeviceImageMappingController.java @@ -1,8 +1,13 @@ package com.unisinsight.project.controller; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.unisinsight.project.entity.dao.DeviceImageMapping; import com.unisinsight.project.entity.req.DeviceImageMappingReq; import com.unisinsight.project.entity.res.DeviceImageMappingRes; +import com.unisinsight.project.entity.res.ListReq; import com.unisinsight.project.exception.BaseErrorCode; import com.unisinsight.project.exception.Result; import com.unisinsight.project.service.DeviceImageMappingService; @@ -17,6 +22,8 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; /** * @description: @@ -34,12 +41,50 @@ public class DeviceImageMappingController { @ApiOperation(value = "终端镜像映射新增") @PostMapping("/add") - public Result insert(@RequestBody DeviceImageMappingReq deviceImageMappingReq) { - if (Objects.isNull(deviceImageMappingReq)) { + public Result insert(@RequestBody ListReq deviceImageMappingReq) { + if (Objects.isNull(deviceImageMappingReq.getData())) { return Result.errorResult(BaseErrorCode.PARAMS_CHK_ERROR); } log.info("终端镜像映射新增请求参数为:{}", JSONUtil.toJsonStr(deviceImageMappingReq)); - return deviceImageMappingService.insert(deviceImageMappingReq); + + List reqData = deviceImageMappingReq.getData(); + List addList = reqData.stream().filter(e -> Objects.isNull(e.getId())).collect(Collectors.toList()); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.lambda().eq(DeviceImageMapping::getDeviceId, reqData.get(0).getDeviceId()); + List list = deviceImageMappingService.list(wrapper); + + if (CollectionUtil.isNotEmpty(list)) { + Set requestIds = reqData.stream() + .map(DeviceImageMappingReq::getId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + List idsToDelete = list.stream() + .map(DeviceImageMapping::getId) + .filter(Objects::nonNull) + .filter(id -> !requestIds.contains(id)) + .collect(Collectors.toList()); + + if (CollectionUtil.isNotEmpty(idsToDelete)) { + deviceImageMappingService.removeByIds(idsToDelete); + log.info("删除了 {} 条不匹配的旧数据,ID列表: {}", idsToDelete.size(), idsToDelete); + } + } + + if (CollectionUtil.isNotEmpty(addList)) { + List deviceImageMappings = BeanUtil.copyToList(addList, DeviceImageMapping.class); + List deviceImageMappingList = deviceImageMappings.stream().peek(e -> { + e.setCreateUser("admin"); + }).collect(Collectors.toList()); + boolean insert = deviceImageMappingService.saveBatch(deviceImageMappingList); + log.info("终端镜像映射新增insert:{}", insert); + if (!insert) { + return Result.errorResult(BaseErrorCode.HTTP_ERROR_CODE_500); + } + } + + return Result.successResult(); } @ApiOperation(value = "终端镜像映射查询") diff --git a/nex-be/src/main/java/com/unisinsight/project/controller/DeviceUserMappingController.java b/nex-be/src/main/java/com/unisinsight/project/controller/DeviceUserMappingController.java index d9efb43..1344b39 100644 --- a/nex-be/src/main/java/com/unisinsight/project/controller/DeviceUserMappingController.java +++ b/nex-be/src/main/java/com/unisinsight/project/controller/DeviceUserMappingController.java @@ -1,8 +1,13 @@ package com.unisinsight.project.controller; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.unisinsight.project.entity.dao.DeviceUserMapping; import com.unisinsight.project.entity.req.DeviceUserMappingReq; import com.unisinsight.project.entity.res.DeviceUserMappingRes; +import com.unisinsight.project.entity.res.ListReq; import com.unisinsight.project.exception.BaseErrorCode; import com.unisinsight.project.exception.Result; import com.unisinsight.project.service.DeviceUserMappingService; @@ -17,6 +22,8 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; /** * @description: DeviceUserMappingController @@ -34,12 +41,48 @@ public class DeviceUserMappingController { @ApiOperation(value = "终端用户映射新增") @PostMapping("/add") - public Result insert(@RequestBody DeviceUserMappingReq deviceUserMappingReq) { - if (Objects.isNull(deviceUserMappingReq)) { - return Result.errorResult(BaseErrorCode.PARAMS_CHK_ERROR); + public Result insert(@RequestBody ListReq deviceUserMappingReq) { + if (Objects.isNull(deviceUserMappingReq.getData())) { + return Result.errorResult(BaseErrorCode.PARAMETERS_INVALID); } log.info("终端用户映射新增请求参数为:{}", JSONUtil.toJsonStr(deviceUserMappingReq)); - return deviceUserMappingService.insert(deviceUserMappingReq); + List userMappingReqData = deviceUserMappingReq.getData(); + List addList = userMappingReqData.stream().filter(e -> Objects.isNull(e.getId())).collect(Collectors.toList()); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.lambda().eq(DeviceUserMapping::getDeviceId, userMappingReqData.get(0).getDeviceId()); + List list = deviceUserMappingService.list(wrapper); + + if (CollectionUtil.isNotEmpty(list)) { + Set requestIds = userMappingReqData.stream() + .map(DeviceUserMappingReq::getId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + List idsToDelete = list.stream() + .map(DeviceUserMapping::getId) + .filter(Objects::nonNull) + .filter(id -> !requestIds.contains(id)) + .collect(Collectors.toList()); + + if (CollectionUtil.isNotEmpty(idsToDelete)) { + deviceUserMappingService.removeByIds(idsToDelete); + log.info("删除了 {} 条不匹配的旧数据,ID列表: {}", idsToDelete.size(), idsToDelete); + } + } + if (CollectionUtil.isNotEmpty(addList)) { + List deviceUserMappings = BeanUtil.copyToList(addList, DeviceUserMapping.class); + List deviceUserMapping = deviceUserMappings.stream().peek(e -> { + e.setCreateUser("admin"); + }).collect(Collectors.toList()); + boolean insert = deviceUserMappingService.saveBatch(deviceUserMapping); + log.info("终端用户映射新增insert:{}", insert); + if (!insert) { + return Result.errorResult(BaseErrorCode.HTTP_ERROR_CODE_500); + } + } + + return Result.successResult(); } @ApiOperation(value = "终端用户映射查询") @@ -53,5 +96,4 @@ public class DeviceUserMappingController { } - } diff --git a/nex-be/src/main/java/com/unisinsight/project/controller/FileChunkController.java b/nex-be/src/main/java/com/unisinsight/project/controller/FileChunkController.java index 5b16cdd..05b2f9d 100644 --- a/nex-be/src/main/java/com/unisinsight/project/controller/FileChunkController.java +++ b/nex-be/src/main/java/com/unisinsight/project/controller/FileChunkController.java @@ -1,11 +1,14 @@ package com.unisinsight.project.controller; import com.unisinsight.project.entity.dao.Image; +import com.unisinsight.project.exception.BaseErrorCode; +import com.unisinsight.project.exception.Result; import com.unisinsight.project.mapper.ImageMapper; import com.unisinsight.project.util.DigestUtil; import io.swagger.annotations.*; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -168,6 +171,21 @@ public class FileChunkController { } } + @PostMapping("/cancel/upload") + @ApiOperation(value = "取消上传文件") + public Result cancelUpload(@RequestParam("file_id") String fileId) { + if (ObjectUtils.isEmpty(fileId)) { + return Result.errorResult(BaseErrorCode.PARAMETERS_EMPTY); + } + log.info("取消上传,清理临时文件: {}", fileId); + try { + cleanupTempFiles(fileId); + } catch (IOException ex) { + log.error("清理临时文件失败,fileId:{}, {}", fileId, ex.getMessage(), ex); + } + return Result.successResult(); + } + /** * 查询文件上传状态 * diff --git a/nex-be/src/main/java/com/unisinsight/project/controller/UserController.java b/nex-be/src/main/java/com/unisinsight/project/controller/UserController.java index c889efb..c51d4b0 100644 --- a/nex-be/src/main/java/com/unisinsight/project/controller/UserController.java +++ b/nex-be/src/main/java/com/unisinsight/project/controller/UserController.java @@ -67,8 +67,8 @@ public class UserController { @ApiOperation(value = "用户删除") @PostMapping("/delete") public Result deleteUser(@RequestBody DeleteIdReq deleteIdReq) { - if (Objects.isNull(deleteIdReq)) { - return Result.errorResult(BaseErrorCode.PARAMS_CHK_ERROR); + if (Objects.isNull(deleteIdReq.getId())) { + return Result.errorResult(BaseErrorCode.PARAMETERS_INVALID); } log.info("用户删除请求参数为:{}", JSONUtil.toJsonStr(deleteIdReq)); return userService.delete(deleteIdReq); diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/dao/DeviceUserMapping.java b/nex-be/src/main/java/com/unisinsight/project/entity/dao/DeviceUserMapping.java index a5a1104..67cdb43 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/dao/DeviceUserMapping.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/dao/DeviceUserMapping.java @@ -84,7 +84,7 @@ public class DeviceUserMapping implements Serializable { * 类型: 1-用户,2-用户组 */ @TableField(value = "type") - private String type; + private Integer type; @TableField(exist = false) private static final long serialVersionUID = 1L; diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/dao/Image.java b/nex-be/src/main/java/com/unisinsight/project/entity/dao/Image.java index 2a5fa28..8043c98 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/dao/Image.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/dao/Image.java @@ -26,7 +26,7 @@ public class Image implements Serializable { private String imageName; /** - * 镜像类型 + * 镜像类型:1:VHD 2:VHDX 3:QCOW2 */ @TableField(value = "image_type") private Integer imageType; diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/req/DeviceUserMappingReq.java b/nex-be/src/main/java/com/unisinsight/project/entity/req/DeviceUserMappingReq.java index c621f9f..3886f03 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/req/DeviceUserMappingReq.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/req/DeviceUserMappingReq.java @@ -55,7 +55,7 @@ public class DeviceUserMappingReq implements Serializable { */ @ApiModelProperty("类型: 1-用户,2-用户组") @JsonProperty("type") - private String type; + private Integer type; /** * 描述 diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageReq.java b/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageReq.java index 9b2240a..e4c0ab8 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageReq.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageReq.java @@ -30,7 +30,7 @@ public class ImageReq implements Serializable { private String imageName; /** - * 镜像类型 + * 镜像类型:1:VHD 2:VHDX 3:QCOW2 */ @ApiModelProperty("镜像类型") @JsonProperty("image_type") diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/req/LoginReq.java b/nex-be/src/main/java/com/unisinsight/project/entity/req/LoginReq.java new file mode 100644 index 0000000..04ea9dc --- /dev/null +++ b/nex-be/src/main/java/com/unisinsight/project/entity/req/LoginReq.java @@ -0,0 +1,34 @@ +package com.unisinsight.project.entity.req; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: rdpnr_puzhi + * @create: 2025/08/11 + */ +@ApiModel("客户端请求类") +@Data +public class LoginReq { + + @ApiModelProperty("设备id") + @JsonProperty("device_id") + private String deviceId; + + @ApiModelProperty("用户名") + @JsonProperty("username") + private String username; + + @ApiModelProperty("密码") + @JsonProperty("password") + private String password; + + @ApiModelProperty("token") + @JsonProperty("token") + private String token; + + +} diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/res/DeviceImageMappingRes.java b/nex-be/src/main/java/com/unisinsight/project/entity/res/DeviceImageMappingRes.java index abeccb7..edc48bc 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/res/DeviceImageMappingRes.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/res/DeviceImageMappingRes.java @@ -32,6 +32,13 @@ public class DeviceImageMappingRes implements Serializable { @JsonProperty("device_group_id") private Long deviceGroupId; + /** + * 分组名称 + */ + @ApiModelProperty("分组名称") + @JsonProperty("device_group_name") + private String deviceGroupName; + /** * 镜像ID */ @@ -39,6 +46,13 @@ public class DeviceImageMappingRes implements Serializable { @JsonProperty("image_id") private Long imageId; + /** + * 镜像名称 + */ + @ApiModelProperty("镜像名称") + @JsonProperty("image_name") + private String imageName; + /** * 还原方式 */ diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/res/DeviceUserMappingRes.java b/nex-be/src/main/java/com/unisinsight/project/entity/res/DeviceUserMappingRes.java index fff4b5e..0770afb 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/res/DeviceUserMappingRes.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/res/DeviceUserMappingRes.java @@ -36,6 +36,13 @@ public class DeviceUserMappingRes implements Serializable { @JsonProperty("device_group_id") private Long deviceGroupId; + /** + * 分组名称 + */ + @ApiModelProperty("分组名称") + @JsonProperty("device_group_name") + private String deviceGroupName; + /** * 用户分组ID */ @@ -49,13 +56,20 @@ public class DeviceUserMappingRes implements Serializable { @ApiModelProperty("用户ID") @JsonProperty("user_id") private Long userId; + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名") + @JsonProperty("user_name") + private String userName; + /** * 类型: 1-用户,2-用户组 */ @ApiModelProperty("类型: 1-用户,2-用户组") @JsonProperty("type") - private String type; + private Integer type; /** * 描述 diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/res/ListReq.java b/nex-be/src/main/java/com/unisinsight/project/entity/res/ListReq.java new file mode 100644 index 0000000..ea22a18 --- /dev/null +++ b/nex-be/src/main/java/com/unisinsight/project/entity/res/ListReq.java @@ -0,0 +1,23 @@ +package com.unisinsight.project.entity.res; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @description: + * @author: rdpnr_puzhi + * @create: 2025/08/11 + */ +@ApiModel("list请求类") +@Data +public class ListReq { + + @ApiModelProperty("数据列表") + @JsonProperty("data") + private List data; + +} diff --git a/nex-be/src/main/java/com/unisinsight/project/service/DeviceImageMappingService.java b/nex-be/src/main/java/com/unisinsight/project/service/DeviceImageMappingService.java index 2c6d6f7..1978519 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/DeviceImageMappingService.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/DeviceImageMappingService.java @@ -12,7 +12,6 @@ import com.unisinsight.project.exception.Result; */ public interface DeviceImageMappingService extends IService { - Result insert(DeviceImageMappingReq deviceImageMappingReq); Result select(DeviceImageMappingReq deviceImageMappingReq); } diff --git a/nex-be/src/main/java/com/unisinsight/project/service/DeviceUserMappingService.java b/nex-be/src/main/java/com/unisinsight/project/service/DeviceUserMappingService.java index 9351164..2cacdc3 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/DeviceUserMappingService.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/DeviceUserMappingService.java @@ -1,7 +1,7 @@ package com.unisinsight.project.service; -import com.unisinsight.project.entity.dao.DeviceUserMapping; import com.baomidou.mybatisplus.extension.service.IService; +import com.unisinsight.project.entity.dao.DeviceUserMapping; import com.unisinsight.project.entity.req.DeviceUserMappingReq; import com.unisinsight.project.entity.req.DeviceUserReq; import com.unisinsight.project.exception.Result; @@ -13,7 +13,6 @@ import com.unisinsight.project.exception.Result; */ public interface DeviceUserMappingService extends IService { - Result insert(DeviceUserMappingReq deviceUserMappingReq); Result select(DeviceUserMappingReq deviceUserMappingReq); diff --git a/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceImageMappingServiceImpl.java b/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceImageMappingServiceImpl.java index 55a2cce..71e24f0 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceImageMappingServiceImpl.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceImageMappingServiceImpl.java @@ -4,20 +4,25 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.unisinsight.project.entity.dao.DeviceImageMapping; +import com.unisinsight.project.entity.dao.Image; +import com.unisinsight.project.entity.dao.UserDeviceGroup; import com.unisinsight.project.entity.req.DeviceImageMappingReq; import com.unisinsight.project.entity.res.DeviceImageMappingRes; -import com.unisinsight.project.exception.BaseErrorCode; import com.unisinsight.project.exception.Result; import com.unisinsight.project.mapper.DeviceImageMappingMapper; +import com.unisinsight.project.mapper.ImageMapper; +import com.unisinsight.project.mapper.UserDeviceGroupMapper; import com.unisinsight.project.service.DeviceImageMappingService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; +import java.util.stream.Collectors; /** * @author rdpnr_puzhi @@ -32,18 +37,11 @@ public class DeviceImageMappingServiceImpl extends ServiceImpl insert(DeviceImageMappingReq deviceImageMappingReq) { - DeviceImageMapping deviceImageMapping = BeanUtil.copyProperties(deviceImageMappingReq, DeviceImageMapping.class); - deviceImageMapping.setCreateUser("admin"); - int insert = deviceImageMappingMapper.insert(deviceImageMapping); - log.info("终端镜像映射新增insert:{}", insert); - if (insert == 1) { - return Result.successResult(); - } else { - return Result.errorResult(BaseErrorCode.HTTP_ERROR_CODE_500); - } - } + @Resource + private ImageMapper imageMapper; + @Resource + private UserDeviceGroupMapper groupMapper; + @Override public Result select(DeviceImageMappingReq deviceImageMappingReq) { @@ -61,6 +59,35 @@ public class DeviceImageMappingServiceImpl extends ServiceImpl deviceImageMappingRes = BeanUtil.copyToList(deviceUserMappings, DeviceImageMappingRes.class); + List imageIds = deviceImageMappingRes.stream().map(DeviceImageMappingRes::getImageId).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(imageIds)) { + LambdaQueryWrapper imageLambdaQueryWrapper = new QueryWrapper().lambda().eq(Image::getId, imageIds); + List images = imageMapper.selectList(imageLambdaQueryWrapper); + if (CollectionUtil.isNotEmpty(images)) { + deviceImageMappingRes.forEach(deviceImage -> { + images.forEach(image -> { + if (ObjectUtil.isNotEmpty(deviceImage.getImageId()) && image.getId().equals(deviceImage.getImageId())) { + deviceImage.setImageName(image.getImageName()); + } + }); + }); + } + } + List groupIdList = deviceImageMappingRes.stream().map(DeviceImageMappingRes::getDeviceGroupId).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(groupIdList)) { + LambdaQueryWrapper groupLambdaQueryWrapper = new QueryWrapper().lambda().eq(UserDeviceGroup::getId, groupIdList); + List userDeviceGroups = groupMapper.selectList(groupLambdaQueryWrapper); + if (CollectionUtil.isNotEmpty(userDeviceGroups)) { + deviceImageMappingRes.forEach(deviceImage -> { + userDeviceGroups.forEach(userDeviceGroup -> { + if (ObjectUtil.isNotEmpty(deviceImage.getImageId()) && userDeviceGroup.getId().equals(deviceImage.getImageId())) { + deviceImage.setDeviceGroupName(userDeviceGroup.getName()); + } + }); + }); + } + } + return Result.successResult(deviceImageMappingRes); } } diff --git a/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceServiceImpl.java b/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceServiceImpl.java index 9b449f3..e6b936b 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceServiceImpl.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceServiceImpl.java @@ -25,6 +25,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -87,7 +88,7 @@ public class DeviceServiceImpl extends ServiceImpl QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(deviceReq.getDeviceName())) { - queryWrapper.lambda().eq(Device::getDeviceName, deviceReq.getDeviceName()); + queryWrapper.lambda().like(Device::getDeviceName, deviceReq.getDeviceName()); } if (StringUtils.isNotBlank(deviceReq.getDeviceGroupName())) { queryWrapper.lambda().eq(Device::getDeviceGroupName, deviceReq.getDeviceGroupName()); @@ -96,10 +97,10 @@ public class DeviceServiceImpl extends ServiceImpl queryWrapper.lambda().eq(Device::getDeviceGroupId, deviceReq.getDeviceGroupId()); } if (StringUtils.isNotBlank(deviceReq.getIpAddr())) { - queryWrapper.lambda().like(Device::getIpAddr, deviceReq.getIpAddr()); + queryWrapper.lambda().eq(Device::getIpAddr, deviceReq.getIpAddr()); } if (ObjectUtils.isNotEmpty(deviceReq.getDeviceType())) { - queryWrapper.lambda().like(Device::getDeviceType, deviceReq.getDeviceType()); + queryWrapper.lambda().eq(Device::getDeviceType, deviceReq.getDeviceType()); } IPage userPage = deviceMapper.selectPage(page, queryWrapper); @@ -110,12 +111,13 @@ public class DeviceServiceImpl extends ServiceImpl } else { PageResult convert = PageResult.convertIPage(userPage, DeviceRes.class); List deviceResList = convert.getData(); + List deviceIdList = deviceResList.stream().distinct().map(DeviceRes::getDeviceGroupId).filter(Objects::nonNull).collect(Collectors.toList()); QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(UserDeviceGroup::getType, 2); + wrapper.lambda().in(UserDeviceGroup::getId, deviceIdList); List userDeviceGroups = groupMapper.selectList(wrapper); List resList = deviceResList.stream().distinct().peek(device -> { for (UserDeviceGroup userDeviceGroup : userDeviceGroups) { - if (device.getDeviceGroupId().equals(userDeviceGroup.getId())) { + if (!ObjectUtils.isEmpty(device.getDeviceGroupId()) && device.getDeviceGroupId().equals(userDeviceGroup.getId())) { device.setDeviceGroupName(userDeviceGroup.getName()); } } diff --git a/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceUserMappingServiceImpl.java b/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceUserMappingServiceImpl.java index bab9ce0..11a51fa 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceUserMappingServiceImpl.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/impl/DeviceUserMappingServiceImpl.java @@ -8,22 +8,23 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.unisinsight.project.entity.dao.DeviceUserMapping; import com.unisinsight.project.entity.dao.User; +import com.unisinsight.project.entity.dao.UserDeviceGroup; import com.unisinsight.project.entity.req.DeviceUserMappingReq; import com.unisinsight.project.entity.req.DeviceUserReq; import com.unisinsight.project.entity.res.DeviceUserMappingRes; import com.unisinsight.project.exception.BaseErrorCode; import com.unisinsight.project.exception.Result; import com.unisinsight.project.mapper.DeviceUserMappingMapper; +import com.unisinsight.project.mapper.UserDeviceGroupMapper; import com.unisinsight.project.mapper.UserMapper; import com.unisinsight.project.service.DeviceUserMappingService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -41,27 +42,22 @@ public class DeviceUserMappingServiceImpl extends ServiceImpl insert(DeviceUserMappingReq deviceUserMappingReq) { - DeviceUserMapping deviceUserMapping = BeanUtil.copyProperties(deviceUserMappingReq, DeviceUserMapping.class); - deviceUserMapping.setCreateUser("admin"); - int insert = deviceUserMappingMapper.insert(deviceUserMapping); - log.info("终端用户映射新增insert:{}", insert); - if (insert == 1) { - return Result.successResult(); - } else { - return Result.errorResult(BaseErrorCode.HTTP_ERROR_CODE_500); - } + public boolean saveBatch(Collection entityList) { + return super.saveBatch(entityList); } + @Override public Result select(DeviceUserMappingReq deviceUserMappingReq) { DeviceUserMapping deviceUserMapping = BeanUtil.copyProperties(deviceUserMappingReq, DeviceUserMapping.class); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().eq(DeviceUserMapping::getDeviceId, deviceUserMapping.getDeviceId()); + if (ObjectUtil.isNotEmpty(deviceUserMapping.getType())) { wrapper.lambda().eq(DeviceUserMapping::getType, deviceUserMapping.getType()); } @@ -74,7 +70,68 @@ public class DeviceUserMappingServiceImpl extends ServiceImpl deviceUserMappingRes = BeanUtil.copyToList(deviceUserMappings, DeviceUserMappingRes.class); - return Result.successResult(deviceUserMappingRes); + if (ObjectUtil.isEmpty(deviceUserMappingReq.getType())) { + List userList = deviceUserMappingRes.stream().distinct().map(DeviceUserMappingRes::getUserId).filter(Objects::nonNull).collect(Collectors.toList()); + userList = new ArrayList<>(new HashSet<>(userList)); + if (CollectionUtil.isNotEmpty(userList)) { + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.lambda().in(User::getId, userList); + List users = userMapper.selectList(userQueryWrapper); + deviceUserMappingRes = deviceUserMappingRes.stream().distinct().peek(device -> { + for (User user : users) { + if (!ObjectUtils.isEmpty(device.getUserId()) && device.getUserId().equals(user.getId())) { + device.setUserName(user.getUserName()); + } + } + }).collect(Collectors.toList()); + } + + List deviceList = deviceUserMappingRes.stream().distinct().map(DeviceUserMappingRes::getDeviceGroupId).filter(Objects::nonNull).collect(Collectors.toList()); + deviceList = new ArrayList<>(new HashSet<>(deviceList)); + if (CollectionUtil.isNotEmpty(deviceList)) { + QueryWrapper groupQueryWrapper = new QueryWrapper<>(); + groupQueryWrapper.lambda().in(UserDeviceGroup::getId, deviceList); + List userDeviceGroups = groupMapper.selectList(groupQueryWrapper); + deviceUserMappingRes = deviceUserMappingRes.stream().distinct().peek(device -> { + for (UserDeviceGroup userDeviceGroup : userDeviceGroups) { + if (!ObjectUtils.isEmpty(device.getDeviceGroupId()) && device.getDeviceGroupId().equals(userDeviceGroup.getId())) { + device.setDeviceGroupName(userDeviceGroup.getName()); + } + } + }).collect(Collectors.toList()); + } + + return Result.successResult(deviceUserMappingRes); + } else if (deviceUserMappingReq.getType() == 1) { + List userList = deviceUserMappingRes.stream().distinct().map(DeviceUserMappingRes::getUserId).filter(Objects::nonNull).collect(Collectors.toList()); + userList = new ArrayList<>(new HashSet<>(userList)); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.lambda().in(User::getId, userList); + List users = userMapper.selectList(userQueryWrapper); + List collect = deviceUserMappingRes.stream().distinct().peek(device -> { + for (User user : users) { + if (!ObjectUtils.isEmpty(device.getUserId()) && device.getUserId().equals(user.getId())) { + device.setUserName(user.getUserName()); + } + } + }).collect(Collectors.toList()); + return Result.successResult(collect); + } else { + List deviceList = deviceUserMappingRes.stream().distinct().map(DeviceUserMappingRes::getDeviceGroupId).filter(Objects::nonNull).collect(Collectors.toList()); + deviceList = new ArrayList<>(new HashSet<>(deviceList)); + QueryWrapper groupQueryWrapper = new QueryWrapper<>(); + groupQueryWrapper.lambda().eq(UserDeviceGroup::getType, 1); + groupQueryWrapper.lambda().in(UserDeviceGroup::getId, deviceList); + List userDeviceGroups = groupMapper.selectList(groupQueryWrapper); + List collect = deviceUserMappingRes.stream().distinct().peek(device -> { + for (UserDeviceGroup userDeviceGroup : userDeviceGroups) { + if (!ObjectUtils.isEmpty(device.getDeviceGroupId()) && device.getDeviceGroupId().equals(userDeviceGroup.getId())) { + device.setDeviceGroupName(userDeviceGroup.getName()); + } + } + }).collect(Collectors.toList()); + return Result.successResult(collect); + } } } @@ -90,7 +147,7 @@ public class DeviceUserMappingServiceImpl extends ServiceImpl users = new ArrayList<>(); - List userIdList = deviceUserMappings.stream().map(DeviceUserMapping::getUserId).collect(Collectors.toList()); + List userIdList = deviceUserMappings.stream().map(DeviceUserMapping::getUserId).filter(Objects::nonNull).collect(Collectors.toList()); log.info("用户登录查询用户id结果:{}", JSONUtil.toJsonStr(userIdList)); if (CollectionUtil.isNotEmpty(userIdList)) { QueryWrapper groupWrapper = new QueryWrapper<>(); @@ -105,7 +162,7 @@ public class DeviceUserMappingServiceImpl extends ServiceImpl groupList = deviceUserMappings.stream().map(DeviceUserMapping::getUserGroupId).collect(Collectors.toList()); + List groupList = deviceUserMappings.stream().map(DeviceUserMapping::getUserGroupId).filter(Objects::nonNull).collect(Collectors.toList()); log.info("用户登录查询用户组id结果:{}", JSONUtil.toJsonStr(groupList)); if (CollectionUtil.isNotEmpty(groupList)) { QueryWrapper groupWrapper = new QueryWrapper<>(); diff --git a/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageServiceImpl.java b/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageServiceImpl.java index 26c1054..ed05ae0 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageServiceImpl.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageServiceImpl.java @@ -44,14 +44,11 @@ public class ImageServiceImpl extends ServiceImpl Page page = new Page<>(imageReq.getPageNum(), imageReq.getPageSize()); QueryWrapper queryWrapper = new QueryWrapper<>(); - if (ObjectUtils.isNotEmpty(imageReq.getId())) { - queryWrapper.lambda().eq(Image::getId, imageReq.getId()); - } if (StringUtils.isNotBlank(imageReq.getImageName())) { queryWrapper.lambda().like(Image::getImageName, imageReq.getImageName()); } if (ObjectUtils.isNotEmpty(imageReq.getImageType())) { - queryWrapper.lambda().like(Image::getImageType, imageReq.getImageType()); + queryWrapper.lambda().eq(Image::getImageType, imageReq.getImageType()); } IPage imageIPage = imageMapper.selectPage(page, queryWrapper); diff --git a/nex-be/src/main/java/com/unisinsight/project/service/impl/UserDeviceGroupServiceImpl.java b/nex-be/src/main/java/com/unisinsight/project/service/impl/UserDeviceGroupServiceImpl.java index 8a91147..36fc4e4 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/impl/UserDeviceGroupServiceImpl.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/impl/UserDeviceGroupServiceImpl.java @@ -53,8 +53,8 @@ public class UserDeviceGroupServiceImpl extends ServiceImpl queryWrapper.lambda().like(User::getUserName, userReq.getUserName()); } if (StringUtils.isNotBlank(userReq.getIdentityNo())) { - queryWrapper.lambda().like(User::getIdentityNo, userReq.getIdentityNo()); + queryWrapper.lambda().eq(User::getIdentityNo, userReq.getIdentityNo()); } if (StringUtils.isNotBlank(userReq.getCellPhone())) { - queryWrapper.lambda().like(User::getCellPhone, userReq.getCellPhone()); + queryWrapper.lambda().eq(User::getCellPhone, userReq.getCellPhone()); } IPage userPage = userMapper.selectPage(page, queryWrapper); @@ -108,12 +109,13 @@ public class UserServiceImpl extends ServiceImpl } else { PageResult convert = PageResult.convertIPage(userPage, UserRes.class); List userResList = convert.getData(); + List collect = userResList.stream().distinct().map(UserRes::getUserGroupId).filter(Objects::nonNull).collect(Collectors.toList()); QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(UserDeviceGroup::getType, 1); + wrapper.lambda().in(UserDeviceGroup::getId, collect); List userDeviceGroups = groupMapper.selectList(wrapper); List resList = userResList.stream().distinct().peek(user -> { for (UserDeviceGroup userDeviceGroup : userDeviceGroups) { - if (user.getUserGroupId().equals(userDeviceGroup.getId())) { + if (!ObjectUtils.isEmpty(user.getUserGroupId()) && user.getUserGroupId().equals(userDeviceGroup.getId())) { user.setUserGroupName(userDeviceGroup.getName()); } } diff --git a/nex-be/src/main/resources/db/user_device_group.sql b/nex-be/src/main/resources/db/user_device_group.sql new file mode 100644 index 0000000..b2ddefe --- /dev/null +++ b/nex-be/src/main/resources/db/user_device_group.sql @@ -0,0 +1,12 @@ +-- 数据初始化 +INSERT INTO "public"."user_device_group" ("id", "name", "type", "path", "deleted") +VALUES (1, '用户顶级组织a', '1', '1', 0), + (2, '终端顶级组织b', '2', '2', 0) + ON CONFLICT (id) DO NOTHING; + +INSERT INTO "public"."user_device_group" ("id", "name", "parent_id", "parent_name", "index", "type", "path", "deleted") +VALUES (3, '默认终端分组', 2, '终端顶级组织', '3', 2, '2', 0) + ON CONFLICT (id) DO NOTHING; + +-- 更新序列 +SELECT setval('user_device_group_id_seq', (SELECT COALESCE(MAX(id), 0) FROM "public"."user_device_group"));