ApiRequest.cs 7.53 KB
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Diagnostics;
using Infrastructure;
using Microsoft.EntityFrameworkCore;
using MySql.Data.MySqlClient;
using WebRepository;

namespace WebApp
{
    /// <summary>
    /// Api请求
    /// </summary>
    public class ApiRequest
    {
        private string Server;
        private string LoginUrl;
        private string Uid;
        private string Pwd;
        private bool _LoginFlag = false;
        private string _System;

        private Stopwatch Stopwatch { get; set; }

        public BaseDbContext _dBContext;
        public UnitWork _unitWork;

        private string _method;
        private string _requestApi;
        private string _apiGroup;
        private string _request;
        private string _response;

        public ApiRequest(string System, bool LoginFlag = false)
        {
            Stopwatch = new Stopwatch();
            Stopwatch.Start();

            _System = System;
            _LoginFlag = LoginFlag;
            try
            {
                var config = AppSettingsJson.GetAppSettings();
                string ConnString = config.GetSection("ConnectionStrings:BaseDbContext").Value;

                Server = config.GetSection(System + "Setting:Server").Value;
                LoginUrl = config.GetSection(System + "Setting:LoginUrl").Value;
                Uid = config.GetSection(System + "Setting:Uid").Value;
                Pwd = config.GetSection(System + "Setting:Pwd").Value;

                try
                {
                    SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(ConnString);
                    connectionStringBuilder.Password = Encryption.Decrypt(connectionStringBuilder.Password);
                    ConnString = connectionStringBuilder.ConnectionString;

                    var optionsBuilder = new DbContextOptionsBuilder<BaseDbContext>().UseSqlServer(ConnString);
                    _dBContext = new BaseDbContext(optionsBuilder.Options);
                    _unitWork = new UnitWork(_dBContext);
                }
                catch
                {
                    MySqlConnectionStringBuilder connectionStringBuilder = new MySqlConnectionStringBuilder(ConnString);
                    connectionStringBuilder.Password = Encryption.Decrypt(connectionStringBuilder.Password);
                    ConnString = connectionStringBuilder.ConnectionString;

                    var optionsBuilder = new DbContextOptionsBuilder<BaseDbContext>().UseMySql(ConnString);
                    _dBContext = new BaseDbContext(optionsBuilder.Options);
                    _unitWork = new UnitWork(_dBContext);
                }
            }
            catch (Exception) { }
        }

        public T Post<T>(string parameter, string requestApi, string apiGroup = "") where T : IResponse, new()
        {
            T result = new T();

            _method = "POST";
            _requestApi = requestApi;
            _apiGroup = apiGroup;
            _request = parameter;

            try
            {
                HttpHelper httpHelper = new HttpHelper(Server);
                if (_LoginFlag)
                {
                    LoginEntity loginEntity = new LoginEntity { username = Uid, password = Pwd };
                    _response = httpHelper.Post(loginEntity, LoginUrl);
                    result = JsonHelper.Instance.Deserialize<T>(_response);
                    if (result.Code != 200)
                    {
                        throw new Exception(result.Message);
                    }
                }
                _response = httpHelper.Post(parameter, requestApi);
                result = JsonHelper.Instance.Deserialize<T>(_response);
                Log(true);
            }
            catch (Exception ex)
            {
                result.Status = false;
                result.Code = 500;
                result.Message = ex.Message;
                Log(false);
            }

            return result;
        }

        public T Get<T>(Dictionary<string, string> parameter, string requestApi, string apiGroup = "") where T : IResponse, new()
        {
            T result = new T();

            _method = "GET";
            _requestApi = requestApi;
            _apiGroup = apiGroup;
            _request = JsonHelper.Instance.Serialize(parameter);

            try
            {
                HttpHelper httpHelper = new HttpHelper(Server);
                if (_LoginFlag)
                {
                    LoginEntity loginEntity = new LoginEntity { username = Uid, password = Pwd };
                    _response = httpHelper.Post(loginEntity, LoginUrl);
                    result = JsonHelper.Instance.Deserialize<T>(_response);
                    if (result.Code != 200)
                    {
                        throw new Exception(result.Message);
                    }
                }

                _response = httpHelper.Get(parameter, requestApi);
                result = JsonHelper.Instance.Deserialize<T>(_response);
                Log(true);
            }
            catch (Exception ex)
            {
                result.Status = false;
                result.Code = 500;
                result.Message = ex.Message;
                Log(false);
            }

            return result;
        }

        private void Log(bool bresult)
        {
            Stopwatch.Stop();

            try
            {
                string type = "发送";
                string system = _System;
                string method = _method;
                string server = Server;
                string path = _requestApi;
                string[] paths = _requestApi.Split('/');
                paths = paths[paths.Length - 1].Split('?');
                string actionName = paths[0];
                string queryString = paths.Length > 1 ? paths[1] : "";
                string apiGroup = _apiGroup;
                string request = _request;
                string response = _response;
                double totalMilliseconds = Stopwatch.Elapsed.TotalMilliseconds;
                DateTime logTime = DateTime.Now;
                string name = "WMS";
                string ip = "";
                string browser = "";
                string result = bresult ? "成功" : "失败";
                int flag = 1;
                DateTime createTime = DateTime.Now;
                string createBy = "WMS";

                SysInterfaceLog sysInterfaceLog = new SysInterfaceLog();
                sysInterfaceLog.Type = type;
                sysInterfaceLog.System = system;
                sysInterfaceLog.Method = method;
                sysInterfaceLog.Server = server;
                sysInterfaceLog.Path = path;
                sysInterfaceLog.ActionName = actionName;
                sysInterfaceLog.QueryString = queryString;
                sysInterfaceLog.ApiGroup = apiGroup;
                sysInterfaceLog.Request = request;
                sysInterfaceLog.Response = response;
                sysInterfaceLog.TotalMilliseconds = totalMilliseconds;
                sysInterfaceLog.LogTime = logTime;
                sysInterfaceLog.Name = name;
                sysInterfaceLog.Ip = ip;
                sysInterfaceLog.Browser = browser;
                sysInterfaceLog.Result = result;
                sysInterfaceLog.Flag = flag;
                sysInterfaceLog.CreateTime = createTime;
                sysInterfaceLog.CreateBy = createBy;
                _unitWork.Add(sysInterfaceLog);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}