d_sms_service/APT.MicroApi/APT.LG.WebApi/Controllers/OprateController.cs

192 lines
7.6 KiB
C#
Raw Normal View History

2024-10-28 13:45:58 +08:00
using APT.Infrastructure.Core;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using APT.Utility;
using APT.BaseData.Domain.Entities.LG;
using APT.BaseData.Domain.ApiModel.LG;
using System;
using APT.BaseData.Domain.Enums;
using System.Threading.Tasks;
using InfluxData.Net.InfluxDb.Models;
using APT.BaseData.Domain.Entities.FM;
using Microsoft.EntityFrameworkCore.Internal;
using System.Linq;
using APT.BaseData.Domain.ApiModel.Platform;
using Microsoft.Extensions.DependencyInjection;
using APT.Infrastructure.Api.Redis;
using APT.Infrastructure.Api;
namespace APT.LG.WebApi.Controllers.Api
{
#region Oprate-
/// <summary>
/// 表单操作日志表
/// </summary>
[Route("api/LG/LGOperate")]
public partial class OprateController : AuthorizeApiController<T_LG_OPRATE>
{
/// <summary>
/// 新增日志
/// </summary>
/// <param name="filter">新增日志</param>
/// <returns></returns>
[HttpPost, Route("Add")]
public async Task<JsonActionResult<bool>> Add([FromBody] LgOprateModel model)
{
//var redisManager = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<RedisManager>();
//int num = 0;
//if (CsRedisManager.KeyExists(RedisCacheKey.HardWarePVInfo))
//{
// num = CsRedisManager.StringGet<int>(RedisCacheKey.HardWarePVInfo);
//}
//num++;
//CsRedisManager.StringSet<int>(RedisCacheKey.HardWarePVInfo, num);
var isLog = LibUtils.ToBoolean(
ConfigurationManager.AppSettings["isSqlLog"]);
bool isSuccess = true;
if (isLog)
{
var user = this.GetEntityByRedis<T_FM_USER>(model.UserId, new Guid(model.OrgId));
if (user == null)
throw new Exception("用户不存在");
var dt = DateTime.Now;
var points = new Point
{
Name = dt.Year + dt.Month.PadLeft(2, '0'),
Timestamp = dt,
Tags = new Dictionary<string, object>()
{
{ "Id", Guid.NewGuid().ToString()}
},
Fields = new Dictionary<string, object>()
{
{ "FormCode", model.FormCode },
{ "FormName", model.FormName },
{ "BtnCode", model.BtnCode??"" },
{ "BtnName", model.BtnName??"" },
{ "OrgId", model.OrgId },
{ "UserId", model.UserId },
{ "UserCode",user.CODE },
{ "OperateType",string.IsNullOrEmpty(model.BtnCode)?(int)LGOperateTypeEnum.:(int)LGOperateTypeEnum. }
}
};
var response = await InfluxDbHelper.InfluxDbClient.Client.WriteAsync(points, InfluxDbHelper.InfluxLogDbName);
isSuccess = response.Success;
}
return SafeExecute<bool>(() =>
{
return isSuccess;
});
}
/// <summary>
/// 查询所有数据
/// </summary>
/// <param name="filter">过滤实体</param>
/// <returns></returns>
[HttpPost, Route("LGOrderPaged")]
public async Task<PagedActionResult<LgOprateModel>> LGOrderPaged([FromBody] KeywordPageFilter filters)
{
var actionResult = new PagedActionResult<LgOprateModel>();
string timestr = filters.Parameter1;
if (string.IsNullOrEmpty(timestr))
{
this.ThrowError("120001");
}
//if (string.IsNullOrEmpty(filters.Parameter2))
//{
// this.ThrowError("120002");
//}
var timeAry = timestr.Split(new char[] { ',' });
if (timeAry.Length != 2)
this.ThrowError("120001");
var dtStart = DateTime.Parse(timeAry[0]);
var dtEnd = DateTime.Parse(timeAry[1]);
T_FM_USER user = null;
if (!string.IsNullOrEmpty(filters.Keyword))
{
user = this.GetEntity<T_FM_USER>(i => i.NAME == filters.Keyword || i.CODE == filters.Keyword, new BaseFilter(filters.OrgId));
if (user == null)
return actionResult;
}
List<string> querys = new List<string>();
List<string> queryCounts = new List<string>();
for (var x = dtStart; x <= dtEnd; x = x.AddMonths(1))
{
var tableName = x.Year + x.Month.PadLeft(2, '0');
var query = $" FROM \"{tableName}\" WHERE time >= '{dtStart.ToString("yyyy-MM-dd HH:mm:ss")}' and time<='{dtEnd.ToString("yyyy-MM-dd HH:mm:ss")}'";
if (user != null)
query += $" and UserId='{user.ID.ToString()}'";
//表单
if (!string.IsNullOrEmpty(filters.Parameter3))
{
query += $" and FormCode='{filters.Parameter3}'";
}
var offSet = (filters.PageIndex - 1) * filters.Limit;
var querySql = query + $" order by time desc limit {filters.Limit} OFFSET {offSet}";
querySql = "SELECT * " + querySql;
querys.Add(querySql);
var queryCount = "SELECT COUNT(OrgId) " + query;
queryCounts.Add(queryCount);
}
var response = await InfluxDbHelper.InfluxDbClient.Client.MultiQueryAsync(querys, InfluxDbHelper.InfluxLogDbName);
if (!response.Any())
return actionResult;
//得到Serie集合对象返回执行多个查询的结果
//取出第一条命令的查询结果,是一个集合
List<LgOprateModel> opList = new List<LgOprateModel>();
//从集合中取出第一条数据
foreach (var list in response)
{
foreach (var table in list)
{
foreach (var item in table.Values)
{
var point = new LgOprateModel
{
BtnCode = item[1].ToString(),
BtnName = item[2].ToString(),
FormCode = item[3].ToString(),
FormName = item[4].ToString(),
ID = item[5].ToString(),
OrgId = item[7].ToString(),
UserCode = item[8].ToString(),
UserId = item[9].ToString(),
Datetime = item[0].ToString(),
};
opList.Add(point);
}
}
}
opList = opList.OrderByDescending(t => t.Datetime).Take(filters.Limit).ToList();
actionResult.Data = opList;
var responseCount = await InfluxDbHelper.InfluxDbClient.Client.MultiQueryAsync(queryCounts, InfluxDbHelper.InfluxLogDbName);
var totalCount = 0;
foreach (var list in responseCount)
{
foreach (var table in list)
{
foreach (var item in table.Values)
{
totalCount += int.Parse(item[1].ToString());
}
}
}
actionResult.TotalCount = totalCount;
return actionResult;
}
}
#endregion
}