package com.ruoyi.web.controller.api; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.system.model.TAppUser; import com.ruoyi.system.model.TAppUserPositioning; import com.ruoyi.system.query.PositioningDetailQuery; import com.ruoyi.system.service.TAppUserPositioningService; import com.ruoyi.system.service.TAppUserService; import com.ruoyi.system.vo.PositioningDetailVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Objects; /** *

* 用户每日定位存储 前端控制器 *

* * @author xiaochen * @since 2025-10-21 */ @Api(tags = "人员分布") @RestController @RequestMapping("/t-app-user-positioning") public class TAppUserPositioningController { private final TAppUserPositioningService appUserPositioningService; private final TAppUserService appUserService; private final RedisCache redisCache; @Autowired public TAppUserPositioningController(TAppUserPositioningService appUserPositioningService, TAppUserService appUserService, RedisCache redisCache) { this.appUserPositioningService = appUserPositioningService; this.appUserService = appUserService; this.redisCache = redisCache; } /** * 用户实时获取 */ @ApiOperation(value = "人员分布-队伍实时点位") @PostMapping(value = "/api/t-app-user-positioning/queryPositioning") public R> queryPositioning() { List list = appUserService.list(Wrappers.lambdaQuery(TAppUser.class) .eq(TAppUser::getStatus, 1) .eq(TAppUser::getState, 1)); for (TAppUser appUser : list) { String location = redisCache.getCacheObject(Constants.LOCATION + appUser.getId()); if(StringUtils.hasLength(location)){ String[] split = location.split(","); appUser.setLon(split[0]); appUser.setLat(split[1]); } } return R.ok(list); } /** * 用户实时获取 */ @ApiOperation(value = "人员分布-队伍实时点位") @PostMapping(value = "/api/t-app-user-positioning/queryPositioningDetail") public R queryPositioningDetail(@RequestBody String param) { PositioningDetailQuery positioningDetailQuery = JSON.parseObject(param,PositioningDetailQuery.class); TAppUser appUser = appUserService.getById(positioningDetailQuery.getAppUserId()); if(appUser == null){ return R.fail("用户不存在"); } PositioningDetailVO positioningDetailVO = new PositioningDetailVO(); BeanUtils.copyProperties(appUser,positioningDetailVO); TAppUserPositioning appUserPositioning = appUserPositioningService.getOne(Wrappers.lambdaQuery(TAppUserPositioning.class) .eq(TAppUserPositioning::getAppUserId,appUser.getId()) .like(TAppUserPositioning::getCreateTime, positioningDetailQuery.getStartTime()) .last("LIMIT 1")); if(Objects.nonNull(appUserPositioning)){ positioningDetailVO.setRealTimePositioning(appUserPositioning.getUserLocation()); } return R.ok(positioningDetailVO); } }