优化设备权限的写法

This commit is contained in:
磷叶 2025-05-01 23:20:38 +08:00
parent 023215ff3f
commit 41c4d3c5ba
6 changed files with 61 additions and 30 deletions

View File

@ -2,6 +2,7 @@ package com.ruoyi.bst.device.service;
import java.util.List; import java.util.List;
import com.ruoyi.bst.areaJoin.domain.enums.AreaJoinPermission;
import com.ruoyi.bst.device.domain.Device; import com.ruoyi.bst.device.domain.Device;
import com.ruoyi.bst.device.domain.DeviceQuery; import com.ruoyi.bst.device.domain.DeviceQuery;
import com.ruoyi.bst.device.domain.DeviceVO; import com.ruoyi.bst.device.domain.DeviceVO;
@ -35,6 +36,9 @@ public interface DeviceService
*/ */
public List<DeviceVO> selectDeviceList(DeviceQuery device); public List<DeviceVO> selectDeviceList(DeviceQuery device);
List<DeviceVO> selectDeviceByIds(List<Long> ids, boolean scope, AreaJoinPermission permission);
/** /**
* 新增设备 * 新增设备
* *
@ -210,5 +214,13 @@ public interface DeviceService
*/ */
public int updateByQuery(Device data, DeviceQuery query); public int updateByQuery(Device data, DeviceQuery query);
/**
* 查询设备
* @param id
* @param sn
* @param scope
* @param permission
* @return
*/
DeviceVO selectDevice(Long id, String sn, boolean scope, AreaJoinPermission permission);
} }

View File

@ -82,7 +82,6 @@ public class DeviceServiceImpl implements DeviceService
@Override @Override
public DeviceVO selectOne(DeviceQuery query) { public DeviceVO selectOne(DeviceQuery query) {
PageHelper.startPage(1, 1); PageHelper.startPage(1, 1);
query.addAreaPermission(AreaJoinPermission.DEVICE_VIEW.getCode());
List<DeviceVO> list = this.selectDeviceList(query); List<DeviceVO> list = this.selectDeviceList(query);
return CollectionUtils.firstElement(list); return CollectionUtils.firstElement(list);
} }
@ -96,10 +95,21 @@ public class DeviceServiceImpl implements DeviceService
@Override @Override
public List<DeviceVO> selectDeviceList(DeviceQuery query) public List<DeviceVO> selectDeviceList(DeviceQuery query)
{ {
query.addAreaPermission(AreaJoinPermission.DEVICE_VIEW.getCode());
return deviceMapper.selectDeviceList(query); return deviceMapper.selectDeviceList(query);
} }
@Override
public List<DeviceVO> selectDeviceByIds(List<Long> ids, boolean scope, AreaJoinPermission permission) {
if (CollectionUtils.isEmptyElement(ids)) {
return Collections.emptyList();
}
DeviceQuery query = new DeviceQuery();
query.setScope(scope);
query.setIds(ids);
query.addAreaPermission(permission.getCode());
return this.selectDeviceList(query);
}
/** /**
* 执行带有SN和MAC锁的设备操作 * 执行带有SN和MAC锁的设备操作
* @param device 设备信息 * @param device 设备信息
@ -421,6 +431,7 @@ public class DeviceServiceImpl implements DeviceService
DeviceQuery query = new DeviceQuery(); DeviceQuery query = new DeviceQuery();
query.setEqSn(sn); query.setEqSn(sn);
query.setScope(scope); query.setScope(scope);
query.addAreaPermission(AreaJoinPermission.DEVICE_VIEW.getCode());
return this.selectOne(query); return this.selectOne(query);
} }
@ -585,5 +596,19 @@ public class DeviceServiceImpl implements DeviceService
return deviceMapper.updateByQuery(data, query); return deviceMapper.updateByQuery(data, query);
} }
@Override
public DeviceVO selectDevice(Long id, String sn, boolean scope, AreaJoinPermission permission) {
DeviceQuery query = new DeviceQuery();
if (id != null) {
query.setId(id);
} else if (sn != null) {
query.setSn(sn);
} else {
return null;
}
query.addAreaPermission(permission.getCode());
return this.selectOne(query);
}
} }

View File

@ -7,6 +7,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import com.ruoyi.bst.device.utils.DeviceUtil;
import com.ruoyi.bst.orderDevice.domain.enums.OrderDeviceStatus; import com.ruoyi.bst.orderDevice.domain.enums.OrderDeviceStatus;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -192,7 +193,7 @@ public class OrderValidatorImpl implements OrderValidator{
ServiceUtil.assertion(device == null || device.getId() == null, "车辆不存在"); ServiceUtil.assertion(device == null || device.getId() == null, "车辆不存在");
ServiceUtil.assertion(!DeviceStatus.canUse().contains(device.getStatus()), "ID为%s的车辆当前状态不可使用", device.getId()); ServiceUtil.assertion(!DeviceStatus.canUse().contains(device.getStatus()), "ID为%s的车辆当前状态不可使用", device.getId());
ServiceUtil.assertion(MathUtils.smallerThan(device.getRemainingPower(), device.getAreaUndercharge()), "ID为%s的车辆电量不足%s%%,暂时无法使用", device.getId(), device.getAreaUndercharge()); ServiceUtil.assertion(MathUtils.smallerThan(device.getRemainingPower(), device.getAreaUndercharge()), "ID为%s的车辆电量不足%s%%,暂时无法使用", device.getId(), device.getAreaUndercharge());
ServiceUtil.assertion(OrderDeviceStatus.inUse().contains(device.getOrderDeviceStatus()), "ID为%s的车辆当前有正在进行的订单无法使用", device.getId()); ServiceUtil.assertion(DeviceUtil.isOrderUsing(device), "ID为%s的车辆当前有正在进行的订单无法使用", device.getId());
ServiceUtil.assertion(device.getAreaId() == null, "当前车辆未绑定运营区,无法使用"); ServiceUtil.assertion(device.getAreaId() == null, "当前车辆未绑定运营区,无法使用");
ServiceUtil.assertion(AreaStatus.DISABLED.getCode().equals(device.getAreaStatus()), "运营区“%s”已停运无法使用该车辆", device.getAreaName()); ServiceUtil.assertion(AreaStatus.DISABLED.getCode().equals(device.getAreaStatus()), "运营区“%s”已停运无法使用该车辆", device.getAreaName());
ServiceUtil.assertion(!DateUtils.isBetween(LocalTime.now(), device.getAreaTimeStart(), device.getAreaTimeEnd()), "运营区“%s”当前不在营业时间无法使用该车辆", device.getAreaName()); ServiceUtil.assertion(!DateUtils.isBetween(LocalTime.now(), device.getAreaTimeStart(), device.getAreaTimeEnd()), "运营区“%s”当前不在营业时间无法使用该车辆", device.getAreaName());

View File

@ -233,7 +233,7 @@ public class IotReceiveServiceImpl implements IotReceiveService {
boolean isDispatching = DeviceStatus.DISPATCHING.getCode().equals(device.getStatus()); // 是否调度中 boolean isDispatching = DeviceStatus.DISPATCHING.getCode().equals(device.getStatus()); // 是否调度中
// 是否有正在使用的订单若没有订单则不处理 // 是否有正在使用的订单若没有订单则不处理
boolean hasOrder = device.getOrderDeviceId() != null && OrderDeviceStatus.USING.getCode().equals(device.getOrderDeviceStatus()); boolean hasOrder = DeviceUtil.isOrderUsing(device);
if (!hasOrder) { if (!hasOrder) {
return 0; return 0;
} }

View File

@ -1,9 +1,12 @@
package com.ruoyi.web.bst; package com.ruoyi.web.bst;
import java.util.Collections;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.bst.areaJoin.domain.enums.AreaJoinPermission;
import com.ruoyi.common.utils.collection.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -65,6 +68,7 @@ public class DeviceController extends BaseController
@Autowired @Autowired
private DeviceIotService deviceIotService; private DeviceIotService deviceIotService;
/** /**
* 查询设备列表 * 查询设备列表
*/ */
@ -75,6 +79,7 @@ public class DeviceController extends BaseController
startPage(); startPage();
startOrderBy(); startOrderBy();
query.setScope(true); query.setScope(true);
query.addAreaPermission(AreaJoinPermission.DEVICE_VIEW.getCode());
List<DeviceVO> list = deviceService.selectDeviceList(query); List<DeviceVO> list = deviceService.selectDeviceList(query);
if (query.getRefresh() != null && query.getRefresh()) { if (query.getRefresh() != null && query.getRefresh()) {
deviceIotService.refresh(list, IotConstants.ONLINE_TYPE_COMMAND); deviceIotService.refresh(list, IotConstants.ONLINE_TYPE_COMMAND);
@ -92,6 +97,7 @@ public class DeviceController extends BaseController
return error("运营区ID不能为空"); return error("运营区ID不能为空");
} }
query.setScope(true); query.setScope(true);
query.addAreaPermission(AreaJoinPermission.DEVICE_VIEW.getCode());
List<DeviceVO> list = deviceService.selectDeviceList(query); List<DeviceVO> list = deviceService.selectDeviceList(query);
if (query.getRefresh() != null && query.getRefresh()) { if (query.getRefresh() != null && query.getRefresh()) {
deviceIotService.refresh(list, IotConstants.ONLINE_TYPE_COMMAND); deviceIotService.refresh(list, IotConstants.ONLINE_TYPE_COMMAND);
@ -108,6 +114,7 @@ public class DeviceController extends BaseController
public void export(HttpServletResponse response, DeviceQuery query) public void export(HttpServletResponse response, DeviceQuery query)
{ {
query.setScope(true); query.setScope(true);
query.addAreaPermission(AreaJoinPermission.DEVICE_VIEW.getCode());
List<DeviceVO> list = deviceService.selectDeviceList(query); List<DeviceVO> list = deviceService.selectDeviceList(query);
ExcelUtil<DeviceVO> util = new ExcelUtil<DeviceVO>(DeviceVO.class); ExcelUtil<DeviceVO> util = new ExcelUtil<DeviceVO>(DeviceVO.class);
util.exportExcel(response, list, "设备数据"); util.exportExcel(response, list, "设备数据");
@ -118,18 +125,11 @@ public class DeviceController extends BaseController
*/ */
@PreAuthorize("@ss.hasPermi('bst:device:query')") @PreAuthorize("@ss.hasPermi('bst:device:query')")
@GetMapping @GetMapping
public AjaxResult getInfo(@RequestParam(required = false) Long id, public AjaxResult getInfo(@RequestParam(required = false) Long id,
@RequestParam(required = false) String sn, @RequestParam(required = false) String sn,
@RequestParam(required = false, defaultValue = "false") Boolean refresh) @RequestParam(required = false, defaultValue = "false") Boolean refresh)
{ {
DeviceVO device = null; DeviceVO device = deviceService.selectDevice(id, sn, true, AreaJoinPermission.DEVICE_VIEW);
if (id != null) {
device = deviceService.selectDeviceById(id, true);
} else if (sn != null) {
device = deviceService.selectDeviceBySn(sn, true);
} else {
return error("设备ID和SN不能同时为空");
}
if (refresh) { if (refresh) {
deviceIotService.refresh(device, IotConstants.ONLINE_TYPE_COMMAND); deviceIotService.refresh(device, IotConstants.ONLINE_TYPE_COMMAND);
@ -198,7 +198,7 @@ public class DeviceController extends BaseController
if (!deviceValidator.canOperate(ids)) { if (!deviceValidator.canOperate(ids)) {
return error("您无权入仓ID为" + ids + "的设备"); return error("您无权入仓ID为" + ids + "的设备");
} }
List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true); List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true, AreaJoinPermission.DEVICE_EDIT);
int count = deviceService.in(deviceList); int count = deviceService.in(deviceList);
if (count == 0) { if (count == 0) {
return error("入仓失败"); return error("入仓失败");
@ -216,7 +216,7 @@ public class DeviceController extends BaseController
if (!deviceValidator.canOperate(ids)) { if (!deviceValidator.canOperate(ids)) {
return error("您无权出仓ID为" + ids + "的设备"); return error("您无权出仓ID为" + ids + "的设备");
} }
List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true); List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true, AreaJoinPermission.DEVICE_EDIT);
int count = deviceService.out(deviceList); int count = deviceService.out(deviceList);
if (count == 0) { if (count == 0) {
return error("出仓失败"); return error("出仓失败");
@ -234,7 +234,7 @@ public class DeviceController extends BaseController
if (!deviceValidator.canOperate(ids)) { if (!deviceValidator.canOperate(ids)) {
return error("您无权禁用ID为" + ids + "的设备"); return error("您无权禁用ID为" + ids + "的设备");
} }
List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true); List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true, AreaJoinPermission.DEVICE_EDIT);
int count = deviceService.disable(deviceList); int count = deviceService.disable(deviceList);
if (count == 0) { if (count == 0) {
return error("禁用失败"); return error("禁用失败");
@ -252,7 +252,7 @@ public class DeviceController extends BaseController
if (!deviceValidator.canOperate(ids)) { if (!deviceValidator.canOperate(ids)) {
return error("您无权启用ID为" + ids + "的设备"); return error("您无权启用ID为" + ids + "的设备");
} }
List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true); List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true, AreaJoinPermission.DEVICE_EDIT);
int count = deviceService.enable(deviceList); int count = deviceService.enable(deviceList);
if (count == 0) { if (count == 0) {
return error("启用失败"); return error("启用失败");
@ -273,7 +273,7 @@ public class DeviceController extends BaseController
if (!areaValidator.canEdit(dto.getAreaId())) { if (!areaValidator.canEdit(dto.getAreaId())) {
return error("您无权将设备划拨到ID为" + dto.getAreaId() + "的运营区"); return error("您无权将设备划拨到ID为" + dto.getAreaId() + "的运营区");
} }
List<DeviceVO> deviceList = deviceService.selectDeviceByIds(dto.getIds(), true); List<DeviceVO> deviceList = deviceService.selectDeviceByIds(dto.getIds(), true, AreaJoinPermission.DEVICE_EDIT);
int count = deviceService.transfer(deviceList, dto.getAreaId()); int count = deviceService.transfer(deviceList, dto.getAreaId());
if (count == 0) { if (count == 0) {
return error("划拨失败"); return error("划拨失败");
@ -291,7 +291,7 @@ public class DeviceController extends BaseController
if (!deviceValidator.canOperate(ids)) { if (!deviceValidator.canOperate(ids)) {
return error("您无权解绑ID为" + ids + "的设备"); return error("您无权解绑ID为" + ids + "的设备");
} }
List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true); List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true, AreaJoinPermission.DEVICE_EDIT);
int count = deviceService.unbindMch(deviceList); int count = deviceService.unbindMch(deviceList);
if (count == 0) { if (count == 0) {
return error("解绑失败"); return error("解绑失败");
@ -309,7 +309,7 @@ public class DeviceController extends BaseController
if (!deviceValidator.canOperate(ids)) { if (!deviceValidator.canOperate(ids)) {
return error("您无权解绑ID为" + ids + "的设备"); return error("您无权解绑ID为" + ids + "的设备");
} }
List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true); List<DeviceVO> deviceList = deviceService.selectDeviceByIds(ids, true, AreaJoinPermission.DEVICE_EDIT);
int count = deviceService.unbindArea(deviceList); int count = deviceService.unbindArea(deviceList);
if (count == 0) { if (count == 0) {
return error("解绑失败"); return error("解绑失败");

View File

@ -1,5 +1,6 @@
package com.ruoyi.web.bst; package com.ruoyi.web.bst;
import com.ruoyi.bst.areaJoin.domain.enums.AreaJoinPermission;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.PutMapping;
@ -35,15 +36,7 @@ public class DeviceIotController extends BaseController {
private DeviceValidator deviceValidator; private DeviceValidator deviceValidator;
private DeviceVO getDevice(Long id, String sn) { private DeviceVO getDevice(Long id, String sn) {
if (id != null) { return deviceService.selectDevice(id, sn, true, AreaJoinPermission.DEVICE_EDIT);
ServiceUtil.assertion(!deviceValidator.canOperate(id), "您无权限操作ID为%s的设备", id);
return deviceService.selectDeviceById(id, true);
} else if (sn != null) {
ServiceUtil.assertion(!deviceValidator.canOperate(sn), "您无权限操作SN为%s的设备", sn);
return deviceService.selectDeviceBySn(sn, true);
} else {
throw new ServiceException("SN和ID不能同时为空");
}
} }
@PreAuthorize("@ss.hasPermi('bst:device:unlock')") @PreAuthorize("@ss.hasPermi('bst:device:unlock')")