192 lines
7.6 KiB
C#
192 lines
7.6 KiB
C#
|
|
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
|
|||
|
|
}
|
|||
|
|
|