2025-11-06 14:14:46 +08:00
|
|
|
|
using DocumentFormat.OpenXml.EMMA;
|
2025-04-14 10:16:21 +08:00
|
|
|
|
using DocumentFormat.OpenXml.Spreadsheet;
|
2025-03-31 16:40:54 +08:00
|
|
|
|
using Hopetry.App.SugarModel.CommonModel;
|
2025-03-21 16:42:48 +08:00
|
|
|
|
using Infrastructure;
|
2025-11-06 14:14:46 +08:00
|
|
|
|
using Infrastructure.Extensions;
|
2025-03-29 16:42:55 +08:00
|
|
|
|
using Microsoft.AspNetCore.Http;
|
2025-04-01 16:35:23 +08:00
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
2025-11-06 14:14:46 +08:00
|
|
|
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
2025-03-31 16:40:54 +08:00
|
|
|
|
using Microsoft.Extensions.Configuration;
|
|
|
|
|
|
using Newtonsoft.Json;
|
2025-03-29 16:42:55 +08:00
|
|
|
|
using NPOI.HSSF.UserModel;
|
|
|
|
|
|
using NPOI.SS.UserModel;
|
|
|
|
|
|
using NPOI.XSSF.UserModel;
|
2025-03-31 16:40:54 +08:00
|
|
|
|
using OpenAuth.App.BaseApp.Base;
|
|
|
|
|
|
using OpenAuth.App.Const;
|
|
|
|
|
|
using OpenAuth.App.Interface;
|
2025-11-06 14:14:46 +08:00
|
|
|
|
using OpenAuth.App.Response;
|
2025-03-31 16:40:54 +08:00
|
|
|
|
using OpenAuth.App.ServiceApp.FireManagement.Request;
|
|
|
|
|
|
using OpenAuth.App.ServiceApp.FireManagement.Response;
|
|
|
|
|
|
using OpenAuth.Repository;
|
|
|
|
|
|
using OpenAuth.Repository.Domain;
|
|
|
|
|
|
using OpenAuth.Repository.Domain.FireManagement;
|
2025-11-06 14:14:46 +08:00
|
|
|
|
using Org.BouncyCastle.Ocsp;
|
2025-03-31 16:40:54 +08:00
|
|
|
|
using SqlSugar;
|
2025-11-06 14:14:46 +08:00
|
|
|
|
using System.Net.WebSockets;
|
|
|
|
|
|
using System.Text;
|
2025-03-31 16:40:54 +08:00
|
|
|
|
using Yitter.IdGenerator;
|
2025-03-21 16:42:48 +08:00
|
|
|
|
|
|
|
|
|
|
namespace OpenAuth.App.ServiceApp.FireManagement
|
|
|
|
|
|
{
|
|
|
|
|
|
public class FireManagementApp : SqlSugarBaseApp<FmFireclueTask, SugarDbContext>
|
|
|
|
|
|
{
|
2025-03-31 16:40:54 +08:00
|
|
|
|
private ClientWebSocket _socket;
|
|
|
|
|
|
private IConfiguration _configuration;
|
|
|
|
|
|
|
2025-04-01 14:32:29 +08:00
|
|
|
|
public FireManagementApp(IConfiguration configuration, ISugarUnitOfWork<SugarDbContext> unitWork,
|
2025-03-31 16:40:54 +08:00
|
|
|
|
ISimpleClient<FmFireclueTask> repository, IAuth auth) : base(unitWork, repository, auth)
|
2025-03-21 16:42:48 +08:00
|
|
|
|
{
|
|
|
|
|
|
_auth = auth;
|
2025-03-31 16:40:54 +08:00
|
|
|
|
_configuration = configuration;
|
2025-03-21 16:42:48 +08:00
|
|
|
|
}
|
2025-03-31 16:40:54 +08:00
|
|
|
|
|
2025-03-21 16:42:48 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 下发防火线索任务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="info"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public async Task<Response<bool>> IssuedFireClueTask(FmFireclueTask info)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
2025-04-14 10:16:21 +08:00
|
|
|
|
var userId = _auth.GetCurrentUser().User.Id;
|
2025-03-21 16:42:48 +08:00
|
|
|
|
info.Id = YitIdHelper.NextId();
|
|
|
|
|
|
info.State = (int)TaskState.待接收;
|
|
|
|
|
|
info.TaskTime = DateTime.Now;
|
|
|
|
|
|
info.IsDelete = false;
|
|
|
|
|
|
await db.FmFireclueTask.InsertAsync(info);
|
|
|
|
|
|
List<FmFireTaskUser> fftuList = new List<FmFireTaskUser>();
|
|
|
|
|
|
if (info.RecipientUsers == null || info.RecipientUsers.Count == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
var userList = await db.User.AsQueryable().Where(r => r.Status == 0).ToListAsync();
|
|
|
|
|
|
userList.ForEach(user =>
|
|
|
|
|
|
{
|
|
|
|
|
|
FmFireTaskUser fftu = new FmFireTaskUser
|
|
|
|
|
|
{
|
|
|
|
|
|
Id = YitIdHelper.NextId(),
|
|
|
|
|
|
UserId = user.Id.ToString(),
|
|
|
|
|
|
TaskId = info.Id,
|
|
|
|
|
|
ReceiveTime = DateTime.Now,
|
|
|
|
|
|
State = (int)TaskState.待接收
|
|
|
|
|
|
};
|
|
|
|
|
|
fftuList.Add(fftu);
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
info.RecipientUsers.ForEach(user =>
|
|
|
|
|
|
{
|
|
|
|
|
|
FmFireTaskUser fftu = new FmFireTaskUser
|
|
|
|
|
|
{
|
|
|
|
|
|
Id = YitIdHelper.NextId(),
|
|
|
|
|
|
UserId = user,
|
|
|
|
|
|
TaskId = info.Id,
|
|
|
|
|
|
ReceiveTime = DateTime.Now,
|
|
|
|
|
|
State = (int)TaskState.待接收
|
|
|
|
|
|
};
|
|
|
|
|
|
fftuList.Add(fftu);
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-21 16:42:48 +08:00
|
|
|
|
await db.FmFireTaskUser.InsertRangeAsync(fftuList);
|
2025-04-14 10:16:21 +08:00
|
|
|
|
await db.FmFireclueinfoLog.InsertAsync(new FmFireclueinfoLog
|
|
|
|
|
|
{
|
|
|
|
|
|
Id = YitIdHelper.NextId(),
|
|
|
|
|
|
Fireclueid = info.Fireclueid,
|
2025-04-14 11:13:20 +08:00
|
|
|
|
Title = "任务下发",
|
2025-04-14 10:16:21 +08:00
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
|
CreateId = userId,
|
2025-04-14 11:13:20 +08:00
|
|
|
|
Content = info.Content
|
2025-04-14 10:16:21 +08:00
|
|
|
|
});
|
|
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = true, Message = "操作成功" };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = false, Message = "操作失败" };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//删除任务
|
|
|
|
|
|
public async Task<Response<bool>> DeleteTask(long id)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var userId = _auth.GetCurrentUser().User.Id;
|
|
|
|
|
|
var taskinfo = await db.FmFireclueTask.AsQueryable().FirstAsync(r => r.Id == id);
|
|
|
|
|
|
await db.FmFireclueTask.UpdateAsync(r => new FmFireclueTask
|
|
|
|
|
|
{
|
|
|
|
|
|
IsDelete = true
|
|
|
|
|
|
}, r => r.Id == id);
|
|
|
|
|
|
await db.FmFireclueinfoLog.InsertAsync(new FmFireclueinfoLog
|
|
|
|
|
|
{
|
|
|
|
|
|
Id = YitIdHelper.NextId(),
|
|
|
|
|
|
Fireclueid = taskinfo.Fireclueid,
|
2025-04-14 11:13:20 +08:00
|
|
|
|
Title = "任务删除",
|
2025-04-14 10:16:21 +08:00
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
|
CreateId = userId,
|
2025-04-14 11:13:20 +08:00
|
|
|
|
Content = "删除任务"
|
2025-04-14 10:16:21 +08:00
|
|
|
|
});
|
2025-03-21 16:42:48 +08:00
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = true, Message = "操作成功" };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = false, Message = "操作失败" };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-21 17:02:41 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询下发人员
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="username"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-03-22 08:42:21 +08:00
|
|
|
|
public async Task<Response<List<SysUserResp>>> LoadFireClueUser(string username, string unitname)
|
2025-03-21 16:42:48 +08:00
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var users = await db.User.AsQueryable()
|
2025-03-22 08:42:21 +08:00
|
|
|
|
.WhereIF(!string.IsNullOrEmpty(username), r => r.Name.Contains(username))
|
|
|
|
|
|
.WhereIF(!string.IsNullOrEmpty(unitname), r => r.UnitName.Contains(username))
|
2025-03-21 17:02:41 +08:00
|
|
|
|
.Where(r => r.Status == 0)
|
|
|
|
|
|
.Select(r => new SysUserResp
|
2025-03-21 16:42:48 +08:00
|
|
|
|
{
|
|
|
|
|
|
Id = r.Id,
|
|
|
|
|
|
Name = r.Name
|
2025-03-21 17:02:41 +08:00
|
|
|
|
}).ToListAsync();
|
2025-03-21 16:42:48 +08:00
|
|
|
|
return new Response<List<SysUserResp>> { Result = users };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-21 17:02:41 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询任务列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public async Task<Response<List<FmFireclueTask>>> GetTaskList()
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var tasks = await db.FmFireclueTask.AsQueryable()
|
|
|
|
|
|
.Where(r => r.IsDelete == false)
|
|
|
|
|
|
.ToListAsync();
|
|
|
|
|
|
return new Response<List<FmFireclueTask>> { Result = tasks };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-21 17:02:41 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询人员单位信息
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public async Task<Response<List<FmUserUnit>>> GetUserUnit()
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var userunit = await db.FmUserUnit.AsQueryable().ToListAsync();
|
|
|
|
|
|
return new Response<List<FmUserUnit>> { Result = userunit };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-27 14:52:07 +08:00
|
|
|
|
#region 单位管理
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-27 14:52:07 +08:00
|
|
|
|
//添加人员单位
|
|
|
|
|
|
public async Task<Response<bool>> AddUserUnit(FmUserUnit info)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
info.Id = YitIdHelper.NextId();
|
|
|
|
|
|
await db.FmUserUnit.InsertAsync(info);
|
|
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = true, Message = "操作成功" };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = false, Message = "操作失败" };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-27 14:52:07 +08:00
|
|
|
|
//编辑人员单位
|
|
|
|
|
|
public async Task<Response<bool>> EditUserUnit(FmUserUnit info)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
await db.FmUserUnit.UpdateAsync(info);
|
|
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = true, Message = "操作成功" };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = false, Message = "操作失败" };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-27 14:52:07 +08:00
|
|
|
|
//获取单个人员单位
|
|
|
|
|
|
public async Task<Response<FmUserUnit>> LoadUserUnitById(long id)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var info = await db.FmUserUnit.AsQueryable().FirstAsync(r => r.Id == id);
|
|
|
|
|
|
return new Response<FmUserUnit> { Result = info };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-27 14:52:07 +08:00
|
|
|
|
//删除人员单位
|
|
|
|
|
|
public async Task<Response<bool>> DeleteUserUnit(long id)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
await db.FmUserUnit.DeleteAsync(r => r.Id == id);
|
|
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = true, Message = "操作成功" };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = false, Message = "操作失败" };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-29 16:42:55 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Response<bool> FireUserUnitUpload(IFormFileCollection formFiles)
|
|
|
|
|
|
{
|
|
|
|
|
|
var user = _auth.GetCurrentUser().User;
|
|
|
|
|
|
IFormFile file = formFiles[0];
|
|
|
|
|
|
Response<bool> response = new Response<bool>();
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
//存储文件到服务器
|
|
|
|
|
|
if (file != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (file.FileName.IndexOf(".xls") > 0 || file.FileName.IndexOf(".xlsx") > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
//数据库导入
|
|
|
|
|
|
IWorkbook workbook = null;
|
|
|
|
|
|
if (file.FileName.IndexOf(".xlsx") > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var stream = file.OpenReadStream())
|
|
|
|
|
|
{
|
2025-04-01 16:35:23 +08:00
|
|
|
|
workbook = new XSSFWorkbook(stream); //excel的版本2007
|
2025-03-29 16:42:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (file.FileName.IndexOf(".xls") > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var stream = file.OpenReadStream())
|
|
|
|
|
|
{
|
2025-04-01 16:35:23 +08:00
|
|
|
|
workbook = new HSSFWorkbook(stream); //excel的版本2003
|
2025-03-29 16:42:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ISheet sheet;
|
|
|
|
|
|
sheet = workbook.GetSheetAt(0);
|
|
|
|
|
|
List<FmUserUnit> fulist = new List<FmUserUnit>();
|
|
|
|
|
|
if (sheet != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
IRow firstRow = sheet.GetRow(0);
|
|
|
|
|
|
string name = firstRow.GetCell(0).ToString();
|
|
|
|
|
|
//最后一列的标号
|
|
|
|
|
|
int rowCount = sheet.LastRowNum;
|
|
|
|
|
|
for (int i = 1; i <= rowCount; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
IRow row = sheet.GetRow(i);
|
|
|
|
|
|
if (row == null || string.IsNullOrEmpty(row.GetCell(0).ToString())) continue;
|
|
|
|
|
|
FmUserUnit fu = new FmUserUnit();
|
|
|
|
|
|
fu.Id = YitIdHelper.NextId();
|
|
|
|
|
|
fu.UnitName = row.GetCell(1).ToString();
|
|
|
|
|
|
fu.UnitType = row.GetCell(2).ToString();
|
|
|
|
|
|
fu.Description = row.GetCell(3).ToString();
|
2025-03-31 16:40:54 +08:00
|
|
|
|
fu.CreateTime = DateTime.Now;
|
2025-03-29 16:42:55 +08:00
|
|
|
|
fu.CreateUserId = user.Id.ToString();
|
|
|
|
|
|
fulist.Add(fu);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
db.FmUserUnit.InsertRange(fulist);
|
|
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = true, Message = "导入成功" };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = false, Message = "导入失败" };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
response.Result = false;
|
|
|
|
|
|
response.Message = "上传文件类型错误,请上传Excel文件";
|
|
|
|
|
|
response.Code = 300;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
response.Result = false;
|
|
|
|
|
|
response.Code = 400;
|
|
|
|
|
|
response.Message = "上传文件类型错误";
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-29 16:42:55 +08:00
|
|
|
|
return response;
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-27 14:52:07 +08:00
|
|
|
|
#endregion
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-24 15:08:45 +08:00
|
|
|
|
#region 火情线索
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-24 15:08:45 +08:00
|
|
|
|
public async Task<Response<bool>> AddFireClueInfo(FmFireclueInfo info)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
info.Id = YitIdHelper.NextId();
|
|
|
|
|
|
info.State = (int)State.上报;
|
|
|
|
|
|
info.ReportTime = DateTime.Now;
|
2025-04-01 16:35:23 +08:00
|
|
|
|
var exitinfo = db.FmFireclueInfo.AsQueryable().Where(a =>
|
|
|
|
|
|
a.ReportTime.ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd")).Count();
|
2025-03-24 15:08:45 +08:00
|
|
|
|
info.ClueNo = "H" + DateTime.Now.ToString("yyyyMMdd") + (exitinfo == 0 ? "01" : "0" + (exitinfo + 1));
|
|
|
|
|
|
await db.FmFireclueInfo.InsertAsync(info);
|
2025-04-14 10:16:21 +08:00
|
|
|
|
await db.FmFireclueinfoLog.InsertAsync(new FmFireclueinfoLog
|
|
|
|
|
|
{
|
|
|
|
|
|
Id = YitIdHelper.NextId(),
|
|
|
|
|
|
Fireclueid = info.Id,
|
2025-04-14 11:13:20 +08:00
|
|
|
|
Title = "火情线索上报",
|
2025-04-14 10:16:21 +08:00
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
|
CreateId = info.CreateId,
|
2025-04-14 11:13:20 +08:00
|
|
|
|
Content = info.Describe
|
2025-04-14 10:16:21 +08:00
|
|
|
|
});
|
2025-03-24 15:08:45 +08:00
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = true, Message = "操作成功" };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = false, Message = "操作失败" };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-24 15:08:45 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询火情线索
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="id"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public async Task<Response<FmFireclueInfo>> LoadClueInfoById(long id)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var info = await db.FmFireclueInfo.AsQueryable()
|
|
|
|
|
|
.FirstAsync(r => r.Id == id);
|
|
|
|
|
|
return new Response<FmFireclueInfo> { Result = info };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-08 10:48:11 +08:00
|
|
|
|
|
2025-04-01 14:32:29 +08:00
|
|
|
|
public async Task<Response<dynamic>> LoadClueWithInfoById(long id)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var clueInfo = await db.FmFireclueInfo.AsQueryable()
|
|
|
|
|
|
.FirstAsync(r => r.Id == id);
|
|
|
|
|
|
//查找摄像头
|
|
|
|
|
|
var sqlStr = $@"select ""Id"",""Name"",""SerialNumber"" from fm_camera
|
|
|
|
|
|
where ST_DWithin(ST_GeographyFromText('POINT({clueInfo.Lng} {clueInfo.Lat})'),
|
|
|
|
|
|
ST_GeographyFromText('POINT('||""Lng""||' '||""Lat""||')'),1000)=true";
|
|
|
|
|
|
var cameraInfo = await db.Db.Ado.GetDataTableAsync(sqlStr);
|
|
|
|
|
|
var endInfo = new
|
|
|
|
|
|
{
|
|
|
|
|
|
clueInfo,
|
|
|
|
|
|
cameraInfo,
|
|
|
|
|
|
};
|
|
|
|
|
|
return new Response<dynamic> { Result = endInfo };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-24 15:08:45 +08:00
|
|
|
|
//查询火情线索列表
|
|
|
|
|
|
public async Task<Response<List<FmFireclueInfo>>> GetFireClueList()
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var list = await db.FmFireclueInfo.AsQueryable().Where(r => r.State == 1).ToListAsync();
|
|
|
|
|
|
return new Response<List<FmFireclueInfo>> { Result = list };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-08 10:48:11 +08:00
|
|
|
|
|
2025-04-02 11:35:00 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 修改火情线索状态
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="id"></param>
|
|
|
|
|
|
/// <param name="state"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public async Task<Response<bool>> UpdatFireState(long id, int state)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var userId = _auth.GetCurrentUser().User.Id;
|
|
|
|
|
|
await db.FmFireclueInfo.UpdateAsync(r => new FmFireclueInfo
|
|
|
|
|
|
{
|
|
|
|
|
|
State = state,
|
|
|
|
|
|
ModifyTime = DateTime.Now,
|
|
|
|
|
|
ModifyId = userId
|
|
|
|
|
|
}, r => r.Id == id);
|
2025-04-14 10:16:21 +08:00
|
|
|
|
await db.FmFireclueinfoLog.InsertAsync(new FmFireclueinfoLog
|
|
|
|
|
|
{
|
|
|
|
|
|
Id = YitIdHelper.NextId(),
|
|
|
|
|
|
Fireclueid = id,
|
2025-04-14 11:13:20 +08:00
|
|
|
|
Title = "修改火情线索状态",
|
2025-04-14 10:16:21 +08:00
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
|
CreateId = userId,
|
|
|
|
|
|
Content = "火情线索状态变化"
|
|
|
|
|
|
});
|
2025-04-02 11:35:00 +08:00
|
|
|
|
if (db.Commit())
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = true, Message = "操作成功" };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool> { Result = false, Message = "操作失败" };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-08 10:48:11 +08:00
|
|
|
|
|
2025-03-24 15:08:45 +08:00
|
|
|
|
//按月统计火情线索
|
|
|
|
|
|
public async Task<Response<List<FireInfoForChart>>> GetFireClueStatistics(int type)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
if (type == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime firstDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
|
|
|
|
|
|
var list = await db.FmFireclueInfo.AsQueryable()
|
|
|
|
|
|
//.Where(r => r.State == 1)
|
|
|
|
|
|
.Where(r => r.ReportTime >= firstDayOfMonth)
|
|
|
|
|
|
.GroupBy(r => new { r.ReportTime.Day })
|
|
|
|
|
|
.Select(r => new FireInfoForChart
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime = r.ReportTime.Day.ToString() + "日",
|
|
|
|
|
|
Count = SqlFunc.AggregateCount(r.Id)
|
|
|
|
|
|
}).ToListAsync();
|
|
|
|
|
|
return new Response<List<FireInfoForChart>> { Result = list };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime firstDayOfYear = new DateTime(DateTime.Now.Year, 1, 1);
|
|
|
|
|
|
var list = await db.FmFireclueInfo.AsQueryable()
|
2025-04-01 16:35:23 +08:00
|
|
|
|
//.Where(r => r.State == 1)
|
|
|
|
|
|
.Where(r => r.ReportTime >= firstDayOfYear)
|
|
|
|
|
|
.GroupBy(r => new { r.ReportTime.Month })
|
|
|
|
|
|
.Select(r => new FireInfoForChart
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime = r.ReportTime.Month.ToString() + "月",
|
|
|
|
|
|
Count = SqlFunc.AggregateCount(r.Id)
|
|
|
|
|
|
}).ToListAsync();
|
2025-03-24 15:08:45 +08:00
|
|
|
|
return new Response<List<FireInfoForChart>> { Result = list };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-25 10:13:47 +08:00
|
|
|
|
|
|
|
|
|
|
public async Task<Response<List<FireInfoStateForChart>>> GetFireClueStatisticsByState(int type)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
if (type == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime firstDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
|
|
|
|
|
|
var list = await db.FmFireclueInfo.AsQueryable()
|
|
|
|
|
|
.Where(r => r.ReportTime >= firstDayOfMonth)
|
|
|
|
|
|
.GroupBy(r => new { r.ReportTime.Day })
|
|
|
|
|
|
.Select(r => new FireInfoStateForChart
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime = r.ReportTime.Day.ToString() + "日",
|
|
|
|
|
|
TreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State >= 3, 1, 0)),
|
|
|
|
|
|
UntreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State < 3, 1, 0))
|
|
|
|
|
|
}).ToListAsync();
|
|
|
|
|
|
return new Response<List<FireInfoStateForChart>> { Result = list };
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (type == 2)
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime firstDayOfYear = new DateTime(DateTime.Now.Year, 1, 1);
|
|
|
|
|
|
var list = await db.FmFireclueInfo.AsQueryable()
|
2025-04-01 16:35:23 +08:00
|
|
|
|
.Where(r => r.ReportTime >= firstDayOfYear)
|
|
|
|
|
|
.GroupBy(r => new { r.ReportTime.Month })
|
|
|
|
|
|
.Select(r => new FireInfoStateForChart
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime = r.ReportTime.Month.ToString() + "月",
|
|
|
|
|
|
TreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State >= 3, 1, 0)),
|
|
|
|
|
|
UntreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State < 3, 1, 0))
|
|
|
|
|
|
}).ToListAsync();
|
2025-03-25 10:13:47 +08:00
|
|
|
|
return new Response<List<FireInfoStateForChart>> { Result = list };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime firstDayOfYear = DateTime.Now.AddYears(-3);
|
|
|
|
|
|
var list = await db.FmFireclueInfo.AsQueryable()
|
2025-04-01 16:35:23 +08:00
|
|
|
|
.Where(r => r.ReportTime >= firstDayOfYear)
|
|
|
|
|
|
.GroupBy(r => new { r.ReportTime.Year })
|
|
|
|
|
|
.Select(r => new FireInfoStateForChart
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime = r.ReportTime.Year.ToString() + "年",
|
|
|
|
|
|
TreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State >= 3, 1, 0)),
|
|
|
|
|
|
UntreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State < 3, 1, 0))
|
|
|
|
|
|
}).ToListAsync();
|
2025-03-25 10:13:47 +08:00
|
|
|
|
return new Response<List<FireInfoStateForChart>> { Result = list };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-25 10:13:47 +08:00
|
|
|
|
public async Task<Response<List<FireInfoDegreeForChart>>> GetFireClueStatisticsByDegreeType(int type)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
if (type == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime firstDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
|
|
|
|
|
|
var list = await db.FmFireclueInfo.AsQueryable()
|
|
|
|
|
|
.Where(r => r.ReportTime >= firstDayOfMonth)
|
|
|
|
|
|
.GroupBy(r => new { r.ReportTime.Day })
|
|
|
|
|
|
.Select(r => new FireInfoDegreeForChart
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime = r.ReportTime.Day.ToString() + "日",
|
|
|
|
|
|
ExtraLargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 1, 1, 0)),
|
|
|
|
|
|
LargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 2, 1, 0))
|
|
|
|
|
|
}).ToListAsync();
|
|
|
|
|
|
return new Response<List<FireInfoDegreeForChart>> { Result = list };
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (type == 2)
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime firstDayOfYear = new DateTime(DateTime.Now.Year, 1, 1);
|
|
|
|
|
|
var list = await db.FmFireclueInfo.AsQueryable()
|
2025-04-01 16:35:23 +08:00
|
|
|
|
.Where(r => r.ReportTime >= firstDayOfYear)
|
|
|
|
|
|
.GroupBy(r => new { r.ReportTime.Month })
|
|
|
|
|
|
.Select(r => new FireInfoDegreeForChart
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime = r.ReportTime.Month.ToString() + "月",
|
|
|
|
|
|
ExtraLargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 1, 1, 0)),
|
|
|
|
|
|
LargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 2, 1, 0))
|
|
|
|
|
|
}).ToListAsync();
|
2025-03-25 10:13:47 +08:00
|
|
|
|
return new Response<List<FireInfoDegreeForChart>> { Result = list };
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime firstDayOfYear = DateTime.Now.AddYears(-3);
|
|
|
|
|
|
var list = await db.FmFireclueInfo.AsQueryable()
|
2025-04-01 16:35:23 +08:00
|
|
|
|
.Where(r => r.ReportTime >= firstDayOfYear)
|
|
|
|
|
|
.GroupBy(r => new { r.ReportTime.Year })
|
|
|
|
|
|
.Select(r => new FireInfoDegreeForChart
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime = r.ReportTime.Year.ToString() + "年",
|
|
|
|
|
|
ExtraLargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 1, 1, 0)),
|
|
|
|
|
|
LargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 2, 1, 0))
|
|
|
|
|
|
}).ToListAsync();
|
2025-03-25 10:13:47 +08:00
|
|
|
|
return new Response<List<FireInfoDegreeForChart>> { Result = list };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-04-14 10:16:21 +08:00
|
|
|
|
//查询火情和任务列表
|
|
|
|
|
|
public async Task<Response<List<FmFireclueinfoLog>>> GetFireClueLog(long id)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
var list = await db.FmFireclueinfoLog.AsQueryable()
|
|
|
|
|
|
.Where(r => r.Fireclueid == id)
|
|
|
|
|
|
.OrderByDescending(r => r.CreateTime).ToListAsync();
|
|
|
|
|
|
return new Response<List<FmFireclueinfoLog>> { Result = list };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-24 15:08:45 +08:00
|
|
|
|
#endregion
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-28 16:41:12 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 在线情况
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="pageReq"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public async Task<Response<PageInfo<dynamic>>> GetPointUserOnLine(UserOnLineReq pageReq)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
RefAsync<int> totalNumber = 0;
|
|
|
|
|
|
var user = _auth.GetCurrentUser().User;
|
2025-03-31 14:16:34 +08:00
|
|
|
|
int level = 0;
|
2025-03-28 16:41:12 +08:00
|
|
|
|
//该用户下包含所有部门
|
|
|
|
|
|
var orgid = _auth.GetCurrentUser().Orgs;
|
2025-03-31 14:16:34 +08:00
|
|
|
|
level = orgid.Min(r => r.Level);
|
2025-03-28 16:41:12 +08:00
|
|
|
|
var chileorglist = new List<long>();
|
2025-03-31 14:16:34 +08:00
|
|
|
|
if (level != 0 && user.Id != -1)
|
2025-03-28 16:41:12 +08:00
|
|
|
|
{
|
2025-03-31 14:16:34 +08:00
|
|
|
|
foreach (var item in orgid.Where(r => r.Level < 3))
|
|
|
|
|
|
{
|
2025-04-01 16:35:23 +08:00
|
|
|
|
var chileorg = (await db.SysOrg.AsQueryable().ToChildListAsync(it => it.ParentId, item))
|
|
|
|
|
|
.Select(it => it.Id).ToList();
|
2025-03-31 14:16:34 +08:00
|
|
|
|
chileorglist.AddRange(chileorg);
|
|
|
|
|
|
}
|
2025-04-01 14:32:29 +08:00
|
|
|
|
}
|
2025-04-01 16:35:23 +08:00
|
|
|
|
|
2025-03-28 16:41:12 +08:00
|
|
|
|
var userInfoQuery = db.User.AsQueryable()
|
2025-04-01 16:35:23 +08:00
|
|
|
|
.LeftJoin<FmUserPoint>((a, b) => a.Id == b.CreateId)
|
|
|
|
|
|
.LeftJoin<SysUserOrg>((a, b, c) => a.Id == c.UserId)
|
|
|
|
|
|
.Where((a, b, c) => a.Status == 0)
|
|
|
|
|
|
.WhereIF(level != 0, (a, b, c) => chileorglist.Contains(c.UserId));
|
2025-03-28 16:41:12 +08:00
|
|
|
|
var userinfo = await userInfoQuery
|
|
|
|
|
|
.Select((a, b, c) => new UserOnLineResp
|
|
|
|
|
|
{
|
|
|
|
|
|
CreateId = a.Id,
|
|
|
|
|
|
Name = a.Name,
|
|
|
|
|
|
Lat = b.Lat,
|
|
|
|
|
|
Lng = b.Lng,
|
|
|
|
|
|
CreateTime = b.CreateTime,
|
|
|
|
|
|
Phone = a.Account,
|
|
|
|
|
|
State = b.CreateTime.AddMinutes(2) > DateTime.Now ? "在线" : "离线",
|
|
|
|
|
|
IsIn = b.Intype,
|
|
|
|
|
|
OnLineTime = SqlFunc.DateDiff(DateType.Minute, b.CreateTime, DateTime.Now),
|
|
|
|
|
|
TownName = SqlFunc.Subqueryable<SysUserOrg>()
|
|
|
|
|
|
.Where(sf => sf.UserId == a.Id)
|
2025-03-31 16:40:54 +08:00
|
|
|
|
.LeftJoin<SysOrg>((sf, gs) => sf.OrgId == gs.Id)
|
2025-03-31 14:16:34 +08:00
|
|
|
|
.LeftJoin<SysOrg>((sf, gs, t) => gs.ParentId == t.Id)
|
|
|
|
|
|
.SelectStringJoin((sf, gs, t) => gs.Name, ",")
|
2025-03-28 16:41:12 +08:00
|
|
|
|
})
|
|
|
|
|
|
.MergeTable()
|
2025-03-31 16:40:54 +08:00
|
|
|
|
.Distinct()
|
2025-03-28 16:41:12 +08:00
|
|
|
|
.WhereIF(!string.IsNullOrEmpty(pageReq.townname), it => it.TownName.Contains(pageReq.townname))
|
|
|
|
|
|
.WhereIF(pageReq.isonline != "全部", it => it.State == pageReq.isonline)
|
|
|
|
|
|
.OrderByDescending(it => it.CreateTime)
|
|
|
|
|
|
.ToPageListAsync(pageReq.page, pageReq.limit, totalNumber);
|
|
|
|
|
|
|
|
|
|
|
|
var onlineCount = await userInfoQuery
|
2025-03-31 14:16:34 +08:00
|
|
|
|
.Where((a, b, c) => b.CreateTime.AddMinutes(2) > DateTime.Now)
|
2025-03-28 16:41:12 +08:00
|
|
|
|
.Select(a => a.Id)
|
|
|
|
|
|
.Distinct()
|
|
|
|
|
|
.CountAsync();
|
|
|
|
|
|
|
|
|
|
|
|
// 离线人数
|
|
|
|
|
|
var offlineCount = totalNumber - onlineCount;
|
|
|
|
|
|
|
|
|
|
|
|
var enddata = new
|
|
|
|
|
|
{
|
|
|
|
|
|
userinfo,
|
|
|
|
|
|
online = onlineCount,
|
|
|
|
|
|
offline = offlineCount,
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return new Response<PageInfo<dynamic>>
|
|
|
|
|
|
{
|
|
|
|
|
|
Result = new PageInfo<dynamic> { Items = enddata, Total = totalNumber }
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-31 16:40:54 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 添加实时坐标
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="userPoint"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public async Task<Response<bool>> AddPointAsync(FmUserPoint userPoint)
|
|
|
|
|
|
{
|
2025-04-08 10:48:11 +08:00
|
|
|
|
var response = new Response<bool>();
|
2025-03-31 16:40:54 +08:00
|
|
|
|
using var db = Repository.AsSugarClient();
|
2025-04-01 14:32:29 +08:00
|
|
|
|
|
2025-04-08 10:48:11 +08:00
|
|
|
|
var currentUser = _auth.GetCurrentUser();
|
|
|
|
|
|
userPoint.CreateId = currentUser.User.Id;
|
|
|
|
|
|
userPoint.Id = YitIdHelper.NextId();
|
|
|
|
|
|
userPoint.CreateTime = DateTime.Now;
|
|
|
|
|
|
var userPointHistory = userPoint.MapTo<FmUserPointHistory>();
|
|
|
|
|
|
|
|
|
|
|
|
var oldInfo = await db.Queryable<FmUserPoint>()
|
|
|
|
|
|
.Where(r => r.CreateId == userPoint.CreateId)
|
|
|
|
|
|
.FirstAsync();
|
2025-04-01 14:32:29 +08:00
|
|
|
|
|
2025-04-08 10:48:11 +08:00
|
|
|
|
//上线弹窗 第一次上报或者上线时间不超过2分钟
|
|
|
|
|
|
if (oldInfo == null || (oldInfo != null && oldInfo.CreateTime.AddMinutes(2) < DateTime.Now))
|
|
|
|
|
|
{
|
|
|
|
|
|
var user = await db.Queryable<SysUser>().Where(r => r.Id == userPoint.CreateId)
|
|
|
|
|
|
.FirstAsync();
|
|
|
|
|
|
if (user != null)
|
2025-03-31 16:40:54 +08:00
|
|
|
|
{
|
2025-04-08 10:48:11 +08:00
|
|
|
|
await db.Insertable(new FmOnOffLine
|
2025-03-31 16:40:54 +08:00
|
|
|
|
{
|
2025-04-08 10:48:11 +08:00
|
|
|
|
Id = YitIdHelper.NextId(),
|
|
|
|
|
|
IdentifyId = user.Id,
|
|
|
|
|
|
OnOffTime = DateTime.Now,
|
|
|
|
|
|
Name = user.Name,
|
|
|
|
|
|
Type = true
|
|
|
|
|
|
}).ExecuteCommandAsync();
|
|
|
|
|
|
|
|
|
|
|
|
WebSocketModel wsModel1 = new WebSocketModel
|
|
|
|
|
|
{
|
|
|
|
|
|
Module = "上线",
|
|
|
|
|
|
Data = user.Name
|
|
|
|
|
|
};
|
|
|
|
|
|
sendsocket(wsModel1);
|
2025-03-31 16:40:54 +08:00
|
|
|
|
}
|
2025-04-08 10:48:11 +08:00
|
|
|
|
}
|
2025-03-31 16:40:54 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-04-08 10:48:11 +08:00
|
|
|
|
if (oldInfo != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
oldInfo.Lat = userPoint.Lat;
|
|
|
|
|
|
oldInfo.Lng = userPoint.Lng;
|
|
|
|
|
|
oldInfo.CreateTime = userPoint.CreateTime;
|
|
|
|
|
|
oldInfo.Intype = userPoint.Intype;
|
|
|
|
|
|
await db.Updateable(oldInfo).ExecuteCommandAsync();
|
2025-03-31 16:40:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2025-04-08 10:48:11 +08:00
|
|
|
|
await db.Insertable(userPoint).ExecuteCommandAsync();
|
2025-03-31 16:40:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-08 10:48:11 +08:00
|
|
|
|
await db.Insertable(userPointHistory).SplitTable().ExecuteCommandAsync();
|
|
|
|
|
|
response.Code = 200;
|
|
|
|
|
|
response.Result = true;
|
|
|
|
|
|
response.Message = "添加成功";
|
|
|
|
|
|
|
|
|
|
|
|
return response;
|
2025-03-31 16:40:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async Task sendsocket(WebSocketModel wsModel1)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_socket == null || _socket.State != WebSocketState.Open)
|
|
|
|
|
|
{
|
|
|
|
|
|
string ws = _configuration.GetSection("WebSocket").Value;
|
|
|
|
|
|
_socket = new ClientWebSocket();
|
|
|
|
|
|
await _socket.ConnectAsync(new Uri(ws), CancellationToken.None);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(wsModel1));
|
|
|
|
|
|
await _socket.SendAsync(new ArraySegment<byte>(data), WebSocketMessageType.Text,
|
|
|
|
|
|
true, CancellationToken.None);
|
|
|
|
|
|
await _socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing connection",
|
|
|
|
|
|
CancellationToken.None);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 14:32:29 +08:00
|
|
|
|
|
2025-04-01 16:35:23 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 保存地图标绘
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="req"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public async Task<Response<bool>> SaveMapPlotting(MapPlottingReq req)
|
|
|
|
|
|
{
|
|
|
|
|
|
var record = req.MapTo<FmMapPlotting>();
|
|
|
|
|
|
record.Id = YitIdHelper.NextId();
|
|
|
|
|
|
using var db = Repository.AsSugarClient();
|
|
|
|
|
|
await db.Insertable(record).IgnoreColumnsNull().ExecuteCommandAsync();
|
|
|
|
|
|
return new Response<bool>()
|
|
|
|
|
|
{
|
|
|
|
|
|
Result = true,
|
|
|
|
|
|
Message = "保存成功",
|
|
|
|
|
|
Code = 200
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async Task<Response<PageInfo<dynamic>>> GetMapPlotting(PageReq req)
|
|
|
|
|
|
{
|
|
|
|
|
|
using var db = Repository.AsSugarClient();
|
|
|
|
|
|
RefAsync<int> total = 0;
|
|
|
|
|
|
var page = await db.Queryable<FmMapPlotting>()
|
|
|
|
|
|
.OrderByDescending(r => r.CreateTime)
|
|
|
|
|
|
.ToPageListAsync(req.page, req.limit, total);
|
|
|
|
|
|
return new Response<PageInfo<dynamic>>
|
|
|
|
|
|
{
|
|
|
|
|
|
Code = 200,
|
|
|
|
|
|
Message = "查询成功",
|
|
|
|
|
|
Result = new PageInfo<dynamic>
|
|
|
|
|
|
{
|
|
|
|
|
|
Items = page,
|
|
|
|
|
|
Total = total
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2025-11-06 14:14:46 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询人员上报的线索
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="userid"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public async Task<Response<PageInfo<List<FireClueInfoResp>>>> LoadFireClueInfoByUserId(int pageIndex, int state, int pageSize, string userid)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (var db = base.UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
RefAsync<int> total = 0;
|
|
|
|
|
|
var list = await db.FmFireclueInfo.AsQueryable().Where(a => a.CreateId.ToString() == userid).Select(a => new FireClueInfoResp
|
|
|
|
|
|
{
|
|
|
|
|
|
Id = a.Id,
|
|
|
|
|
|
CreateId = a.CreateId.ToString(),
|
|
|
|
|
|
ReportPerson = a.ReportPerson,
|
|
|
|
|
|
Lat = a.Lat,
|
|
|
|
|
|
Lng = a.Lng,
|
|
|
|
|
|
Address = a.Address,
|
|
|
|
|
|
ReportTime = a.ReportTime,
|
|
|
|
|
|
Describe = a.Describe,
|
|
|
|
|
|
SourceType = a.SourceType,
|
|
|
|
|
|
State = a.State,
|
|
|
|
|
|
AreaName = a.AreaName,
|
|
|
|
|
|
ClueNo = a.ClueNo,
|
|
|
|
|
|
}).Mapper(a => a.SourceTypeName = ((SourceType)a.SourceType).GetDescription())
|
|
|
|
|
|
.Mapper(a => a.StateName = ((State)a.State).GetDescription())
|
|
|
|
|
|
.OrderBy(a => a.ReportTime, SqlSugar.OrderByType.Desc).ToPageListAsync(pageIndex, pageSize, total);
|
|
|
|
|
|
return new Response<PageInfo<List<FireClueInfoResp>>>
|
|
|
|
|
|
{
|
|
|
|
|
|
Code = 200,
|
|
|
|
|
|
Message = "查询成功",
|
|
|
|
|
|
Result = new PageInfo<List<FireClueInfoResp>>
|
|
|
|
|
|
{
|
|
|
|
|
|
Items = list,
|
|
|
|
|
|
Total = total
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-21 16:42:48 +08:00
|
|
|
|
}
|
2025-03-31 16:40:54 +08:00
|
|
|
|
}
|