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
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 |