diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/manager/RedisSubscribeManager.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/manager/RedisSubscribeManager.java index f8e2a86f..795b448f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/manager/RedisSubscribeManager.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/manager/RedisSubscribeManager.java @@ -83,6 +83,7 @@ public class RedisSubscribeManager { Object object = RedisUtils.getCacheObject("xmjdap:ws"); log.info("开始执行Redis订阅更新定时任务..."); if (object == null) { + cancelAllSubscribes(); return; } long oldTime = Long.parseLong(String.valueOf(object)); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/DeviceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/DeviceController.java index 34e8d925..891d66cf 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/DeviceController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/DeviceController.java @@ -13,8 +13,7 @@ import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.domain.dto.constructionuser.SubConstructionUserQueryReq; import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.gps.domain.bo.GpsEquipmentBo; -import org.dromara.gps.domain.vo.ConstructionUser; -import org.dromara.gps.domain.vo.GpsProjectVo; +import org.dromara.gps.domain.vo.*; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -26,7 +25,6 @@ import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.gps.domain.vo.DeviceVo; import org.dromara.gps.domain.bo.DeviceBo; import org.dromara.gps.service.IDeviceService; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -114,6 +112,15 @@ public class DeviceController extends BaseController { return toAjax(deviceService.deleteWithValidByIds(List.of(ids), true)); } + /** + * 查询GPS设备用户列表 + */ + @SaCheckPermission("gps:device:getUserList") + @GetMapping("/getUserList") + public R> getUserList(DeviceBo bo) { + return R.ok(deviceService.getUserList(bo)); + } + /** * 项目列表 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/DeviceBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/DeviceBo.java index 651d62f0..2bedc655 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/DeviceBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/DeviceBo.java @@ -97,5 +97,7 @@ public class DeviceBo extends BaseEntity { */ private String batteryOff; + private Integer type; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/AnqmUserVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/AnqmUserVo.java new file mode 100644 index 00000000..40f030ec --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/AnqmUserVo.java @@ -0,0 +1,51 @@ +package org.dromara.gps.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * GPS人机关联视图对象 gps_manmachine + * + * @author Lion Li + * @date 2025-08-28 + */ +@Data +//@ExcelIgnoreUnannotated +//@AutoMapper(target = GpsManmachine.class) +public class AnqmUserVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + *类型(1、历史,0、当前) + */ +// @ExcelProperty(value = "") + private Integer type; + + /** + * + */ +// @ExcelProperty(value = "") + private Long userId; + /** + * 用户名 + */ + private String userName; + /** + * + */ +// @ExcelProperty(value = "") + private Long projectId; + /** + * 用户名 + */ + private String projectName; + + private String devNum; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/DeviceVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/DeviceVo.java index 3881ee62..0e4fea6c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/DeviceVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/DeviceVo.java @@ -34,6 +34,13 @@ public class DeviceVo implements Serializable { @ExcelProperty(value = "id") private Long id; + /** + * 用户id + */ + private Long userId; + + private String userName; + /** * 设备编号 */ @@ -58,6 +65,8 @@ public class DeviceVo implements Serializable { @ExcelProperty(value = "项目id") private Long projectId; + private String projectName; + /** * 设备采集温度 */ @@ -112,5 +121,7 @@ public class DeviceVo implements Serializable { @ExcelProperty(value = "电池关机时间") private String batteryOff; + private Integer type; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/DeviceMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/DeviceMapper.java index 4d5ea284..20ba7e7d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/DeviceMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/DeviceMapper.java @@ -1,9 +1,15 @@ package org.dromara.gps.mapper; +import jakarta.validation.constraints.NotBlank; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.dromara.gps.domain.Device; +import org.dromara.gps.domain.vo.AnqmUserVo; import org.dromara.gps.domain.vo.DeviceVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import java.util.List; + /** * 安全帽设备Mapper接口 * @@ -12,4 +18,17 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface DeviceMapper extends BaseMapperPlus { + @Select("SELECT\n" + + " gm.user_id AS userId,\n" + + " su.user_name AS userName, \n" + + " gm.project_id AS projectId,\n" + + " bp.project_name AS projectName \n" + + "FROM\n" + + " location gm\n" + + " LEFT JOIN sys_user su ON gm.user_id = su.user_id \n" + + "LEFT JOIN bus_project bp ON gm.project_id = bp.id \n" + + "WHERE\n" + + " gm.dev_num = #{devNum}" + + " GROUP BY gm.user_id,gm.project_id") + List getUserList(@Param("devNum") String devNum); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IDeviceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IDeviceService.java index 0239d9f7..12276448 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IDeviceService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IDeviceService.java @@ -1,6 +1,7 @@ package org.dromara.gps.service; import org.dromara.gps.domain.bo.GpsEquipmentBo; +import org.dromara.gps.domain.vo.AnqmUserVo; import org.dromara.gps.domain.vo.DeviceVo; import org.dromara.gps.domain.bo.DeviceBo; import org.dromara.gps.domain.Device; @@ -9,6 +10,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.gps.domain.vo.GpsProjectVo; +import org.dromara.gps.domain.vo.GpsUserVo; import java.time.LocalDateTime; import java.util.Collection; @@ -79,4 +81,6 @@ public interface IDeviceService extends IService{ Boolean unbindManmachine(DeviceBo bo); List getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now); + + List getUserList(DeviceBo bo); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/DeviceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/DeviceServiceImpl.java index e2b994b6..961c1441 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/DeviceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/DeviceServiceImpl.java @@ -15,25 +15,24 @@ import lombok.RequiredArgsConstructor; import org.dromara.gps.domain.AnqmManmachine; import org.dromara.gps.domain.GpsEquipment; import org.dromara.gps.domain.GpsManmachine; -import org.dromara.gps.domain.vo.GpsProjectVo; +import org.dromara.gps.domain.bo.GpsEquipmentBo; +import org.dromara.gps.domain.vo.*; import org.dromara.gps.mapper.AnqmManmachineMapper; import org.dromara.gps.service.ILocationService; import org.dromara.project.domain.vo.project.BusProjectVo; import org.dromara.project.service.IBusProjectService; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.gps.domain.bo.DeviceBo; -import org.dromara.gps.domain.vo.DeviceVo; import org.dromara.gps.domain.Device; import org.dromara.gps.mapper.DeviceMapper; import org.dromara.gps.service.IDeviceService; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; /** * 安全帽设备Service业务层处理 @@ -56,6 +55,9 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Autowired private ILocationService locationService; + @Autowired + private ISysUserService userService; + /** * 查询安全帽设备 * @@ -78,6 +80,40 @@ public class DeviceServiceImpl extends ServiceImpl impleme public TableDataInfo queryPageList(DeviceBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (bo.getType() == 1){ + List list = result.getRecords().stream() + .filter(gpsEquipment -> gpsEquipment.getProjectId() != null) + .toList(); + list.forEach(item -> { + if (item.getUserId() != null){ + item.setType(1); + }else{ + item.setType(2); + } + SysUserVo sysUserVo = userService.queryById(item.getUserId()); + if (sysUserVo != null) { + item.setUserName(sysUserVo.getUserName()); + } + BusProjectVo busProjectVo = projectService.selectById(item.getProjectId()); + if (busProjectVo != null) { + item.setProjectName(busProjectVo.getProjectName()); + } + }); + result.setRecords(list); + }else if (bo.getType() == 2){ + List list = result.getRecords().stream() + .filter(gpsEquipment -> gpsEquipment.getProjectId() == null).toList(); + list.forEach(item ->{ + if (item.getProjectId() != null) { + BusProjectVo busProjectVo = projectService.selectById(item.getProjectId()); + if (busProjectVo != null) { + item.setProjectName(busProjectVo.getProjectName()); + } + } + item.setType(2); + }); + result.setRecords(list); + } return TableDataInfo.build(result); } @@ -222,4 +258,23 @@ public class DeviceServiceImpl extends ServiceImpl impleme public List getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now) { return locationService.getUserListByProjectId(projectId,startOfDay,now); } + + @Override + public List getUserList(DeviceBo bo) { + List gpsUserVos = baseMapper.getUserList(bo.getDevNum()); + if (gpsUserVos == null || gpsUserVos.isEmpty()) { + return null; + } + List list = gpsUserVos.stream().filter(Objects::nonNull).toList(); + AnqmManmachine gpsManmachine = anqmManmachineMapper.selectOne(new LambdaQueryWrapper().eq(AnqmManmachine::getClientId, bo.getDevNum())); + for (AnqmUserVo item : list) { + item.setDevNum(bo.getDevNum()); + if (gpsManmachine != null && gpsManmachine.getUserId().equals(item.getUserId())) { + item.setType(0); + }else { + item.setType(1); + } + } + return list; + } }