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,避免在循环内部多次判断