12-03-人员定位-再版

This commit is contained in:
2025-12-03 22:23:12 +08:00
parent 79a2dbfcd3
commit 982ec18490
2 changed files with 119 additions and 42 deletions

View File

@ -192,4 +192,15 @@ public class SysUserVo implements Serializable {
* 纬度
*/
private BigDecimal wd;
/**
* 工种
*/
private String gz;
/**
* 班组
*/
private String bz;
}

View File

@ -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<String, Session> 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<SubConstructionUser> list = subConstructionUserService.list(queryWrapper);
List<SubConstructionUser> persons = subConstructionUserService.list(queryWrapper);
//获取此项目打卡范围
LambdaQueryWrapper<BusProjectPunchrange> 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<String,Map> map1 = new HashMap<>();
@ -280,22 +340,21 @@ public class RydwWebSocketServer {
allValue.add(map1);
}
int zrys = 0;
//初始化
List<SysUserVo> gpsList = new ArrayList<>();
// int zrys = 0;
int ycry = 0;
Integer dwcs = 0;
int zgry = 0;
if (list != null && !list.isEmpty()){
//初始化
List<SysUserVo> 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());