From 9cc164529fabf4d03f167a6b3166f2357be04a33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 15 May 2023 19:54:06 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=96=B0=E5=A2=9E=E7=A7=8D?= =?UTF-8?q?=E5=AD=90=E6=95=B0=E6=8D=AE=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/CommonController.cs | 92 +++++++- ZR.Admin.WebApi/Extensions/LogoExtension.cs | 4 +- ZR.Admin.WebApi/Program.cs | 4 +- ZR.Admin.WebApi/wwwroot/data.xlsx | Bin 0 -> 36529 bytes ZR.CodeGenerator/ZR.CodeGenerator.csproj | 2 +- ZR.Model/ZR.Model.csproj | 2 +- ZR.Repository/ZR.Repository.csproj | 2 +- ZR.Service/System/SeedDataService.cs | 222 ++++++++++++++++++ 8 files changed, 319 insertions(+), 9 deletions(-) create mode 100644 ZR.Admin.WebApi/wwwroot/data.xlsx create mode 100644 ZR.Service/System/SeedDataService.cs diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index a6f6272..bfc2e3c 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -5,11 +5,13 @@ using Infrastructure.Extensions; using Infrastructure.Model; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; +using MiniExcelLibs; using Newtonsoft.Json; using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Filters; using ZR.Common; using ZR.Model.System; +using ZR.Service.System; using ZR.Service.System.IService; namespace ZR.Admin.WebApi.Controllers @@ -25,7 +27,10 @@ namespace ZR.Admin.WebApi.Controllers private IWebHostEnvironment WebHostEnvironment; private ISysFileService SysFileService; - public CommonController(IOptions options, IWebHostEnvironment webHostEnvironment, ISysFileService fileService) + public CommonController( + IOptions options, + IWebHostEnvironment webHostEnvironment, + ISysFileService fileService) { WebHostEnvironment = webHostEnvironment; SysFileService = fileService; @@ -155,6 +160,91 @@ namespace ZR.Admin.WebApi.Controllers } #endregion + + /// + /// 初始化种子数据 + /// + /// + [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(path, sheetName: "user").ToList(); + var result1 = seedDataService.InitUserData(sysUser); + + var sysPost = MiniExcel.Query(path, sheetName: "post").ToList(); + var result2 = seedDataService.InitPostData(sysPost); + + var sysRole = MiniExcel.Query(path, sheetName: "role").ToList(); + var result3 = seedDataService.InitRoleData(sysRole); + + var sysUserRole = MiniExcel.Query(path, sheetName: "user_role").ToList(); + var result4 = seedDataService.InitUserRoleData(sysUserRole); + + var sysMenu = MiniExcel.Query(path, sheetName: "menu").ToList(); + var result5 = seedDataService.InitMenuData(sysMenu); + + var sysConfig = MiniExcel.Query(path, sheetName: "config").ToList(); + var result6 = seedDataService.InitConfigData(sysConfig); + + var sysRoleMenu = MiniExcel.Query(path, sheetName: "role_menu").ToList(); + var result7 = seedDataService.InitRoleMenuData(sysRoleMenu); + + var sysDict = MiniExcel.Query(path, sheetName: "dict_type").ToList(); + var result8 = seedDataService.InitDictType(sysDict); + + var sysDictData = MiniExcel.Query(path, sheetName: "dict_data").ToList(); + var result9 = seedDataService.InitDictData(sysDictData); + + var sysDept = MiniExcel.Query(path, sheetName: "dept").ToList(); + var result10 = seedDataService.InitDeptData(sysDept); + + var sysArticleCategory = MiniExcel.Query(path, sheetName: "article_category").ToList(); + var result11 = seedDataService.InitArticleCategoryData(sysArticleCategory); + + var sysTask = MiniExcel.Query(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 diff --git a/ZR.Admin.WebApi/Extensions/LogoExtension.cs b/ZR.Admin.WebApi/Extensions/LogoExtension.cs index 46f7ddd..e9291ed 100644 --- a/ZR.Admin.WebApi/Extensions/LogoExtension.cs +++ b/ZR.Admin.WebApi/Extensions/LogoExtension.cs @@ -1,6 +1,4 @@ using JinianNet.JNTemplate; -using Microsoft.Extensions.DependencyInjection; -using System; using ZR.Common; namespace ZR.Admin.WebApi.Extensions @@ -12,7 +10,7 @@ namespace ZR.Admin.WebApi.Extensions Console.ForegroundColor = ConsoleColor.Blue; var contentTpl = JnHelper.ReadTemplate("", "logo.txt"); var content = contentTpl?.Render(); - + Console.WriteLine(content); Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("源码地址: https://gitee.com/izory/ZrAdminNetCore"); diff --git a/ZR.Admin.WebApi/Program.cs b/ZR.Admin.WebApi/Program.cs index e449dcf..d217236 100644 --- a/ZR.Admin.WebApi/Program.cs +++ b/ZR.Admin.WebApi/Program.cs @@ -27,7 +27,7 @@ builder.Services.AddCors(c => { c.AddPolicy("Policy", policy => { - policy.WithOrigins(corsUrls == null ? Array.Empty() : corsUrls) + policy.WithOrigins(corsUrls ?? Array.Empty()) .AllowAnyHeader()//允许任意头 .AllowCredentials()//允许cookie .AllowAnyMethod();//允许任意方法 @@ -89,7 +89,7 @@ builder.Services.AddSwaggerConfig(); var app = builder.Build(); InternalApp.ServiceProvider = app.Services; -if (builder.Configuration["InitDb"].ParseToBool() == true) +if (builder.Configuration["InitDb"].ParseToBool() == true && app.Environment.IsDevelopment()) { app.Services.InitDb(); } diff --git a/ZR.Admin.WebApi/wwwroot/data.xlsx b/ZR.Admin.WebApi/wwwroot/data.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a5c36f11f29767c01bba31a8ed4660f5854b734e GIT binary patch literal 36529 zcmeEuWmKNgt|l!|+})+PyKAxH?(XjH?(XjH?(W5*xKrGV9A$n20@{QG0zv`;|Ew-xZRKES<)E$L zYGY`xN#kN^fu9HRnJfqBGl2g8|NK9!f$^jwRu5+%^e zy5RJTB_JRuyh5>e$?rko(iUmd+%RdRXVPrLfNRwT;ugqgOvBKV%CrI-*j#evd0-BHWc zQbLXfNE_!LkoLanvc)_ zkLLe}A^cCGSHww5_tQZKU3`BD{&7FQ9s~bP+?oG-JAs0ikLVg)V`M%N)_ON7HoO9+ zKd^{*r`OBq>N;2C@ehK#ZKjHFL}bpdP0p1;$xpV9U=$>FNy4@jzXlMT=5OckQbojE z$(%Z)Dau<)a>YkBzY5P@3D&|-(I{g=AQfT

n7Cstrl1ZsR z41JBl314$qtekR0Y7uN6-MC+njqe?Js~b#^MkSjeqiA~&L_L^n1<9Agld$F|pM~kg z9%eyqr%GwV+0O%Ui)*KDGP}%7-KtQfKkB|TH?!R~L3Uxh*nkT-v_M2nR++IW%8eyr zd~&EE_1x!$1&)yZR>K|LdlD1JS4(PT?_y9`$7_&?Q(K2dhyBKk`Ni~BZG^zZJ0uCW zRp{{8ZqWSBkybOh;f(a>lEnOv@=%rwaVr(o94M7h7|vxGP51RHOsRaTC>j|X$Ap{8 zYq2ImP0MrsA7Cye5mf1drHvrE66XC0_(7fVeLk?+uTSa|w@Vik5RmuhOYbC}`%W@_73YW_a)VO?0nIjs=B3vd&Lsr}$RNzH_@~9NMH7j$(!1RK>SiimVNU0g~4wp zFo$9|`~m|vdgsJ+zgRWyX@n^CY4#+%mN&GXEpwu(-WKx>$XFpsUX(+g+r0N18kz4v zHjXFJYCi<*O;j>1Q&;d5-sYtLFPpo54vY2;SJ*>T}>y6)oz;)bJ$kI=Q>h0+FHmDH_`sgbq@c85^_B=c&glh2F%MZIgIuc z^lL*W#LHocuPVA}hrnf|R5eBO)+ay$3ZVUe`==vm%&oZqvn2Lp`XAdtmx}Vfa zA(zcS$+3WzdD^>IJNYOpR|6bp^|us|iz=F$ymzs0FgZeV&-q&u<l;Im2R0}uJ!L;k6ct%Y

s$n`*$si4HKhav*q0BdtH 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ᾠFY%TYJux=UW=WX|1Ol*gJ*-`X5 zu@7d*34TI?Da&R_sk{|aFsX}E_&ZC3gXk)*LU>KIUs~rX#l3%Fdc<&CTUY)dTv}e370s%;(MRcGVaEG{kd>v zEcLyzo%9=4w}7G_-n zkDY3|B>c9lB09{1C3y~1UXH~wx_H!dQdCsIp@@E@_9R^5Q^P6Lf6iI)FJ-*&0-o< zIhnIH3M;5C2jU4Ez==bs6cKX=*(t(CT8)OK;(cSqj8kyC+R^F{Au|}k295X#ivoOX zey3P;(iJIQ*7k1F`${*TMWslV3D*kkgcPX5unsQCju_p!^-HL)czKsIL^Bl054+V; z>KUhaBEd4Q(&~<=&V63rqL#7uU=&@Q)u2&sFi2UK@$w6;ktF66AX&)~=KF-sQHt_3Y4Ex#+2M~Pl zQEf=-JgK2!%yif6Pp{|kj0Ys6RUVHF4Ydxn7m~0~?7B{4Ing?T#WW?|nwKx*vt}V> zr-#Ni)M>2OycVxtbdU!ll}YI0@$F6jjAaBHmcr7Owao;3X5ltOA7Yru+x$Vl_VCB< zxAMVg)~P-Qdk=4;jUgW^z!R#VyGA2(z1(qc$aND%b(0yA3T5LR3d~EtUe4tkw>C`j z#(pX2_A{!5A+d0i887Od(`q%TZS@{6zP#b&;Ee@KHIWuIEe z#7V9@=vUz+)2<3P70;S0TNk7|K(Y5JL&Qlcb!c#1?ezHlq- z`jMPo9lnFkz8dQgyB1fV*6_9KV#2}Lb>IF`?TKz~h1cR2Lu9WEf4!9Z@!`F)i#t*{ zG6rwPGzlV1>F+L%oS{Yglb4Q}cRB4(t`}-I5uf<38-2?Z=`xtHwUEtjSm3fY=Ao$V zg~Olh=bPRbMOjLBef7owdm@f{(4m*?v!EBxb&2ieb;*!WX12wRvWUvMEj($(-_a&B z@!*&)FH8>|UtDv@LziEbdp#J%vYJ7^s;Lz@=>4n~yiDbfZ9-q&1=vO-ioSY<{Eusi ziLRZYfxLsAsg?2bC8ZqOTpn5U>|SueJ30B@35{;WJVAz8V?y)D1K!WQ<~q>C2(xfH z^Jw-6H@dYE+#@@Lu#xM;7l=#ANmEBto5lZ5Kk_K^c0;?dyfm|>VuxCtI9dijmq?ni|2FI?22^ee$a;ktb@zsN- zMGWiXBWNr%I_IIw3qKAw6xmIYBIJ3e-jZp~WO2%7{yZd#?5%E)ELB8>N^dNE)-^MPPq_MtYhKRZ)Cu5X< zX8I%{o;n_G;!PMxA1x;r6ir^DH-3#|f9E}9*_KjhNHsSTM2LYQLP5lT6OV9(`0$v( z>aEAgYb?YhYy3)X9~z#EQyA~s37z~>O9h)06X|P^7Y=jM7 zV=1s{@2bi+nC0?;>T*jMjJ{xDLWpcRTwgxOylvD@_e7){NN1)?8|*sWQGA2uQ~ ziuuviu-b8GzA#>-c^ispeKK?xV(J%$$hKPqBIyv&P{tDatp5?0fb3e?8qA)SnG(g@ zOceFn-5owd!4}x~m4NsF*+qn3=Ki#X!|S{ALEYPoMg@bZhBwNjmgQruS+_oX(ljgd z`tn${;#w`QK8nA=3DWVxOvH;l1z+JWPs|5%%Kf()2)5%cm;I3;Y; zLhg|an#RTkL79P0JzQwCi0kYav2z>(g0rzp*;;#()F7lEdZO;@LE_-+*ZkC{V4pY6 zJ8a1zT)B{`I7%xQlQvmGq#&i^1uKC~8yJGHeO9g@X_f_1Y7+U$1Q&ABj+Ok)s}%DU zIEYOi`@82Vg5RnM)6Nj})d)_QV?DWUY^={_czrZsCr7=9ssP5Dk>rqr&_^bBsy`ox z*S<5~{xV*cw6>>pOfHuflCk?3f!Za{Z+B0)hSh$5eM}-T5*m7lls|B|o$AjxDV#py`pxA@7&Qm}yB~cO)_g1k-R5Za> zt)SapP0dhmWaUiS%axSZFr6)Jx?Hz4s@g5aka9SJY$$((P%mMGmtTG&tJ8vy|KMq zv~b*&ia6|U#-+lmJKTFdCz#@xZ=%H?qgyVK4Nf_5$u;9C+x-Z!t%fF=p_)dG3rmgz3W-;rV~nz7N-}xLuV#O@*~Xj2(?S` z$i>Wecp@n^&%!Sl(67HYE{h`L<^`9YAqwJpJBS?UQwpsBVw-=Dh5&JxpKISigg8gP zqQWN${r2ONsRKV8M&s1iL*LiPlWd@*`pI%*b&T<~XOJj)yZ+90xm#7$xLk2-jd3mC zLJ{Fy=|lHS$mC049q1K170*tb94!l)Ibdn^zcMI%()781f+x0wxE5*f&Gtxq=L@V^ z1~ zx|TF7oBwwT>vC`yp2S5>94DJSi#X$atAI zpOnvKR^AAgfJ0Twv{v;V7UGt;E%=|nhntC8us&8B&E~c-YWVM1?)W2miE_v@wm2

lx@aeo6jR>ev6Zgj`YS_$aXN;fLHrnyOo>~X&Ds2@?rb^FSZujm00X->@4SOE z-;O@_{au~?w$cK;gLy(L#kpL~Pd0{h?N+$&88@6%&%v}{Z)cF@-Qv`>Jy{VF@yM*?zf97YRh;F1 zZN-oJD3m=V#jrlQXKKW;Cp4FDgdQ%0QY(skier`dMnzj26;Y>h2Nm1ES?gQo&N+5* zY|7dNQ)_YVwYPpllNLnc$eU}esYI>1$+yg9WpG{dWs~D@{@uz?JrUgOI9x)KJ~qw` z=gd7$*8#e+!6_d;!K9LG2)D%@*1KKOTzoIU1o?r(jiR)~7!;IKFr=sdE$e+x7ztSO z>Wt2A9bK}04){A=Bqo7iZ zc8AWP21EOD|3SPX90EcIv&+?iEUaGn+mAiz$L~t_mvWAW$Q;_dMJ3#)5g`Ke^;E~R zmfy?-;g--N)r5nC3^;^1TdsU(C-^Rh(yp=MMlB)JfFsQ9De-m5?sd&reI84{rOkau z$6^ZdGZsIgtw-s}{ju1?bbVC8(trN}>g=K8!TRapn2>!=BWrF!rM$AOY`EeM3QDJc zqEtm~jD|iv)_<=@Hm<_dn33Vz-Gx&pp4(VQt>KRalB_C~0xn^^ple$X^H8yH5fNRO zC(Vh|K?}mLow>a9I!;xil6Q@=9|m@DFN7K~@|(M1SdNdGt;RoehdeE(#@xdl6mXx~ z*?R{5sB6-Syu-K3VwC9wA0w)puXkdEz^%}d@)HlAj?+1-5V~P`ovW8}1S}l$qvcGe z)}zMh5hqL)wvVX3V0txUvYMX1uFKmVx+%?WHmh0Q)0T-muP1Na6AZo$oDp9k;K?yX znRc&inJS6bLM^ch!HEv`!$bVcqHqkK8TazZwDJsa=K+y7ifhl2zbNvzWBz+=!LckJ z1c?t|=jI^Y%)M7-b^S{AV4Mq{^WoTCfs8yATs)kwg%R9qG*VA>0}iXQuC@o?Gnu1U z9Y(){UA)x#XvBcIGG-?P&Y=eLO20%DN_U56V^}TZNzDM^bEAr8ixhL;mFM)dHxHNH z0a6CdCvZ(i_wP2UCr95dmLe5|3u}okm7lH$<1MOxuuYBJ8OpvL0KL!dXHcdmK)h?= zWEo{PGQ4+OxLESHsJB-)?yZbGoNusNtTz|lo`SvUDzcPIQmBRi@;sa&IVGJTUbZ3| zXh_Rn-fni&9mO`kwW25Jv0%M_tNJ+luplS7Mj0Z{f;KAxtHRpzIYIKk8G1@-u8|;Z zg4G%uXKaWIM~s9TrP@uS7=GoG1s&B=>2fUL>?*-Nrr^2@vMp27Qybop*CR3HLDa5{ zt3zuSTb&e%!@-;N6W3`ZLJ1t5rV*cTN^(L=L?NT%10BCVxWw z(-cIqd{yD)NsTFPBbM{ zSj9^MPjRhWXuqn#mrfuqXq+2+7pioTrDbDcAYQuLzfG;WaUu3lJ3ZFSzfpVWaPmnA zG_*-q=;x4~MzB{~L~su*38@S*m{lbMrf^M{DL68qM7V4O;YZ*^^h-9vE078e3zcgJ zdGdOUp>W+j$O+PL^Jlutk65@l!Mw{?bO8oh;pRgLAo^G!PzjvtF=wNI9 zgkTSdh7DBVt850xN?)fc!G0^JdItY+0_&7?DC8((r1&|667J3Zz6pd!d;{K(2@V&P z6ut;j8H;q%EqD};ly6VKVAnX@6H$qSgPwKfh+2MEIPc%w5MXNd3HU&KA}K^c22n}( zc1@KX_RaKA=#@74Om0})9L}d9o5qLrg;EIu>s4UX08EOXCzekWoy4k6wCo8e8YZga z!x;_r*EnYZ(i7tOQo&kANrF50Slvbnt-1j+8H;%H^u6PzKT&b20MlHHK{M@14s?_EL8se2QI)rgBB`Jxo zK28xw!A0p*B-ev0q#@^=4vM7aqcPs7BnifO>@5#5@8gbM+b)|EVX~>A6?T!4Zy}-8 zYYR=QURis`u|}+1>t2J!Jx#SPr3A7wsH8L3!cN+-R16<_fO-{;E&VZH`%)TUx1<;E z07wFSfJJdce@FvA_q6#(hVUPo-2B>KX2M3r zZD75-Ineo}=xgLh_gZYjFPob--!_@j?m0>TDo_m7L^Dv}hCZ4}^@;l&bvthj%iaPq z1T{yr?l?_bDzKE4SZHsw3JO$Bpe*qtdY9MN*_ud*l4!22SjgKM&LN`!GFe`m_1k~j6_?EV4C#tm7vyq z?v$S(aQI!$j?w9D{7eL|=TD;|Qt_X4R@9vNH>RoN;WFkYeosFi)A zEyLp1q2WntYpg~}lYADssQuPGHp#Y^vsa{4I}SF7{VCQg#I%$rrf3mNh_ zpirB1b=gwW8cA6#<19Ts#}p6cKSR(@605_SE5g~QcsLjU2!Zfbvhy7_M8y8kqP_ET zw#~~Byw8D%{aYb;HfQ?R5cocafGkkXZ&QO0f12s>m7>-l;m;5h+}`i0r13@l48h^9 zd*%chYGf$Yfg>aaFE}FDB<*U1eD4@&XIOD|9Y{rq_Q>8?(jO>DoP{ihjWo`2=2FjZ$K;P zeGY*ue~epn*<8ZUR=}vfP4{D}y8{|o`~U-pCN+3?@SApSo* z1_tNv3IARUe$y5H(GEuc!(&hh^%&X$xE4~O0P+g|Xa_a`jnu)=PTtVL;ip(i`{MCC z8a-31gZN>wbs6N|AEpn*BYITeRz~lTmGv;h*L$VJ$Jr8k0t!)>Yss1TvPnrKV=ypy zx2V5@rEF4Z-o2`IBH{AEdR(3%96_d76JlXbcjr24+TMC<#D?O6g(nb*vI{}aS{=Pc zAa)um4ofc9nHVL#C~3FZx}?Q?KeY1TA7eFs7xJhO=EhxMPt%FsbnnP(SuMGXEV%0) zd02XXfL_}?KeUDzerIQNKHtA9UL;8x9w%DC{Gdp283_)(Jjv4T(N8>Wc2K;)`p^TR zRNbMhl`~>bLl{gyC8I+n{H|t%wl^JU-B6A40_M(j53vq~|9`sv8U9=U|EKH!{eSEK|8)H` z{@M-w+PAMSM0>3T#JeFs9?Bl3KL?E~)b z?x#0(syU?6=Y&#&ER@W0Xj}g{(&IZK$A2!{68X%(aX)3sOR2!Bm7_U|%cEfCT$Nx;T2fz$Gdo_q zsoH46vj)R*$`t-ppH8&Sbf6H;YWpCR7c0o1YJ;9v>==k%hm?Fl&?>usRAEF}oZjUIXMVy4X>8 zr%B_f+ow0d9*KoX*jL~*!4J86Fsj=uRj1yP_ElJIF70dzAXMG+r5}YT^VJ8Uguw7T zefwKlK`C!!kOe-0v_gTx(W7{{Ad6Q}X~fk~#ecxRc}HNy%P6T%j+BecIAT7!!;d(O zW;P!|lBE~`N~T{ADa1-#URcgvS5rXsygqO zsp0ylZ?sKVBfSZM*IU%LE8wRWAWa23KJ3|=0dyPtqNX2PWC>ivaoCrNqw1UkDTE6K zgt1Xlr>nlPF?HTiftTLUnWbWVFwaNGP__>=(+D(6k8d`AzdCxxyW6!oD>KiSv-`jh z1=qv*wZ&}HdZ(kvlU*`wQ|L{fso=fm0n%FH5rT!jU8`(mz(dJa)2Ii|^&%~g6fN0q zSv;zDG}6OO&0ssAUjMk`dJRMkNJIjC1+XS~Meynyw!v-&pg$}_{;~StpY{L8Z*_ia z!0oq{gSLXJjiJ5f&kiCZ{;z;~MLMDjz^f$y7j1yA%%6@afZp|oi21D8yeufic3>_C zc!?_DL;(3we>(0#|Hmys&)VAjcklYIn}YwT>?=3G2l?N(2!DAJFE@AoMY@CjpOg3( z%ZA^b&CBg)e^D|4hBm)3et6b!UY^TKgZ5vPPKw`Bo)y8Dl$R#bzbFROzok4|O24GM zG@$)Ov3mDg%CjBqOUg?J%3qXP#@|w&{U~2jUK;-WqJ**hmhx=>_mc9`MC=#E1E5Cy zrjDL1#a>cg8WsJbXz~1(@@!l5lJe3T@`MPDXa{wm6<`$y52 zDVHw^FXv)@5fp4+2I03eGcSQJr#5~8mF)fk_)Fb=34A$G@C&GF{};et(*`erFJ<>% zKn;h#0KWSr!oMWG6tRC1bsYbS_`iSXmy+NwqJh&h@r5A#TY>oHY5oP&h^b_&r;UE0rmJh&}V(*-++4k9q98-_e - + diff --git a/ZR.Model/ZR.Model.csproj b/ZR.Model/ZR.Model.csproj index 67a5244..1c93e57 100644 --- a/ZR.Model/ZR.Model.csproj +++ b/ZR.Model/ZR.Model.csproj @@ -10,7 +10,7 @@ - + diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index 4ddadc4..b66ca11 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -15,6 +15,6 @@ - + diff --git a/ZR.Service/System/SeedDataService.cs b/ZR.Service/System/SeedDataService.cs new file mode 100644 index 0000000..4cffdc4 --- /dev/null +++ b/ZR.Service/System/SeedDataService.cs @@ -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 + { + ///

+ /// 初始化用户数据 + /// + /// + /// + public (string, object, object) InitUserData(List 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); + } + + /// + /// 菜单数据 + /// + /// + /// + public (string, object, object) InitMenuData(List 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); + } + /// + /// 角色菜单数据 + /// + /// + /// + public (string, object, object) InitRoleMenuData(List 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); + } + /// + /// 初始化部门数据 + /// + /// + /// + public (string, object, object) InitDeptData(List 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 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 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 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); + } + + /// + /// 系统配置 + /// + /// + /// + public (string, object, object) InitConfigData(List 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); + } + + /// + /// 字典 + /// + /// + /// + public (string, object, object) InitDictType(List 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); + } + + /// + /// 字典数据 + /// + /// + /// + public (string, object, object) InitDictData(List 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); + } + + /// + /// 文章目录 + /// + /// + /// + public (string, object, object) InitArticleCategoryData(List 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); + } + + /// + /// 任务 + /// + /// + /// + public (string, object, object) InitTaskData(List 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); + } + } +}