d_sms_service/APT.MicroApi/APT.LG.WebApi/Controllers/OprateController.cs
2024-10-28 13:45:58 +08:00

192 lines
7.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}