feat:新增种子数据导入
This commit is contained in:
parent
3a8f9d1721
commit
9cc164529f
@ -5,11 +5,13 @@ using Infrastructure.Extensions;
|
|||||||
using Infrastructure.Model;
|
using Infrastructure.Model;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
using MiniExcelLibs;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using ZR.Admin.WebApi.Extensions;
|
using ZR.Admin.WebApi.Extensions;
|
||||||
using ZR.Admin.WebApi.Filters;
|
using ZR.Admin.WebApi.Filters;
|
||||||
using ZR.Common;
|
using ZR.Common;
|
||||||
using ZR.Model.System;
|
using ZR.Model.System;
|
||||||
|
using ZR.Service.System;
|
||||||
using ZR.Service.System.IService;
|
using ZR.Service.System.IService;
|
||||||
|
|
||||||
namespace ZR.Admin.WebApi.Controllers
|
namespace ZR.Admin.WebApi.Controllers
|
||||||
@ -25,7 +27,10 @@ namespace ZR.Admin.WebApi.Controllers
|
|||||||
|
|
||||||
private IWebHostEnvironment WebHostEnvironment;
|
private IWebHostEnvironment WebHostEnvironment;
|
||||||
private ISysFileService SysFileService;
|
private ISysFileService SysFileService;
|
||||||
public CommonController(IOptions<OptionsSetting> options, IWebHostEnvironment webHostEnvironment, ISysFileService fileService)
|
public CommonController(
|
||||||
|
IOptions<OptionsSetting> options,
|
||||||
|
IWebHostEnvironment webHostEnvironment,
|
||||||
|
ISysFileService fileService)
|
||||||
{
|
{
|
||||||
WebHostEnvironment = webHostEnvironment;
|
WebHostEnvironment = webHostEnvironment;
|
||||||
SysFileService = fileService;
|
SysFileService = fileService;
|
||||||
@ -155,6 +160,91 @@ namespace ZR.Admin.WebApi.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 初始化种子数据
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet]
|
||||||
|
[ApiExplorerSettings(IgnoreApi = true)]
|
||||||
|
[ActionPermissionFilter(Permission = "common")]
|
||||||
|
[Log(BusinessType = BusinessType.INSERT, Title = "初始化数据")]
|
||||||
|
public IActionResult InitSeedData()
|
||||||
|
{
|
||||||
|
if (!WebHostEnvironment.IsDevelopment())
|
||||||
|
{
|
||||||
|
return ToResponse(ResultCode.FAIL, "导入数据失败");
|
||||||
|
}
|
||||||
|
var path = Path.Combine(WebHostEnvironment.WebRootPath, "data.xlsx");
|
||||||
|
//var sheetNames = MiniExcel.GetSheetNames(path);
|
||||||
|
SeedDataService seedDataService = new();
|
||||||
|
|
||||||
|
var sysUser = MiniExcel.Query<SysUser>(path, sheetName: "user").ToList();
|
||||||
|
var result1 = seedDataService.InitUserData(sysUser);
|
||||||
|
|
||||||
|
var sysPost = MiniExcel.Query<SysPost>(path, sheetName: "post").ToList();
|
||||||
|
var result2 = seedDataService.InitPostData(sysPost);
|
||||||
|
|
||||||
|
var sysRole = MiniExcel.Query<SysRole>(path, sheetName: "role").ToList();
|
||||||
|
var result3 = seedDataService.InitRoleData(sysRole);
|
||||||
|
|
||||||
|
var sysUserRole = MiniExcel.Query<SysUserRole>(path, sheetName: "user_role").ToList();
|
||||||
|
var result4 = seedDataService.InitUserRoleData(sysUserRole);
|
||||||
|
|
||||||
|
var sysMenu = MiniExcel.Query<SysMenu>(path, sheetName: "menu").ToList();
|
||||||
|
var result5 = seedDataService.InitMenuData(sysMenu);
|
||||||
|
|
||||||
|
var sysConfig = MiniExcel.Query<SysConfig>(path, sheetName: "config").ToList();
|
||||||
|
var result6 = seedDataService.InitConfigData(sysConfig);
|
||||||
|
|
||||||
|
var sysRoleMenu = MiniExcel.Query<SysRoleMenu>(path, sheetName: "role_menu").ToList();
|
||||||
|
var result7 = seedDataService.InitRoleMenuData(sysRoleMenu);
|
||||||
|
|
||||||
|
var sysDict = MiniExcel.Query<SysDictType>(path, sheetName: "dict_type").ToList();
|
||||||
|
var result8 = seedDataService.InitDictType(sysDict);
|
||||||
|
|
||||||
|
var sysDictData = MiniExcel.Query<SysDictData>(path, sheetName: "dict_data").ToList();
|
||||||
|
var result9 = seedDataService.InitDictData(sysDictData);
|
||||||
|
|
||||||
|
var sysDept = MiniExcel.Query<SysDept>(path, sheetName: "dept").ToList();
|
||||||
|
var result10 = seedDataService.InitDeptData(sysDept);
|
||||||
|
|
||||||
|
var sysArticleCategory = MiniExcel.Query<ArticleCategory>(path, sheetName: "article_category").ToList();
|
||||||
|
var result11 = seedDataService.InitArticleCategoryData(sysArticleCategory);
|
||||||
|
|
||||||
|
var sysTask = MiniExcel.Query<SysTasks>(path, sheetName: "task").ToList();
|
||||||
|
var result12 = seedDataService.InitTaskData(sysTask);
|
||||||
|
|
||||||
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
|
Console.WriteLine(result1.Item1);
|
||||||
|
Console.WriteLine(result2.Item1);
|
||||||
|
Console.WriteLine(result3.Item1);
|
||||||
|
Console.WriteLine(result4.Item1);
|
||||||
|
Console.WriteLine(result5.Item1);
|
||||||
|
Console.WriteLine(result6.Item1);
|
||||||
|
Console.WriteLine(result7.Item1);
|
||||||
|
Console.WriteLine(result8.Item1);
|
||||||
|
Console.WriteLine(result9.Item1);
|
||||||
|
Console.WriteLine(result10.Item1);
|
||||||
|
Console.WriteLine(result11.Item1);
|
||||||
|
Console.WriteLine(result12.Item1);
|
||||||
|
|
||||||
|
return SUCCESS(new
|
||||||
|
{
|
||||||
|
result1 = result1.Item1,
|
||||||
|
result2 = result2.Item1,
|
||||||
|
result3 = result3.Item1,
|
||||||
|
result4 = result4.Item1,
|
||||||
|
result5 = result5.Item1,
|
||||||
|
result6 = result6.Item1,
|
||||||
|
result7 = result7.Item1,
|
||||||
|
result8 = result8.Item1,
|
||||||
|
result9 = result9.Item1,
|
||||||
|
result10 = result10.Item1,
|
||||||
|
result11 = result11.Item1,
|
||||||
|
result12 = result12.Item1
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UploadDto
|
public class UploadDto
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
using JinianNet.JNTemplate;
|
using JinianNet.JNTemplate;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using System;
|
|
||||||
using ZR.Common;
|
using ZR.Common;
|
||||||
|
|
||||||
namespace ZR.Admin.WebApi.Extensions
|
namespace ZR.Admin.WebApi.Extensions
|
||||||
|
|||||||
@ -27,7 +27,7 @@ builder.Services.AddCors(c =>
|
|||||||
{
|
{
|
||||||
c.AddPolicy("Policy", policy =>
|
c.AddPolicy("Policy", policy =>
|
||||||
{
|
{
|
||||||
policy.WithOrigins(corsUrls == null ? Array.Empty<string>() : corsUrls)
|
policy.WithOrigins(corsUrls ?? Array.Empty<string>())
|
||||||
.AllowAnyHeader()//允许任意头
|
.AllowAnyHeader()//允许任意头
|
||||||
.AllowCredentials()//允许cookie
|
.AllowCredentials()//允许cookie
|
||||||
.AllowAnyMethod();//允许任意方法
|
.AllowAnyMethod();//允许任意方法
|
||||||
@ -89,7 +89,7 @@ builder.Services.AddSwaggerConfig();
|
|||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
InternalApp.ServiceProvider = app.Services;
|
InternalApp.ServiceProvider = app.Services;
|
||||||
if (builder.Configuration["InitDb"].ParseToBool() == true)
|
if (builder.Configuration["InitDb"].ParseToBool() == true && app.Environment.IsDevelopment())
|
||||||
{
|
{
|
||||||
app.Services.InitDb();
|
app.Services.InitDb();
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
ZR.Admin.WebApi/wwwroot/data.xlsx
Normal file
BIN
ZR.Admin.WebApi/wwwroot/data.xlsx
Normal file
Binary file not shown.
@ -12,6 +12,6 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="JinianNet.JNTemplate" Version="2.3.3" />
|
<PackageReference Include="JinianNet.JNTemplate" Version="2.3.3" />
|
||||||
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.66" />
|
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.73" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MiniExcel" Version="1.30.2" />
|
<PackageReference Include="MiniExcel" Version="1.30.2" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
||||||
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.66" />
|
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.73" />
|
||||||
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -15,6 +15,6 @@
|
|||||||
<PackageReference Include="MySqlConnector" Version="2.2.5" />
|
<PackageReference Include="MySqlConnector" Version="2.2.5" />
|
||||||
<PackageReference Include="NETCore.Encrypt" Version="2.1.1" />
|
<PackageReference Include="NETCore.Encrypt" Version="2.1.1" />
|
||||||
<PackageReference Include="SqlSugar.IOC" Version="2.0.0" />
|
<PackageReference Include="SqlSugar.IOC" Version="2.0.0" />
|
||||||
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.66" />
|
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.73" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
222
ZR.Service/System/SeedDataService.cs
Normal file
222
ZR.Service/System/SeedDataService.cs
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
using Infrastructure.Extensions;
|
||||||
|
using SqlSugar.IOC;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using ZR.Common;
|
||||||
|
using ZR.Model.System;
|
||||||
|
|
||||||
|
namespace ZR.Service.System
|
||||||
|
{
|
||||||
|
public class SeedDataService
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 初始化用户数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public (string, object, object) InitUserData(List<SysUser> data)
|
||||||
|
{
|
||||||
|
data.ForEach(x =>
|
||||||
|
{
|
||||||
|
x.Password = "E10ADC3949BA59ABBE56E057F20F883E";
|
||||||
|
});
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
db.Ado.BeginTran();
|
||||||
|
//db.Ado.ExecuteCommand("SET IDENTITY_INSERT sys_user ON");
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.SplitError(x => x.Item.UserName.IsEmpty(), "用户名不能为空")
|
||||||
|
.SplitError(x => !Tools.CheckUserName(x.Item.UserName), "用户名不符合规范")
|
||||||
|
.WhereColumns(it => it.UserId)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.OffIdentity().ExecuteCommand();//插入可插入部分;
|
||||||
|
//db.Ado.ExecuteCommand("SET IDENTITY_INSERT sys_user OFF");
|
||||||
|
db.Ado.CommitTran();
|
||||||
|
|
||||||
|
string msg = $"[用户数据] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public (string, object, object) InitMenuData(List<SysMenu> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
db.Ado.BeginTran();
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => it.MenuId)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.OffIdentity().ExecuteCommand();//插入可插入部分;
|
||||||
|
db.Ado.CommitTran();
|
||||||
|
|
||||||
|
string msg = $"[菜单数据] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 角色菜单数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public (string, object, object) InitRoleMenuData(List<SysRoleMenu> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => new { it.Menu_id, it.Role_id })
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
|
||||||
|
|
||||||
|
string msg = $"[角色菜单] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 初始化部门数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public (string, object, object) InitDeptData(List<SysDept> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => it.DeptId)
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.ExecuteCommand();
|
||||||
|
|
||||||
|
string msg = $"[部门数据] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public (string, object, object) InitPostData(List<SysPost> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => it.PostCode)
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.ExecuteCommand();
|
||||||
|
|
||||||
|
string msg = $"[岗位数据] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public (string, object, object) InitRoleData(List<SysRole> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => it.RoleKey)
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.OffIdentity().ExecuteCommand();
|
||||||
|
|
||||||
|
string msg = $"[角色数据] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public (string, object, object) InitUserRoleData(List<SysUserRole> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => new { it.RoleId, it.UserId })
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.ExecuteCommand();
|
||||||
|
|
||||||
|
string msg = $"[用户角色] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 系统配置
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public (string, object, object) InitConfigData(List<SysConfig> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => it.ConfigKey)
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.ExecuteCommand();
|
||||||
|
|
||||||
|
string msg = $"[系统配置] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 字典
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public (string, object, object) InitDictType(List<SysDictType> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => it.DictType)
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.ExecuteCommand();
|
||||||
|
|
||||||
|
string msg = $"[字典管理] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 字典数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public (string, object, object) InitDictData(List<SysDictData> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => new { it.DictType, it.DictValue })
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.ExecuteCommand();
|
||||||
|
|
||||||
|
string msg = $"[字典数据] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 文章目录
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public (string, object, object) InitArticleCategoryData(List<ArticleCategory> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => it.Name)
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.OffIdentity().ExecuteCommand();
|
||||||
|
|
||||||
|
string msg = $"[字典数据] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 任务
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public (string, object, object) InitTaskData(List<SysTasks> data)
|
||||||
|
{
|
||||||
|
var db = DbScoped.SugarScope;
|
||||||
|
var x = db.Storageable(data)
|
||||||
|
.SplitInsert(it => it.NotAny())
|
||||||
|
.WhereColumns(it => it.Name)
|
||||||
|
.ToStorage();
|
||||||
|
var result = x.AsInsertable.ExecuteCommand();
|
||||||
|
|
||||||
|
string msg = $"[任务数据] 插入{x.InsertList.Count} 错误数据{x.ErrorList.Count} 总共{x.TotalList.Count}";
|
||||||
|
return (msg, x.ErrorList, x.IgnoreList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user