From 9b7db3214e9bd08981ba70194b5ce1d36f967c63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Thu, 4 Dec 2025 20:21:24 +0800 Subject: [PATCH] =?UTF-8?q?12-04-=E4=BA=BA=E5=91=98=E5=AE=9A=E4=BD=8D-?= =?UTF-8?q?=E7=BB=88=E7=89=88-=E4=BC=98=E5=8C=96=E7=89=88=E4=B9=8B?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gps/domain/bo/GpsEquipmentSonBo.java | 20 ++++++--- .../service/impl/GpsEquipmentServiceImpl.java | 17 +++++++ .../dromara/system/domain/vo/SysUserVo.java | 5 +++ .../service/RydwWebSocketServer.java | 45 +++++++++++-------- 4 files changed, 63 insertions(+), 24 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java index 6f3cf5a8..3a850901 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java @@ -1,17 +1,15 @@ package org.dromara.gps.domain.bo; -import org.dromara.gps.domain.GpsEquipmentSon; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.gps.domain.GpsEquipmentSon; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.Date; /** * GPS设备定位信息业务对象 gps_equipment_son @@ -137,4 +135,14 @@ public class GpsEquipmentSonBo extends BaseEntity { */ private Long tripId; + /** + * 用户名称 + */ + private String userName; + + /** + * 头像地址 + */ + private String avatar; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java index 39652c4d..85c7b14c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java @@ -11,7 +11,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.dto.OssDTO; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.service.OssService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -81,6 +83,8 @@ public class GpsEquipmentServiceImpl extends ServiceImpl ossDTOS = ossService.selectByIds(sysUserVo.getAvatar().toString()); + if (ossDTOS != null && !ossDTOS.isEmpty()) { + gpsEquipmentSonBo.setAvatar(ossDTOS.getFirst().getUrl()); + } + } + } + gpsEquipmentSonBo.setCreateTime(new Date()); setPersonToRedis(gpsEquipmentSonBo,expireSeconds); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java index 1c4a29fd..24db5876 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java @@ -203,4 +203,9 @@ public class SysUserVo implements Serializable { */ private String bz; + /** + * 头像地址 + */ + private String avatarUrl; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java index 2b96d0e1..4e7a1145 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/websocket/service/RydwWebSocketServer.java @@ -13,11 +13,10 @@ import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.utils.JSTUtil; import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.service.impl.SubConstructionUserServiceImpl; -import org.dromara.gps.domain.GpsEquipmentSon; import org.dromara.gps.domain.bo.GpsEquipmentSonBo; import org.dromara.gps.service.impl.GpsEquipmentSonServiceImpl; import org.dromara.project.domain.BusProjectPunchrange; -import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; +import org.dromara.project.domain.BusProjectTeam; import org.dromara.project.service.IBusProjectTeamService; import org.dromara.project.service.impl.BusProjectPunchrangeServiceImpl; import org.dromara.system.domain.vo.SysUserVo; @@ -221,6 +220,8 @@ public class RydwWebSocketServer { LambdaQueryWrapper busProjectPunchrangeLambdaQueryWrapper = new LambdaQueryWrapper<>(); busProjectPunchrangeLambdaQueryWrapper.eq(BusProjectPunchrange::getProjectId, projectId); List busProjectPunchranges = busProjectPunchrangeService.list(busProjectPunchrangeLambdaQueryWrapper); + //获取班组列表 + List bzList = busProjectTeamService.list(); //通过打卡范围构建下方统计数据 List> allValue = new ArrayList<>(); //初始化柱状图数据 @@ -235,15 +236,16 @@ public class RydwWebSocketServer { if (persons != null && !persons.isEmpty()){ - //循环班组人员列表 + //循环考勤人员信息列表 for (SubConstructionUser constructionUser : persons) { - //从redis拿到缓存最新坐标 - boolean existsObject = RedisUtils.isExistsObject("rydw_userId_:" + constructionUser.getSysUserId()); - if (!existsObject){ + //从redis拿到缓存最新坐标 优化:直接获取值 没有为null + GpsEquipmentSonBo one = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); +// boolean existsObject = RedisUtils.isExistsObject("rydw_userId_:" + constructionUser.getSysUserId()); + if (one == null){ continue; } - GpsEquipmentSonBo bo = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); - GpsEquipmentSon one = gpsEquipmentSonService.getById(bo.getId()); + //这里可优化 坐标上报时存入名称 +// GpsEquipmentSon one = gpsEquipmentSonService.getById(bo.getId()); if (one != null){ //获取人员 @@ -251,12 +253,20 @@ public class RydwWebSocketServer { sysUserVo.setJd(one.getLocLongitude()); sysUserVo.setWd(one.getLocLatitude()); sysUserVo.setZhdwsj(one.getCreateTime()); + sysUserVo.setAvatarUrl(one.getAvatar()); sysUserVo.setGz(constructionUser.getTypeOfWork()); - if (constructionUser.getTeamId() != null) { - BusProjectTeamVo teamVo = busProjectTeamService.queryById(constructionUser.getTeamId()); - if (teamVo != null) { - sysUserVo.setBz(teamVo.getTeamName()); + //获取班组 这里做优化 先查询获取全部 然后循环找到数据 + if (constructionUser.getTeamId() != null && bzList != null && !bzList.isEmpty()) { + for (BusProjectTeam team : bzList) { + if (constructionUser.getTeamId().equals(team.getId())){ + sysUserVo.setBz(team.getTeamName()); + break; + } } +// BusProjectTeamVo teamVo = busProjectTeamService.queryById(constructionUser.getTeamId()); +// if (teamVo != null) { +// sysUserVo.setBz(teamVo.getTeamName()); +// } } boolean isFind = false; //循环打卡范围 判断是否是异常状态 @@ -279,22 +289,21 @@ public class RydwWebSocketServer { //给坐标柱状图赋值 setZztData(key,allValue,one,busProjectPunchrange,constructionUser,expireSeconds); } + //找到打卡范围后 赋值后 跳出循环 + break; } } //进一步判断状态 if (sysUserVo.getZxzt() == null || sysUserVo.getZxzt().isEmpty()){ if (ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString()) && !isFind){ sysUserVo.setZxzt("异常"); + //统计异常数 + ycry++; }else if (!ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString())){ sysUserVo.setZxzt("离线"); } } - //统计异常数 - if (!isFind){ - ycry++; - } - //人员级GPS坐标列表 gpsList.add(sysUserVo); } @@ -366,7 +375,7 @@ public class RydwWebSocketServer { /** * 柱状图 数据 */ - public void setZztData(String key, List> allValue, GpsEquipmentSon one, + public void setZztData(String key, List> allValue, GpsEquipmentSonBo one, BusProjectPunchrange busProjectPunchrange, SubConstructionUser constructionUser, long expireSeconds) { // 先找到对应的map,避免在循环内部多次判断