using AutoDispathingWork.Utils; using LiteDB; using Microsoft.AspNetCore.Mvc; using WorkerService1.Domains; using WorkerService1.Dto; using WorkerService1.Dto.QueryRequest; using WorkerService1.Dto.QueryResponse; using WorkerService1.Services; using WorkerService1.Utils; namespace WorkerService1.Controllers; [ApiController] [Route("api/[controller]")] public class UserController : ControllerBase { public UserController() { } [HttpGet("Pages")] public async Task GetPageList([FromQuery] UserQuery request, [FromServices] SpiderServices spiderServices, [FromServices] LiteDatabase liteDatabase) { var res = await spiderServices.GetUsers(request); return Ok(res); } [HttpGet("/api/Polygon/Pages")] public async Task>> GetPolygon([FromQuery] PageRequest request, [FromServices] LiteDatabase db, [FromServices] SpiderServices spiderServices) { var polygon = db.GetCollection(); var result = polygon.FindAll().ToList(); var cameras = await spiderServices.GetCameras(); foreach (var item in result) { // item.RangeCameras ??= new List(); foreach (var x in cameras.Result?.Records.Select(x => { var tempGps = GpsUtil.Bd09ToGcj02(x.lon, x.lat); return (x.name, new Points(tempGps[0], tempGps[1])); }).ToList()!.Where(x => x.Item2.IsPointInsidePolygon(item))!) { item.RangeCameras ??= new List(); item.RangeCameras?.Add(x.name); } } return new SpiderResponse>() { IsSuccess = true, Code = SpiderResponseCode.Success, Message = "", Result = result }; } [HttpPost("/api/Polygon")] public SpiderResponse CreateOrUpdatePolygon([FromBody] Polygon request, [FromServices] LiteDatabase db) { var polygon = db.GetCollection(); if (request.PolygonId == null) { request.PolygonId = Guid.NewGuid(); var result = polygon.Insert(request); return new SpiderResponse() { IsSuccess = true, Code = SpiderResponseCode.Success, Message = "保存成功", Result = true }; } else { var old = polygon.FindOne(x => x.PolygonId == request.PolygonId); old.Points = request.Points; old.Name = request.Name; polygon.Update(old); return new SpiderResponse() { IsSuccess = true, Code = SpiderResponseCode.Success, Message = "更新成功", Result = true }; } } [HttpDelete("/api/Polygon/{polygonId}")] public SpiderResponse DeletePolygon([FromRoute] Guid polygonId, [FromServices] LiteDatabase db) { var polygon = db.GetCollection(); var result = polygon.FindById(polygonId); if (result == null) { return new SpiderResponse() { IsSuccess = false, Code = SpiderResponseCode.Fail, Message = "未找到该区域", Result = false }; } polygon.Delete(polygonId); return new SpiderResponse() { IsSuccess = true, Code = SpiderResponseCode.Success, Message = "删除区域信息成功", Result = true }; } [HttpGet("/api/Polygon/{polygonId}")] public SpiderResponse GetPolygon([FromRoute] Guid polygonId, [FromServices] LiteDatabase db) { var polygon = db.GetCollection(); var result = polygon.FindById(polygonId); if (result == null) { return new SpiderResponse() { IsSuccess = false, Code = SpiderResponseCode.Fail, Message = "未找到该区域", Result = null }; } return new SpiderResponse() { IsSuccess = true, Code = SpiderResponseCode.Success, Message = "获取区域信息成功", Result = result }; } [HttpPut("/api/Polygon/{polygonId}/UserId/{userId}")] public SpiderResponse BindPolygonUserId([FromRoute] Guid polygonId, [FromRoute] string userId, [FromServices] LiteDatabase db) { var polygon = db.GetCollection(); var result = polygon.FindOne(x => x.PolygonId == polygonId); if (result == null) { return new SpiderResponse() { IsSuccess = false, Code = SpiderResponseCode.Fail, Message = "未找到该区域", Result = false }; } result.UserId = userId; polygon.Update(result); return new SpiderResponse() { IsSuccess = true, Code = SpiderResponseCode.Success, Message = "更新区域信息成功", Result = true }; } [HttpGet("/api/Polygon/others")] public SpiderResponse>>> GetAllPoints([FromQuery] Guid? polygonId, [FromServices] LiteDatabase db) { var polygon = db.GetCollection(); if (polygonId.HasValue) { var result = polygon.Find(x => x.PolygonId != polygonId).ToList(); var points = result.Select(x => x.Points).ToList(); return new SpiderResponse>>>() { IsSuccess = true, Code = SpiderResponseCode.Success, Message = "获取区域信息成功", Result = points }; } else { var result = polygon.FindAll().ToList(); var points = result.Select(x => x.Points).ToList(); return new SpiderResponse>>>() { IsSuccess = true, Code = SpiderResponseCode.Success, Message = "获取区域信息成功", Result = points }; } } [HttpGet("/api/Polygon/{polygonId}/InRangeCameras")] public async IAsyncEnumerable IsRangeInPolygon([FromRoute] Guid polygonId, [FromServices] LiteDatabase db, [FromServices] SpiderServices spiderServices) { var polygon = db.GetCollection(); var result = polygon.FindOne(x => x.PolygonId == polygonId); if (result != null) { var cameras = await spiderServices.GetCameras(); foreach (var x in cameras.Result?.Records.Select(x => (x.name, new Points(x.lon, x.lat))).ToList()!) { if (x.Item2.IsPointInsidePolygon(result)) { yield return x.name; } } } } [HttpGet("/api/Camera/All")] public async Task>> GetCameras( [FromServices] SpiderServices spiderServices) { return await spiderServices.GetCameras(); } }