diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/IgnoreFailedImageConverter.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/IgnoreFailedImageConverter.java index 650bec9..6795efa 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/IgnoreFailedImageConverter.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/IgnoreFailedImageConverter.java @@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory; import java.io.ByteArrayOutputStream; import java.io.InputStream; +import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; @@ -33,23 +34,62 @@ public class IgnoreFailedImageConverter implements Converter { @Override public WriteCellData convertToExcelData(URL value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { if (value == null) { - return null; + logger.debug("图片URL为空"); + return new WriteCellData<>(new byte[0]); } try { + logger.debug("开始加载图片: {}", value); 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()) { // byte[] bytes = FileUtils.readInputStream(inputStream, value.toString()); // 替代 FileUtils.readInputStream 的自定义方法 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); } } catch (Exception e) { // 静默忽略错误,只记录日志 - logger.debug("忽略图片加载失败: {}, 原因: {}", value, e.getMessage()); + logger.warn("图片加载失败: {}, 原因: {}", value, e.getMessage(), e); // return null; // 返回null表示不写入图片 return new WriteCellData<>(new byte[0]); // 返回空数组而不是 null } @@ -66,9 +106,17 @@ public class IgnoreFailedImageConverter implements Converter { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[8192]; int bytesRead; + int totalBytes = 0; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); + totalBytes += bytesRead; + + // 如果读取的数据过大,提前终止 + if (totalBytes > 10 * 1024 * 1024) { // 10MB限制 + logger.warn("读取的图片数据超过10MB限制,提前终止"); + break; + } } return outputStream.toByteArray(); diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceFenceAccessRecord.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceFenceAccessRecord.java index 58ab238..95c67d6 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceFenceAccessRecord.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceFenceAccessRecord.java @@ -69,4 +69,9 @@ public class DeviceFenceAccessRecord extends BaseEntity { */ private Date eventTime; + /** + * 事件地址 + */ + private String eventAddress; + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceFenceAccessRecordBo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceFenceAccessRecordBo.java index 2300d83..4141976 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceFenceAccessRecordBo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceFenceAccessRecordBo.java @@ -1,5 +1,6 @@ package com.fuyuanshen.equipment.domain.bo; +import cn.idev.excel.annotation.ExcelProperty; import com.fuyuanshen.common.core.validate.AddGroup; import com.fuyuanshen.common.core.validate.EditGroup; import com.fuyuanshen.common.mybatis.core.domain.BaseEntity; @@ -8,7 +9,9 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; + import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; /** @@ -25,19 +28,24 @@ public class DeviceFenceAccessRecordBo extends BaseEntity { /** * 记录ID */ - @NotNull(message = "记录ID不能为空", groups = { EditGroup.class }) + @NotNull(message = "记录ID不能为空", groups = {EditGroup.class}) private Long id; /** * 围栏ID */ - @NotNull(message = "围栏ID不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "围栏ID不能为空", groups = {AddGroup.class, EditGroup.class}) private Long fenceId; + /** + * 围栏名称 + */ + private String fenceName; + /** * 设备标识 */ - @NotBlank(message = "设备标识不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotBlank(message = "设备标识不能为空", groups = {AddGroup.class, EditGroup.class}) private String deviceId; /** @@ -48,19 +56,19 @@ public class DeviceFenceAccessRecordBo extends BaseEntity { /** * 事件类型 */ - @NotNull(message = "事件类型不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "事件类型不能为空", groups = {AddGroup.class, EditGroup.class}) private Long eventType; /** * 纬度 */ - @NotNull(message = "纬度不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "纬度不能为空", groups = {AddGroup.class, EditGroup.class}) private Double latitude; /** * 经度 */ - @NotNull(message = "经度不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "经度不能为空", groups = {AddGroup.class, EditGroup.class}) private Double longitude; /** @@ -71,9 +79,14 @@ public class DeviceFenceAccessRecordBo extends BaseEntity { /** * 事件时间 */ - @NotNull(message = "事件时间不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "事件时间不能为空", groups = {AddGroup.class, EditGroup.class}) private Date eventTime; + /** + * 事件地址 + */ + private String eventAddress; + /** * 开始时间 */ diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelExportDTO.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelExportDTO.java index b0fd5ec..7388b50 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelExportDTO.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelExportDTO.java @@ -19,24 +19,28 @@ import java.net.URL; @ContentRowHeight(100) // 内容行高 public class DeviceExcelExportDTO { - @ExcelProperty("ID") - private Long id; + // @ExcelProperty("ID") + // private Long id; @ExcelProperty("设备类型") - private Long deviceType; + @ColumnWidth(20) + private String typeName; + + // @ExcelProperty("设备类型") + // private Long deviceType; // @ExcelProperty("客户号") // private Long customerId; - @ExcelProperty("所属客户") - private String customerName; + // @ExcelProperty("所属客户") + // private String customerName; @ExcelProperty("设备名称") @ColumnWidth(20) private String deviceName; @ExcelProperty(value = "设备图片", converter = IgnoreFailedImageConverter.class) - @ColumnWidth(15) // 设置图片列宽度 + @ColumnWidth(30) // 设置图片列宽度 private URL devicePic; // 使用URL类型 @ExcelProperty("设备MAC") @@ -51,28 +55,24 @@ public class DeviceExcelExportDTO { @ColumnWidth(20) private String deviceImei; - @ExcelProperty("经度") - private String longitude; + // @ExcelProperty("经度") + // private String longitude; - @ExcelProperty("纬度") - private String latitude; + // @ExcelProperty("纬度") + // private String latitude; @ExcelProperty("备注") @ColumnWidth(30) private String remark; - @ExcelProperty("设备类型名称") - @ColumnWidth(20) - private String typeName; - /** * 设备状态 * 0 失效 * 1 正常 */ - @ExcelProperty("设备状态") - @ColumnWidth(20) - private String deviceStatus; + // @ExcelProperty("设备状态") + // @ColumnWidth(20) + // private String deviceStatus; @ExcelProperty("创建时间") @ColumnWidth(20) diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelImportDTO.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelImportDTO.java index 146f9e8..8c4204e 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelImportDTO.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelImportDTO.java @@ -16,24 +16,24 @@ import lombok.Data; @ContentRowHeight(100) // 内容行高 public class DeviceExcelImportDTO { - @ExcelProperty("设备类型") - private Long deviceType; - - @ExcelProperty("客户号") - private Long customerId; + // @ExcelProperty("设备类型") + // private Long deviceType; @ExcelProperty("设备名称") @ColumnWidth(20) private String deviceName; - @ExcelProperty(value = "设备图片", converter = ByteArrayImageConverter.class) - @ColumnWidth(15) - private byte[] devicePic; + @ExcelProperty("设备类型名称") + private String typeName; - // 添加图片写入方法 - public void setDevicePicFromBytes(byte[] bytes) { - this.devicePic = bytes; - } + // @ExcelProperty(value = "设备图片", converter = ByteArrayImageConverter.class) + // @ColumnWidth(15) + // private byte[] devicePic; + // + // // 添加图片写入方法 + // public void setDevicePicFromBytes(byte[] bytes) { + // this.devicePic = bytes; + // } @ExcelProperty("设备MAC") @ColumnWidth(20) @@ -43,24 +43,21 @@ public class DeviceExcelImportDTO { @ColumnWidth(20) private String deviceImei; - @ExcelProperty("设备SN") - @ColumnWidth(20) - private String deviceSn; + @ExcelProperty("蓝牙名称") + private String bluetoothName; - @ExcelProperty("经度") - private String longitude; - - @ExcelProperty("纬度") - private String latitude; + // @ExcelProperty("设备SN") + // @ColumnWidth(20) + // private String deviceSn; + // + // @ExcelProperty("经度") + // private String longitude; + // + // @ExcelProperty("纬度") + // private String latitude; @ExcelProperty("备注") @ColumnWidth(30) private String remark; - @ExcelProperty("设备类型名称") - private String typeName; - - @ExcelProperty("蓝牙名称") - private String bluetoothName; - } \ No newline at end of file diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceForm.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceForm.java index a51e13b..76e9398 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceForm.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceForm.java @@ -43,7 +43,6 @@ public class DeviceForm { @Schema(title = "蓝牙名称") private String bluetoothName; - @Schema(title = "设备IMEI") private String deviceImei; diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceAlarmVo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceAlarmVo.java index 167cf41..c56bc1e 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceAlarmVo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceAlarmVo.java @@ -90,13 +90,13 @@ public class DeviceAlarmVo implements Serializable { * 经度 */ @ExcelProperty(value = "经度") - private Long longitude; + private Double longitude; /** * 纬度 */ @ExcelProperty(value = "纬度") - private Long latitude; + private Double latitude; /** * 报警位置 diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceFenceAccessRecordVo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceFenceAccessRecordVo.java index 309158d..c8d114c 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceFenceAccessRecordVo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceFenceAccessRecordVo.java @@ -77,13 +77,13 @@ public class DeviceFenceAccessRecordVo implements Serializable { * 纬度 */ @ExcelProperty(value = "纬度") - private Long latitude; + private Double latitude; /** * 经度 */ @ExcelProperty(value = "经度") - private Long longitude; + private Double longitude; /** * 定位精度 @@ -97,6 +97,12 @@ public class DeviceFenceAccessRecordVo implements Serializable { @ExcelProperty(value = "事件时间") private Date eventTime; + /** + * 事件地址 + */ + @ExcelProperty(value = "事件地址") + private String eventAddress; + /** * 记录创建时间 */ diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/excel/UploadDeviceDataListener.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/excel/UploadDeviceDataListener.java index 70a0339..cdaf843 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/excel/UploadDeviceDataListener.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/excel/UploadDeviceDataListener.java @@ -72,7 +72,7 @@ public class UploadDeviceDataListener implements ReadListener selectVoPageWithFenceAndDeviceName(@Param(Constants.WRAPPER) Wrapper wrapper); + /** + * 分页查询围栏进出记录列表(纯XML形式) + * + * @param page 分页参数 + * @param bo 查询条件 + * @return 围栏进出记录分页列表 + */ + Page selectVoPageByXml(Page page, @Param("bo") DeviceFenceAccessRecordBo bo); + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceExportService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceExportService.java index 5d95f48..4ce31b5 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceExportService.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceExportService.java @@ -5,6 +5,7 @@ import com.alibaba.excel.util.DateUtils; import com.fuyuanshen.equipment.domain.Device; import com.fuyuanshen.equipment.domain.dto.DeviceExcelExportDTO; import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.io.IOException; @@ -20,6 +21,7 @@ import java.util.stream.Collectors; * @date: 2025-06-0618:22 */ @Service +@Slf4j public class DeviceExportService { public void export(List devices, HttpServletResponse response) { @@ -36,22 +38,22 @@ public class DeviceExportService { // 转换为DTO列表 List dtoList = devices.stream().map(device -> { DeviceExcelExportDTO dto = new DeviceExcelExportDTO(); - dto.setId(device.getId()); - dto.setDeviceType(device.getDeviceType()); - dto.setCustomerName(device.getCustomerName()); + // dto.setId(device.getId()); + // dto.setDeviceType(device.getDeviceType()); + // dto.setCustomerName(device.getCustomerName()); dto.setDeviceName(device.getDeviceName()); dto.setDeviceMac(device.getDeviceMac()); // 设备IMEI dto.setDeviceImei(device.getDeviceImei()); // 蓝牙名称 dto.setBluetoothName(device.getBluetoothName()); - dto.setLongitude(device.getLongitude()); - dto.setLatitude(device.getLatitude()); + // dto.setLongitude(device.getLongitude()); + // dto.setLatitude(device.getLatitude()); dto.setRemark(device.getRemark()); dto.setTypeName(device.getTypeName()); dto.setCreateBy(device.getCreateByName()); Integer deviceStatus = device.getDeviceStatus(); - dto.setDeviceStatus(deviceStatus == 1 ? "正常" : "失效"); + // dto.setDeviceStatus(deviceStatus == 1 ? "正常" : "失效"); // 时间戳转换 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) { String picUrl = device.getDevicePic(); + log.info("处理设备图片,设备ID: {}, 图片URL: {}", device.getId(), picUrl); + if (picUrl != null && !picUrl.trim().isEmpty()) { try { + // 自动将HTTP转换为HTTPS以避免重定向问题 + if (picUrl.startsWith("http://")) { + picUrl = "https://" + picUrl.substring(7); + log.info("自动将HTTP转换为HTTPS: {}", picUrl); + } + // 尝试创建URL对象(会自动验证格式) - dto.setDevicePic(new URL(picUrl)); - } catch (MalformedURLException e) { + URL url = new URL(picUrl); + + dto.setDevicePic(url); + log.info("成功设置设备图片URL到DTO"); + } catch (Exception e) { // 不是有效URL时设置为null + log.info("设置设备图片失败,设备ID: {}, URL: {}, 错误: {}", device.getId(), picUrl, e.getMessage()); dto.setDevicePic(null); } } else { + log.info("设备没有设置图片,设备ID: {}", device.getId()); dto.setDevicePic(null); } } + } \ No newline at end of file diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceFenceAccessRecordServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceFenceAccessRecordServiceImpl.java index 8800237..c46dc22 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceFenceAccessRecordServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceFenceAccessRecordServiceImpl.java @@ -54,7 +54,8 @@ public class DeviceFenceAccessRecordServiceImpl implements IDeviceFenceAccessRec @Override public TableDataInfo queryPageList(DeviceFenceAccessRecordBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPageWithFenceAndDeviceName(pageQuery.build(), lqw); + // Page result = baseMapper.selectVoPageWithFenceAndDeviceName(pageQuery.build(), lqw); + Page result = baseMapper.selectVoPageByXml(pageQuery.build(), bo); return TableDataInfo.build(result); } @@ -85,6 +86,9 @@ public class DeviceFenceAccessRecordServiceImpl implements IDeviceFenceAccessRec lqw.eq(bo.getAccuracy() != null, DeviceFenceAccessRecord::getAccuracy, bo.getAccuracy()); lqw.eq(bo.getEventTime() != null, DeviceFenceAccessRecord::getEventTime, bo.getEventTime()); lqw.eq(bo.getCreateTime() != null, DeviceFenceAccessRecord::getCreateTime, bo.getCreateTime()); + if (StringUtils.isNotBlank(bo.getFenceName())) { + params.put("fenceName", bo.getFenceName()); + } return lqw; } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceGeoFenceServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceGeoFenceServiceImpl.java index 2595b0a..086d473 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceGeoFenceServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceGeoFenceServiceImpl.java @@ -21,6 +21,7 @@ import com.fuyuanshen.equipment.service.IDeviceFenceAccessRecordService; import com.fuyuanshen.equipment.service.IDeviceFenceStatusService; import com.fuyuanshen.equipment.service.IDeviceGeoFenceService; import com.fuyuanshen.equipment.utils.map.GeoFenceChecker; +import com.fuyuanshen.equipment.utils.map.GetAddressFromLatUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -240,6 +241,9 @@ public class DeviceGeoFenceServiceImpl implements IDeviceGeoFenceService { recordBo.setFenceId(fence.getId()); recordBo.setLatitude(request.getLatitude()); recordBo.setLongitude(request.getLongitude()); + String address = GetAddressFromLatUtil.getAdd(request.getLongitude().toString(), request.getLatitude().toString()); + recordBo.setEventAddress(address); + recordBo.setEventTime(new Date()); // 1表示进入围栏,2表示离开围栏 recordBo.setEventType(currentStatus); diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java index 966fb11..376584c 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java @@ -139,8 +139,27 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override public List queryAll(DeviceQueryCriteria criteria) { - criteria.setCurrentOwnerId(LoginHelper.getUserId()); + + // 角色管理员 + Long userId = LoginHelper.getUserId(); + List 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()); + } return deviceMapper.findAll(criteria); + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java index dccaa49..38eef64 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java @@ -98,18 +98,35 @@ public class DeviceTypeServiceImpl extends ServiceImpl queryDeviceTypes() { DeviceTypeQueryCriteria criteria = new DeviceTypeQueryCriteria(); - // 管理员 - String username = LoginHelper.getUsername(); - if (!username.equals("admin")) { - criteria.setCustomerId(LoginHelper.getUserId()); + // // 管理员 + // String username = LoginHelper.getUsername(); + // if (!username.equals("admin")) { + // criteria.setCustomerId(LoginHelper.getUserId()); + // + // Long userId = LoginHelper.getUserId(); + // criteria.setCustomerId(userId); + // } - Long userId = LoginHelper.getUserId(); - criteria.setCustomerId(userId); + // 角色管理员 + Long userId = LoginHelper.getUserId(); + List 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()); } return deviceTypeMapper.findAll(criteria); } + /** * 根据设备类型名称查询设备类型 * @@ -119,7 +136,23 @@ public class DeviceTypeServiceImpl extends ServiceImpl 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.setTypeName(typeName); DeviceType deviceType = deviceTypeMapper.queryByName(criteria); return deviceType; diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/utils/map/GetAddressFromLatUtil.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/utils/map/GetAddressFromLatUtil.java index 2744977..03da1cf 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/utils/map/GetAddressFromLatUtil.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/utils/map/GetAddressFromLatUtil.java @@ -8,6 +8,8 @@ import org.slf4j.LoggerFactory; import java.net.URL; /** + * 根据经纬度获取地址信息工具类 + * * @author: 默苍璃 * @date: 2025-07-2615:59 */ @@ -74,5 +76,6 @@ public class GetAddressFromLatUtil { System.out.println("通过API获取到具体位置:" + res); return res; } + } diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceFenceAccessRecordMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceFenceAccessRecordMapper.xml index b054114..27be7c7 100644 --- a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceFenceAccessRecordMapper.xml +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceFenceAccessRecordMapper.xml @@ -8,22 +8,89 @@ + + + + \ No newline at end of file diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeMapper.xml index cdfbbca..b1f70ad 100644 --- a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeMapper.xml +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeMapper.xml @@ -49,8 +49,13 @@ parameterType="com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria"> SELECT dt.*, dg.id AS grant_id FROM device_type dt - JOIN device_type_grants dg ON dt.id = dg.device_type_id - WHERE dt.type_name = #{criteria.typeName} - AND dg.customer_id = #{criteria.customerId} + JOIN device_type_grants dg ON dt.id = dg.device_type_id + + dt.type_name = #{criteria.typeName} + + and dg.customer_id = #{criteria.customerId} + + + \ No newline at end of file