From a6cd7f4262c3dfa9bff3c446568c110d7cc705ec Mon Sep 17 00:00:00 2001 From: yangwei <867012372@qq.com> Date: Fri, 18 Apr 2025 16:06:38 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=201=E3=80=81=E5=A2=9E=E5=8A=A0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=9D=83=E9=99=90=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DeviceProController.java | 102 ++++++++++++++++ .../manage/mapper/IDeviceProMapper.java | 2 +- .../manage/model/entity/DeviceProEntity.java | 8 +- .../model/entity/DeviceProUserEntity.java | 16 ++- .../manage/service/IDeviceProService.java | 19 ++- .../service/impl/DeviceProServiceImpl.java | 115 +++++++++++++++--- .../resources/mapper/IDeviceProMapper.xml | 39 +++--- 7 files changed, 258 insertions(+), 43 deletions(-) create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java new file mode 100644 index 0000000..779a921 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java @@ -0,0 +1,102 @@ +package org.dromara.sample.manage.controller; + +import cn.hutool.core.lang.Dict; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.R; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.sdk.common.HttpResultResponse; +import org.dromara.common.sdk.common.PaginationData; +import org.dromara.sample.manage.model.dto.DeviceProDTO; +import org.dromara.sample.manage.model.entity.DeviceProEntity; +import org.dromara.sample.manage.model.entity.DeviceProUserEntity; +import org.dromara.sample.manage.service.IDeviceProService; +import org.dromara.system.api.model.LoginUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@Slf4j +@RequestMapping("${url.manage.prefix}${url.manage.version}/device/group") +@Tag(name = "无人机设备项目模块") +public class DeviceProController { + + + @Autowired + private IDeviceProService deviceProService; + + //1、查询项目组 + + /** + * 查询项目组 + * @param page + * @param pageSize + * @return + */ + @Operation(summary = "查询项目组", description = "查询项目组") + @GetMapping("/page") + public HttpResultResponse> pageDevicePro( + @RequestParam(name = "pageNum", defaultValue = "1") Long page, + @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, + DeviceProDTO deviceProDTO) { + Page pageQuery = new Page<>(page, pageSize); + PaginationData devices = deviceProService.listDeviceProEntityMap(pageQuery,deviceProDTO); + + return HttpResultResponse.success(devices); + } + + //2、添加项目组 + /** + * 新增/更新项目 + * @param deviceProEntity + * @return + */ + @Operation(summary = "新增/更新项目。", description = "新增/更新项目。") + @PostMapping("/update") + public HttpResultResponse updateDevicePro(@RequestBody DeviceProEntity deviceProEntity) { + return HttpResultResponse.success(deviceProService.updateDevicePro(deviceProEntity)); + } + + + //3、删除项目组 + @Operation(summary = "删除项目组。", description = "删除项目组。") + @DeleteMapping("/delete") + public HttpResultResponse deleteDevicePro(@RequestBody List ids) { + return HttpResultResponse.success(deviceProService.deleteIds(ids)); + } + + /** + * 新增/更新项目人员。 + * @param userEntity + * @return + */ + @Operation(summary = "新增/更新项目人员。", description = "新增/更新项目人员。") + @PostMapping("/{proId}/update") + public HttpResultResponse updateDeviceProUser(@RequestBody List userEntity,@PathVariable Long proId) { + return HttpResultResponse.success(deviceProService.updateDeviceProUser(userEntity,proId)); + } + + /** + * 设备绑定项目组 + */ + @Operation(summary = "设备绑定项目组", description = "设备绑定项目组") + @PostMapping("/bind") + public HttpResultResponse updateDevice(Dict dict) { + return HttpResultResponse.success(deviceProService.updateDevice(dict)); + } + + /** + * 根据人员获取项目组(feign调用接口) + */ + @GetMapping("/user") + public List listDeviceGroup(@RequestParam("userId") Long userId) { + log.info("----------------------------开始调用feign接口查询项目组----------------------------"); + List result = deviceProService.listDeviceGroup(userId); + log.info("----------------------------调用feign接口查询项目组结束----------------------------"); + return result; + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProMapper.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProMapper.java index 529cdd3..1a74407 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProMapper.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProMapper.java @@ -15,7 +15,7 @@ import java.util.List; */ public interface IDeviceProMapper extends BaseMapper { - List listDeviceProEntityMap(Page page, @Param("condition") DeviceProDTO deviceProDTO); + Page listDeviceProEntityMap(Page page, @Param("condition") DeviceProDTO deviceProDTO); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java index 08156cf..a7b67f3 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java @@ -40,7 +40,13 @@ public class DeviceProEntity extends BaseEntity implements Serializable { private Integer bindType; @TableField(value = "workspace_id") - private Integer workspaceId; + private String workspaceId; + + @TableField(value = "nick_name") + private String nickName; + + @TableField(value = "dept_name") + private String deptName; @TableField(exist = false) private List deviceProUserEntityList = new ArrayList<>(); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProUserEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProUserEntity.java index 2b0b27c..eed482e 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProUserEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProUserEntity.java @@ -29,13 +29,19 @@ public class DeviceProUserEntity extends BaseEntity implements Serializable { @TableId(type = IdType.AUTO) private Integer id; - @TableField(value = "pro_id") - private Integer proId; + @TableField(value = "device_pro_id") + private Integer deviceProId; @TableField(value = "user_id") - private String userId; + private Long userId; - @TableField(value = "realname") - private String realname; + @TableField(value = "user_name") + private String userName; + + @TableField(value = "nick_name") + private String nickName; + + @TableField(value = "dept_name") + private String deptName; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java index ae49322..fd4cccd 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java @@ -1,5 +1,6 @@ package org.dromara.sample.manage.service; +import cn.hutool.core.lang.Dict; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.JsonNode; import org.apache.ibatis.annotations.Param; @@ -11,11 +12,9 @@ import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.config.version.GatewayManager; import org.dromara.common.websocket.dto.BizCodeEnum; -import org.dromara.sample.manage.model.dto.DeviceDTO; -import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO; -import org.dromara.sample.manage.model.dto.DeviceProDTO; -import org.dromara.sample.manage.model.dto.TopologyDeviceDTO; +import org.dromara.sample.manage.model.dto.*; import org.dromara.sample.manage.model.entity.DeviceProEntity; +import org.dromara.sample.manage.model.entity.DeviceProUserEntity; import org.dromara.sample.manage.model.param.DeviceQueryParam; import java.util.Collection; @@ -29,9 +28,17 @@ import java.util.Optional; */ public interface IDeviceProService { - List listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO); + PaginationData listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO); Boolean saveAndUpdate(DeviceProEntity deviceProEntity); - Boolean deleteIds(Collection ids); + Boolean deleteIds(List ids); + + Boolean updateDevicePro(DeviceProEntity deviceProEntity); + + Boolean updateDeviceProUser(List userEntity,Long proId); + + Boolean updateDevice(Dict dict); + + List listDeviceGroup(Long userId); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java index 567e260..3b5a0ae 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java @@ -1,5 +1,8 @@ package org.dromara.sample.manage.service.impl; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -7,6 +10,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.BatchResult; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.firmware.*; @@ -83,8 +88,98 @@ public class DeviceProServiceImpl implements IDeviceProService { private IDeviceProUserMapper deviceProUserMapper; @Override - public List listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO) { - return deviceProMapper.listDeviceProEntityMap(page,deviceProDTO); + public PaginationData listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO) { + Page pagination = deviceProMapper.listDeviceProEntityMap(page, deviceProDTO); + + return new PaginationData(pagination.getRecords(), new Pagination(pagination.getCurrent(), pagination.getSize(), pagination.getTotal())); + } + + @Override + public Boolean updateDevicePro(DeviceProEntity deviceProEntity) { + if(ObjectUtil.isNotEmpty(deviceProEntity.getId())){ + return deviceProMapper.updateById(deviceProEntity) > 0 ; + }else { + deviceProEntity.setDeptName(LoginHelper.getDeptName()); + deviceProEntity.setNickName(LoginHelper.getUsername()); + return deviceProMapper.insert(deviceProEntity) > 0; + } + } + + + @Override + public Boolean deleteIds(List ids) { + + List deviceEntityList = deviceMapper.selectList(new LambdaQueryWrapper().in(DeviceEntity::getProId, ids)); + + if (ObjectUtil.isNotEmpty(deviceEntityList)) { + throw new ServiceException("该项目已绑定设备,无法删除,请联系管理员!"); + } + + List proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper().in(DeviceProUserEntity::getDeviceProId, ids)); + + if (ObjectUtil.isNotEmpty(proUserEntityList)) { + throw new ServiceException("该项目已绑定人员,无法删除,请联系管理员!"); + } + + + return deviceProMapper.deleteByIds(ids)>0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateDeviceProUser(List userEntity,Long proId) { + if (ObjectUtil.isNotEmpty(userEntity)) { + throw new ServiceException("参数为空!"); + } + + try { + + deviceProUserMapper.delete(new LambdaQueryWrapper().eq(DeviceProUserEntity::getDeviceProId, proId)); + + deviceProUserMapper.insert(userEntity); + + return true; + } catch (ServiceException e) { + log.error(e.getMessage(),e); + return false; + } + } + + /** + * 绑定设备的项目组 + * @param dict + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateDevice(Dict dict) { + Long deviceId = dict.getLong("deviceId"); + Long proId = dict.getLong("proId"); + + if (ObjectUtil.hasEmpty(deviceId, proId)) { + throw new ServiceException("【deviceId】或【proId】参数为空!"); + } + + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.set(DeviceEntity::getProId, proId); + wrapper.eq(DeviceEntity::getId, deviceId); + + return deviceMapper.update(wrapper) > 0; + } + + @Override + public List listDeviceGroup(Long userId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DeviceProUserEntity::getUserId,userId); + List proUserEntityList = deviceProUserMapper.selectList(wrapper); + if (ObjectUtil.isNotEmpty(proUserEntityList)){ + List proIdList = proUserEntityList.stream().map(DeviceProUserEntity::getDeviceProId).distinct().toList(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(DeviceProEntity::getId, proIdList); + return deviceProMapper.selectList(queryWrapper).stream().map(DeviceProEntity::getId).distinct().toList(); + } + + return ListUtil.empty(); } @Override @@ -101,31 +196,23 @@ public class DeviceProServiceImpl implements IDeviceProService { flag = deviceProMapper.insert(entity) > 0; } //设备项目绑定 - if(entity.getDeviceEntityList().size() >= 0 && flag == true){ + if(entity.getDeviceEntityList().size() >= 0 && flag){ for (DeviceEntity deviceEntity : deviceMapper.selectList(new QueryWrapper().eq("pro_id", entity.getId()))) { deviceMapper.updatePor(deviceEntity.getId(),null); } entity.getDeviceEntityList().stream().forEach(itme->{ itme.setProId(entity.getId()); }); - flag = deviceMapper.updateById(entity.getDeviceEntityList(),100).size() > 0;; + flag = deviceMapper.updateById(entity.getDeviceEntityList(),100).size() > 0; } //设备项目绑定 - if(entity.getDeviceProUserEntityList().size() >= 0 && flag == true){ + if(entity.getDeviceProUserEntityList().size() >= 0 && flag){ deviceProUserMapper.delete(new QueryWrapper().eq("pro_id",entity.getId())); entity.getDeviceProUserEntityList().stream().forEach(itme->{ - itme.setProId(entity.getId()); + itme.setDeviceProId(entity.getId()); }); flag = deviceProUserMapper.insert(entity.getDeviceProUserEntityList(),100).size() > 0; } return flag; } - - @Override - public Boolean deleteIds(Collection ids) { - for (Long proId : ids) { - deviceProMapper.delete(new QueryWrapper().eq("id",proId)); - } - return deviceProMapper.deleteBatchIds(ids)>0; - } } diff --git a/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml b/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml index f29e0fe..d24cd20 100644 --- a/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml +++ b/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml @@ -11,12 +11,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + - + - + @@ -28,29 +28,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"