From f66121b49f6dd0c1193244ddea54587c051c3b17 Mon Sep 17 00:00:00 2001 From: xiaozhang <210278354@qq.com> Date: Sun, 14 Jun 2020 11:36:24 +0800 Subject: [PATCH] =?UTF-8?q?log=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebApiV.Data/Admin10086Db.cs" | 17 ++--- .../WebApiV.Data/BaseEntity.cs" | 13 ++-- .../WebApiV.Data/Entity/Logs.cs" | 15 ++++ .../WebApiV.Data/Entity/Role.cs" | 13 ++++ .../WebApiV.Data/Entity/User.cs" | 14 ++++ .../WebApiV.Data/WebApiV.Data.csproj" | 12 ++++ .../WebApiV.Domain/EfRespository.cs" | 59 +++++++-------- .../WebApiV.Domain/Enum/LogsLevel.cs" | 15 ++++ .../WebApiV.Domain/IRespository.cs" | 23 +++--- .../WebApiV.Domain/WebApiV.Domain.csproj" | 11 +++ .../WebApiV.Implement.csproj" | 11 +++ .../WebApiV.Interface.csproj" | 11 +++ .../WebApiV.Service/WebApiV.Service.csproj" | 7 ++ .../WebApiV.Test/WebApiV.Test.csproj" | 7 ++ .../WebApiV.Utils/DbInitlizer.cs" | 52 ++++++++++++++ .../File/ClobalExcptionFilter.cs" | 26 +++++++ .../WebApiV.Utils/Hellper/LogHellper.cs" | 42 +++++++++++ .../WebApiV.Utils/WebApiV.Utils.csproj" | 18 +++++ .../WebApiV.sln" | 67 ++++++++++++++++++ .../Controllers/WeatherForecastController.cs" | 21 +++--- .../WebApiV/Program.cs" | 2 +- .../WebApiV/Properties/launchSettings.json" | 4 +- .../WebApiV/Startup.cs" | 23 +++--- .../WebApiV/WeatherForecast.cs" | 2 +- .../WebApiV/WebApiV.csproj" | 7 +- .../WebApiV/appsettings.Development.json" | 0 .../WebApiV/appsettings.json" | 0 .../WebApplication1.sln" | 25 ------- .../Controllers/TestController.cs" | 31 -------- .../WebApplication1/Demain/DbInit.cs" | 54 -------------- .../WebApplication1/Demain/Entity/Clbum.cs" | 15 ---- .../WebApplication1/Demain/Entity/Student.cs" | 16 ----- .../WebApplication1/Hellper/JsonHellper.cs" | 20 ------ ...3\346\215\267\346\226\271\345\274\217.lnk" | Bin 0 -> 1062 bytes 34 files changed, 403 insertions(+), 250 deletions(-) rename "\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/AdminDb.cs" => "\347\253\240\345\273\272\345\206\233/WebApiV.Data/Admin10086Db.cs" (48%) rename "\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/BaseEntity.cs" => "\347\253\240\345\273\272\345\206\233/WebApiV.Data/BaseEntity.cs" (63%) create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/Logs.cs" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/Role.cs" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/User.cs" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Data/WebApiV.Data.csproj" rename "\347\253\240\345\273\272\345\206\233/WebApplication1/Implementation/EfRespositoryy.cs" => "\347\253\240\345\273\272\345\206\233/WebApiV.Domain/EfRespository.cs" (49%) create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Domain/Enum/LogsLevel.cs" rename "\347\253\240\345\273\272\345\206\233/WebApplication1/Interface/IRespository.cs" => "\347\253\240\345\273\272\345\206\233/WebApiV.Domain/IRespository.cs" (48%) create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Domain/WebApiV.Domain.csproj" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Implement/WebApiV.Implement.csproj" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Interface/WebApiV.Interface.csproj" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Service/WebApiV.Service.csproj" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Test/WebApiV.Test.csproj" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Utils/DbInitlizer.cs" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Utils/File/ClobalExcptionFilter.cs" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Utils/Hellper/LogHellper.cs" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.Utils/WebApiV.Utils.csproj" create mode 100644 "\347\253\240\345\273\272\345\206\233/WebApiV.sln" rename "\347\253\240\345\273\272\345\206\233/WebApplication1/Controllers/WeatherForecastController.cs" => "\347\253\240\345\273\272\345\206\233/WebApiV/Controllers/WeatherForecastController.cs" (64%) rename "\347\253\240\345\273\272\345\206\233/WebApplication1/Program.cs" => "\347\253\240\345\273\272\345\206\233/WebApiV/Program.cs" (96%) rename "\347\253\240\345\273\272\345\206\233/WebApplication1/Properties/launchSettings.json" => "\347\253\240\345\273\272\345\206\233/WebApiV/Properties/launchSettings.json" (90%) rename "\347\253\240\345\273\272\345\206\233/WebApplication1/Startup.cs" => "\347\253\240\345\273\272\345\206\233/WebApiV/Startup.cs" (75%) rename "\347\253\240\345\273\272\345\206\233/WebApplication1/WeatherForecast.cs" => "\347\253\240\345\273\272\345\206\233/WebApiV/WeatherForecast.cs" (91%) rename "\347\253\240\345\273\272\345\206\233/WebApplication1/WebApplication1.csproj" => "\347\253\240\345\273\272\345\206\233/WebApiV/WebApiV.csproj" (57%) rename "\347\253\240\345\273\272\345\206\233/WebApplication1/appsettings.Development.json" => "\347\253\240\345\273\272\345\206\233/WebApiV/appsettings.Development.json" (100%) rename "\347\253\240\345\273\272\345\206\233/WebApplication1/appsettings.json" => "\347\253\240\345\273\272\345\206\233/WebApiV/appsettings.json" (100%) delete mode 100644 "\347\253\240\345\273\272\345\206\233/WebApplication1.sln" delete mode 100644 "\347\253\240\345\273\272\345\206\233/WebApplication1/Controllers/TestController.cs" delete mode 100644 "\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/DbInit.cs" delete mode 100644 "\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/Entity/Clbum.cs" delete mode 100644 "\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/Entity/Student.cs" delete mode 100644 "\347\253\240\345\273\272\345\206\233/WebApplication1/Hellper/JsonHellper.cs" create mode 100644 "\351\273\204\347\204\225/DITest/\351\273\204\347\204\225 - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/AdminDb.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Admin10086Db.cs" similarity index 48% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/AdminDb.cs" rename to "\347\253\240\345\273\272\345\206\233/WebApiV.Data/Admin10086Db.cs" index 877b5d6..515777a 100644 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/AdminDb.cs" +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Admin10086Db.cs" @@ -1,20 +1,21 @@ using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using WebApplication1.Controllers.Demain; +using System.Text; +using WebApiV.Data.Entity; -namespace WebApplication1.Controllers +namespace WebApiV.Data { - public class AdminDb:DbContext + public class Admin10086Db:DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - optionsBuilder.UseSqlServer("server=.;database=AdminDb0001;uid=sa;pwd=123;"); + optionsBuilder.UseSqlServer("server=.;database=Admin10086Db;uid=sa;pwd=123"); } - public DbSet Clbums { get; set; } - public DbSet Students { get; set; } + + public DbSet Roles { get; set; } + public DbSet Users { get; set; } + public DbSet Logs { get; set; } } } diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/BaseEntity.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/BaseEntity.cs" similarity index 63% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/BaseEntity.cs" rename to "\347\253\240\345\273\272\345\206\233/WebApiV.Data/BaseEntity.cs" index f819874..e1f4947 100644 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/BaseEntity.cs" +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/BaseEntity.cs" @@ -1,25 +1,24 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using System.Text; -namespace WebApplication1.Controllers.Demain +namespace WebApiV.Data { - public abstract class BaseEntity + public class BaseEntity { public BaseEntity() { IsActived = true; IsDeleted = false; - Createtime = DateTime.Now; + CreateTime = DateTime.Now; UpdateTime = DateTime.Now; - Remarks = "hello"; + Remarks = "what"; } public int Id { get; set; } public bool IsActived { get; set; } public bool IsDeleted { get; set; } - public DateTime Createtime { get; set; } + public DateTime CreateTime { get; set; } public DateTime UpdateTime { get; set; } public string Remarks { get; set; } } diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/Logs.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/Logs.cs" new file mode 100644 index 0000000..1c8a921 --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/Logs.cs" @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WebApiV.Data.Entity +{ + public class Logs:BaseEntity + { + public int LogsLevel { get; set; } + public string ShortMessage { get; set; } + public string FullMessage { get; set; } + public int UserId { get; set; } + public string ReferenceUrl { get; set; } + } +} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/Role.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/Role.cs" new file mode 100644 index 0000000..e2dee3a --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/Role.cs" @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WebApiV.Data.Entity +{ + public class Role:BaseEntity + { + public string RoleName { get; set; } + public string ShortTell { get; set; } + public IEnumerable Users { get; set; } + } +} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/User.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/User.cs" new file mode 100644 index 0000000..9d932b6 --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/Entity/User.cs" @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WebApiV.Data.Entity +{ + public class User:BaseEntity + { + public string UserName { get; set; } + public string PassWord { get; set; } + public int RoleId { get; set; } + public Role Role { get; set; } + } +} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Data/WebApiV.Data.csproj" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/WebApiV.Data.csproj" new file mode 100644 index 0000000..45bf2af --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Data/WebApiV.Data.csproj" @@ -0,0 +1,12 @@ + + + + netstandard2.0 + + + + + + + + diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Implementation/EfRespositoryy.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Domain/EfRespository.cs" similarity index 49% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/Implementation/EfRespositoryy.cs" rename to "\347\253\240\345\273\272\345\206\233/WebApiV.Domain/EfRespository.cs" index ff5c3c7..646ebee 100644 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Implementation/EfRespositoryy.cs" +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Domain/EfRespository.cs" @@ -2,29 +2,26 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; -using WebApplication1.Controllers; -using WebApplication1.Controllers.Demain; -using WebApplication1.Demain.Hellper.Interface; +using System.Text; +using WebApiV.Data; -namespace WebApplication1.Demain.Hellper.Implementation +namespace WebApiV.Domain { - public class EfRespositoryy : IRespository where T : BaseEntity + public class EfRespository : IRespository where T : BaseEntity { - private readonly AdminDb db; + private readonly Admin10086Db db; - private DbSet _entity; + private DbSet entity; - protected DbSet Entity + public DbSet Entity { get { - if (_entity == null) + if (entity == null) { - _entity = db.Set(); + entity = db.Set(); } - return _entity; - + return entity; } } @@ -32,49 +29,53 @@ namespace WebApplication1.Demain.Hellper.Implementation { get { - return Entity; + return entity; } } - public EfRespositoryy(AdminDb admin) + public EfRespository(Admin10086Db admin) { db = admin; } - public void Delete(T entity) - { - _entity.Remove(entity); - - db.SaveChanges(); - } public void Delete(int id) { var del = Table.Where(x => x.Id == id).FirstOrDefault(); - Delete(del); } - public T GetById(int id) + public void Delete(T entity) { - return _entity.Where(x => x.Id == id).FirstOrDefault(); + Entity.Remove(entity); + db.SaveChanges(); } - public void insert(T entity) + public void Insert(T entity) { - _entity.Add(entity); + Entity.Add(entity); db.SaveChanges(); } - public void InsertBulk(IEnumerable list) + public void InsertBlck(IEnumerable list) { - _entity.AddRange(list); + Entity.AddRange(list); db.SaveChanges(); } + public T GetById(int id) + { + return entity.Where(x => x.Id == id).FirstOrDefault(); + } public void Update(T entity) { - _entity.Update(entity); + Entity.Update(entity); + db.SaveChanges(); + } + + public void Delete(IEnumerable entities) + { + Entity.RemoveRange(entities); db.SaveChanges(); } } diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Domain/Enum/LogsLevel.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Domain/Enum/LogsLevel.cs" new file mode 100644 index 0000000..e92b4c6 --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Domain/Enum/LogsLevel.cs" @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WebApiV.Domain.Enum +{ + public enum LogsLevel + { + 信息=10, + 调试=20, + 警告=30, + 错误=40, + 崩溃=50, + } +} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Interface/IRespository.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Domain/IRespository.cs" similarity index 48% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/Interface/IRespository.cs" rename to "\347\253\240\345\273\272\345\206\233/WebApiV.Domain/IRespository.cs" index 91478a7..9592776 100644 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Interface/IRespository.cs" +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Domain/IRespository.cs" @@ -1,26 +1,21 @@ -using Microsoft.EntityFrameworkCore; -using System; +using System; using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; +using System.Text; -namespace WebApplication1.Demain.Hellper.Interface +namespace WebApiV.Domain { public interface IRespository { IQueryable Table { get; } - T GetById(int id); - - - void insert(T entity); - - void InsertBulk(IEnumerable list); - - void Update(T entity); - + void Insert(T entity); + void InsertBlck(IEnumerable list); + void Delete(int id); void Delete(T entity); + void Delete(IEnumerable entities); + void Update(T entity); - void Delete(int Id); + T GetById(int id); } } diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Domain/WebApiV.Domain.csproj" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Domain/WebApiV.Domain.csproj" new file mode 100644 index 0000000..09b3c14 --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Domain/WebApiV.Domain.csproj" @@ -0,0 +1,11 @@ + + + + netstandard2.0 + + + + + + + diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Implement/WebApiV.Implement.csproj" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Implement/WebApiV.Implement.csproj" new file mode 100644 index 0000000..27484ae --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Implement/WebApiV.Implement.csproj" @@ -0,0 +1,11 @@ + + + + netstandard2.0 + + + + + + + diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Interface/WebApiV.Interface.csproj" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Interface/WebApiV.Interface.csproj" new file mode 100644 index 0000000..3f1bb74 --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Interface/WebApiV.Interface.csproj" @@ -0,0 +1,11 @@ + + + + netstandard2.0 + + + + + + + diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Service/WebApiV.Service.csproj" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Service/WebApiV.Service.csproj" new file mode 100644 index 0000000..9f5c4f4 --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Service/WebApiV.Service.csproj" @@ -0,0 +1,7 @@ + + + + netstandard2.0 + + + diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Test/WebApiV.Test.csproj" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Test/WebApiV.Test.csproj" new file mode 100644 index 0000000..9f5c4f4 --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Test/WebApiV.Test.csproj" @@ -0,0 +1,7 @@ + + + + netstandard2.0 + + + diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/DbInitlizer.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/DbInitlizer.cs" new file mode 100644 index 0000000..dad976f --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/DbInitlizer.cs" @@ -0,0 +1,52 @@ +using Microsoft.EntityFrameworkCore.Internal; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Text; +using WebApiV.Data; +using WebApiV.Data.Entity; +using WebApiV.Domain; + +namespace WebApiV.Utils +{ + public class DbInitlizer + { + public static void Seed(IServiceProvider service) + { + using(var score = service.CreateScope()) + { + var db = score.ServiceProvider.GetService(typeof(Admin10086Db))as Admin10086Db; + var _user = score.ServiceProvider.GetService(typeof(IRespository))as IRespository; + var _role = score.ServiceProvider.GetService(typeof(IRespository)) as IRespository; + db.Database.EnsureCreated(); + + var emp = db.Users.Any(); + if (!emp) + { + var rloe1 = new Role + { + RoleName = "老王隔壁", + ShortTell = "就是老黄", + }; + _role.Insert(rloe1); + + _user.InsertBlck(new User[] + { + new User + { + UserName="sa", + PassWord="123", + RoleId=rloe1.Id, + }, + new User + { + UserName="sb", + PassWord="456", + RoleId=rloe1.Id, + } + }); + } + } + } + } +} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/File/ClobalExcptionFilter.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/File/ClobalExcptionFilter.cs" new file mode 100644 index 0000000..fe5e3d2 --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/File/ClobalExcptionFilter.cs" @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Mvc.Filters; +using System; +using System.Collections.Generic; +using System.Text; +using WebApiV.Implement.Log; +using WebApiV.Interface.Log; +using WebApiV.Utils.Hellper; + +namespace WebApiV.Utils.File +{ + public class ClobalExcptionFilter : IExceptionFilter + { + private readonly ILog _log; + + public ClobalExcptionFilter(ILog log) + { + _log = log; + } + + public void OnException(ExceptionContext context) + { + _log.Error(context.Exception); + context.ExceptionHandled = true; + } + } +} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/Hellper/LogHellper.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/Hellper/LogHellper.cs" new file mode 100644 index 0000000..2997eff --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/Hellper/LogHellper.cs" @@ -0,0 +1,42 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Text; +using WebApiV.Data.Entity; +using WebApiV.Domain.Enum; +using WebApiV.Interface.Log; + +namespace WebApiV.Utils.Hellper +{ + public static class LogHellper + { + public static void Logger(this ILog log, LogsLevel logLevel, Exception exception, int userId) + { + var item = new Logs + { + LogsLevel = (int)logLevel, + ShortMessage = exception.Message, + FullMessage = exception.ToString(), + UserId = userId + }; + log.Insert(item); + } + + public static void Info(this ILog log, Exception exception, LogsLevel logLevel = LogsLevel.信息, int userId = 0) + { + Logger(log, logLevel, exception, userId); + } + public static void Debug(this ILog log, Exception exception, LogsLevel logLevel = LogsLevel.调试, int userId = 0) + { + Logger(log, logLevel, exception, userId); + } + public static void Error(this ILog log, Exception exception, LogsLevel logLevel = LogsLevel.错误, int userId = 0) + { + Logger(log, logLevel, exception, userId); + } + public static void Fatal(this ILog log, Exception exception, LogsLevel logLevel = LogsLevel.崩溃, int userId = 0) + { + Logger(log, logLevel, exception, userId); + } + } +} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/WebApiV.Utils.csproj" "b/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/WebApiV.Utils.csproj" new file mode 100644 index 0000000..168c6f0 --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.Utils/WebApiV.Utils.csproj" @@ -0,0 +1,18 @@ + + + + netstandard2.0 + + + + + + + + + + + + + + diff --git "a/\347\253\240\345\273\272\345\206\233/WebApiV.sln" "b/\347\253\240\345\273\272\345\206\233/WebApiV.sln" new file mode 100644 index 0000000..8c6fc18 --- /dev/null +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV.sln" @@ -0,0 +1,67 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30128.74 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApiV", "WebApiV\WebApiV.csproj", "{CBBF3F5F-7D0D-4924-9F1F-E006B0663631}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApiV.Data", "WebApiV.Data\WebApiV.Data.csproj", "{16157AF0-EC51-4A34-A740-8DE9FC75CB0A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApiV.Domain", "WebApiV.Domain\WebApiV.Domain.csproj", "{7D2C94F7-6C3B-4E01-897B-2426DA6B7E70}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApiV.Implement", "WebApiV.Implement\WebApiV.Implement.csproj", "{19E026B9-3836-4356-8A9E-34EBC959B55D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApiV.Interface", "WebApiV.Interface\WebApiV.Interface.csproj", "{8C0DE35D-12AD-41B0-B810-C0BE9D3CA4BF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApiV.Service", "WebApiV.Service\WebApiV.Service.csproj", "{FCC12D17-1128-406C-9862-A017137C7041}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApiV.Test", "WebApiV.Test\WebApiV.Test.csproj", "{58BAB7A4-FE60-47C5-A2BF-CEFFC3CDC698}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApiV.Utils", "WebApiV.Utils\WebApiV.Utils.csproj", "{0B396BF6-0569-4672-B89A-50F33839ACF6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CBBF3F5F-7D0D-4924-9F1F-E006B0663631}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBBF3F5F-7D0D-4924-9F1F-E006B0663631}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBBF3F5F-7D0D-4924-9F1F-E006B0663631}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBBF3F5F-7D0D-4924-9F1F-E006B0663631}.Release|Any CPU.Build.0 = Release|Any CPU + {16157AF0-EC51-4A34-A740-8DE9FC75CB0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {16157AF0-EC51-4A34-A740-8DE9FC75CB0A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16157AF0-EC51-4A34-A740-8DE9FC75CB0A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {16157AF0-EC51-4A34-A740-8DE9FC75CB0A}.Release|Any CPU.Build.0 = Release|Any CPU + {7D2C94F7-6C3B-4E01-897B-2426DA6B7E70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D2C94F7-6C3B-4E01-897B-2426DA6B7E70}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D2C94F7-6C3B-4E01-897B-2426DA6B7E70}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D2C94F7-6C3B-4E01-897B-2426DA6B7E70}.Release|Any CPU.Build.0 = Release|Any CPU + {19E026B9-3836-4356-8A9E-34EBC959B55D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19E026B9-3836-4356-8A9E-34EBC959B55D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19E026B9-3836-4356-8A9E-34EBC959B55D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19E026B9-3836-4356-8A9E-34EBC959B55D}.Release|Any CPU.Build.0 = Release|Any CPU + {8C0DE35D-12AD-41B0-B810-C0BE9D3CA4BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8C0DE35D-12AD-41B0-B810-C0BE9D3CA4BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C0DE35D-12AD-41B0-B810-C0BE9D3CA4BF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8C0DE35D-12AD-41B0-B810-C0BE9D3CA4BF}.Release|Any CPU.Build.0 = Release|Any CPU + {FCC12D17-1128-406C-9862-A017137C7041}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FCC12D17-1128-406C-9862-A017137C7041}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FCC12D17-1128-406C-9862-A017137C7041}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FCC12D17-1128-406C-9862-A017137C7041}.Release|Any CPU.Build.0 = Release|Any CPU + {58BAB7A4-FE60-47C5-A2BF-CEFFC3CDC698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {58BAB7A4-FE60-47C5-A2BF-CEFFC3CDC698}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58BAB7A4-FE60-47C5-A2BF-CEFFC3CDC698}.Release|Any CPU.ActiveCfg = Release|Any CPU + {58BAB7A4-FE60-47C5-A2BF-CEFFC3CDC698}.Release|Any CPU.Build.0 = Release|Any CPU + {0B396BF6-0569-4672-B89A-50F33839ACF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B396BF6-0569-4672-B89A-50F33839ACF6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B396BF6-0569-4672-B89A-50F33839ACF6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B396BF6-0569-4672-B89A-50F33839ACF6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {08D59302-674E-4D7A-A8AC-388D69BCCE35} + EndGlobalSection +EndGlobal diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Controllers/WeatherForecastController.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV/Controllers/WeatherForecastController.cs" similarity index 64% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/Controllers/WeatherForecastController.cs" rename to "\347\253\240\345\273\272\345\206\233/WebApiV/Controllers/WeatherForecastController.cs" index 0474325..2348e57 100644 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Controllers/WeatherForecastController.cs" +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV/Controllers/WeatherForecastController.cs" @@ -3,40 +3,35 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -using WebApplication1.Controllers.Demain; -using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; -using Microsoft.EntityFrameworkCore; -using WebApplication1.Demain.Hellper; +using WebApiV.Data; -namespace WebApplication1.Controllers +namespace WebApiV.Controllers { [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { - private readonly AdminDb _db; - private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger _logger; + private readonly Admin10086Db _db; - public WeatherForecastController(ILogger logger,AdminDb adminDb) + public WeatherForecastController(ILogger logger,Admin10086Db admin) { _logger = logger; - _db = adminDb; + _db = admin; } [HttpGet] - public string Get() + public IEnumerable Get() { - var res = _db.Students.Include(x=>x.Clbum).ToList(); - - return JsonHellper.SerializeObject(res); + throw new Exception("错误:error desc"); } } } diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Program.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV/Program.cs" similarity index 96% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/Program.cs" rename to "\347\253\240\345\273\272\345\206\233/WebApiV/Program.cs" index c015cb7..8f1d3a0 100644 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Program.cs" +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV/Program.cs" @@ -7,7 +7,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace WebApplication1 +namespace WebApiV { public class Program { diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Properties/launchSettings.json" "b/\347\253\240\345\273\272\345\206\233/WebApiV/Properties/launchSettings.json" similarity index 90% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/Properties/launchSettings.json" rename to "\347\253\240\345\273\272\345\206\233/WebApiV/Properties/launchSettings.json" index 553d652..0419422 100644 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Properties/launchSettings.json" +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV/Properties/launchSettings.json" @@ -4,7 +4,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:55103", + "applicationUrl": "http://localhost:58622", "sslPort": 0 } }, @@ -17,7 +17,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" } }, - "WebApplication1": { + "WebApiV": { "commandName": "Project", "launchBrowser": true, "launchUrl": "weatherforecast", diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Startup.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV/Startup.cs" similarity index 75% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/Startup.cs" rename to "\347\253\240\345\273\272\345\206\233/WebApiV/Startup.cs" index 570af10..e05ad17 100644 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Startup.cs" +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV/Startup.cs" @@ -9,11 +9,13 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -using WebApplication1.Controllers; -using WebApplication1.Demain.Hellper.Implementation; -using WebApplication1.Demain.Hellper.Interface; +using WebApiV.Domain; +using WebApiV.Implement.Log; +using WebApiV.Interface.Log; +using WebApiV.Utils; +using WebApiV.Utils.File; -namespace WebApplication1 +namespace WebApiV { public class Startup { @@ -27,11 +29,10 @@ namespace WebApplication1 // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - services.AddDbContext(); - - services.AddScoped(typeof(IRespository<>), typeof(EfRespositoryy<>)); - - services.AddControllers(); + services.AddDbContext(); + services.AddScoped(typeof(IRespository<>), typeof(EfRespository<>)); + services.AddScoped(typeof(ILog), typeof(Log)); + services.AddControllers(options => options.Filters.Add()) ; } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. @@ -42,7 +43,6 @@ namespace WebApplication1 app.UseDeveloperExceptionPage(); } - app.UseRouting(); app.UseAuthorization(); @@ -51,8 +51,7 @@ namespace WebApplication1 { endpoints.MapControllers(); }); - - DbInit.Init(); + DbInitlizer.Seed(app.ApplicationServices); } } } diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/WeatherForecast.cs" "b/\347\253\240\345\273\272\345\206\233/WebApiV/WeatherForecast.cs" similarity index 91% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/WeatherForecast.cs" rename to "\347\253\240\345\273\272\345\206\233/WebApiV/WeatherForecast.cs" index 11a0296..1cb5a4f 100644 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/WeatherForecast.cs" +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV/WeatherForecast.cs" @@ -1,6 +1,6 @@ using System; -namespace WebApplication1 +namespace WebApiV { public class WeatherForecast { diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/WebApplication1.csproj" "b/\347\253\240\345\273\272\345\206\233/WebApiV/WebApiV.csproj" similarity index 57% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/WebApplication1.csproj" rename to "\347\253\240\345\273\272\345\206\233/WebApiV/WebApiV.csproj" index da10d50..e3ee5d0 100644 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/WebApplication1.csproj" +++ "b/\347\253\240\345\273\272\345\206\233/WebApiV/WebApiV.csproj" @@ -5,10 +5,13 @@ - - + + + + + diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/appsettings.Development.json" "b/\347\253\240\345\273\272\345\206\233/WebApiV/appsettings.Development.json" similarity index 100% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/appsettings.Development.json" rename to "\347\253\240\345\273\272\345\206\233/WebApiV/appsettings.Development.json" diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/appsettings.json" "b/\347\253\240\345\273\272\345\206\233/WebApiV/appsettings.json" similarity index 100% rename from "\347\253\240\345\273\272\345\206\233/WebApplication1/appsettings.json" rename to "\347\253\240\345\273\272\345\206\233/WebApiV/appsettings.json" diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1.sln" "b/\347\253\240\345\273\272\345\206\233/WebApplication1.sln" deleted file mode 100644 index 787e033..0000000 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1.sln" +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30104.148 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApplication1", "WebApplication1\WebApplication1.csproj", "{0B163740-6BB3-437E-8AB3-B840417B952C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0B163740-6BB3-437E-8AB3-B840417B952C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0B163740-6BB3-437E-8AB3-B840417B952C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0B163740-6BB3-437E-8AB3-B840417B952C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0B163740-6BB3-437E-8AB3-B840417B952C}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {04FC1180-0ACB-4A8B-AAE7-CDBFCABCCD0C} - EndGlobalSection -EndGlobal diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Controllers/TestController.cs" "b/\347\253\240\345\273\272\345\206\233/WebApplication1/Controllers/TestController.cs" deleted file mode 100644 index f7f674a..0000000 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Controllers/TestController.cs" +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore.Migrations; -using WebApplication1.Controllers.Demain; -using WebApplication1.Demain.Hellper; -using WebApplication1.Demain.Hellper.Interface; - -namespace WebApplication1.Controllers -{ - [Route("api/[controller]")] - [ApiController] - public class TestController : ControllerBase - { - private readonly IRespository Stu_Respository; - - public TestController(IRespository StuRespository) - { - Stu_Respository = StuRespository; - } - - public string Get() - { - var list = Stu_Respository.Table.ToList(); - return JsonHellper.SerializeObject(list); - } - } -} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/DbInit.cs" "b/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/DbInit.cs" deleted file mode 100644 index b1b8a45..0000000 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/DbInit.cs" +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using WebApplication1.Controllers.Demain; - -namespace WebApplication1.Controllers -{ - public class DbInit - { - public static void Init() - { - using(var db = new AdminDb()) - { - db.Database.EnsureCreated(); - - var Emplit = db.Students.Any(); - - if (!Emplit) - { - var Class1 = new Clbum - { - ClassName = "计应4班", - StudentNun = 38 - }; - - db.Clbums.Add(Class1); - db.SaveChanges(); - - - db.AddRange(new Student[] - { - new Student - { - StudentName="华铭隔壁", - Age=18, - Sex="男", - ClbumId=Class1.Id - }, - new Student - { - StudentName="许嘉隔壁", - Age=19, - Sex="男", - ClbumId=Class1.Id - } - }); - db.SaveChanges(); - - } - } - } - } -} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/Entity/Clbum.cs" "b/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/Entity/Clbum.cs" deleted file mode 100644 index d0867c9..0000000 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/Entity/Clbum.cs" +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace WebApplication1.Controllers.Demain -{ - public class Clbum:BaseEntity - { - public string ClassName { get; set; } - public int StudentNun { get; set; } - - public IEnumerable Students { get; set; } - } -} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/Entity/Student.cs" "b/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/Entity/Student.cs" deleted file mode 100644 index 0ad8b48..0000000 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Demain/Entity/Student.cs" +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace WebApplication1.Controllers.Demain -{ - public class Student:BaseEntity - { - public string StudentName { get; set; } - public string Sex { get; set; } - public int Age { get; set; } - public int ClbumId { get; set; } - public Clbum Clbum { get; set; } - } -} diff --git "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Hellper/JsonHellper.cs" "b/\347\253\240\345\273\272\345\206\233/WebApplication1/Hellper/JsonHellper.cs" deleted file mode 100644 index ddb2a8e..0000000 --- "a/\347\253\240\345\273\272\345\206\233/WebApplication1/Hellper/JsonHellper.cs" +++ /dev/null @@ -1,20 +0,0 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace WebApplication1.Demain.Hellper -{ - public class JsonHellper - { - public static string SerializeObject(object obj) - { - return JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings - { - ReferenceLoopHandling = ReferenceLoopHandling.Ignore, - DateFormatString = "yyyy-MM-dd HH:mm:ss" - }); - } - } -} diff --git "a/\351\273\204\347\204\225/DITest/\351\273\204\347\204\225 - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" "b/\351\273\204\347\204\225/DITest/\351\273\204\347\204\225 - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" new file mode 100644 index 0000000000000000000000000000000000000000..c021179fa33cda2d6fe4964b272f296bf419e229 GIT binary patch literal 1062 zcmeZaU|?VrVFHp23PqSXA6S}NROy(K!jJ>C<7j}f6-YhEj^!dCuP}p6Mi848IWxEb?QmqsV@LtI zwwNIw$O>jiWherQCIU^$WT*o2Ao76>rC^y#AU_2N85necdQ8E_f$S1sI5JPPkb%Jr z#eR3N{Wh}L?00sJh3XLjngR+z86XC!1ksSNV_=8|vPFRy*_ zFid0chDOZpW4jN4LRSw66M#B_rYwj6(jbtNSWuE*pj(h_l51gBTEcMV(Bgx|%g(!P zvipCqXP=8nw255HzE!UT*FN!iz1Mzc8zK4aK&Nv8%?CxOVQ@h3TZ6r~oEbXZm;bmR zyreiyDG?|R3O5FMAXW!r@&jLiL4(1S!3r2?kVK*hG8POffF#IrgO94)-@8i*Ed9uo z&@=D#8cCoy7f1!ja!^=8Vha+s{2&Pj5OK8#oFhQ0SwMV{Y7nD6^_!n%Bt$hINWuY# zk@E}8)624wHEgF|65M)?;eh{5i3=c4%Kq?Ccl{f*=O&0|o|5pt&GVZxqXQ uS=(FSvE0K!Z;5S1k1S9;1Be+sfcV*7kx+wlMc>K)YHK7f-<$*zhXDXvwCDi< literal 0 HcmV?d00001 -- Gitee