forked from dyf/fys-Multi-tenant
导入导出设备数据
This commit is contained in:
@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
|
|
||||||
@ -33,23 +34,62 @@ public class IgnoreFailedImageConverter implements Converter<URL> {
|
|||||||
@Override
|
@Override
|
||||||
public WriteCellData<?> convertToExcelData(URL value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
|
public WriteCellData<?> convertToExcelData(URL value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return null;
|
logger.debug("图片URL为空");
|
||||||
|
return new WriteCellData<>(new byte[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
logger.debug("开始加载图片: {}", value);
|
||||||
URLConnection conn = value.openConnection();
|
URLConnection conn = value.openConnection();
|
||||||
conn.setConnectTimeout(2000); // 2秒超时
|
// 增加连接和读取超时时间
|
||||||
conn.setReadTimeout(3000); // 3秒超时
|
conn.setConnectTimeout(10000); // 10秒连接超时
|
||||||
|
conn.setReadTimeout(30000); // 30秒读取超时
|
||||||
|
|
||||||
|
// 添加User-Agent避免被服务器拦截
|
||||||
|
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ExcelExporter/1.0");
|
||||||
|
|
||||||
|
// 如果是HTTP连接,设置一些额外的属性
|
||||||
|
if (conn instanceof HttpURLConnection) {
|
||||||
|
HttpURLConnection httpConn = (HttpURLConnection) conn;
|
||||||
|
httpConn.setRequestMethod("GET");
|
||||||
|
// 不使用缓存
|
||||||
|
httpConn.setUseCaches(false);
|
||||||
|
// 跟随重定向
|
||||||
|
httpConn.setInstanceFollowRedirects(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
long contentLength = conn.getContentLengthLong();
|
||||||
|
logger.debug("连接建立成功,图片大小: {} 字节", contentLength);
|
||||||
|
|
||||||
|
// 检查内容长度是否有效
|
||||||
|
if (contentLength == 0) {
|
||||||
|
logger.warn("图片文件为空: {}", value);
|
||||||
|
return new WriteCellData<>(new byte[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 限制图片大小(防止过大文件导致内存问题)
|
||||||
|
if (contentLength > 10 * 1024 * 1024) { // 10MB限制
|
||||||
|
logger.warn("图片文件过大 ({} bytes),跳过加载: {}", contentLength, value);
|
||||||
|
return new WriteCellData<>(new byte[0]);
|
||||||
|
}
|
||||||
|
|
||||||
try (InputStream inputStream = conn.getInputStream()) {
|
try (InputStream inputStream = conn.getInputStream()) {
|
||||||
// byte[] bytes = FileUtils.readInputStream(inputStream, value.toString());
|
// byte[] bytes = FileUtils.readInputStream(inputStream, value.toString());
|
||||||
// 替代 FileUtils.readInputStream 的自定义方法
|
// 替代 FileUtils.readInputStream 的自定义方法
|
||||||
byte[] bytes = readInputStream(inputStream);
|
byte[] bytes = readInputStream(inputStream);
|
||||||
|
|
||||||
|
// 检查读取到的数据是否为空
|
||||||
|
if (bytes == null || bytes.length == 0) {
|
||||||
|
logger.warn("读取到空的图片数据: {}", value);
|
||||||
|
return new WriteCellData<>(new byte[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("成功读取图片数据,大小: {} 字节", bytes.length);
|
||||||
return new WriteCellData<>(bytes);
|
return new WriteCellData<>(bytes);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 静默忽略错误,只记录日志
|
// 静默忽略错误,只记录日志
|
||||||
logger.debug("忽略图片加载失败: {}, 原因: {}", value, e.getMessage());
|
logger.warn("图片加载失败: {}, 原因: {}", value, e.getMessage(), e);
|
||||||
// return null; // 返回null表示不写入图片
|
// return null; // 返回null表示不写入图片
|
||||||
return new WriteCellData<>(new byte[0]); // 返回空数组而不是 null
|
return new WriteCellData<>(new byte[0]); // 返回空数组而不是 null
|
||||||
}
|
}
|
||||||
@ -66,9 +106,17 @@ public class IgnoreFailedImageConverter implements Converter<URL> {
|
|||||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
byte[] buffer = new byte[8192];
|
byte[] buffer = new byte[8192];
|
||||||
int bytesRead;
|
int bytesRead;
|
||||||
|
int totalBytes = 0;
|
||||||
|
|
||||||
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
||||||
outputStream.write(buffer, 0, bytesRead);
|
outputStream.write(buffer, 0, bytesRead);
|
||||||
|
totalBytes += bytesRead;
|
||||||
|
|
||||||
|
// 如果读取的数据过大,提前终止
|
||||||
|
if (totalBytes > 10 * 1024 * 1024) { // 10MB限制
|
||||||
|
logger.warn("读取的图片数据超过10MB限制,提前终止");
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return outputStream.toByteArray();
|
return outputStream.toByteArray();
|
||||||
|
|||||||
@ -19,24 +19,28 @@ import java.net.URL;
|
|||||||
@ContentRowHeight(100) // 内容行高
|
@ContentRowHeight(100) // 内容行高
|
||||||
public class DeviceExcelExportDTO {
|
public class DeviceExcelExportDTO {
|
||||||
|
|
||||||
@ExcelProperty("ID")
|
// @ExcelProperty("ID")
|
||||||
private Long id;
|
// private Long id;
|
||||||
|
|
||||||
@ExcelProperty("设备类型")
|
@ExcelProperty("设备类型")
|
||||||
private Long deviceType;
|
@ColumnWidth(20)
|
||||||
|
private String typeName;
|
||||||
|
|
||||||
|
// @ExcelProperty("设备类型")
|
||||||
|
// private Long deviceType;
|
||||||
|
|
||||||
// @ExcelProperty("客户号")
|
// @ExcelProperty("客户号")
|
||||||
// private Long customerId;
|
// private Long customerId;
|
||||||
|
|
||||||
@ExcelProperty("所属客户")
|
// @ExcelProperty("所属客户")
|
||||||
private String customerName;
|
// private String customerName;
|
||||||
|
|
||||||
@ExcelProperty("设备名称")
|
@ExcelProperty("设备名称")
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
private String deviceName;
|
private String deviceName;
|
||||||
|
|
||||||
@ExcelProperty(value = "设备图片", converter = IgnoreFailedImageConverter.class)
|
@ExcelProperty(value = "设备图片", converter = IgnoreFailedImageConverter.class)
|
||||||
@ColumnWidth(15) // 设置图片列宽度
|
@ColumnWidth(30) // 设置图片列宽度
|
||||||
private URL devicePic; // 使用URL类型
|
private URL devicePic; // 使用URL类型
|
||||||
|
|
||||||
@ExcelProperty("设备MAC")
|
@ExcelProperty("设备MAC")
|
||||||
@ -51,28 +55,24 @@ public class DeviceExcelExportDTO {
|
|||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
private String deviceImei;
|
private String deviceImei;
|
||||||
|
|
||||||
@ExcelProperty("经度")
|
// @ExcelProperty("经度")
|
||||||
private String longitude;
|
// private String longitude;
|
||||||
|
|
||||||
@ExcelProperty("纬度")
|
// @ExcelProperty("纬度")
|
||||||
private String latitude;
|
// private String latitude;
|
||||||
|
|
||||||
@ExcelProperty("备注")
|
@ExcelProperty("备注")
|
||||||
@ColumnWidth(30)
|
@ColumnWidth(30)
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
@ExcelProperty("设备类型名称")
|
|
||||||
@ColumnWidth(20)
|
|
||||||
private String typeName;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备状态
|
* 设备状态
|
||||||
* 0 失效
|
* 0 失效
|
||||||
* 1 正常
|
* 1 正常
|
||||||
*/
|
*/
|
||||||
@ExcelProperty("设备状态")
|
// @ExcelProperty("设备状态")
|
||||||
@ColumnWidth(20)
|
// @ColumnWidth(20)
|
||||||
private String deviceStatus;
|
// private String deviceStatus;
|
||||||
|
|
||||||
@ExcelProperty("创建时间")
|
@ExcelProperty("创建时间")
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
|
|||||||
@ -16,24 +16,24 @@ import lombok.Data;
|
|||||||
@ContentRowHeight(100) // 内容行高
|
@ContentRowHeight(100) // 内容行高
|
||||||
public class DeviceExcelImportDTO {
|
public class DeviceExcelImportDTO {
|
||||||
|
|
||||||
@ExcelProperty("设备类型")
|
// @ExcelProperty("设备类型")
|
||||||
private Long deviceType;
|
// private Long deviceType;
|
||||||
|
|
||||||
@ExcelProperty("客户号")
|
|
||||||
private Long customerId;
|
|
||||||
|
|
||||||
@ExcelProperty("设备名称")
|
@ExcelProperty("设备名称")
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
private String deviceName;
|
private String deviceName;
|
||||||
|
|
||||||
@ExcelProperty(value = "设备图片", converter = ByteArrayImageConverter.class)
|
@ExcelProperty("设备类型名称")
|
||||||
@ColumnWidth(15)
|
private String typeName;
|
||||||
private byte[] devicePic;
|
|
||||||
|
|
||||||
// 添加图片写入方法
|
// @ExcelProperty(value = "设备图片", converter = ByteArrayImageConverter.class)
|
||||||
public void setDevicePicFromBytes(byte[] bytes) {
|
// @ColumnWidth(15)
|
||||||
this.devicePic = bytes;
|
// private byte[] devicePic;
|
||||||
}
|
//
|
||||||
|
// // 添加图片写入方法
|
||||||
|
// public void setDevicePicFromBytes(byte[] bytes) {
|
||||||
|
// this.devicePic = bytes;
|
||||||
|
// }
|
||||||
|
|
||||||
@ExcelProperty("设备MAC")
|
@ExcelProperty("设备MAC")
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
@ -43,24 +43,21 @@ public class DeviceExcelImportDTO {
|
|||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
private String deviceImei;
|
private String deviceImei;
|
||||||
|
|
||||||
@ExcelProperty("设备SN")
|
@ExcelProperty("蓝牙名称")
|
||||||
@ColumnWidth(20)
|
private String bluetoothName;
|
||||||
private String deviceSn;
|
|
||||||
|
|
||||||
@ExcelProperty("经度")
|
// @ExcelProperty("设备SN")
|
||||||
private String longitude;
|
// @ColumnWidth(20)
|
||||||
|
// private String deviceSn;
|
||||||
@ExcelProperty("纬度")
|
//
|
||||||
private String latitude;
|
// @ExcelProperty("经度")
|
||||||
|
// private String longitude;
|
||||||
|
//
|
||||||
|
// @ExcelProperty("纬度")
|
||||||
|
// private String latitude;
|
||||||
|
|
||||||
@ExcelProperty("备注")
|
@ExcelProperty("备注")
|
||||||
@ColumnWidth(30)
|
@ColumnWidth(30)
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
@ExcelProperty("设备类型名称")
|
|
||||||
private String typeName;
|
|
||||||
|
|
||||||
@ExcelProperty("蓝牙名称")
|
|
||||||
private String bluetoothName;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -43,7 +43,6 @@ public class DeviceForm {
|
|||||||
@Schema(title = "蓝牙名称")
|
@Schema(title = "蓝牙名称")
|
||||||
private String bluetoothName;
|
private String bluetoothName;
|
||||||
|
|
||||||
|
|
||||||
@Schema(title = "设备IMEI")
|
@Schema(title = "设备IMEI")
|
||||||
private String deviceImei;
|
private String deviceImei;
|
||||||
|
|
||||||
|
|||||||
@ -90,13 +90,13 @@ public class DeviceAlarmVo implements Serializable {
|
|||||||
* 经度
|
* 经度
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "经度")
|
@ExcelProperty(value = "经度")
|
||||||
private Long longitude;
|
private Double longitude;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 纬度
|
* 纬度
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "纬度")
|
@ExcelProperty(value = "纬度")
|
||||||
private Long latitude;
|
private Double latitude;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 报警位置
|
* 报警位置
|
||||||
|
|||||||
@ -77,13 +77,13 @@ public class DeviceFenceAccessRecordVo implements Serializable {
|
|||||||
* 纬度
|
* 纬度
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "纬度")
|
@ExcelProperty(value = "纬度")
|
||||||
private Long latitude;
|
private Double latitude;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 经度
|
* 经度
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "经度")
|
@ExcelProperty(value = "经度")
|
||||||
private Long longitude;
|
private Double longitude;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 定位精度
|
* 定位精度
|
||||||
|
|||||||
@ -72,7 +72,7 @@ public class UploadDeviceDataListener implements ReadListener<DeviceExcelImportD
|
|||||||
// 设置图片数据
|
// 设置图片数据
|
||||||
byte[] imageData = rowImageMap.get(rowIndex);
|
byte[] imageData = rowImageMap.get(rowIndex);
|
||||||
if (imageData != null) {
|
if (imageData != null) {
|
||||||
recordWithImage.setDevicePicFromBytes(imageData);
|
// recordWithImage.setDevicePicFromBytes(imageData);
|
||||||
}
|
}
|
||||||
|
|
||||||
failedRecordsWithImages.add(recordWithImage);
|
failedRecordsWithImages.add(recordWithImage);
|
||||||
@ -125,7 +125,6 @@ public class UploadDeviceDataListener implements ReadListener<DeviceExcelImportD
|
|||||||
rowDeviceMap.put(rowIndex, device);
|
rowDeviceMap.put(rowIndex, device);
|
||||||
rowDtoMap.put(rowIndex, data);
|
rowDtoMap.put(rowIndex, data);
|
||||||
rowIndexList.add(rowIndex);
|
rowIndexList.add(rowIndex);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -191,7 +190,8 @@ public class UploadDeviceDataListener implements ReadListener<DeviceExcelImportD
|
|||||||
if (device != null) {
|
if (device != null) {
|
||||||
try {
|
try {
|
||||||
byte[] imageData = picture.getPictureData().getData();
|
byte[] imageData = picture.getPictureData().getData();
|
||||||
String extraValue = getCellValue(sheet, rowIndex, 4);
|
// 表示Excel表格中的第3列(因为索引从0开始计算)
|
||||||
|
String extraValue = getCellValue(sheet, rowIndex, 2);
|
||||||
String imageUrl = uploadAndGenerateUrl(imageData, extraValue);
|
String imageUrl = uploadAndGenerateUrl(imageData, extraValue);
|
||||||
device.setDevicePic(imageUrl);
|
device.setDevicePic(imageUrl);
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import com.alibaba.excel.util.DateUtils;
|
|||||||
import com.fuyuanshen.equipment.domain.Device;
|
import com.fuyuanshen.equipment.domain.Device;
|
||||||
import com.fuyuanshen.equipment.domain.dto.DeviceExcelExportDTO;
|
import com.fuyuanshen.equipment.domain.dto.DeviceExcelExportDTO;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -20,6 +21,7 @@ import java.util.stream.Collectors;
|
|||||||
* @date: 2025-06-0618:22
|
* @date: 2025-06-0618:22
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
|
@Slf4j
|
||||||
public class DeviceExportService {
|
public class DeviceExportService {
|
||||||
|
|
||||||
public void export(List<Device> devices, HttpServletResponse response) {
|
public void export(List<Device> devices, HttpServletResponse response) {
|
||||||
@ -36,22 +38,22 @@ public class DeviceExportService {
|
|||||||
// 转换为DTO列表
|
// 转换为DTO列表
|
||||||
List<DeviceExcelExportDTO> dtoList = devices.stream().map(device -> {
|
List<DeviceExcelExportDTO> dtoList = devices.stream().map(device -> {
|
||||||
DeviceExcelExportDTO dto = new DeviceExcelExportDTO();
|
DeviceExcelExportDTO dto = new DeviceExcelExportDTO();
|
||||||
dto.setId(device.getId());
|
// dto.setId(device.getId());
|
||||||
dto.setDeviceType(device.getDeviceType());
|
// dto.setDeviceType(device.getDeviceType());
|
||||||
dto.setCustomerName(device.getCustomerName());
|
// dto.setCustomerName(device.getCustomerName());
|
||||||
dto.setDeviceName(device.getDeviceName());
|
dto.setDeviceName(device.getDeviceName());
|
||||||
dto.setDeviceMac(device.getDeviceMac());
|
dto.setDeviceMac(device.getDeviceMac());
|
||||||
// 设备IMEI
|
// 设备IMEI
|
||||||
dto.setDeviceImei(device.getDeviceImei());
|
dto.setDeviceImei(device.getDeviceImei());
|
||||||
// 蓝牙名称
|
// 蓝牙名称
|
||||||
dto.setBluetoothName(device.getBluetoothName());
|
dto.setBluetoothName(device.getBluetoothName());
|
||||||
dto.setLongitude(device.getLongitude());
|
// dto.setLongitude(device.getLongitude());
|
||||||
dto.setLatitude(device.getLatitude());
|
// dto.setLatitude(device.getLatitude());
|
||||||
dto.setRemark(device.getRemark());
|
dto.setRemark(device.getRemark());
|
||||||
dto.setTypeName(device.getTypeName());
|
dto.setTypeName(device.getTypeName());
|
||||||
dto.setCreateBy(device.getCreateByName());
|
dto.setCreateBy(device.getCreateByName());
|
||||||
Integer deviceStatus = device.getDeviceStatus();
|
Integer deviceStatus = device.getDeviceStatus();
|
||||||
dto.setDeviceStatus(deviceStatus == 1 ? "正常" : "失效");
|
// dto.setDeviceStatus(deviceStatus == 1 ? "正常" : "失效");
|
||||||
// 时间戳转换
|
// 时间戳转换
|
||||||
dto.setCreateTime(DateUtils.format(device.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
|
dto.setCreateTime(DateUtils.format(device.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||||
|
|
||||||
@ -72,17 +74,31 @@ public class DeviceExportService {
|
|||||||
|
|
||||||
private void handleDevicePic(Device device, DeviceExcelExportDTO dto) {
|
private void handleDevicePic(Device device, DeviceExcelExportDTO dto) {
|
||||||
String picUrl = device.getDevicePic();
|
String picUrl = device.getDevicePic();
|
||||||
|
log.info("处理设备图片,设备ID: {}, 图片URL: {}", device.getId(), picUrl);
|
||||||
|
|
||||||
if (picUrl != null && !picUrl.trim().isEmpty()) {
|
if (picUrl != null && !picUrl.trim().isEmpty()) {
|
||||||
try {
|
try {
|
||||||
|
// 自动将HTTP转换为HTTPS以避免重定向问题
|
||||||
|
if (picUrl.startsWith("http://")) {
|
||||||
|
picUrl = "https://" + picUrl.substring(7);
|
||||||
|
log.info("自动将HTTP转换为HTTPS: {}", picUrl);
|
||||||
|
}
|
||||||
|
|
||||||
// 尝试创建URL对象(会自动验证格式)
|
// 尝试创建URL对象(会自动验证格式)
|
||||||
dto.setDevicePic(new URL(picUrl));
|
URL url = new URL(picUrl);
|
||||||
} catch (MalformedURLException e) {
|
|
||||||
|
dto.setDevicePic(url);
|
||||||
|
log.info("成功设置设备图片URL到DTO");
|
||||||
|
} catch (Exception e) {
|
||||||
// 不是有效URL时设置为null
|
// 不是有效URL时设置为null
|
||||||
|
log.info("设置设备图片失败,设备ID: {}, URL: {}, 错误: {}", device.getId(), picUrl, e.getMessage());
|
||||||
dto.setDevicePic(null);
|
dto.setDevicePic(null);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
log.info("设备没有设置图片,设备ID: {}", device.getId());
|
||||||
dto.setDevicePic(null);
|
dto.setDevicePic(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -139,8 +139,27 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Device> queryAll(DeviceQueryCriteria criteria) {
|
public List<Device> queryAll(DeviceQueryCriteria criteria) {
|
||||||
|
|
||||||
|
// 角色管理员
|
||||||
|
Long userId = LoginHelper.getUserId();
|
||||||
|
List<SysRoleVo> roles = roleService.selectRolesAuthByUserId(userId);
|
||||||
|
boolean isAdmin = false;
|
||||||
|
if (CollectionUtil.isNotEmpty(roles)) {
|
||||||
|
for (SysRoleVo role : roles) {
|
||||||
|
if (role.getRoleKey().equals("admin")) {
|
||||||
|
isAdmin = true;
|
||||||
|
criteria.setIsAdmin(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 只有非admin用户才设置当前用户ID条件
|
||||||
|
if (!isAdmin) {
|
||||||
criteria.setCurrentOwnerId(LoginHelper.getUserId());
|
criteria.setCurrentOwnerId(LoginHelper.getUserId());
|
||||||
|
}
|
||||||
return deviceMapper.findAll(criteria);
|
return deviceMapper.findAll(criteria);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -136,7 +136,23 @@ public class DeviceTypeServiceImpl extends ServiceImpl<DeviceTypeMapper, DeviceT
|
|||||||
@Override
|
@Override
|
||||||
public DeviceType queryByName(String typeName) {
|
public DeviceType queryByName(String typeName) {
|
||||||
DeviceTypeQueryCriteria criteria = new DeviceTypeQueryCriteria();
|
DeviceTypeQueryCriteria criteria = new DeviceTypeQueryCriteria();
|
||||||
|
|
||||||
|
// 角色管理员
|
||||||
|
Long userId = LoginHelper.getUserId();
|
||||||
|
List<SysRoleVo> roles = roleService.selectRolesAuthByUserId(userId);
|
||||||
|
boolean isAdmin = false;
|
||||||
|
if (CollectionUtil.isNotEmpty(roles)) {
|
||||||
|
for (SysRoleVo role : roles) {
|
||||||
|
if (role.getRoleKey().contains("admin")) {
|
||||||
|
isAdmin = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!isAdmin) {
|
||||||
criteria.setCustomerId(LoginHelper.getUserId());
|
criteria.setCustomerId(LoginHelper.getUserId());
|
||||||
|
}
|
||||||
|
|
||||||
criteria.setTypeName(typeName);
|
criteria.setTypeName(typeName);
|
||||||
DeviceType deviceType = deviceTypeMapper.queryByName(criteria);
|
DeviceType deviceType = deviceTypeMapper.queryByName(criteria);
|
||||||
return deviceType;
|
return deviceType;
|
||||||
|
|||||||
@ -50,7 +50,12 @@
|
|||||||
SELECT dt.*, dg.id AS grant_id
|
SELECT dt.*, dg.id AS grant_id
|
||||||
FROM device_type dt
|
FROM device_type dt
|
||||||
JOIN device_type_grants dg ON dt.id = dg.device_type_id
|
JOIN device_type_grants dg ON dt.id = dg.device_type_id
|
||||||
WHERE dt.type_name = #{criteria.typeName}
|
<where>
|
||||||
AND dg.customer_id = #{criteria.customerId}
|
dt.type_name = #{criteria.typeName}
|
||||||
|
<if test="criteria.customerId != null">
|
||||||
|
and dg.customer_id = #{criteria.customerId}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user