Browse Source

[feat]

1、增加设备权限相关功能
master
杨威 2 months ago
parent
commit
a6cd7f4262
  1. 102
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java
  2. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProMapper.java
  3. 8
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java
  4. 16
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProUserEntity.java
  5. 19
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java
  6. 115
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java
  7. 39
      dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml

102
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<PaginationData<DeviceProEntity>> pageDevicePro(
@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
DeviceProDTO deviceProDTO) {
Page<DeviceProEntity> pageQuery = new Page<>(page, pageSize);
PaginationData<DeviceProEntity> devices = deviceProService.listDeviceProEntityMap(pageQuery,deviceProDTO);
return HttpResultResponse.success(devices);
}
//2、添加项目组
/**
* 新增/更新项目
* @param deviceProEntity
* @return
*/
@Operation(summary = "新增/更新项目。", description = "新增/更新项目。")
@PostMapping("/update")
public HttpResultResponse<Boolean> updateDevicePro(@RequestBody DeviceProEntity deviceProEntity) {
return HttpResultResponse.success(deviceProService.updateDevicePro(deviceProEntity));
}
//3、删除项目组
@Operation(summary = "删除项目组。", description = "删除项目组。")
@DeleteMapping("/delete")
public HttpResultResponse<Boolean> deleteDevicePro(@RequestBody List<Long> ids) {
return HttpResultResponse.success(deviceProService.deleteIds(ids));
}
/**
* 新增/更新项目人员
* @param userEntity
* @return
*/
@Operation(summary = "新增/更新项目人员。", description = "新增/更新项目人员。")
@PostMapping("/{proId}/update")
public HttpResultResponse<Boolean> updateDeviceProUser(@RequestBody List<DeviceProUserEntity> userEntity,@PathVariable Long proId) {
return HttpResultResponse.success(deviceProService.updateDeviceProUser(userEntity,proId));
}
/**
* 设备绑定项目组
*/
@Operation(summary = "设备绑定项目组", description = "设备绑定项目组")
@PostMapping("/bind")
public HttpResultResponse<Boolean> updateDevice(Dict dict) {
return HttpResultResponse.success(deviceProService.updateDevice(dict));
}
/**
* 根据人员获取项目组(feign调用接口)
*/
@GetMapping("/user")
public List<Integer> listDeviceGroup(@RequestParam("userId") Long userId) {
log.info("----------------------------开始调用feign接口查询项目组----------------------------");
List<Integer> result = deviceProService.listDeviceGroup(userId);
log.info("----------------------------调用feign接口查询项目组结束----------------------------");
return result;
}
}

2
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<DeviceProEntity> {
List<DeviceProEntity> listDeviceProEntityMap(Page page, @Param("condition") DeviceProDTO deviceProDTO);
Page<DeviceProEntity> listDeviceProEntityMap(Page page, @Param("condition") DeviceProDTO deviceProDTO);
}

8
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<DeviceProUserEntity> deviceProUserEntityList = new ArrayList<>();

16
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;
}

19
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<DeviceProEntity> listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO);
PaginationData<DeviceProEntity> listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO);
Boolean saveAndUpdate(DeviceProEntity deviceProEntity);
Boolean deleteIds(Collection<Long> ids);
Boolean deleteIds(List<Long> ids);
Boolean updateDevicePro(DeviceProEntity deviceProEntity);
Boolean updateDeviceProUser(List<DeviceProUserEntity> userEntity,Long proId);
Boolean updateDevice(Dict dict);
List<Integer> listDeviceGroup(Long userId);
}

115
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<DeviceProEntity> listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO) {
return deviceProMapper.listDeviceProEntityMap(page,deviceProDTO);
public PaginationData<DeviceProEntity> listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO) {
Page<DeviceProEntity> pagination = deviceProMapper.listDeviceProEntityMap(page, deviceProDTO);
return new PaginationData<DeviceProEntity>(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<Long> ids) {
List<DeviceEntity> deviceEntityList = deviceMapper.selectList(new LambdaQueryWrapper<DeviceEntity>().in(DeviceEntity::getProId, ids));
if (ObjectUtil.isNotEmpty(deviceEntityList)) {
throw new ServiceException("该项目已绑定设备,无法删除,请联系管理员!");
}
List<DeviceProUserEntity> proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper<DeviceProUserEntity>().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<DeviceProUserEntity> userEntity,Long proId) {
if (ObjectUtil.isNotEmpty(userEntity)) {
throw new ServiceException("参数为空!");
}
try {
deviceProUserMapper.delete(new LambdaQueryWrapper<DeviceProUserEntity>().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<DeviceEntity> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(DeviceEntity::getProId, proId);
wrapper.eq(DeviceEntity::getId, deviceId);
return deviceMapper.update(wrapper) > 0;
}
@Override
public List<Integer> listDeviceGroup(Long userId) {
LambdaQueryWrapper<DeviceProUserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(DeviceProUserEntity::getUserId,userId);
List<DeviceProUserEntity> proUserEntityList = deviceProUserMapper.selectList(wrapper);
if (ObjectUtil.isNotEmpty(proUserEntityList)){
List<Integer> proIdList = proUserEntityList.stream().map(DeviceProUserEntity::getDeviceProId).distinct().toList();
LambdaQueryWrapper<DeviceProEntity> 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<DeviceEntity>().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<DeviceProUserEntity>().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<Long> ids) {
for (Long proId : ids) {
deviceProMapper.delete(new QueryWrapper<DeviceProEntity>().eq("id",proId));
}
return deviceProMapper.deleteBatchIds(ids)>0;
}
}

39
dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml

@ -11,12 +11,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result column="workspace_id" property="workspaceId" jdbcType="VARCHAR"/>
<collection property="deviceProUserEntityList" ofType="org.dromara.sample.manage.model.entity.DeviceProUserEntity">
<result column="pro_user_id" property="id"/>
<result column="pro_id" property="proId"/>
<result column="device_pro_id" property="deviceProId"/>
<result column="user_id" property="userId"/>
<result column="realname" property="realname"/>
<result column="nick_name" property="nickName"/>
</collection>
<collection property="deviceEntityList" ofType="org.dromara.sample.manage.model.entity.DeviceEntity">
<result column="device_id" property="id"/>
<result column="id" property="id"/>
<result column="device_sn" property="deviceSn"/>
<result column="device_name" property="deviceName"/>
<result column="device_type" property="deviceType"/>
@ -28,29 +28,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<select id="listDeviceProEntityMap" resultMap="listDeviceProEntityMap">
SELECT
dp.*,dpu.pro_user_id,dpu.pro_id,dpu.user_id,dpu.realname,d.device_id,d.device_sn,d.device_name,d.device_type,d.sub_type,d.domain,d.nickname,d.child_sn
dp.*,
dpu.user_id,
dpu.device_pro_id,
dpu.user_id,
dpu.nick_name,
d.id,
d.device_sn,
d.device_name,
d.device_type,
d.sub_type,
d.domain,
d.nickname,
d.child_sn
FROM
manage_device_pro dp
LEFT JOIN ON manage_device d ON dp.id = dp.pro_id
LEFT JOIN ON manage_device_pro_user dpu ON dp.id = dpu.pro_id
LEFT JOIN manage_device d ON dp.id = d.pro_id
LEFT JOIN manage_device_pro_user dpu ON dp.id = dpu.pro_id
<where>
dp.id = pro_id
</where>
<if test="condition.deviceSn != null and condition.deviceSn != ''">
or device_sn like concat(concat('%',#{condition.deviceSn}),'%')
or d.device_sn like concat(concat('%',#{condition.deviceSn}),'%')
</if>
<if test="condition.deviceName != null and condition.deviceName != ''">
or device_name like concat(concat('%',#{condition.deviceName}),'%')
or d.device_name like concat(concat('%',#{condition.deviceName}),'%')
</if>
<if test="condition.nickname != null and condition.nickname != ''">
or nickname like concat(concat('%',#{condition.nickname}),'%')
</if>
<if test="condition.realname != null and condition.realname != ''">
or realname like concat(concat('%',#{condition.realname}),'%')
or dpu.nickname like concat(concat('%',#{condition.nickname}),'%')
</if>
<if test="condition.userId != null and condition.userId != ''">
or user_id = #{condition.userId}
or dpu.user_id = #{condition.userId}
</if>
)
</where>
</select>
</mapper>

Loading…
Cancel
Save