初始化
This commit is contained in:
48
WebAPIServer/Controllers/CompanyController.cs
Normal file
48
WebAPIServer/Controllers/CompanyController.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using ViewModels;
|
||||
using WebAPIServer.Models;
|
||||
|
||||
namespace WebAPIServer.Controllers
|
||||
{
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
public class CompanyController : ControllerBase
|
||||
{
|
||||
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public ReturnInfo GetCompanyInfo([FromBody] QueryAll_Or_Single S)
|
||||
{
|
||||
ReturnInfo returnInfo = new ReturnInfo();
|
||||
|
||||
try
|
||||
{
|
||||
using (var q=new UtsManageContext())
|
||||
{
|
||||
if (S.IsAll)
|
||||
{
|
||||
returnInfo.isok = true;
|
||||
returnInfo.response = q.TblUtsManageCompanies.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
returnInfo.isok = true;
|
||||
var a = q.TblUtsManageUsers.SingleOrDefault(A => A.Id == S.ID);
|
||||
if (a != null)
|
||||
{
|
||||
returnInfo.response = a;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
275
WebAPIServer/Controllers/DataHandleController.cs
Normal file
275
WebAPIServer/Controllers/DataHandleController.cs
Normal file
@@ -0,0 +1,275 @@
|
||||
using ClosedXML.Excel;
|
||||
using IronPython.Hosting;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.HttpResults;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Query.Internal;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using MySqlConnector;
|
||||
using NLog;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using ViewModels;
|
||||
using WebAPIServer.Common;
|
||||
using WebAPIServer.Models;
|
||||
|
||||
namespace WebAPIServer.Controllers
|
||||
{
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
public class DataHandleController : ControllerBase
|
||||
{
|
||||
|
||||
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
|
||||
public readonly IMemoryCache _memoryCache;
|
||||
|
||||
public DataHandleController(IMemoryCache memoryCache)
|
||||
{
|
||||
this._memoryCache = memoryCache;
|
||||
}
|
||||
[HttpPost()]
|
||||
public string NNN()
|
||||
{
|
||||
return "hello";
|
||||
}
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public ReturnInfo R_InfoCommon([FromBody] PageQueryData S)
|
||||
{
|
||||
ReturnInfo returnInfo = new ReturnInfo();
|
||||
|
||||
try
|
||||
{
|
||||
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
|
||||
|
||||
string KKK = "";
|
||||
if (S.DBQueryData.Count > 0)
|
||||
{
|
||||
KKK = string.Join('_', S.DBQueryData);
|
||||
}
|
||||
string NK = S.Key + S.CmdType??"" + KKK;
|
||||
var ooo = _memoryCache.Get<List<Dictionary<string, object>>>(NK);
|
||||
if (ooo != null)
|
||||
{
|
||||
list = ooo;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
using IDbConnection conn = q.Database.GetDbConnection();
|
||||
|
||||
if (conn.State != ConnectionState.Open)
|
||||
{
|
||||
conn.Open();
|
||||
}
|
||||
IDbCommand cmd = conn.CreateCommand();
|
||||
string VariableName = S.Key;
|
||||
string result = "";
|
||||
if (S.isFunction)
|
||||
{
|
||||
if (S.FunParameters.Count == 1)
|
||||
{
|
||||
result = StaticData.scope.GetVariable(VariableName)(S.FunParameters[0]);
|
||||
}
|
||||
if (S.FunParameters.Count == 2)
|
||||
{
|
||||
result = StaticData.scope.GetVariable(VariableName)(S.FunParameters[0], S.FunParameters[1]);
|
||||
}
|
||||
if (S.FunParameters.Count == 3)
|
||||
{
|
||||
result = StaticData.scope.GetVariable(VariableName)(S.FunParameters[0], S.FunParameters[1], S.FunParameters[2]);
|
||||
}
|
||||
if (S.FunParameters.Count == 4)
|
||||
{
|
||||
result = StaticData.scope.GetVariable(VariableName)(S.FunParameters[0], S.FunParameters[1], S.FunParameters[2], S.FunParameters[3]);
|
||||
}
|
||||
if (S.FunParameters.Count == 5)
|
||||
{
|
||||
result = StaticData.scope.GetVariable(VariableName)(S.FunParameters[0], S.FunParameters[1], S.FunParameters[2], S.FunParameters[3], S.FunParameters[4]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result = StaticData.scope.GetVariable(VariableName);
|
||||
}
|
||||
var Q = S.DBQueryData;
|
||||
if (S.CmdType.Equals("sys"))
|
||||
{
|
||||
foreach (var item in Q)
|
||||
{
|
||||
result = result.Replace(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (QueryString item in Q)
|
||||
{
|
||||
if (item.ValueType.Equals("string"))
|
||||
{
|
||||
MySqlParameter mmm = new MySqlParameter(item.Key, item.Value);
|
||||
cmd.Parameters.Add(mmm);
|
||||
}
|
||||
else if (item.ValueType.Equals("number"))
|
||||
{
|
||||
decimal a = 0;
|
||||
decimal.TryParse(item.Value, out a);
|
||||
MySqlParameter mmm = new MySqlParameter(item.Key, a);
|
||||
cmd.Parameters.Add(mmm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cmd.CommandText = result;
|
||||
|
||||
|
||||
cmd.CommandType = CommandType.Text;
|
||||
|
||||
MySqlCommand command = cmd as MySqlCommand;
|
||||
MySqlDataAdapter adapter = new MySqlDataAdapter(command);
|
||||
DataSet ds = new DataSet();
|
||||
adapter.Fill(ds);
|
||||
|
||||
DataTable dt = ds.Tables[0];
|
||||
|
||||
//string str= System.Text.Json.JsonSerializer.Serialize(dt);
|
||||
|
||||
foreach (DataRow item in dt.Rows)
|
||||
{
|
||||
Dictionary<string, object> dic = new Dictionary<string, object>();
|
||||
foreach (DataColumn item1 in dt.Columns)
|
||||
{
|
||||
string CName = item1.ColumnName;
|
||||
dic.Add(CName, item[CName]);
|
||||
}
|
||||
list.Add(dic);
|
||||
}
|
||||
}
|
||||
}
|
||||
returnInfo.isok = true;
|
||||
returnInfo.response = list;
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
|
||||
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public ReturnInfo CUD_InfoCommon([FromBody] PageQueryData S)
|
||||
{
|
||||
ReturnInfo returnInfo = new ReturnInfo();
|
||||
|
||||
try
|
||||
{
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
using IDbConnection conn = q.Database.GetDbConnection();
|
||||
|
||||
if (conn.State != ConnectionState.Open)
|
||||
{
|
||||
conn.Open();
|
||||
}
|
||||
IDbCommand cmd = conn.CreateCommand();
|
||||
string VariableName = S.Key;
|
||||
string result = "";
|
||||
if (S.isFunction)
|
||||
{
|
||||
var LG = S.FunParameters;
|
||||
result = StaticData.scope.GetVariable(VariableName)(S.FunParameters);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = StaticData.scope.GetVariable(VariableName);
|
||||
}
|
||||
var Q = S.DBQueryData;
|
||||
if (S.CmdType.Equals("sys"))
|
||||
{
|
||||
foreach (var item in Q)
|
||||
{
|
||||
result = result.Replace(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (QueryString item in Q)
|
||||
{
|
||||
if (item.ValueType.Equals("string"))
|
||||
{
|
||||
MySqlParameter mmm = new MySqlParameter(item.Key, item.Value);
|
||||
cmd.Parameters.Add(mmm);
|
||||
}
|
||||
else if (item.ValueType.Equals("number"))
|
||||
{
|
||||
decimal a = 0;
|
||||
decimal.TryParse(item.Value, out a);
|
||||
MySqlParameter mmm = new MySqlParameter(item.Key, a);
|
||||
cmd.Parameters.Add(mmm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cmd.CommandText = result;
|
||||
cmd.CommandType = CommandType.Text;
|
||||
|
||||
object ooo = cmd.ExecuteNonQuery();
|
||||
returnInfo.response = ooo;
|
||||
returnInfo.isok = true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
|
||||
[HttpPost()]
|
||||
public ReturnInfo III([FromBody] PageQueryData S)
|
||||
{
|
||||
var NNN = S.FunParameters;
|
||||
var result = StaticData.scope.GetVariable("a")(NNN);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public record PageQueryData
|
||||
{
|
||||
public string Key { get; set; }
|
||||
public bool isFunction { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 参数,最多直接5个参数
|
||||
/// </summary>
|
||||
public List<string>? FunParameters { get; set; }
|
||||
//sys
|
||||
//customer
|
||||
public string? CmdType { get; set; }
|
||||
public List<QueryString>? DBQueryData { get; set; }
|
||||
|
||||
|
||||
}
|
||||
public class FunParameter
|
||||
{
|
||||
public string PKey { get; set; }
|
||||
public string PValue { get; set; }
|
||||
}
|
||||
public record QueryString
|
||||
{
|
||||
public string Key { get; set; }
|
||||
public string Value { get; set; }
|
||||
public string ValueType { get; set; }
|
||||
}
|
||||
}
|
||||
395
WebAPIServer/Controllers/LoginController.cs
Normal file
395
WebAPIServer/Controllers/LoginController.cs
Normal file
@@ -0,0 +1,395 @@
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
using Microsoft.AspNetCore.Authentication;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.IdentityModel.Logging;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Text;
|
||||
using ViewModels;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using ViewModels.RequestData;
|
||||
using ViewModels.ResponseData;
|
||||
using WebAPIServer.Extensions;
|
||||
using WebAPIServer.Models;
|
||||
using System.Net;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using RestSharp;
|
||||
using UAParser;
|
||||
using UAParser.Objects;
|
||||
using NLog;
|
||||
|
||||
namespace WebAPIServer.Controllers
|
||||
{
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
public class LoginController : ControllerBase
|
||||
{
|
||||
|
||||
|
||||
public IConfiguration? configuration { get; set; }
|
||||
public LoginController(IConfiguration _configuration)
|
||||
{
|
||||
configuration = _configuration;
|
||||
}
|
||||
[Authorize()]
|
||||
[HttpPost()]
|
||||
public ReturnInfo TokenXuQi()
|
||||
{
|
||||
ReturnInfo r = new ReturnInfo();
|
||||
r.isok = false;
|
||||
try
|
||||
{
|
||||
var claims = HttpContext.AuthenticateAsync().Result?.Principal?.Claims;
|
||||
if (claims != null && claims.Any())
|
||||
{
|
||||
var Name = claims.SingleOrDefault(A => A.Type == ClaimTypes.Name)?.Value;
|
||||
var UUU = claims.SingleOrDefault(A => A.Type == ClaimTypes.Role)?.Value;
|
||||
var TTT = claims.SingleOrDefault(A => A.Type == ClaimTypes.NameIdentifier)?.Value;
|
||||
|
||||
TblUtsManageUser? HH = new TblUtsManageUser();
|
||||
int a = 0;
|
||||
int.TryParse(TTT, out a);
|
||||
HH.Id = a;
|
||||
bool bl = false;
|
||||
bool.TryParse(UUU, out bl);
|
||||
HH.IsAdmin = bl;
|
||||
HH.UserName = Name;
|
||||
string TokenStr = GetToken(HH);
|
||||
r.isok = true;
|
||||
r.response = TokenStr;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
r.isok = false;
|
||||
r.message = ex.Message;
|
||||
}
|
||||
return r;
|
||||
|
||||
//var identity = HttpContext.User.Identity as ClaimsIdentity;
|
||||
//if (identity != null)
|
||||
//{
|
||||
// var userClaims = identity.Claims;
|
||||
//}
|
||||
//return "hello world";
|
||||
}
|
||||
|
||||
|
||||
[HttpGet()] // 例如,一个获取验证码的API端点
|
||||
public IActionResult GetCaptcha()
|
||||
{
|
||||
string captchaText; // 这里使用上面任一版本的GenerateCaptchaImage方法生成的文本。例如:captchaText = CaptchaHelperSkiaSharp.GenerateCaptchaImage(out captchaText); 或 captchaText = CaptchaHelper.GenerateCaptchaImage(out captchaText); 根据你的选择。
|
||||
byte[] imageBytes = CaptchaHelperSkiaSharp.GenerateCaptchaImage(); // 或者使用System.Drawing的方法。确保你选择了
|
||||
return Ok(new { CaptchaText = "1111", Image = Convert.ToBase64String(imageBytes) });
|
||||
}
|
||||
/// <summary>
|
||||
/// 登录
|
||||
/// </summary>
|
||||
/// <param name="username">用户名</param>
|
||||
/// <param name="password">密码</param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public ReturnInfo Login([FromBody] LoginData data)
|
||||
{
|
||||
|
||||
ReturnInfo res = new ReturnInfo();
|
||||
|
||||
try
|
||||
{
|
||||
string password = data.password;
|
||||
string username = data.username;
|
||||
TblUtsManageUser? entity = null;
|
||||
string TokenString = "";
|
||||
string pwd = password.ToMD5().ToMD5();
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
entity = q.TblUtsManageUsers.SingleOrDefault(A => A.UserName.Equals(username) && A.Password.Equals(pwd));
|
||||
if (entity != null)
|
||||
{
|
||||
TokenString = GetToken(entity);
|
||||
res.isok = true;
|
||||
|
||||
|
||||
|
||||
ResLoginData r = new ResLoginData();
|
||||
r.AccessToken = TokenString;
|
||||
r.IsAdmin = entity.IsAdmin;
|
||||
r.ID = entity.Id;
|
||||
r.UserName = entity.UserName;
|
||||
res.response = r;
|
||||
}
|
||||
else
|
||||
{
|
||||
res.isok = false;
|
||||
res.message = "用户名或密码错误";
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
res.message = ex.Message;
|
||||
res.isok = false;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
private string GetToken(TblUtsManageUser? entity)
|
||||
{
|
||||
string TokenString;
|
||||
var claims = new Claim[]
|
||||
{
|
||||
new Claim(ClaimTypes.NameIdentifier, entity.Id.ToString()),
|
||||
new Claim(ClaimTypes.Role, entity.IsAdmin.ToString()),
|
||||
new Claim(ClaimTypes.Name, entity.UserName)
|
||||
};
|
||||
|
||||
var secretByte = Encoding.UTF8.GetBytes(configuration["JwT:SecretKey"]);
|
||||
var signingKey = new SymmetricSecurityKey(secretByte);
|
||||
var a = SecurityAlgorithms.HmacSha256;
|
||||
|
||||
var signingCredentials = new SigningCredentials(signingKey, a);
|
||||
|
||||
var token = new JwtSecurityToken(
|
||||
issuer: configuration["JwT:Issuer"],
|
||||
audience: configuration["JwT:Audience"],//接收
|
||||
claims: claims,//存放的用户信息
|
||||
notBefore: DateTime.UtcNow,//发布时间
|
||||
expires: DateTime.UtcNow.AddDays(3),//过期时间
|
||||
signingCredentials: signingCredentials
|
||||
//有效期设置为1天signingCredentials //数字名
|
||||
);
|
||||
TokenString = new JwtSecurityTokenHandler().WriteToken(token);
|
||||
return TokenString;
|
||||
}
|
||||
|
||||
public class LLLG
|
||||
{
|
||||
public string UserName { get; set; }
|
||||
public string Database { get; set; }
|
||||
}
|
||||
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
[Authorize()]
|
||||
[HttpPost()]
|
||||
public ReturnInfo LogRecord([FromBody] LLLG data)
|
||||
{
|
||||
|
||||
ReturnInfo res = new ReturnInfo();
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
string Device = "Unknown";
|
||||
#region 记录登录信息
|
||||
var userAgent = Request.Headers["User-Agent"].ToString();
|
||||
bool
|
||||
_windows = userAgent.Contains("Windows NT"),
|
||||
_mac = userAgent.Contains("Macintosh"),
|
||||
_iphone = userAgent.Contains("iPhone"),
|
||||
_android = userAgent.Contains("Android")
|
||||
;
|
||||
if (_windows)
|
||||
{
|
||||
Device = "windows";
|
||||
}
|
||||
else if (_mac)
|
||||
{
|
||||
Device = "Mac";
|
||||
}
|
||||
else if (_iphone)
|
||||
{
|
||||
Device = "ios";
|
||||
}
|
||||
else if (_android)
|
||||
{
|
||||
Device = "Android";
|
||||
}
|
||||
else
|
||||
{
|
||||
Device = "未知";
|
||||
}
|
||||
#endregion
|
||||
|
||||
//获得IP
|
||||
string? ip = string.Empty;
|
||||
string? NNN = HttpContext?.Request?.HttpContext?.Connection?.RemoteIpAddress?.ToString();
|
||||
if (string.IsNullOrEmpty(NNN))
|
||||
{
|
||||
ip = HttpContext?.Request.Headers["HTTP_X_FORWARDED_FOR"];
|
||||
}
|
||||
else
|
||||
{
|
||||
ip = NNN;
|
||||
}
|
||||
|
||||
var uaParser = Parser.GetDefault();
|
||||
|
||||
ClientInfo c = uaParser.Parse(userAgent);
|
||||
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
TblUtsUseroperation t = new TblUtsUseroperation();
|
||||
t.CreationTime = DateTime.Now;
|
||||
t.UserName = data.UserName;
|
||||
t.Ip = ip;
|
||||
t.Browser = c.Browser.Family + " " + c.Browser.Major + "." + c.Browser.Minor;
|
||||
t.Operation = "登录";
|
||||
t.Database = data.Database;
|
||||
t.Device = Device;
|
||||
|
||||
if (ip.Equals("::1"))
|
||||
{
|
||||
t.Location = "本地";
|
||||
}
|
||||
else
|
||||
{
|
||||
t.Location = GetBaiduIp(ip);
|
||||
}
|
||||
q.TblUtsUseroperations.Add(t);
|
||||
q.SaveChanges();
|
||||
|
||||
res.isok = true;
|
||||
res.response = "sucess";
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex.Message);
|
||||
res.isok = false;
|
||||
res.response = ex.Message;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public static void UserLog(string Openration, string Device)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public string Helloooo()
|
||||
{
|
||||
return "hello";
|
||||
}
|
||||
|
||||
[HttpGet()]
|
||||
public string AccessDenied()
|
||||
{
|
||||
return "aaaa";
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 百度api
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static string GetBaiduIp(string ip)
|
||||
{
|
||||
string location = "";
|
||||
try
|
||||
{
|
||||
string url = $"https://sp0.baidu.com";
|
||||
//WebClient client = new WebClient();
|
||||
RestSharp.RestClient client1 = new RestSharp.RestClient(url);
|
||||
RestSharp.RestRequest request = new RestSharp.RestRequest($"/8aQDcjqpAAV3otqbppnN2DJv/api.php?query={ip}&co=&resource_id=6006&oe=utf8", Method.Get);
|
||||
var buffer = client1.DownloadData(request);
|
||||
//var buffer = client.DownloadData(url);
|
||||
string jsonText = Encoding.UTF8.GetString(buffer);
|
||||
JObject jo = JObject.Parse(jsonText);
|
||||
|
||||
Root root = JsonConvert.DeserializeObject<Root>(jo.ToString());
|
||||
foreach (var item in root.data)
|
||||
{
|
||||
location = item.location;
|
||||
}
|
||||
return location;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//Console.WriteLine(ex);
|
||||
return location;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class Root
|
||||
{
|
||||
public List<DataItem> data { get; set; }
|
||||
}
|
||||
public class DataItem
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string ExtendedLocation { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string OriginQuery { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string appinfo { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int disp_type { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string fetchkey { get; set; }
|
||||
/// <summary>
|
||||
/// 本地局域网
|
||||
/// </summary>
|
||||
public string location { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string origip { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string origipquery { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string resourceid { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int role_id { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int shareImage { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int showLikeShare { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string showlamp { get; set; }
|
||||
/// <summary>
|
||||
/// IP地址查询
|
||||
/// </summary>
|
||||
public string titlecont { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string tplt { get; set; }
|
||||
}
|
||||
}
|
||||
515
WebAPIServer/Controllers/TestLogsController.cs
Normal file
515
WebAPIServer/Controllers/TestLogsController.cs
Normal file
@@ -0,0 +1,515 @@
|
||||
using ClosedXML.Excel;
|
||||
using IronPython.Hosting;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.HttpResults;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Query.Internal;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using MySqlConnector;
|
||||
using NLog;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using ViewModels;
|
||||
using WebAPIServer.Common;
|
||||
using WebAPIServer.Models;
|
||||
|
||||
namespace WebAPIServer.Controllers
|
||||
{
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
public class TestLogsController : ControllerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 每个步骤返回多条测试记录
|
||||
/// </summary>
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public ReturnInfo GetLogListBySN([FromBody] TestLogsQueryModel T)
|
||||
{
|
||||
ReturnInfo returnInfo = new();
|
||||
try
|
||||
{
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
using IDbConnection conn = q.Database.GetDbConnection();
|
||||
conn.Open();
|
||||
|
||||
List<ReturnTestLogs> tl = [];
|
||||
foreach (var item in T.DbList)
|
||||
{
|
||||
string tableName = $"{T.DBName}.tbl_{item.ProId}_{item.Step}_testlog";
|
||||
// 修改点1:移除了MAX聚合函数,查询所有匹配记录
|
||||
string sql = $"SELECT * FROM {tableName} WHERE DUT_SN = '{T.SnCode}'";
|
||||
|
||||
using MySqlCommand command = new(sql, (MySqlConnection)conn);
|
||||
using MySqlDataAdapter adapter = new(command);
|
||||
DataSet ds = new();
|
||||
adapter.Fill(ds);
|
||||
|
||||
if (ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
|
||||
{
|
||||
// 没有数据时仍创建空对象(保持原有结构)
|
||||
tl.Add(new ReturnTestLogs
|
||||
{
|
||||
Step = item.Step,
|
||||
ID = "",
|
||||
StartTime = "",
|
||||
UsedTime = "",
|
||||
FailSteps = "",
|
||||
FailMsg = "",
|
||||
TestResult = "",
|
||||
RObj = new List<Dictionary<string, string>>()
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
// 修改点2:处理所有行数据
|
||||
foreach (DataRow row in ds.Tables[0].Rows)
|
||||
{
|
||||
var log = new ReturnTestLogs
|
||||
{
|
||||
Step = item.Step,
|
||||
ID = row["ID"]?.ToString() ?? "",
|
||||
StartTime = row["StartTime"]?.ToString() ?? "",
|
||||
UsedTime = row["UsedTime"]?.ToString() ?? "",
|
||||
FailSteps = row["FailSteps"]?.ToString() ?? "",
|
||||
FailMsg = row["FailMsg"]?.ToString() ?? "",
|
||||
TestResult = row["TestResult"]?.ToString() ?? "",
|
||||
RObj = []
|
||||
};
|
||||
|
||||
// 修改点3:每行数据单独创建字典
|
||||
var rowData = new Dictionary<string, string>();
|
||||
foreach (DataColumn col in ds.Tables[0].Columns)
|
||||
{
|
||||
rowData[col.ColumnName] = row[col]?.ToString() ?? "";
|
||||
}
|
||||
log.RObj.Add(rowData);
|
||||
|
||||
tl.Add(log);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
returnInfo.isok = true;
|
||||
returnInfo.response = tl;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试总表Excel
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public IActionResult GetTestSummaryTableExcel([FromBody] TestLogExportRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
string? dbName = request.dbName;
|
||||
string? tbName = request.tbName;
|
||||
string? startDate = request.StartTime;
|
||||
string? endDate = request.EndTime;
|
||||
string? testResult = request.TestResult;
|
||||
List<string>? failSteps = request.FailSteps;
|
||||
string? columnList = request.ColumnList;
|
||||
string distinctType = request.DistinctType ?? "None"; // 获取去重类型
|
||||
|
||||
if (string.IsNullOrEmpty(startDate) || string.IsNullOrEmpty(endDate))
|
||||
{
|
||||
return BadRequest("开始时间或结束时间不能为空");
|
||||
}
|
||||
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
using IDbConnection conn = q.Database.GetDbConnection();
|
||||
|
||||
if (conn.State != ConnectionState.Open)
|
||||
{
|
||||
conn.Open();
|
||||
}
|
||||
|
||||
// 构建查询
|
||||
StringBuilder dataQuery = new StringBuilder();
|
||||
|
||||
if (distinctType == "None")
|
||||
{
|
||||
// 不去重的情况
|
||||
dataQuery.Append("SELECT ID, ServiceID AS SID, StartTime, DUT_SN, TestResult, Failsteps");
|
||||
|
||||
if (!string.IsNullOrEmpty(columnList))
|
||||
{
|
||||
dataQuery.Append(columnList);
|
||||
}
|
||||
|
||||
dataQuery.Append($" FROM {dbName}.{tbName} ");
|
||||
dataQuery.Append($"WHERE StartTime BETWEEN '{startDate} 00:00:00' AND '{endDate} 23:59:59' ");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 去重的情况
|
||||
string orderDirection = distinctType == "Latest" ? "DESC" : "ASC";
|
||||
|
||||
dataQuery.Append("SELECT ID, ServiceID AS SID, StartTime, DUT_SN, TestResult, Failsteps");
|
||||
|
||||
if (!string.IsNullOrEmpty(columnList))
|
||||
{
|
||||
dataQuery.Append(columnList);
|
||||
}
|
||||
|
||||
dataQuery.Append(" FROM (");
|
||||
dataQuery.Append("SELECT *, ROW_NUMBER() OVER (PARTITION BY DUT_SN ORDER BY StartTime ");
|
||||
dataQuery.Append(orderDirection);
|
||||
dataQuery.Append($") AS rn FROM {dbName}.{tbName} ");
|
||||
dataQuery.Append($"WHERE StartTime BETWEEN '{startDate} 00:00:00' AND '{endDate} 23:59:59' ");
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(testResult))
|
||||
{
|
||||
dataQuery.Append($"AND TestResult = '{testResult}' ");
|
||||
}
|
||||
|
||||
if (failSteps != null && failSteps.Count > 0)
|
||||
{
|
||||
string failStepsCondition = string.Join(",", failSteps.Select(f => $"'{MySqlHelper.EscapeString(f)}'"));
|
||||
dataQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
|
||||
if (distinctType != "None")
|
||||
{
|
||||
dataQuery.Append(") t WHERE rn = 1 ");
|
||||
}
|
||||
|
||||
dataQuery.Append("ORDER BY StartTime DESC");
|
||||
|
||||
// 执行数据查询
|
||||
IDbCommand dataCmd = conn.CreateCommand();
|
||||
dataCmd.CommandText = dataQuery.ToString();
|
||||
|
||||
MySqlCommand command = dataCmd as MySqlCommand;
|
||||
MySqlDataAdapter adapter = new(command);
|
||||
DataSet ds = new();
|
||||
adapter.Fill(ds);
|
||||
|
||||
DataTable dt = ds.Tables[0];
|
||||
|
||||
// 使用ClosedXML创建Excel
|
||||
using (var workbook = new XLWorkbook())
|
||||
{
|
||||
var worksheet = workbook.Worksheets.Add(dt, "Sheet");
|
||||
|
||||
// 设置标题行样式
|
||||
var headerRow = worksheet.Row(1);
|
||||
headerRow.Style.Font.Bold = true;
|
||||
// 自动调整列宽
|
||||
worksheet.Columns().AdjustToContents();
|
||||
using (var stream = new MemoryStream())
|
||||
{
|
||||
workbook.SaveAs(stream);
|
||||
var content = stream.ToArray();
|
||||
return File(content, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{tbName}_Export.xlsx");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return StatusCode(500, $"导出失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ReturnInfoPage GetTestSummaryTable([FromBody] TestLog T)
|
||||
{
|
||||
ReturnInfoPage returnInfo = new();
|
||||
string? dbName = T.dbName;
|
||||
string? tbName = T.tbName;
|
||||
string? StartTime = T.StartTime;
|
||||
string? EndTime = T.EndTime;
|
||||
string? TestResult = T.TestResult;
|
||||
List<string>? FailSteps = T.FailSteps;
|
||||
string? ColumnList = T.ColumnList;
|
||||
int page = T.Page;
|
||||
int pageSize = T.PageSize;
|
||||
string distinctType = T.DistinctType ?? "None"; // 获取去重类型,默认为不去重
|
||||
|
||||
if (string.IsNullOrEmpty(StartTime) || string.IsNullOrEmpty(EndTime))
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = "开始时间或结束时间不能为空";
|
||||
return returnInfo;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
using IDbConnection conn = q.Database.GetDbConnection();
|
||||
|
||||
if (conn.State != ConnectionState.Open)
|
||||
{
|
||||
conn.Open();
|
||||
}
|
||||
|
||||
// 1. 构建基础查询(总数查询)
|
||||
StringBuilder baseQuery = new StringBuilder();
|
||||
|
||||
if (distinctType == "None")
|
||||
{
|
||||
// 不去重的情况
|
||||
baseQuery.Append($"SELECT COUNT(*) AS Total FROM {dbName}.{tbName} ");
|
||||
baseQuery.Append($"WHERE StartTime BETWEEN '{StartTime} 00:00:00' AND '{EndTime} 23:59:59' ");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 去重的情况,需要计算去重后的总数
|
||||
baseQuery.Append($"SELECT COUNT(DISTINCT DUT_SN) AS Total FROM {dbName}.{tbName} ");
|
||||
baseQuery.Append($"WHERE StartTime BETWEEN '{StartTime} 00:00:00' AND '{EndTime} 23:59:59' ");
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(TestResult))
|
||||
{
|
||||
baseQuery.Append($"AND TestResult = '{TestResult}' ");
|
||||
}
|
||||
|
||||
if (FailSteps != null && FailSteps.Count > 0)
|
||||
{
|
||||
// 使用IN语句查询多个失败步骤
|
||||
string failStepsCondition = string.Join(",", FailSteps.Select(f => $"'{MySqlHelper.EscapeString(f)}'"));
|
||||
baseQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
|
||||
// 执行总数查询
|
||||
IDbCommand countCmd = conn.CreateCommand();
|
||||
countCmd.CommandText = baseQuery.ToString();
|
||||
long totalCount = Convert.ToInt64(countCmd.ExecuteScalar());
|
||||
|
||||
// 2. 计算总通过数
|
||||
long totalPassCount = 0;
|
||||
StringBuilder totalPassQuery = new StringBuilder();
|
||||
|
||||
if (distinctType == "None")
|
||||
{
|
||||
// 不去重的情况:统计所有通过的记录
|
||||
totalPassQuery.Append($"SELECT COUNT(*) FROM {dbName}.{tbName} ");
|
||||
totalPassQuery.Append($"WHERE StartTime BETWEEN '{StartTime} 00:00:00' AND '{EndTime} 23:59:59' ");
|
||||
totalPassQuery.Append($"AND TestResult = '1'");
|
||||
|
||||
if (!string.IsNullOrEmpty(TestResult))
|
||||
{
|
||||
totalPassQuery.Append($"AND TestResult = '{TestResult}' ");
|
||||
}
|
||||
|
||||
if (FailSteps != null && FailSteps.Count > 0)
|
||||
{
|
||||
// 使用IN语句查询多个失败步骤
|
||||
string failStepsCondition = string.Join(",", FailSteps.Select(f => $"'{MySqlHelper.EscapeString(f)}'"));
|
||||
totalPassQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 去重的情况:统计去重后记录中通过的数量
|
||||
string orderDirection = distinctType == "Latest" ? "DESC" : "ASC";
|
||||
|
||||
totalPassQuery.Append($"SELECT COUNT(*) FROM (");
|
||||
totalPassQuery.Append($"SELECT *, ROW_NUMBER() OVER (PARTITION BY DUT_SN ORDER BY StartTime {orderDirection}) AS rn ");
|
||||
totalPassQuery.Append($"FROM {dbName}.{tbName} ");
|
||||
totalPassQuery.Append($"WHERE StartTime BETWEEN '{StartTime} 00:00:00' AND '{EndTime} 23:59:59' ");
|
||||
|
||||
if (!string.IsNullOrEmpty(TestResult))
|
||||
{
|
||||
totalPassQuery.Append($"AND TestResult = '{TestResult}' ");
|
||||
}
|
||||
|
||||
if (FailSteps != null && FailSteps.Count > 0)
|
||||
{
|
||||
// 使用IN语句查询多个失败步骤
|
||||
string failStepsCondition = string.Join(",", FailSteps.Select(f => $"'{MySqlHelper.EscapeString(f)}'"));
|
||||
totalPassQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
|
||||
totalPassQuery.Append($") as t WHERE rn = 1 AND TestResult = '1'");
|
||||
}
|
||||
|
||||
IDbCommand totalPassCmd = conn.CreateCommand();
|
||||
totalPassCmd.CommandText = totalPassQuery.ToString();
|
||||
totalPassCount = Convert.ToInt64(totalPassCmd.ExecuteScalar());
|
||||
|
||||
// 3. 计算通过率
|
||||
double passRate = totalCount > 0 ? Math.Round((double)totalPassCount / totalCount * 100, 2) : 0;
|
||||
// 4. 构建数据查询
|
||||
StringBuilder dataQuery = new StringBuilder();
|
||||
|
||||
if (distinctType == "None")
|
||||
{
|
||||
// 不去重的情况
|
||||
dataQuery.Append("SELECT ID, ServiceID AS SID, StartTime, DUT_SN, TestResult, Failsteps");
|
||||
|
||||
if (!string.IsNullOrEmpty(ColumnList))
|
||||
{
|
||||
dataQuery.Append(ColumnList);
|
||||
}
|
||||
|
||||
dataQuery.Append($" FROM {dbName}.{tbName} ");
|
||||
dataQuery.Append($"WHERE StartTime BETWEEN '{StartTime} 00:00:00' AND '{EndTime} 23:59:59' ");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 去重的情况
|
||||
string orderDirection = distinctType == "Latest" ? "DESC" : "ASC";
|
||||
|
||||
dataQuery.Append("SELECT ID, ServiceID AS SID, StartTime, DUT_SN, TestResult, Failsteps");
|
||||
|
||||
if (!string.IsNullOrEmpty(ColumnList))
|
||||
{
|
||||
dataQuery.Append(ColumnList);
|
||||
}
|
||||
|
||||
dataQuery.Append(" FROM (");
|
||||
dataQuery.Append("SELECT *, ROW_NUMBER() OVER (PARTITION BY DUT_SN ORDER BY StartTime ");
|
||||
dataQuery.Append(orderDirection);
|
||||
dataQuery.Append($") AS rn FROM {dbName}.{tbName} ");
|
||||
dataQuery.Append($"WHERE StartTime BETWEEN '{StartTime} 00:00:00' AND '{EndTime} 23:59:59' ");
|
||||
|
||||
if (!string.IsNullOrEmpty(TestResult))
|
||||
{
|
||||
dataQuery.Append($"AND TestResult = '{TestResult}' ");
|
||||
}
|
||||
|
||||
if (FailSteps != null && FailSteps.Count > 0)
|
||||
{
|
||||
// 使用IN语句查询多个失败步骤
|
||||
string failStepsCondition = string.Join(",", FailSteps.Select(f => $"'{MySqlHelper.EscapeString(f)}'"));
|
||||
dataQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
|
||||
dataQuery.Append(") t WHERE rn = 1 ");
|
||||
}
|
||||
|
||||
if (distinctType == "None")
|
||||
{
|
||||
// 不去重的情况下添加条件
|
||||
if (!string.IsNullOrEmpty(TestResult))
|
||||
{
|
||||
dataQuery.Append($"AND TestResult = '{TestResult}' ");
|
||||
}
|
||||
|
||||
if (FailSteps != null && FailSteps.Count > 0)
|
||||
{
|
||||
// 使用IN语句查询多个失败步骤
|
||||
string failStepsCondition = string.Join(",", FailSteps.Select(f => $"'{MySqlHelper.EscapeString(f)}'"));
|
||||
dataQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
}
|
||||
|
||||
// 添加排序和分页
|
||||
dataQuery.Append($"ORDER BY StartTime DESC LIMIT {pageSize} OFFSET {(page - 1) * pageSize}");
|
||||
|
||||
// 执行数据查询
|
||||
IDbCommand dataCmd = conn.CreateCommand();
|
||||
dataCmd.CommandText = dataQuery.ToString();
|
||||
|
||||
MySqlCommand command = dataCmd as MySqlCommand;
|
||||
MySqlDataAdapter adapter = new(command);
|
||||
DataSet ds = new();
|
||||
adapter.Fill(ds);
|
||||
|
||||
DataTable dt = ds.Tables[0];
|
||||
|
||||
// 处理结果
|
||||
List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
|
||||
foreach (DataRow item in dt.Rows)
|
||||
{
|
||||
Dictionary<string, string> dic = new Dictionary<string, string>();
|
||||
foreach (DataColumn col in dt.Columns)
|
||||
{
|
||||
dic.Add(col.ColumnName, item[col]?.ToString() ?? "");
|
||||
}
|
||||
list.Add(dic);
|
||||
}
|
||||
|
||||
returnInfo.isok = true;
|
||||
returnInfo.total = totalCount;
|
||||
returnInfo.response = list;
|
||||
returnInfo.passCount = totalPassCount; // 修改字段名
|
||||
returnInfo.passRate = passRate;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class TestLogExportRequest
|
||||
{
|
||||
public string? dbName { get; set; }
|
||||
public string? tbName { get; set; }
|
||||
public string StartTime { get; set; }
|
||||
public string EndTime { get; set; }
|
||||
public string? TestResult { get; set; }
|
||||
public List<string>? FailSteps { get; set; }
|
||||
public string? ColumnList { get; set; }
|
||||
public string DistinctType { get; set; } = "None"; // 新增字段:None-不去重, Latest-保留最新, Earliest-保留最早
|
||||
}
|
||||
|
||||
public class ReturnTestLogs
|
||||
{
|
||||
|
||||
public string Step { get; set; }
|
||||
public string ID { get; set; }
|
||||
public string StartTime { get; set; }
|
||||
public string UsedTime { get; set; }
|
||||
public string FailSteps { get; set; }
|
||||
public string FailMsg { get; set; }
|
||||
public string TestResult { get; set; }
|
||||
public List<Dictionary<string, string>> RObj { get; set; }
|
||||
}
|
||||
|
||||
public class TestLogsQueryModel
|
||||
{
|
||||
public string DBName { get; set; }
|
||||
public string SnCode { get; set; }
|
||||
|
||||
public List<DBL> DbList { get; set; }
|
||||
}
|
||||
public class DBL
|
||||
{
|
||||
public string ProId { get; set; }
|
||||
public string Step { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class TestLog : TestLogExportRequest
|
||||
{
|
||||
public int Page { get; set; }
|
||||
public int PageSize { get; set; }
|
||||
}
|
||||
|
||||
// 扩展ReturnInfoPage类以包含一次通过数和通过率
|
||||
public class ReturnInfoPage
|
||||
{
|
||||
public bool isok { get; set; }
|
||||
public string message { get; set; }
|
||||
public long total { get; set; }
|
||||
public object response { get; set; }
|
||||
public long passCount { get; set; }
|
||||
public double passRate { get; set; }
|
||||
}
|
||||
}
|
||||
298
WebAPIServer/Controllers/UsersController.cs
Normal file
298
WebAPIServer/Controllers/UsersController.cs
Normal file
@@ -0,0 +1,298 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using ViewModels;
|
||||
using WebAPIServer.Extensions;
|
||||
using WebAPIServer.Models;
|
||||
|
||||
namespace WebAPIServer.Controllers
|
||||
{
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
public class UsersController : ControllerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 删除用户
|
||||
/// </summary>
|
||||
/// <param name="LLL"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public ReturnInfo DelUser([FromBody] TblUtsManageUser LLL)
|
||||
{
|
||||
ReturnInfo returnInfo = new ReturnInfo();
|
||||
|
||||
try
|
||||
{
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
var FFF = q.TblUtsManageUsers.FirstOrDefault(A => A.Id == LLL.Id);
|
||||
if (FFF != null)
|
||||
{
|
||||
FFF.IsValid = false;
|
||||
q.TblUtsManageUsers.Update(FFF);
|
||||
q.SaveChanges();
|
||||
returnInfo.isok = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
/// <param name="LLL"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public ReturnInfo EditUser([FromBody] ReturnUser LLL)
|
||||
{
|
||||
ReturnInfo returnInfo = new ReturnInfo();
|
||||
|
||||
try
|
||||
{
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
var lll = q.TblUtsManageUsers.SingleOrDefault(A => A.Id == LLL.Id);
|
||||
if (lll != null)
|
||||
{
|
||||
|
||||
string username = LLL.UserName;
|
||||
int companyId = LLL.CompanyId;
|
||||
string mobile = LLL.Mobile;
|
||||
string weiXin = LLL.WeiXin;
|
||||
string email = LLL.Email;
|
||||
|
||||
lll.UserName = username;
|
||||
lll.CompanyId = companyId;
|
||||
lll.Mobile = mobile;
|
||||
lll.WeiXin = weiXin;
|
||||
lll.Email = email;
|
||||
lll.UpdateTime = DateTime.Now;
|
||||
|
||||
q.TblUtsManageUsers.Update(lll);
|
||||
q.SaveChanges();
|
||||
returnInfo.isok = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重置密码
|
||||
/// </summary>
|
||||
/// <param name="LLL"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public ReturnInfo ResetPassWord([FromBody] PWD_Reset LLL)
|
||||
{
|
||||
ReturnInfo returnInfo = new ReturnInfo();
|
||||
try
|
||||
{
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
var QQQ = q.TblUtsManageUsers.SingleOrDefault(A => A.Id == LLL.Id);
|
||||
if (QQQ != null)
|
||||
{
|
||||
QQQ.Password = LLL.PlaintextPwd.ToMD5().ToMD5();
|
||||
QQQ.PlaintextPwd = LLL.PlaintextPwd;
|
||||
q.TblUtsManageUsers.Update(QQQ);
|
||||
q.SaveChanges();
|
||||
returnInfo.isok = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
/// <summary>
|
||||
/// 新增密码为123456
|
||||
/// </summary>
|
||||
/// <param name="LLL"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public ReturnInfo NewPassWord([FromBody] PWD_Reset LLL)
|
||||
{
|
||||
ReturnInfo returnInfo = new ReturnInfo();
|
||||
try
|
||||
{
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
var Q = q.TblUtsManageUsers.SingleOrDefault(A => A.Id == LLL.Id);
|
||||
if (Q != null)
|
||||
{
|
||||
Q.Password = "123456".ToMD5().ToMD5();
|
||||
Q.PlaintextPwd = "123456";
|
||||
q.TblUtsManageUsers.Update(Q);
|
||||
q.SaveChanges();
|
||||
returnInfo.isok = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户信息
|
||||
/// </summary>
|
||||
/// <param name="S"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public ReturnInfo GetUserInfo([FromBody] QueryAll_Or_Single S)
|
||||
{
|
||||
ReturnInfo returnInfo = new ReturnInfo();
|
||||
|
||||
try
|
||||
{
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
if (S.IsAll)
|
||||
{
|
||||
returnInfo.isok = true;
|
||||
returnInfo.response = q.TblUtsManageUsers.Where(A => A.IsValid).Select(F => new ReturnUser
|
||||
{
|
||||
Id = F.Id,
|
||||
UserName = F.UserName,
|
||||
CompanyId = F.CompanyId,
|
||||
Mobile = F.Mobile,
|
||||
WeiXin = F.WeiXin,
|
||||
Email = F.Email,
|
||||
}).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
returnInfo.isok = true;
|
||||
var a = q.TblUtsManageUsers.SingleOrDefault(A => A.Id == S.ID);
|
||||
if (a != null)
|
||||
{
|
||||
ReturnUser u = new ReturnUser();
|
||||
u.Id = a.Id;
|
||||
u.UserName = a.UserName;
|
||||
u.CompanyId = a.CompanyId;
|
||||
u.Mobile = a.Mobile;
|
||||
u.WeiXin = a.WeiXin;
|
||||
u.Email = a.Email;
|
||||
returnInfo.response = u;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新增用户
|
||||
/// </summary>
|
||||
/// <param name="LLL"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost()]
|
||||
[Authorize()]
|
||||
public ReturnInfo AddUser([FromBody] ReturnUser LLL)
|
||||
{
|
||||
ReturnInfo returnInfo = new ReturnInfo();
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
// {
|
||||
//"id": 0,
|
||||
//"userName": "test6",
|
||||
//"companyId": "",
|
||||
//"companyName": "",
|
||||
//"mobile": "",
|
||||
//"weiXin": "",
|
||||
//"email": "",
|
||||
//"resetpsw": true,
|
||||
//"permissions": [],
|
||||
//"company": ""
|
||||
//}
|
||||
string username = LLL.UserName;
|
||||
int companyId = LLL.CompanyId;
|
||||
string mobile = LLL.Mobile;
|
||||
string weiXin = LLL.WeiXin;
|
||||
string email = LLL.Email;
|
||||
|
||||
TblUtsManageUser lll = new TblUtsManageUser();
|
||||
lll.UserName = username;
|
||||
lll.CompanyId = companyId;
|
||||
lll.Mobile = mobile;
|
||||
lll.WeiXin = weiXin;
|
||||
lll.Email = email;
|
||||
lll.IsValid = true;
|
||||
lll.CreateTime = DateTime.Now;
|
||||
lll.UpdateTime = DateTime.Now;
|
||||
|
||||
using (var q = new UtsManageContext())
|
||||
{
|
||||
var Q = q.TblUtsManageUsers.Where(A => A.UserName.Equals(username));
|
||||
if (Q.Count() > 0)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = "此用户名已经存在";
|
||||
}
|
||||
else
|
||||
{
|
||||
lll.PlaintextPwd = "123456";
|
||||
lll.Password = "123456".ToMD5().ToMD5(); ;
|
||||
q.TblUtsManageUsers.Add(lll);
|
||||
returnInfo.isok = true;
|
||||
}
|
||||
q.SaveChanges();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
returnInfo.message = ex.Message;
|
||||
}
|
||||
return returnInfo;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 返回用户信息
|
||||
/// </summary>
|
||||
public class ReturnUser
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string UserName { get; set; }
|
||||
public int CompanyId { get; set; }
|
||||
public string Mobile { get; set; }
|
||||
public string WeiXin { get; set; }
|
||||
public string Email { get; set; }
|
||||
}
|
||||
public class PWD_Reset
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string PlaintextPwd { get; set; }
|
||||
}
|
||||
|
||||
}
|
||||
47
WebAPIServer/Controllers/ValuesController.cs
Normal file
47
WebAPIServer/Controllers/ValuesController.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using ViewModels;
|
||||
using WebAPIServer.Common;
|
||||
|
||||
namespace WebAPIServer.Controllers
|
||||
{
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
public class ValuesController : ControllerBase
|
||||
{
|
||||
[HttpGet()]
|
||||
public ReturnInfo GetAll_WebApiMethod(string VariableName)
|
||||
{
|
||||
ReturnInfo i = new ReturnInfo();
|
||||
i.isok = true;
|
||||
try
|
||||
{
|
||||
var result = StaticData.scope.GetVariable(VariableName);
|
||||
i.response = result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
i.isok = false;
|
||||
i.message = ex.Message;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
[HttpPost()]
|
||||
public ReturnInfo UpdateData()
|
||||
{
|
||||
ReturnInfo i = new ReturnInfo();
|
||||
i.isok = true;
|
||||
try
|
||||
{
|
||||
StaticData.GetWebAPIMethod();
|
||||
i.response = "sucess";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
i.isok = false;
|
||||
i.message = ex.Message;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
33
WebAPIServer/Controllers/WeatherForecastController.cs
Normal file
33
WebAPIServer/Controllers/WeatherForecastController.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace WebAPIServer.Controllers
|
||||
{
|
||||
[ApiController]
|
||||
[Route("[controller]")]
|
||||
public class WeatherForecastController : ControllerBase
|
||||
{
|
||||
private static readonly string[] Summaries = new[]
|
||||
{
|
||||
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
|
||||
};
|
||||
|
||||
private readonly ILogger<WeatherForecastController> _logger;
|
||||
|
||||
public WeatherForecastController(ILogger<WeatherForecastController> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IEnumerable<WeatherForecast> Get()
|
||||
{
|
||||
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
|
||||
{
|
||||
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
|
||||
TemperatureC = Random.Shared.Next(-20, 55),
|
||||
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
|
||||
})
|
||||
.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user