From 982ec184900d33abc1980ca7849594314e1419e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Wed, 3 Dec 2025 22:23:12 +0800 Subject: [PATCH] =?UTF-8?q?12-03-=E4=BA=BA=E5=91=98=E5=AE=9A=E4=BD=8D-?= =?UTF-8?q?=E5=86=8D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/system/domain/vo/SysUserVo.java | 11 ++ .../service/RydwWebSocketServer.java | 150 +++++++++++++----- 2 files changed, 119 insertions(+), 42 deletions(-) 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 2830e79c..1c4a29fd 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 @@ -192,4 +192,15 @@ public class SysUserVo implements Serializable { * 纬度 */ private BigDecimal wd; + + /** + * 工种 + */ + private String gz; + + /** + * 班组 + */ + private String bz; + } 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 9d7e0aac..b85f1035 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 @@ -17,6 +17,8 @@ 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.service.IBusProjectTeamService; import org.dromara.project.service.impl.BusProjectPunchrangeServiceImpl; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.impl.SysUserServiceImpl; @@ -46,6 +48,8 @@ public class RydwWebSocketServer { private final static GpsEquipmentSonServiceImpl gpsEquipmentSonService = SpringUtils.getBean(GpsEquipmentSonServiceImpl.class); + private final IBusProjectTeamService busProjectTeamService = SpringUtils.getBean(IBusProjectTeamService.class); + // 2. 静态会话存储(线程安全,项目启动时即初始化) private static final Map ONLINE_SESSIONS = new ConcurrentHashMap<>(); @@ -210,7 +214,7 @@ public class RydwWebSocketServer { queryWrapper.eq(SubConstructionUser::getProjectId, projectId); queryWrapper.eq(StringUtils.isNotBlank(fbdwId), SubConstructionUser::getContractorId, fbdwId); queryWrapper.eq(StringUtils.isNotBlank(bzId), SubConstructionUser::getTeamId, bzId); - List list = subConstructionUserService.list(queryWrapper); + List persons = subConstructionUserService.list(queryWrapper); //获取此项目打卡范围 LambdaQueryWrapper busProjectPunchrangeLambdaQueryWrapper = new LambdaQueryWrapper<>(); busProjectPunchrangeLambdaQueryWrapper.eq(BusProjectPunchrange::getProjectId, projectId); @@ -225,7 +229,15 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("06:00",0); }else { - map2.put("06:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":06:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "6:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("06:00",i); } existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00"); @@ -233,7 +245,15 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("08:00",0); }else { - map2.put("08:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":08:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "8:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("08:00",i); } existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00"); @@ -241,7 +261,15 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("10:00",0); }else { - map2.put("10:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":10:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "10:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("10:00",i); } existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00"); @@ -249,7 +277,15 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("12:00",0); }else { - map2.put("12:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":12:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "12:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("12:00",i); } existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00"); @@ -257,7 +293,15 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("14:00",0); }else { - map2.put("14:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":14:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "14:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("14:00",i); } existsObject = RedisUtils.isExistsObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00"); @@ -265,14 +309,30 @@ public class RydwWebSocketServer { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("16:00",0); }else { - map2.put("16:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":16:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "16:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("16:00",i); } if (!existsObject) { RedisUtils.setCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00", 0, Duration.ofSeconds(expireSeconds)); map2.put("18:00",0); }else { - map2.put("18:00",RedisUtils.getCacheObject(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":18:00")); + //如果存在 循环找到打卡的人 + Integer i = 0; + for (SubConstructionUser person : persons) { + boolean b = RedisUtils.isExistsObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + person.getSysUserId()); + if ( b){ + i++; + } + } + map2.put("18:00",i); } Map map1 = new HashMap<>(); @@ -280,22 +340,21 @@ public class RydwWebSocketServer { allValue.add(map1); } - int zrys = 0; + //初始化 + List gpsList = new ArrayList<>(); +// int zrys = 0; int ycry = 0; Integer dwcs = 0; int zgry = 0; - if (list != null && !list.isEmpty()){ - //初始化 - List gpsList = new ArrayList<>(); + if (persons != null && !persons.isEmpty()){ + //循环班组人员列表 - for (SubConstructionUser constructionUser : list) { + for (SubConstructionUser constructionUser : persons) { //从redis拿到缓存最新坐标 boolean existsObject = RedisUtils.isExistsObject("rydw_userId_:" + constructionUser.getSysUserId()); if (!existsObject){ continue; - }else { -// zgry++; } GpsEquipmentSonBo bo = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); GpsEquipmentSon one = gpsEquipmentSonService.getById(bo.getId()); @@ -306,7 +365,13 @@ public class RydwWebSocketServer { sysUserVo.setJd(one.getLocLongitude()); sysUserVo.setWd(one.getLocLatitude()); sysUserVo.setZhdwsj(one.getCreateTime()); -// sysUserVo.setAvatar(1000000L); + sysUserVo.setGz(constructionUser.getTypeOfWork()); + if (constructionUser.getTeamId() != null) { + BusProjectTeamVo teamVo = busProjectTeamService.queryById(constructionUser.getTeamId()); + if (teamVo != null) { + sysUserVo.setBz(teamVo.getTeamName()); + } + } boolean isFind = false; //循环打卡范围 判断是否是异常状态 for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { @@ -417,6 +482,7 @@ public class RydwWebSocketServer { //判断数据添加到redis RedisUtils.setCacheObject("rydw_tj_"+busProjectPunchrange.getId() + "_" + "18:00" + "_" + constructionUser.getSysUserId(), 1, Duration.ofSeconds(expireSeconds)); } + } } } @@ -441,31 +507,31 @@ public class RydwWebSocketServer { gpsList.add(sysUserVo); } } - - //地图实时坐标 - map.put("gpsList", gpsList); - - //在岗人员 - map.put("zgry",zgry); - - //异常人员 - map.put("ycry",ycry); - - //总人员数 - map.put("zrys",zgry + ycry); - - //定位次数 - if (RedisUtils.isExistsObject("rydw_cs")){ - dwcs = RedisUtils.getCacheObject("rydw_cs"); - } - map.put("dwcs",dwcs); - - //柱状图数据 - map.put("zztsj",allValue); - - //饼状图数据 区域时间段人数Map list人员列表 busProjectPunchranges打卡范围列表 - map.put("bztsj",getPieData(allValue, list, busProjectPunchranges)); } + + //在岗人员 + map.put("zgry",zgry); + + //异常人员 + map.put("ycry",ycry); + + //总人员数 + map.put("zrys",zgry + ycry); + + //地图实时坐标 + map.put("gpsList", gpsList); + + //柱状图数据 + map.put("zztsj",allValue); + + //饼状图数据 区域时间段人数Map list人员列表 busProjectPunchranges打卡范围列表 + map.put("bztsj",getPieData(allValue, persons, busProjectPunchranges)); + + //定位次数 + if (RedisUtils.isExistsObject("rydw_cs")){ + dwcs = RedisUtils.getCacheObject("rydw_cs"); + } + map.put("dwcs",dwcs); } return map; } @@ -524,10 +590,10 @@ public class RydwWebSocketServer { //如果有则进行累加 countMap.put(fw.getId() + ":" + fw.getPunchName(), countMap.get(fw.getId() + ":" + fw.getPunchName()) + 1); } - //放一条测试数据 - countMap.put("1000000:测试数据", 8); } } + //放一条测试数据 + countMap.put("1000000:测试数据", 8); }); return new ArrayList<>(countMap.entrySet());