From b76db481129d755f7b89c994c2b5781532844226 Mon Sep 17 00:00:00 2001 From: wenjianzhang Date: Sat, 22 Jan 2022 21:49:11 +0800 Subject: [PATCH 1/7] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E9=92=88=E5=AF=B9sqlite3=E7=9A=84=E4=BA=8B=E5=8A=A1=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/service/sys_role.go | 100 ++++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/app/admin/service/sys_role.go b/app/admin/service/sys_role.go index ab374822..d5879a3d 100644 --- a/app/admin/service/sys_role.go +++ b/app/admin/service/sys_role.go @@ -2,6 +2,7 @@ package service import ( "errors" + "github.com/go-admin-team/go-admin-core/sdk/config" "gorm.io/gorm/clause" "github.com/casbin/casbin/v2" @@ -71,14 +72,17 @@ func (e *SysRole) Insert(c *dto.SysRoleInsertReq, cb *casbin.SyncedEnforcer) err } c.SysMenu = dataMenu c.Generate(&data) - tx := e.Orm.Begin() - defer func() { - if err != nil { - tx.Rollback() - } else { - tx.Commit() - } - }() + tx := e.Orm + if config.DatabaseConfig.Driver != "sqlite3" { + tx := e.Orm.Begin() + defer func() { + if err != nil { + tx.Rollback() + } else { + tx.Commit() + } + }() + } err = tx.Create(&data).Error if err != nil { @@ -108,14 +112,17 @@ func (e *SysRole) Insert(c *dto.SysRoleInsertReq, cb *casbin.SyncedEnforcer) err // Update 修改SysRole对象 func (e *SysRole) Update(c *dto.SysRoleUpdateReq, cb *casbin.SyncedEnforcer) error { var err error - tx := e.Orm.Debug().Begin() - defer func() { - if err != nil { - tx.Rollback() - } else { - tx.Commit() - } - }() + tx := e.Orm + if config.DatabaseConfig.Driver != "sqlite3" { + tx := e.Orm.Begin() + defer func() { + if err != nil { + tx.Rollback() + } else { + tx.Commit() + } + }() + } var model = models.SysRole{} var mlist = make([]models.SysMenu, 0) tx.Preload("SysMenu").First(&model, c.GetId()) @@ -142,7 +149,7 @@ func (e *SysRole) Update(c *dto.SysRoleUpdateReq, cb *casbin.SyncedEnforcer) err e.Log.Errorf("delete policy error:%s", err) return err } - mp:=make(map [string] interface{} ,0) + mp := make(map[string]interface{}, 0) polices := make([][]string, 0) for _, menu := range mlist { for _, api := range menu.SysApi { @@ -164,14 +171,17 @@ func (e *SysRole) Update(c *dto.SysRoleUpdateReq, cb *casbin.SyncedEnforcer) err // Remove 删除SysRole func (e *SysRole) Remove(c *dto.SysRoleDeleteReq) error { var err error - tx := e.Orm.Begin() - defer func() { - if err != nil { - tx.Rollback() - } else { - tx.Commit() - } - }() + tx := e.Orm + if config.DatabaseConfig.Driver != "sqlite3" { + tx := e.Orm.Begin() + defer func() { + if err != nil { + tx.Rollback() + } else { + tx.Commit() + } + }() + } var model = models.SysRole{} tx.Preload("SysMenu").Preload("SysDept").First(&model, c.GetId()) db := tx.Select(clause.Associations).Delete(&model) @@ -203,14 +213,17 @@ func (e *SysRole) GetRoleMenuId(roleId int) ([]int, error) { func (e *SysRole) UpdateDataScope(c *dto.RoleDataScopeReq) *SysRole { var err error - tx := e.Orm.Begin() - defer func() { - if err != nil { - tx.Rollback() - } else { - tx.Commit() - } - }() + tx := e.Orm + if config.DatabaseConfig.Driver != "sqlite3" { + tx := e.Orm.Begin() + defer func() { + if err != nil { + tx.Rollback() + } else { + tx.Commit() + } + }() + } var dlist = make([]models.SysDept, 0) var model = models.SysRole{} tx.Preload("SysDept").First(&model, c.RoleId) @@ -239,14 +252,17 @@ func (e *SysRole) UpdateDataScope(c *dto.RoleDataScopeReq) *SysRole { // UpdateStatus 修改SysRole对象status func (e *SysRole) UpdateStatus(c *dto.UpdateStatusReq) error { var err error - tx := e.Orm.Debug().Begin() - defer func() { - if err != nil { - tx.Rollback() - } else { - tx.Commit() - } - }() + tx := e.Orm + if config.DatabaseConfig.Driver != "sqlite3" { + tx := e.Orm.Begin() + defer func() { + if err != nil { + tx.Rollback() + } else { + tx.Commit() + } + }() + } var model = models.SysRole{} tx.First(&model, c.GetId()) c.Generate(&model) @@ -299,4 +315,4 @@ func (e *SysRole) GetById(roleId int) ([]string, error) { permissions = append(permissions, l[i].Permission) } return permissions, nil -} \ No newline at end of file +} From 26ee7b7985ac96b102a485d1aeabba2d40c20e23 Mon Sep 17 00:00:00 2001 From: wenjianzhang Date: Sat, 22 Jan 2022 21:49:42 +0800 Subject: [PATCH 2/7] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=E6=B8=85=E7=A9=BAs?= =?UTF-8?q?qlite=E6=95=B0=E6=8D=AE=E5=BA=93=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go-admin-db.db | Bin 319488 -> 335872 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/go-admin-db.db b/go-admin-db.db index b09e1fa7fc52aa399bcf18864121544710679fea..5152f46f01355ce66606ca35ebb7339afcce872c 100644 GIT binary patch literal 335872 zcmeFa31A%6m8e~UA?!=5?PiV2XELi;4CAx)g`%6tGnrL z$rcl0H^yLaz$PpP0$~YTHbX+f<`Cxp-^@QRnSYWulgvx<{_ME5B$Itl=AZY@xwZEu z$#@7(jzOoZ@2#qH>bvJIr|zxlomX#82z`&_jUN&0e^1z zv%%kc;jaPylz%2=qsHggIrmk^8)1if{uj90I{r`mZ~0#||4q{`nr@lrv^{I{Tff-& z_l?^c{#U~ulb3s`#<}!a`_8kpUb)g#SdvJ^#r=u+{=VFJu5Tcn934sJ`bIPHSYGVg zGpE6-P)!XCTv~_*Yb>(}&vfu{}vq zx1VnFJXu$7*SgI;#*;Z$_e)mxCF1?gL@F;1iP`pkb~0m#XKw4J3VKk8y z)w8hOa$;6B1QNt}LjN_H$mze{Fe+xp6)o(G!OXq+k)$CZo*2j*5^`zOrc%?N9?egU zj)>XBKzqMts+yD=&4^jqLv(wN=CByc({%vUQzTN-)v5{7)v90R%TvDt!B|$MIyl@X zm9oA>4T*gN$yhF@@G)j(VgtjmA+>-ZGa1_>CYj4fg{mg$&kv;tH6h*?18i6)@`(|# zUH0eF)VP=w%lDPe0Ch>nU8@gjS#002X-n6R-Oj6eb{kyWGB!R^lHQY~l+vaL9k$P~ zTPE2z0FE}4)@r)!yN3Nn((zHKcltx+q`_=Dl{aMU8OA`LAdB$YRd=?tn+t7JYaVp9=Ut07Cs#In#Dm#6Cu!yVOD z$GN^|L)Wg&z0Sc{G6&UhAUg_;s@!a-nfdG}9D(h7i(Yj0Tu$ zNCXVVlw^7+F%V126;A$$PdzzS11Zg3xw@4epj9_12U-^OWYDlQ)ljNhuPJS=sZ>3nf>JHd zH8!tOD=HhV!PT@j)zqpTQ9-RP({*#q#@d#{c7|O$zqU26yls)OLEB;&<;dnr6=N)x z9oQSot`>X|7Y=P$nGK83&s5AAizP?F<&`{NFsL0Rjdhf)PylkEMzDrNOhMH$t zNtE@oj&jCsPWFRR@0JRxG*!n@^Le8$10I)a*lKBwE;AMEhMp=eW}s0~%tG9lVyj%N z#+|h?#dM?h4qK`!Q{7EbX04%2-MLJemg7p9Ev;+e$`+JgnFdGEW~re~+q+DiF3WZE zyBaO6%a)mL8Bo0y2`C!O<(|p_fuAyf24|IR5v0uRtn_^mn+&}Zr!rV#4-2D-H?P( zwGX=XH2cm%K2=qpfTgT{#hBBI5o4jD&eG~%V=9CVJ~$A|?MbBivM>n2<8)u^Q>Y5g-CYfCvzQ zzbXRD&$sdm+m_hv_Do*P=16Lv;*G4Wp{A5@9K4) z2fKAt+|AROh~pj$YVNVIr`I^?b{T`WB97aY!OqV z6_0T`Dq4c~3~+xq>oPm+(YCPCMQ`7>vv+wjW|u*OdB#x*nzN~*2HZiRF|XzxXoIby z4R{W;;X*5BSA+!zFSkJMnzCGo&pV)mVTTLN6%WU=L+;8($n7Y*KscE|#$SCMID}}47Q>SFV<dD8c$Lra_xx2=a=KU|Km>>Y5g-CYfCvx)B0vQG`UtGB z$ziLhO0a+aD%gVs`{jG+qy3hPVLul7mG379xaZBV3&d;-0&o@<@0XvYYQR6g#z9*k zdaW4o^Hq$|h5U}?2nVCka$_(AwO4_M5wjEzH&;=Dd&p3lX4nM-*(!G6SsO+_a_;Jx;F|03qL{nc434Yp17@r9|9|4Y^w(Fh>57Q}5g-CYfCvx)B0vO)01+Sp zM1TmKV+6c)^{ciB!Dv*7dP5O^C>Zs5eZCH_(BbnreL|-Y>GTKO;Yc_TiLCKPI=$X{ zQ$5Ei^Z)#R@IN}ou9(av0z`la5CI}U1c(3;AOb{y2oM1xKm^JNET~^)GTa}itFPy5 z>iqxR{7T2?9UJZcR(2pI5CI}U1c(3;AOb{y2oM1xKm>@u+m%3O9?#j9wV7I1x@k&MH*K_*SSBrOiWa{&`OuTx$K9 zI=sOS!S58JoxxD2KkSYQeknNwIZh$m>4pCz?x5G7w1LK@%dMc%q-l(LiYK3#c=*og zL(kS$RyS*HL3cFjPg*N!i+HA9KR$Wtb8lLk5W)%bfY9lWy2F8R(!#XajMoXY!f5C+;|SR#1jI0|9q5>Y5g-CYfCvx)B0vO)01-HM2sG5&F#fk;{BOhf--hwOjpF}vrwGYXB0vO) z01+SpM1Tko0U|&IhyW2F0y7ez_>Y5g-CYfCvx)B0vQGY6&#d zTQUB(R*nBz>`(9i`>S;jx^N;u1c(3;AOb{y2oM1xKm>>Y5%`NBfG_-m_@Bf0pTqfo z4(I=MzyJ4s$H)I7E|e~U2oM1xKm>>Y5g-CYfCvx)B0vPrZ2|?MZXvg@(70r!&2HzH z+iZ5;YTdGh%Zs`ECBE1tg7=aE@A_PHZ&Voe?aBJ1f&K4}?%1|@bg$<xlpnAOb{y2oM1xKm>>Y5g-CY zfCvzQ+60u}|Es+h>Y5g-CYfCvx)B0vO)01+Sp=Q06`|Ig*pBio4p5g-CY zfCvx)B0vO)01+SpM1Tm)jsV5~v*Sd25dk7V1c(3;AOb{y2oM1xKm>>Y5jd9#(DVQ2 za_N!nM1Tko0U|&IhyW2F0z`la5CI}U1ZGEo=Kp8MiS{A_M1Tko0U|&IhyW2F0z`la z5CI}^E)$^m|6DFTvYiMJ0U|&IhyW2F0z`la5CI}U1c<=w2-vM(gD;A{7_+C*u42a^tzafpl_o zBn6*YF_stm_KfQi&+p#R)79JK+_ZIl&vnlJs)zJDw{3Oy>kjN+-LIan-{trgH(p)w zXeM5!xTUsY^^i)6wM^Hoo&}cHl`BmjYRkv=Bt@Npy3O-sUA!U>nb@bo3( z{mw)xFAj;>_I`FUW0JgEDmEhaJM-fHe7kbwKzd|EOyx^b^WzzH$Dwpz$=AVzm;{B= zd9Kf;Q+8xnG9)TUC?pB~LmjgE-f#6Ww$W~!Q$8_kGW*)?^0j^?l! z%hPoL)Ker<($%U7($%V8<;zpQ1Ho8Ur8+p=CzZ0kL=B031Ibt}r|>amWnu%vu_3j9 zAu}1CZ1!nRs6euwk9ZCq~5fe#xIpQ{!S%%!{R|TBXytYxO}*+rDGd zmaZMUomchjHn_OUH8$VUdgY4JHbSaBeVR_JK2qX>$~Cp@2(6|{S3=&*f;-7?9(0dTaTv{ut)-!<$vl8%o;z0)5m zCkIx)46KQAxA*sAs zOlMGqS|#&Y5u1v*S`Ar3CYFWPxIA5N81AUHI?nYy8@hIF?sX2vk~yf31KCk%ROMzv z&CF*G~2Ln2@>rXEN5!H^uYG*wqKbq$eLb2PIx$5zvfjf?88E*J*X{XgY(d?1|~ObnF{KQPT+xw@4e zpj9_12U-@*QdD|%Ri&!+Sofr(n`0w4t=bV4)ao)( zZyei}!*+&UJHNIyue@!Mu|eBn80E<3N)=-)mL1p|%dQrD5f=_^SeXrrFg~c5GZssZ zg3Bv;zF<&0N*e1ZS)l;rK#gDxiI{?_Wyn!#l#(dxSH`Nk>Z0LSJyG_9Qty`bEKSvM z)O_CP%Yet_8n#+mqsvSMyP>Cwiy3HC6tfUFrr0VMt8r(oOflW)y~CEO%GB#slv!&i zQ+F;?rscR&W=rc@xUvQ1SEj*Hv{`Cs)AlY?r^|BP{H{hz>#}90TLx5bMFNTjbGfH7 zK;Wkgput(?X5Em+_R7StQI$FpmY{FwOGl_;EG}yO(B5=P?K@y_m`Ez;$>n4DQGMgB z7W`Z5j|v8tt58>OXyi9q7CNOEvrl%bD!J|$pnOx(6y)8cNS}^s`>R)3jgbhA85Xm{r z&_3pCAM>}51=`1gF0kZ*)-_-Tbl*zcsGY0iJay$rbp|3-Nsq#G%&Tq*>XuL4@~c|` zbt@=sxoG~s^qvNNCjvx(2oM1xKm>>Y5g-CYfCvx)BJh_-z~1mIcb;hz*Yv;V-Dvwy zYt-^3%lphfYy4^B;l>Lap0Ar|5KWu-1CIY}-rw{=?o`v-=F8!L@_!A_n(DgYX3+}6 zO%|LzNcDj<-p5pvFOlzalq?2N^R>gYyMAhBKNxZsyF;~0y`_>(!<-V{!@?UX>X+5! zw^P(SyqUtjl;7vmrx|RFoc+hFg)w9W%*T zelVRKDNUD7FWt^V35Jbiv}r5jNk(!*rN>M6IZN-HSH7P<%X^~6vI3kg*UcYTW@+_! zOovygg#(KlM*Cu!gnA3mkl-vYBtt$H6qYJWWWrEvn1$!oCmPKvJGh;lPd>=i-o0(> z&fXneo3{2k`(b8Z-CePmrNEbd=Z0-NdNys`D$l&@G`pNTdN%az=-Jxcvr}4xg8MTE zo8|fO!YU~+Ty?n`cG&8E1&hnob&`nv9xrq z1gU8A05XH+m0K6%zFNZ~!O_mr?;2WaX$^xeo1sy|<5f?TRb5nFmAY%GCN0A?bU`&m z>RgJfXjyed>aL}Vv3@@%U`^7v}Ef2(jDN8G} zHtwv!#&oD%>S_92!>v`7sn#mWE~ueQ-MLJemg7n-sx;NcjMX42+LqMNrtMv(PM766 zv~D4rYP6 z)_#p7a{76wO4EC(G)x2y>;>mm7eMTR3D`I+&=}dHXo4j$8JNb?*58#(`HdxV2^at< zyR(UCbq$}oy5nN+#klZ8ULg6_PVy-Q;Bwt~zNNJb)^9E|v~bG$O|7`GROQq~m0hR& z7|na+Jg6Mn8T(!PT3}t+pJVMP^dd*AD^{zN?wTvF9gV(YrpZZllqvOS>Q|Tzl!nU( zR$5xiht06ICmUnKW`i+m@;fRQftuf^9;TInnhB+#WxMvBSE~@z9cN^rct<7GTJfvr z>vtWlznBe|Z|_l?57k7}rhaKFZ%EXA|JwfU<}Wt$O#|~@owvZ2vA$^Sv^-({srkmn7aJQI4mFtS zZ>sx!-9FQ=Oet=fi1`63%)@sUKT69}w_$i9=UvW~3w3O=t-=~)8|elTJ{H6n;c*m&NCMih@cHvQm}Q_p;O z>h{l8GQtN&gf$~}z&(aeaP{<<7+^+tJG_AoL2wGe&Y%wzy1ia+btCpvHsbW_CnxTG zrM3~F5+fw%n7a{NA*LF^ibEkG6-R9&f+a?<;+V4yA1w5%CV2FPF>(L%#V0;m+k`-g z32@tE&IW)x^r;q9a))CN7w^2Uk~;|C4t~voEimYn-N8R+ci;+tqZ(1EBx)MrD=~tV z#GGw7P_S7iwDIEwKQ6Va^5=+=c5FaZB4; z{cXHGTxYdk2^E61Purlo-kctqxaZE(uRT0*;;G{6CvwBsIDOsl26cyPpWWVt8^F}dC$2qduO3{5$9=J5d@2)U~!jX@y_ua7@SCf*b+-Y z*E;#&sp4z*Nw$NTiBuv5_wjU=u*8xp@M%||oUQy4v;)uR8g3};T*S4swJco5Lx*6s zuTVM#&?uQZdGhheUL!*hf=!uJC9r<)Rne!;Ndp#leUqD+gtB|dg zU#-5(8^nGVdO5G(9S8+)ylfHI+O~W}E0|@q+Lr)I)}8jE=HeF)7LVOseCes;;g>XX zv@JAf3s|!`Hl7~MOP%=~bQi*F(fyZS4&@jHCLOwRTn`V8t%p^Xa!G#rMDg&;P?!^U zo)qJw(zsYI8hpIWgU?fVI&pJTTpDyl4MnP)&QPf8k#S+J!;p(Q7jX;Qmamj8_b8U5 zo+2|=a=VJgvO!U#%)VZD^sn4LR;riH+1=g|UBsDTU*EX}|(Kssm7z)lj#u)$C~*kB~Ko@{4ksBi9uMyeW$14YSDX>2JOiVxxF48@R3 zGBji`l#Md6!PZw{wlgzy?juiE01aI#5w#hJ;$TuTR2uTgM8$Ll)+Os~#ajoGt;Pn2 z4Mt0CWjixl&!02Yc0by>qLQsR(vfXtU9twXgT?SVbMX$7WG-uS)b^1LmP*ZKJ2P`H znzOk!Hw+!txa`aMC2SC^BHE$P$qw-j;epcvw z-cG;JDFobpZ?MqNq1eJIjvC}h1F0Eo32xZFtJi1<4yNj7g~VV+W4mfbg;;9_GXfhn z_LP{xhL!cR@_K_E4QmuT7P3*DQZ&*Ce+E1J8@6xTSz-tb?ds>v#zPEdwAD+k#FFyn z42xTG=*fGZojCH6WE0+#(77`EitVo7&`2;>DfMKwFZ1L%+c{Q;z3GZ23$Zt~vEG!8 zK)W#ZmAZJzJeZQ{01M$63E4=nP3uWZ^a`Cph<}6bP&lfKNFhewUKj_tt$2T1R;`k@W zKR8}@yyAGl@oC31j>jDzaop!P=D6K)$Z=Dpy9bm;1c(3;AOb{y2oM1xKm>>Y5g-ER zJb}h~uCDGPCNE@i36m{ME?{y#O4B!({2xqymC3I#`Oi%LzfArUlXfPpOq!W&M9KY$ z$v-mr2PS{dRZOn$AQo-kkP!cag!msM#Qz{6{s#&1KS+rGK|=fw z65@Z55dVXO_#Y(1{~#g$2MO^%NQnPILi`UB;(w43|AU11A0)*8AR+z-3GqKji2p%C z{0|c1e~=LWgM|1WB*gzVjQ?#I|JyMBw_*Hm!}#BZ@xKk@e;daCHjMvm82{Ta{>Y5g-CY zfC!u^0gPsG{vV_o|65u74-(>kkmq##Z)Nd6NQnPILi`W%4B~${3gUl|5dVXO_}^-b z|E(DRTQUB(V*GE#_}_~0zZK(uE5`p;jQ_0||64Ksw_^NnHPz{!|KB1%15o6D+$7HX z#=LIZaqF+G{gy9SEasaVf796A@I?LpuD`bKv!*|puHimgqtFZUmNat%_6~c?mMxss zI+X5UPqujAF&z1!1$^t28=fe`XRX{D#k{WamfQN`rFk4_vp4tk0& zKRt2(ZKqGYs3?W^P~c`h4KE-NJ)P{KrcLpkyLU=fu$K)8ezYPO?ezNG{$N;rs>1Jt zr%r-?eEdHe4i_$7+02PuJ+roPdsZAvi2GFYrk}WF>X{?c2OpYx{kBAW>aLfH$L`mg znUVINjgdmIqLKb!A#kysD_FLLXJzH;OQE=W@zsVdEHLFuPA<6O;TPa3m8r*{l^(Tx zt;V@p@7`=LV3jyt&8M^WghlRpL7d3O^LUhh1GG{edD3y7c zh0GmuGZ^TNMk+B3`@IFvGHC5aJ8BzPskPI;{^az_M<q5(>DbOheBG{U zZKc<%e*#T=F$)+|x3rmywYAM2-*)gM)u58ngnpx%5rR9abFva5z6+YUo4T)>g%R@O z<#HpaJRaVaOsW+@dW?JGu~*=kbNE3sW9yBNj(4z!&ZQq0gopW(P>ZV-qu_?Rt2$nZ z(JP>vjrDZT&1f)FHjq6OFBRwjv_0i^>K=~A#;H2kaCI9OENnk_|cJwmD5;qRBGVU#ERSf=|L7;|;8Z8!dOsBnFH zPvvrjcNIWh?Lzfc?jd|apuq9XT;Fon4AyMIAJHx`$H+u7qdE{@pkgN_grbG>ngB?! ztQVaDNb%Og#gng8Wdd(PftS0%5Ttt3FSxxy?VVgY&+)<|^OkwQrER8CD&rzqRfa~k zraB%_sWu6!C1H0o6e_gX5Kq}SXeK;IZUxt^jz|6>+**9R&?{B8$`>kFt;okeSHCGT zv %=2QdZbw|S5kUfGSPNQu;p+#ponTEKXHM}Y^q`Fapnb%StUGRyV<&-0(;pXMLuABHyo ze3-wJKf)j4KM3yt$n$CbdS2xF;Vl5y@K^Jj`HlQKcn?5?_w#Pv#a{w%0=R%*$j|4S zcr&~U;6EI{bNtfr6UP+14dA~L&xyvxz;xWW;2_#GXNRgM*orH+LT-eGgp z+y8(2@9e*@|JYu%f6x9c``7IMZ2w35|7AaA|GfP<`^W7cvp-@#VZYmc)PC50z&>uz z*+&2a{UZWIfCvx)B0vO)01+SpM1TmKZ31le_G3&w!Q|siKE~vuOn#KfN0@w=$&WDk z5R(rw`2dqAn7p6K`bk0OU6i{b_p85C(0DHJ0pk|>5z zT#q7wVlRpz6oV*46fqS2DEd&m55;>?ya&Z@6xX4+7R5CvcA?mT;%XGzQEW!B3B|im ztVhv}VjYSrQNT)jD=xAxn`94TS_nlDg%^bfMWyNXOEJTRVl|3YDBgjh4aFrWR-(8V z#R?Qo6w6Uugkl+r3sEdZaRG`YC>En=MX?CQLKO2+@F<#4%tK*AVMSp>Y5g-CYfCvx)B0vO)01#l2GsXWD|5N-=^Z(Q$5&RRg`G1fw{|^%8|3Sk1KS-GW2MP24AYuL=B+UPVg!zAvF#it{ z=Kn#${69#T{|5>4{~%%hA0*8GgM|5ikTCxb66XIw!u&r-nEwX}^Zy`W{vRaF|AU12 ze~>W$4-)48LBjk$NSOZz3G@FTVg4T^%>Q#Z|Igw4KZo=G9M1o9IRDS#{6B~D{~XT$ zb2$Ic;ru^`^Zy*q|8qG1&*A((hx7j&&i`{b|Igw4KZo=G9M1o9IRDS#{6B~D{~XT$ zb2$Ic;ru^`^Zy*q|8qG1&*A((hx7j&&i`{b|Igw4KZo=G9M1o9IRDS#{6B~D{~XT$ zb2$Ic;ru^`^Zy*q|8qG1&*A*P{HA@F|1W#VKFt4fIRDS#{6B~D{~XT$SAN|-%>Q#Z z|Igw4KZo=G9M1o9IRDS#{6B~D{~XT$b2$Ic;ru^`^Zy*q|8qG1&*A((hx7j&&i`{b z|Igw4KZo=G9M1o9IRDS#{6B~D{~XT$b2$Ic;ru^`^Zy*q|8qG1&zTyP=l}WN^FQaO z`5*A#;{TQZGXH<`r}!86Pw`K}ivN3Iz5ikUCVrGp@q_%|z&ih}u*&~R_^m%LznXXQ zi(z%YmFFD4cl;dI^?%>-O~?Om{C8N<|FYwG$Fq*dU@iY~#}UUt$9`DFzt_5dk7V1c(3;AOb{y2oM1xKm^_r0_N^| zQ=OZ8*t`xtJGc|(F8Ex--EV#;`+k@CO89K&?lfNkpY`0Gmdoqw;H`Yzhb))j#zovw z%Uamre$U-*>BNn%!$uUdTDT*Y2yQIkZnK1OV?JzzaGy80gXUm;or(ML0doL9zxP42 zA3uM0li7!#lQ)_L{QTLt*^8gQ+HdyY=bv(BH-7#hYwp0$AEnIg`1zd?^BVm8ZPI)x ze*SRS>|&qSn^)uK#E^Lve*SdO{0{v5rD$%0&$^cPnJ>Zb-+zyJC4NrtHeZaN-@eYg z0zZFqt=Wm6#U1A5`1zBo%@^V4FSeVP;pdMoGhc|GQ)?TS)|*VxwdM=(>u*EmCHVR4 zVB=y)z9MLD#jii~m>026w|OD^>@c5?pFe1CY=PYZ?dJ3F>vvq{1^D^hRp$8s-4AzM zc*ypzGCSB&%glECoVd{3jGw2MHa0==cYICx09NZoZ3;Ky-i1aWVg(W12tic-*m( zw>!SVH#qW+cK*BkCmg@z|IP6U$9Dej9e?6aIbLw==2tns&tK%Y)p3RW=Z<0iXO2B^ z2f*R@f}_FyZTrMqQWZ!E5g-CYfCvx)B0vO)01+SpMBr^qz}jG{GePv;%{Cx>U&l5e ze(#b~?s_NNfC&CdwgDmh6}E;thT zf=E6r?FXTJ$l6e6!dN~iZG7*80cqoRH~FQF$s2vr#?QtDY2#P>z0$^?avo{p4_UXg z@uO6SwDFyhc4_0c$u-i(4~H+6H?DU{8xupTrH!8su97x>DZYbkKy2S8rF{QAmq;7a zyH`pZ-@fi*Y2!E7u8=m0JDk$SPp)1rZTw>UMbgHPE?XvTOs&1p(qO_Uf2ox4+t3Bl z#;=1*Sk4u}#Ztl#J+1PFdy%}+u~6FhLHqe^-#~kdl<*zbdD6yrS1n*g1Ofkiwu^ri zFCV!pN0n(Hi3mNtn0mHGd-vGbE@M1Tko0U|&IhyW2F0z`la5CI}U1c<@u+n4~w|8L{MA=8Ke5g-CYfCvx)B0vO) z01+SpM1TmKB?7em|15!|(+~k7Km>>Y5g-CYfCvx)B0vO)01>Y5g-CYfCvx)B0vO)z*!@u+n9h7|MUOB|L$#UCYeSAhyW2F0z`la5CI}U1c(3;AOb{y2+W;8Lp^7z ztFPy5cIzm&!1UiZ$A3C9j-bV5e#N}G@p}!|G(K4$t^1PwzuVv2^wqlc`~lN{Q~qoE zanl=B6gGXV?gOnot4xKqL@F-sPsI24<;HV;@x(yBFF&3U`{H6!%!~29Sl*C+MfZ-L zuHGK!rmgFHu5IdnKS)~6~}uO5>x ztHIoOSP62>1mx;j`(1^)kfmC&vr}osV=$p}CKI&dD%+sTccpxm*0sw_g#`u*nRG5+ z;&qr5s;s$WZ%rv?l)0H;XA2=s z=`6T{>WF_1H&d&w&Ly|+*tDf<$8P6UJ-c-m=5pP9m50^ATXv~%vgxGQHzKA+k&ybu zUye!5>xWaaFNQjZr!den+MpcJ-mmQFYVY2*b!YF6u1#Beo&AHutVvRpuy43)zjMR3 z9X*>iZj~=aJ>0pYXG719o~_+IJEcZ~?Y(*~=SOX&=T{7Mm7SmMtzEjy74@21x2!U8 z%(HVhBookt#76UJ_PykC1Owi{u-noag<4@Z)C#6st-#6=zRH!txU*I#WHZ&%^t*;T zswz_(IYpUJLz%jBnKCWMm1?h4-g&5wpQT=fWe!`Y7xJasz3t zlhTSzYf&_^TAH+9X@4W_S(>UtrS({qtES7varN&h_sY?nm^F4*nBuNnbjF>vlEZXp zskKW4WpzKPqD;MLEJZxBqlPkd=Q3ql4k|lX-U~5fHA0HE_8Qu>z01_;vQXcA?1gSy zsCp$TQ#4#!?v)G>w5-e~L(7UOl2eYwvIBc#+0~(dtGz!H%jNc^voH=)k_BG`(o>0n z;XdR3QbuNPIt9(0y0-v3GnYnfdlEy?i>>x~Au$(ALZ_ze=L-fQEj9-3nk`MuiTg{F zz~>W5Em2Y(7c)}Vs#l}-xB5h7TxQg+)I%i|uU~T|t!8K?uBDyj+M<*X))uaP7R^7q z_CvNH>v#`et@;BS#$qFYPN9B@mV1Vphm98dB8@=QQ3p#aX@^)^GPXyAve1o*$70D* zb@0OW(T|b`a=E^NB>0tbOfmsOB11|7Y!wG%qv#>hd6lx!%rWLGB`WRxXDT%fo69vE zsMH-wLpvo7z%s#SmyDtAB7Bg(CW%XQ$AN}&^UmDyNd zGCgGMjnw2-mHDap+F=?*HPcvZ2f~#MU|z)fZ56tq@~*9HK!w9J1Jq0~Ks{@}OP&A! z9seIyqIyau0z`la5CI}U1c(3;AOb{y2oM1xKm^WB0uA+6od37kDE>b;3y`cP0z`la z5CI}U1c(3;AOb{y2oM1xFbe`|{4eioh0m+tZ!`RDg})u}w*~&T!QXcHySni=+>?#H z4WDVS)yL~TU1v4LA@wc#SGasxGdD2W(bCehg|k|R(j9D#qbHWhc$BR~&b@Oyw;on@ zxHpP+}_|C zuea0dg*;z}SLpEhoIas5;O`6w?oikl3J2DBBamNMaY-|m7B;oCtX*5(eosD~PUgV+ z6#jK(620jSi6madaO;{MxCpL$WTaY#(zWK6Nh zVd+9bcp*M-XAq2yxTE24;o_CeoY>VfYa6#`#j%9APc?7)iCd@T?R2_?}s?_4z6~KqTldv^l{6y65Di-SC7$ zHS?w)e`WF`Cygd%vgzx^f&47&6e9kLFa=-1xxAVCTVd_2V6MItaI(^0zpgu-934q* zhLwh@$$+zXQz={uzg0U`z!$RSri<-G{Av$LhnX?)! zl*+u!LgtP$8R(5hDjMkb7Uo^p%yza2ySEyUs%*EQ;W^c@PC>PbB5;kB+H6sLfR99prM))ph=5Fe~Y8FPo zQ(^02HLcvFte3xbC6lUK6+eBVc=+Xs$6kSE1(xv}+d^E2*MV#MJn2k6kxq5w;K7=K ze6==Pa6?U~MsCFtAlK79H>1H!*+AB+NCk>3ear3iFgrWZWUT7d!9p=svvI-VW-cLk z=4PW@!g@PP${9>z)>XGD6bV$bX-O+^>zbh#VeSuVdg1XtENqqA@`OVz>JwmD54Wvg#(lBNkz^a#XUjrkUF1GC+ z98C=f*QfVXE>~E73wgB*)mOQ_^$CFj$2W6*%Uv^Avk4!XEiuQ)L^7i~5MQ8TlP`p# zh4Y#KNU*F=ngK}h*2Be~$LkFiEc1X%+f1cY#znHK z42^6}bv&T5+>)?68VVI!Y>209R525tBe#OuR6?hd811dGpn4BY)&;mUUwv1VN4TtM<|mKq8PsfqmjZwGd4oAXw&uf$&HZS#xiP}ZPmGj z!&<#7X^56J&XOA-OQbYzlMkLMzINYC+<;gjH8Z!cuf#roxKr@C{eD6D{XhOweD7Nn z&XXD>Y5g-CYfCvx)B0vO)01+Spe-Q+(spGkY{6eeUZnayjTQ+fdF_-r-VVEiQ z`(U!z?GH!%IFpPs#c+43!c4LdmU4HPcy0~fYO~vIcAE{RZead$^3>Y5g-CYfCvx) zBA_FnzW-m1|LOgIIy|&V1c(3;AOb{y2oM1xKm>>Y5g-CY;4gxJ`usn||9=tXNf$u` zhyW2F0z`la5CI}U1c(3;AOb|75&<>-SD*j?1OH3@$NXvjJN*CTzsmn3|2qE?{~Z4e z|0sWgKUV1!ltu)I01+SpM1Tko0U|&IhyW2F0z`laoFM@-UvH|b>Y5g-CYKq6pmFx8nL;^*a!A3EfXAK2xM?>EaE-)oXLzB^Ce_>N89__o#3 zV1jr)V39ukX6e)2D1CM`NT2QX(&w5wGwg4xt5@g$pWwreZ&INU0U|&IhyW2F0z`la z5CI}U1c(3;IJXGAzrLAU(_%8MVK2&`e)|66%b%Wl{rJ@Jr-~;Z=-#%izHZ|4N2i{< zulUkalg}P4zI<<>ij>v|DXTmxmCtwEfF9BM1Tko0U|&IhyW2F0z`la5CI}k zjR3y-zrOta{}lgM14ijYfCvx)B0vO)01+SpM1Tko0U|&I&OrhV^)`(EZSe4az0F4R z|L0&4lF3AX2oM1xKm>>Y5g-CYfCvx)B0vOYBw&pH)#v{o0&ud)2v@?neD{1x+H<9{|j(CBOUYQz2pTm5tO zyJl2OI}m}t4g%M$Sisqq@PgfLx559mwQIS_rwfz!KI_Yk=lTZHsl1rV_vP}j{AjN1 zah-tI9SH=hBwy!Tz*&uFp7`{~iZ8z`yxB94EQd3%S+ELhHrb`8rl#(Csd()E=}&xU z>bb(?V+Da(pU#NczWjJbtSiYbv)CVYM}DsF9hRbq34^mz3$5y!TPC`}C=gfoDaGdZer~DVzSqjGF#>ieGpY z94l&V0-hXO_o zQsNnDIKNCo@yKJ-4?gKPYLF7oNJC4RhSRT~oVfRul155OJR=R~m1&r`|M}t*A1!I1 zq{K7P5MRJF7+R9UFHE2KwA`4FjHFX)OTseFq>jhumuZo@47oGXYmqX}M9celrezIl z6_>Dvw|Mwd#k=odTIBYMbsKWB*C%v%gB^n3DMUMiq0XAU#rqs(XP-X!(Bz|rHkX}U zO0LqVR!J7^c=jdwR%7yoQbZ_gHV+3VAL`i8RU(M+9`Q#^9(Vc_~PpDqF4Hja zz!xW&5 z8AuA2OKrweFEBzSXD>eWLKO^El6TjaoqF=#ml&FoQ$uolhXs+?(w3_)n`| zsdRQEmh6isa>Y5hx{q581Ck;Y6_<#YHHVp|}vmQWO`USb}0P zidGbhP%K1oK8h9;=b>1DVm=BUg#(2hMKg*f6!TEnP*_n|P?%A`?*MY91{Bqv|EKuB zv<&Gx5g-CYfCvx)B0vO)01+SpM1Tkoftd*4N_&X^Z5aRCF#fk;{BOhf--hwO4dZ_s z#{V{q|7{rm+c5sOVf=5y_}_-{zYXJm8^-@OjQ?#I|JyMBw_*Hm!}#BZ@xKk@e;daC zHjMvm82{Ta{>Y5g-CYfCvzQ zvrXW-rY5dUFiCI4Dc*Xxc=8qLA$@#0-T3yPy0WK-@%2H1ze;jq9-P@@64 z+7%6?^)I)OUil;Co{6d<3#eLSgr{DS{tXv0I+k}PibS&x-RV=Oig!FNy$1r(X>X#? z=bVX}!A4NylCMWPnTAgH4hMbKndsTm0D4x)dZZ$P_bI^39Lip{ASIuP4zXT`OnTXY zb}ib=5cD}`q9$GkYTA@bx%b(LBQHs>Kfp^-Un~Hx+E6pjM9cLi&>|>W*qca-UpQDi z`~qsJ_~gHoeI~kUKmUKWTQ)i$5g-CYfCvx)B0vO)01+SpM1Tko0V43`2;g)5XZ!j8 zH)jzYO$3Ml5g-CYfCvx)B0vO)01+SpM1TmKZ36hT!P$QP|7_bx=OY3{fCvx)B0vO) z01+SpM1Tko0U|&I-W-85i~rT<|Bv!Z-kg3qng|d9B0vO)01+SpM1Tko0U|&Ih`>2W zAXB%1Yg=k+Te-w$vsu@!fNaQgh6!C)u6NWU)lVx&7G#rrhhsI%kwQTxzMoP(&}Gh zDuffMxVS$N-`|ICY#4~;_9Rk$*->x}^lQiUukP1Q*YC=0w6tChdKXsGJDQ2d@?zhfaqaM? znrhVpDrnX6T)7Q3ln!LYQl;~1Dpe1tpj69q-5l$&w60iTI&9C!_Q<8mU}+ckZdp%n z*SgI;&Wp8-i=C^1aKAH=%8Nr{w!I%-=z|55ij9c<&aqf_U~eqDTJS|&YSyqgUL|KN zmK@a`Y7!lk1r9DeibsnSbyM4!|EnPcyJFn{5E#Yywu3v9yjV?76?5a2A_kj0~q;)PV zr)(-O)AD_#5|z_SJa?$u(i#R`wlZC6q00xptGX(6*HTSdhHGeDHAN~`S<%Moiqu_8 z6=@l+!qr`t)}>2LH;*$9l}{>vY%us{znt1%>X;Qh^39fXzeYpzAI)$zt&&H)v(zK7 zR^f|^G@p`FddlgQ@2k~uI7g{RTv=LB%JHiGa>DxRs?=ReHE9{Hp)0B>QlZF-x~nTv zcP&+m~A~ZIXnkG*$B|eXFLGou){`tfm?LSElH4 z9k|TW+P%tDSfREw$U2@F$g|$OPd&RK`JI)EzQSRe1E`tc+3H#QT?f|IHbA`;g8^60 zWPo~DWdpQqSD~)c(%J(E+NvPXup3OcVkQ%`<0{*r%Xi&;LDbT^YL)2__>A0vtGoW)}F*cU_nU@7_vqT65c@G?JDI$tSUD=gKS znOcsDvi2Iv)Sb(eX*sUcW=rc@xUvO?n!}9M3Ruy0X$@`K-eu}^S*}AdDD`E_Ot&pm zOBj_Y8tjHLWkX!d#sMy~$xtmY#WV~7z$TO7~7_K-Z&g@O6bi-Of zfMIPmofKI!zb7#SjsI$&7ZP)^By>Y5g-CY;LkvS;{QJb zbW%wKhyW2F0z`la5CI}U1c(3;AOb|-Eha$m|62^4)DZz9Km>>Y5g-CYfCvx)B0vO) z01@~z5Kx}~=NC9`vH!DuPxDv)3`USjB0vO)01+SpM1Tko0U|&Ih`^i)6c#i(xD{;$ z3(wna*0pQ7$rnydo_aKy9!le{*2glLKHT1$&u4O-9?wuBFN*Gg^oVC4eb_uUZ2q6^>+wir#I3W^mhtTcOc}e zlALI;b8T%wqeaEzcTPU@ykb)-HX71Gx6B5(=VTze&PXCmPp0L{e8JaTx5Iq}kGrf&bNbRO-XpMBv&6Q4g^l95ad z?aeFp34W&#?F@!G{b6@h@K;GL%&P-L;Uzr3n^|2v@<{QSqs8ZLoqVi-R!hHDpGxGn z$8x!S>1pd5@yZh zLno(hesbcmmx^CFreipqNNt5;%fV;IP*xOEB?zZaJur3hN&Uf6nRiaz^9UewvIF-d zN5wY|7A8-O}}co&h|6gp!MIZjh3|e z|1)3H_@zcy!-wm?Rlm6I1RSRSS6Jd|=5_}=T3R-4;jC80nLSYBJgnxxRwC!#IiA}h zrbgWx#eB!$$kefii+A2Peej{F*KbS2r|x>GcLvxE;n~?V z?>R0CnEWjZq2bUKAvBL8>69lnkWZvjId^wfjOE2H_RT#wni>!aJ35-V(V?qnU-sw& zy-;U%ib-)m^Mr{<4oyFJT)Mb74jz~APanQh@{`lAy$<#Lje~dVi$Xb5j-AQViN&)i zzH@gqrwNB(;b6{^Ql@gQHO4siW2SZB5hPKw{#oj3Bb^E;0LTDXaz_N`{CExr7=*_?9 zixYP}Ro(pA8tx5NGF%9S3+G?i%nkX2irsS83#DG#lA^%2YwV>`k8t|+ z$0rKU85Gekn%dTkV4hX``W_71igNY$D44OOX%eryc z?8;=oM5$*l-hSugC!Z@GyLsZi=M{g33j`;^V{6#wD=+Ur)E$im3iB?LTVP}LEyuP! zoy*HDaPhMzPQP|%`pN|mKZ>H zg1w5zpDW&>w*HXd$>E;0!T9~rGUtX;iuj_1mMFB9%hgsz@7!>5qfI-+k@T2Y!Kle+ zPE9}fq~bSdRF>^p+bUnQyvl)9;Yg^kB@AtaeWa%nDr5Iu(Ydec*=^t^`L*O$)Ayc) zfzQP8hbKSx1U7k(zB>8%L1}OVP5b0)Cv`2lw*xCRH7UX1PhK( zGxz@Boa!nRx8Cg1@rYzkZNNfM9+;QAqB+>iiEXaA@KtIAYa@&`LNca$oe%`Al_;s0 zmwTb4dseEIVs72q_51R%(fnTM+cqXr@4mKoOClamiu+<&(dFJD4rayN-gm`Pkd#H7 zM_!t^|M`4+ScK7oG^)!=`}DEIY9;G)N1}2trE7)3Q+?qGj5$9pjWcIzSd_6G7$OfO zDvmR8z)-7H!I&V9Fd^V8D^)P&CGMsX82FSMQ&{Ygo8#FII?sZkvm59YcDtJ;vu7H7 zt`{?`r@&7fuOU-y%*IB?(}$j&KJo12se2|qddtLPcjK__wokyg=JYGKL)SKO=SgW$ zr>o>hTsh%vhiwsWbe7k)W(^D;hSyXo5@SP#BS-87@pIGqok*VrAo8I9xmSv>-aGlw zEz;OC5r>PJJar2;V6Q$}{K6sK^^Cv?67gJhZw`gkcGnAIG+(D5LSl$tATqi5(q=BP zOC6%=dxPrMVkxN3BH0IaO+Wr3ltuBSr!jVCQ9_B0$i0S;@y&aC_M$%D!EGM~bIj)td$V?)GgvE7%lphr_cBwi~u_kFsEU ziLvV_3AWcmSZfTni$`vq{LHE1k;ilcK)5S403?Uf*>SLKeb45e-X5vT3Stz4ci`ZT z3EViWP{*Mm^7+FBJ`Lj&zuFKL&c7a!&7vf+F>@ECL@7zVQO1(2>}7s8jC<7)iPF+Q z(C_z$4y`?ChmyMze=MO?r2^EXV zIKEh)7|8dIXLRjN@zW=YhhN49@uNqLbmFkDCl5Q= zpv8eSYzQmc;16i`c+{#cKwBden)|WgD;pQiXhZSV!^M*&&WsITI+cezq_xY-7uAsH z%<)B{1$!Twv$nLnW;TcQsAW`?9(4wLg6h~_yI&~4TwJ(dc^}+^fPSGuaAN3Y`CS@lfV|--j2sV3^)rY@a)@Ko`&`*b!ZQZ-BtM$4l+7;}XqfkNGmS$YubN7bT}`cY$e zf&FNWL21BWt>6j^uEyTVqhQmIcZ{u#+KH-$=sVF8bCgcBhE4ux_51JJ=U@}-K}&3s zde90sVGml%CS53QbnrsmW~t*Wsc9v>MEN8qbdp9pw2re%EGU4NEB6i6uFA`9``9*N zS0$7d){I6-J!hF6a?e=V+>wl*B(*6aS0WB)=+oYesPk}We#u(JSL3TmNmk)qi0 zxL=K6m1%v5VErMO+H?yMzc&aWHcsmU+?x4?rU7VF?XH=vk{eakE~QP78qylpgd-8Z zzlJrs{6fo~Su$d+gldb#NNOt-yRen0WmO;$fPlIxqp+4=xERKf&}_`iNNqMsEYmk0 zs(nhcQNzek)E|}CXH+amU4G$W7--JgNY;*2G*W6!3`Sx*Qp?Do;E&WG8B+2K7Zfgp z;$73xvSg-vOl*v$+9$1DD&GA-*&Uq@99}_{R?SnwZKw>sATEIM2Eg}bwE$*uVUc9r zjCa7)5g@w*rn62zz<{Ptu}&Leu=rB84Hh6^y_l74Erpe{tQc$nrjnC@Ny9LuOmP6F z@=_WHSQF%jd+sn2_4~u&^5U$RUszDMST^gbtMsd3%7J(h)VV=ysxCaLOQdCjGEZ~lYA`zjyp32r4 z^9yYSC*J2?GqZU$?{iDHx7EAdinRmM{cveDSec>WfG_N?VW>X8u%xgYMwz_*O1nG^ z(2X*2IbS-J7=Xp0DVXQn0c&x@?8a<*G~;p)u(eOHR3M)ikVlfz5-87LIy=%aB;C1B zXFZqV{h~}PzxQ1|UF&tD0JZK$ycMD%m}`V}CJPD|G2=XE%{W-G00z%&6aduODlaDT zxx-PRu&l5QjB2!Rv6tMiHr5AEKAleD(x;u{x!%~GBuooS6;}D416NcE6q*rF9(T&I z+l`)1_GMFCt-)n2o-b12W`xh}4~3g<;Eu@+@Jw+Ws~T!EqHE$xZmBCxTy=Ax0akg1 zaq*R3=oA8OzYsZ4SlY}D+x_+#gMVE`MZX%=17h_P3vV>12L1YG7MD3{gKu?=33vCr zp$`@=z|l{1mKN-Q$+o=IQYgivwhl0>ue1*(B?1O`D;f|E1qxhYNi#Px8wR>t!M-vG zc%QzbCWHX2y)GMQgK7RyVSZsTxNW_CZEXw{+*WEk6}PSKwN(m62vodJ1p{svGk;L> z)VcTu7@&Hp@h%M1BE?fH+Tw-j0*z0hwa_YSpVdG`z3cmCw9j%Ru%NI|F07K^Y{oW5 z3L9rpSZb)IuSQ!=wb(ynjTL9+mVA*_yMi~ZJ z(cpnXOEb66zN*}^+`ib*P#Sx%4z>vsJ>8?Ze0t>CY%F8!xa54#rLoj_6$`?;TlYFT zuy`Em*LjSNr`!fqeg+*W)^vSeRmG-IphCOjb$cTM^q&jBrp7a<^U{h<)^BZ2yMk-@fF))AhIw1#YmII`>-eVQ3j0g;rOk(%e%2J9_tkl8 zZO?O8*xKrgjh8eWub-^%s^d+=b)PJ>U|R-L>obNuvy1#o;vM7kbtnkqyV=APmOs`n zK(k=^$4reJ-g^hc@>)CT=DTsN9k#D<^BpWx*}`)-0bK6t592)vzqeYbQ@RepS#ZFb zu(dD;IFngyQ~-AAoBhhGbkRK4QIUOaNh*to{H#7ZCqTi!@Vg8WM^%o%uekf z%JHFndVVFg3A0_taUKlWxq{`*)$ANj_ExUiSd-L3HX0f5m)}6c3KR%)Tq8{Mh`VO7 zx<|gx1m)`6$;wt*a4N++#lz3ST^?M>#a6|ZJ?#KvFnM*j9woRUyTKU@u#sm(>nrs4 zJqs-bZkF|wjm6Z_vAh`0u-XI%WHsw)7#H4Dbhgsv9G+oVpnW;a{LWM#^dm&P!LxH9 zozd37NjG++g@&hJKRI#lD@wbKw&Fb=m|V=%m}reut-_@iH)rt9t-qxt3M#pCEAi9M zyDE!4N@5IUlCdVw*)Q9ve%GHhDEj*W>XQxd%VQxbiuazLN-Xu*G&uB{N ztcK)4Mq?xos@eL4U|~TOQx<#x?#sg(s|u!+FKNPVSH2kpy|1*!%4kgK8msDfg0QMd zu}K+dB(0rSfwqqs$mqERLLj^BCR*h(tV8gl9d@^ zeW!tQKXQ$)Zc0E~abEghR?E0FCtHC}m3d+nkbbJi$OxA*vBg$3JqhlXsenqHx@G?y ztSXt|VN1Z2nPLMfvhTXv-1~a* zL$4ZXv4{e8h6nFwu+3NLE)q=qgoHvvUYf@)DaRQHB5WR8PYJA%7JyZEC!e=sb@Rgw zfYuxqTt!4iciNVLMeVQzLs#GKx%2dE4^NzUs`&beazHR%%f>ojB}vV~gXf&8xm0U* zmX@(~AqLB&l_AwE1DoL1#*CH;)%x8+(+$$>|6Gesnf)&*J!r#m-CRvhUU=@gLfZrn zRM}1U!1Mnw|9^!0Hn*XkuNyag*YRZs-!$Fy&Uug8infIHU#!b4A2%1xe*4XhPc<%T zxV8Qdb&u37Hr)eM~LUH-l-x4G@|b?GodOeEmgl)~fT{ zRjV}g=*a95rWvdXY=GMbMyqZZ6|>{@tKXzq%^&7=Djvb=myPGy%SojAC57pgJi-Sa z5zssWNAg&;0$!nDEA*>grk(RjrOuwoIiZd5c6b9Fg7AOZJG7X8cGu>2&Ih@+f58koH%x93QBuoLrYaYDtG`jh$0lh zQ-uT~d{jtCJRnh?!UH@Y@en&8fs|*S_|MF_=bn4_?q;u3Q9o?eFUPxke>-Q+oS8Xu z<{ZqrIOB!`;WaY>{!HysXABH0Dt|%1h@whB7WDof?t(6^ZZeZwnPGrcW(z;HIC)@s97Q>e<95qu$f50>uSLbfj+t|WZ zolRzuvpu=VDfMx6vd_tk47(sMgZN307%KsQmoDL7dNtsxP+9wdxpaw=g7%uge;E1( zIsY4YpH}%5{5S6CJ6usG`kWpdVmpw=@|sKy^I`^}8x=Ad`U#xxhjypTVNCms0%( zWiixdvU)lQB zn_G8oZ+-QSkK_Lz0nLHt>9f~Sk0Pr{jAyIj45|OnEXJ`6nT%WGNQHeAw&;t_}^heJ_j`ApGk+UmLE%1=K<-m}79~T%@^Uj5=-nOgo=&H@!!RbDycVy@znmpr? z({pq{%4!!0OLM?2Rq)XnqDnp<)x)vX?W1M!F#+iNn51r!4ANrdM379-%V=U|SvJlG zF=#OWN|~epBw0^>F@xsfgO;j-Qrba4#kUmDH5|dVKsockpoIV^y}1IEU(BG@U7spL zj*#L3y!QQLEYWuDwTnc_e-Ti9(v-*k^5P2GquD~GyuWB?(BQED6ZYKs#mrjWr>)A` z^afamqgcrm(X4zN-xumQZ`OLEg(G&_EbdW`7{9xkuQ3@~+~M3k(%N3ila_>p5C0eH z{DBF-P9Jh+iqJ!2A?Wpv1*X_VI(W`%&i3E9ChS>;Rfk{9s`IFU$F&4455oh!v^=!) z^1v?Dlhk%n)+|vV>_v|wO1)+RRj~R?Ln!vlPP+)1UDS#BOpFy>pxu=I{(r6`Hs6CPqqKPeJ1&fPy#FR=00`1AX7_ zzxC$!H-ECQ3Ri?3Wbs7MagSaC6nG-JLis4HKYI$(GWPl-#O@AMzL8f4@euL{u^F2y zQIk>&Ia{D+iMaxLWKN)fPNi-pNdf!EflO{w*>jsdvA(ptfCh-@)QA=@XoYZ&{=o8z zQrZq9gB*Y_z-@S9it%C_3aoNX^xo?ro!-s9i2MOL6cet;&`q@>?{h_H^wRL zWG%a7ApE!%iA( z+%6>g+t}YB{otnkGOnLKCr^Bq+FG5cxT7|Oa%RU;SFOD8{(!u#lq{;?n zUeExehVDfJHDg2RlvBM>R^rbw_vIiHT6>b??VI}EIj3|0B6I(C#s8s_JP*2f|+8|bT z&VZ0+#K%aeD+VJtDy$i`F|4ed!GLbWr)XA}4aJN-Dxw>;DXj3pP_TBy=V(4?&fQYJT5J_ZK|r-EqzX91x-b?(q6b$SQt;V-%o>LKkys*zY`lqABr0#c9o z7zuUJ2qZ#1YGYVN)L=k8;!`xMWkV669+E?;CJf7l8VXjA_#92@i-sd$%SAn;04$25 z2=%bcDCb4QaFpX}#>?sphJn-Qo+;Ps31?}lF<54l8AvH&6WmZshJa&zk6>FClbQsU z31tH4Lu>#X%ei0(g3B52aMd0M%XTsW>q2~nggS2+SQk9kTy&x42IrJ*I4Sicx={KM zD+3NF)ty>&)C-1!wZWqhZKzFQ8&0AiZ72=KWq4UF8U$7c4?)zSCPL2gLOBNqbtr}6 ze{0LUN(PJW|LbYl=On+EY;L=b69C6rzSFWVeP-_;_GVK*NVRpn*7^6&XFLAbG1q>p zeQZ}n`3;zc1R4@(NZ@^zz>N)5-!#&PUf%8hl|JM=Xa1nE{L^AW#$zx^?K>E8eD54T_YwygN!%qFer{8BFsn+xFKxPQjH zM0PgAsmeg!Cq&qGvxPSFdq*{)>k*;>u+28V64;}rr|PV5wgQJ`m542@ZuMojA(9sh zq@Z+QZ`E@|c*nYmBZKyzeqPM09Dq5Cd*OtnAmHL zk928s5JUq5sT4X#*hHc|>z9{T&Mx>8kX#E6dQD5_GV!?Q9m>%%T$kaZKni;^e%*LT z2IHHL_u=laks_W*v0KrL7O)#M7C7w7J$}WAP zd(f-ss5`D`+kDKBWNi|yx!mEgItl#xFbOMcqWfd9Q4Vc(lLGA@9fnY#KrR%Bw-up4 z_=>VUty@m=Ryyr2F09OZd(#*d{0Z!hmQ!HkpJWu?5T#d(!PYubuhhP>ajMT580a}P z4Ap_q4tc76eB~U{*;3(jZvDK!OD9E6*s06pi`k=1e+vAD>r75kP5C5M~e%ap%CyT_92H;=RPHvsKc9dy+9 zNVw5A;*N~fA>kOBh2jPXP9MoVw$h8>-mhN2_wL(XFPqEj=a$hKO{bagx=^=zO3|P; z6&0POiG0~-G7S>YV82jMy{a9zLDX~IidRKuHOLB{jJEH^MnFo3qRh!?(?sqtT z)9ie4B0pJBY1NE=h|!m<%51~Qb2RgvSY14i&>82yrN~-Z{7NI=Ep>bAH+O;}xv+S4 zdF?_F32ikfeT2)l3lll(It_z_#*J=P4Waj_qk2e*Q1gpR)vfN4x;0YNE#guGzJ{{& st1o~z(6LdUUwh-#?YCd`2JPbF+UnAL_zFsc=wh@g?E&upD`fNk1DNY5mH+?% delta 13612 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 From 24908a8732afe3ded0d6ad5d4251ab98682673e3 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Sat, 22 Jan 2022 23:03:01 +0800 Subject: [PATCH 3/7] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=E6=B7=BB=E5=8A=A0e?= =?UTF-8?q?rror=E5=88=A4=E6=96=AD=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 ++ cmd/migrate/migration/models/initdb.go | 30 ++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 95290124..24509c97 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,8 @@ PROJECT:=go-admin .PHONY: build build: CGO_ENABLED=0 go build -o go-admin main.go +build-linux: + env GOOS=linux GOARCH=amd64 go build build-sqlite: go build -tags sqlite3 -o go-admin main.go #.PHONY: test diff --git a/cmd/migrate/migration/models/initdb.go b/cmd/migrate/migration/models/initdb.go index 5a37ec59..08fbfa57 100644 --- a/cmd/migrate/migration/models/initdb.go +++ b/cmd/migrate/migration/models/initdb.go @@ -1,6 +1,7 @@ package models import ( + "errors" "fmt" "go-admin/common/global" "gorm.io/gorm" @@ -12,19 +13,40 @@ import ( func InitDb(db *gorm.DB) (err error) { filePath := "config/db.sql" if global.Driver == "postgres" { + err = ExecSql(db, filePath) + if err != nil { + return err + } filePath = "config/pg.sql" err = ExecSql(db, filePath) + if err != nil { + return err + } } else if global.Driver == "mysql" { filePath = "config/db-begin-mysql.sql" err = ExecSql(db, filePath) + if err != nil { + return err + } filePath = "config/db.sql" err = ExecSql(db, filePath) + if err != nil { + return err + } filePath = "config/db-end-mysql.sql" err = ExecSql(db, filePath) - } else { + if err != nil { + return err + } + } else if global.Driver == "sqlite3" { err = ExecSql(db, filePath) + if err != nil { + return err + } + } else { + return errors.New("database type is not supported") } - return err + return nil } func ExecSql(db *gorm.DB, filePath string) error { @@ -39,7 +61,7 @@ func ExecSql(db *gorm.DB, filePath string) error { fmt.Println(sqlList[i]) continue } - sql := strings.Replace(sqlList[i]+";", "\n", "", 0) + sql := strings.Replace(sqlList[i]+";", "\n", "", -1) sql = strings.TrimSpace(sql) if err = db.Exec(sql).Error; err != nil { log.Printf("error sql: %s", sql) @@ -60,4 +82,4 @@ func Ioutil(filePath string) (string, error) { } else { return "", err } -} \ No newline at end of file +} From 02b62a288ddc2845a10c439164711e4521192850 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Sat, 22 Jan 2022 23:05:38 +0800 Subject: [PATCH 4/7] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E7=9A=84sqlite=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sqlite3.db | Bin 155648 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 sqlite3.db diff --git a/sqlite3.db b/sqlite3.db deleted file mode 100644 index 65124d045c2aa8245f04f14b937e28500d351ccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155648 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 P!_j$w{95w)nMVD8B#A6f From d02b52f38368429cadf9c1ca323f24b056bf1546 Mon Sep 17 00:00:00 2001 From: wenjianzhang Date: Tue, 8 Feb 2022 18:41:09 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat=E2=9C=A8:=20=E6=B7=BB=E5=8A=A0sqlserve?= =?UTF-8?q?r=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/migrate/migration/init.go | 4 +- cmd/migrate/migration/models/initdb.go | 26 +- cmd/migrate/migration/models/sys_user.go | 8 +- common/database/open.go | 7 +- common/database/open_sqlite3.go | 9 +- config/db-sqlserver.sql | 342 +++++++++++++++++++++++ config/settings.yml | 5 +- go.mod | 3 +- 8 files changed, 366 insertions(+), 38 deletions(-) create mode 100644 config/db-sqlserver.sql diff --git a/cmd/migrate/migration/init.go b/cmd/migrate/migration/init.go index 54261d1e..541f1d6b 100644 --- a/cmd/migrate/migration/init.go +++ b/cmd/migrate/migration/init.go @@ -46,7 +46,7 @@ func (e *Migration) Migrate() { var err error var count int64 for _, v := range versions { - err = e.db.Debug().Table("sys_migration").Where("version = ?", v).Count(&count).Error + err = e.db.Table("sys_migration").Where("version = ?", v).Count(&count).Error if err != nil { log.Fatalln(err) } @@ -55,7 +55,7 @@ func (e *Migration) Migrate() { count = 0 continue } - err = (e.version[v])(e.db.Debug(), strconv.Itoa(v)) + err = (e.version[v])(e.db, strconv.Itoa(v)) if err != nil { log.Fatalln(err) } diff --git a/cmd/migrate/migration/models/initdb.go b/cmd/migrate/migration/models/initdb.go index 08fbfa57..644ba499 100644 --- a/cmd/migrate/migration/models/initdb.go +++ b/cmd/migrate/migration/models/initdb.go @@ -1,7 +1,6 @@ package models import ( - "errors" "fmt" "go-admin/common/global" "gorm.io/gorm" @@ -13,40 +12,19 @@ import ( func InitDb(db *gorm.DB) (err error) { filePath := "config/db.sql" if global.Driver == "postgres" { - err = ExecSql(db, filePath) - if err != nil { - return err - } filePath = "config/pg.sql" err = ExecSql(db, filePath) - if err != nil { - return err - } } else if global.Driver == "mysql" { filePath = "config/db-begin-mysql.sql" err = ExecSql(db, filePath) - if err != nil { - return err - } filePath = "config/db.sql" err = ExecSql(db, filePath) - if err != nil { - return err - } filePath = "config/db-end-mysql.sql" err = ExecSql(db, filePath) - if err != nil { - return err - } - } else if global.Driver == "sqlite3" { - err = ExecSql(db, filePath) - if err != nil { - return err - } } else { - return errors.New("database type is not supported") + err = ExecSql(db, filePath) } - return nil + return err } func ExecSql(db *gorm.DB, filePath string) error { diff --git a/cmd/migrate/migration/models/sys_user.go b/cmd/migrate/migration/models/sys_user.go index ab22a6c4..1860b5bb 100644 --- a/cmd/migrate/migration/models/sys_user.go +++ b/cmd/migrate/migration/models/sys_user.go @@ -11,13 +11,13 @@ type SysUser struct { Password string `json:"-" gorm:"type:varchar(128);comment:密码"` NickName string `json:"nickName" gorm:"type:varchar(128);comment:昵称"` Phone string `json:"phone" gorm:"type:varchar(11);comment:手机号"` - RoleId int `json:"roleId" gorm:"type:bigint(20);comment:角色ID"` + RoleId int `json:"roleId" gorm:"type:bigint;comment:角色ID"` Salt string `json:"-" gorm:"type:varchar(255);comment:加盐"` Avatar string `json:"avatar" gorm:"type:varchar(255);comment:头像"` Sex string `json:"sex" gorm:"type:varchar(255);comment:性别"` Email string `json:"email" gorm:"type:varchar(128);comment:邮箱"` - DeptId int `json:"deptId" gorm:"type:bigint(20);comment:部门"` - PostId int `json:"postId" gorm:"type:bigint(20);comment:岗位"` + DeptId int `json:"deptId" gorm:"type:bigint;comment:部门"` + PostId int `json:"postId" gorm:"type:bigint;comment:岗位"` Remark string `json:"remark" gorm:"type:varchar(255);comment:备注"` Status string `json:"status" gorm:"type:varchar(4);comment:状态"` ControlBy @@ -45,4 +45,4 @@ func (e *SysUser) Encrypt() (err error) { func (e *SysUser) BeforeCreate(_ *gorm.DB) error { return e.Encrypt() -} \ No newline at end of file +} diff --git a/common/database/open.go b/common/database/open.go index 50c10fea..550566b7 100644 --- a/common/database/open.go +++ b/common/database/open.go @@ -1,3 +1,4 @@ +//go:build !sqlite3 // +build !sqlite3 package database @@ -5,10 +6,12 @@ package database import ( "gorm.io/driver/mysql" "gorm.io/driver/postgres" + "gorm.io/driver/sqlserver" "gorm.io/gorm" ) var opens = map[string]func(string) gorm.Dialector{ - "mysql": mysql.Open, - "postgres": postgres.Open, + "mysql": mysql.Open, + "postgres": postgres.Open, + "sqlserver": sqlserver.Open, } diff --git a/common/database/open_sqlite3.go b/common/database/open_sqlite3.go index 51754190..aaebe94d 100644 --- a/common/database/open_sqlite3.go +++ b/common/database/open_sqlite3.go @@ -1,3 +1,4 @@ +//go:build sqlite3 // +build sqlite3 package database @@ -6,11 +7,13 @@ import ( "gorm.io/driver/mysql" "gorm.io/driver/postgres" "gorm.io/driver/sqlite" + "gorm.io/driver/sqlserver" "gorm.io/gorm" ) var opens = map[string]func(string) gorm.Dialector{ - "mysql": mysql.Open, - "postgres": postgres.Open, - "sqlite3": sqlite.Open, + "mysql": mysql.Open, + "postgres": postgres.Open, + "sqlite3": sqlite.Open, + "sqlserver": sqlserver.Open, } diff --git a/config/db-sqlserver.sql b/config/db-sqlserver.sql new file mode 100644 index 00000000..0ba4168c --- /dev/null +++ b/config/db-sqlserver.sql @@ -0,0 +1,342 @@ +-- 开始初始化数据 ; +SET IDENTITY_INSERT sys_api ON; +INSERT INTO sys_api (id, handle, title, path, type, "action", created_at, updated_at, deleted_at, create_by, update_by)VALUES +(5, 'go-admin/app/admin/apis.SysLoginLog.Get-fm', '登录日志通过id获取', '/api/v1/sys-login-log/:id', 'BUS', 'GET', '2021-05-13 19:59:00.728', '2021-06-17 11:37:12.331', NULL, 0, 0), +(6, 'go-admin/app/admin/apis.SysOperaLog.GetPage-fm', '操作日志列表', '/api/v1/sys-opera-log', 'BUS', 'GET', '2021-05-13 19:59:00.778', '2021-06-17 11:48:40.732', NULL, 0, 0), +(7, 'go-admin/app/admin/apis.SysOperaLog.Get-fm', '操作日志通过id获取', '/api/v1/sys-opera-log/:id', 'BUS', 'GET', '2021-05-13 19:59:00.821', '2021-06-16 21:49:48.598', NULL, 0, 0), +(8, 'go-admin/common/actions.IndexAction.func1', '分类列表', '/api/v1/syscategory', 'BUS', 'GET', '2021-05-13 19:59:00.870', '2021-06-13 20:53:47.883', NULL, 0, 0), +(9, 'go-admin/common/actions.ViewAction.func1', '分类通过id获取', '/api/v1/syscategory/:id', 'BUS', 'GET', '2021-05-13 19:59:00.945', '2021-06-13 20:53:47.926', NULL, 0, 0), +(10, 'go-admin/common/actions.IndexAction.func1', '内容列表', '/api/v1/syscontent', 'BUS', 'GET', '2021-05-13 19:59:01.005', '2021-06-13 20:53:47.966', NULL, 0, 0), +(11, 'go-admin/common/actions.ViewAction.func1', '内容通过id获取', '/api/v1/syscontent/:id', 'BUS', 'GET', '2021-05-13 19:59:01.056', '2021-06-13 20:53:48.005', NULL, 0, 0), +(15, 'go-admin/common/actions.IndexAction.func1', 'job列表', '/api/v1/sysjob', 'BUS', 'GET', '2021-05-13 19:59:01.248', '2021-06-13 20:53:48.169', NULL, 0, 0), +(16, 'go-admin/common/actions.ViewAction.func1', 'job通过id获取', '/api/v1/sysjob/:id', 'BUS', 'GET', '2021-05-13 19:59:01.298', '2021-06-13 20:53:48.214', NULL, 0, 0), +(21, 'go-admin/app/admin/apis.SysDictType.GetPage-fm', '字典类型列表', '/api/v1/dict/type', 'BUS', 'GET', '2021-05-13 19:59:01.525', '2021-06-17 11:48:40.732', NULL, 0, 0), +(22, 'go-admin/app/admin/apis.SysDictType.GetAll-fm', '字典类型查询【代码生成】', '/api/v1/dict/type-option-select', 'SYS', 'GET', '2021-05-13 19:59:01.582', '2021-06-13 20:53:48.388', NULL, 0, 0), +(23, 'go-admin/app/admin/apis.SysDictType.Get-fm', '字典类型通过id获取', '/api/v1/dict/type/:id', 'BUS', 'GET', '2021-05-13 19:59:01.632', '2021-06-17 11:48:40.732', NULL, 0, 0), +(24, 'go-admin/app/admin/apis.SysDictData.GetPage-fm', '字典数据列表', '/api/v1/dict/data', 'BUS', 'GET', '2021-05-13 19:59:01.684', '2021-06-17 11:48:40.732', NULL, 0, 0), +(25, 'go-admin/app/admin/apis.SysDictData.Get-fm', '字典数据通过code获取', '/api/v1/dict/data/:dictCode', 'BUS', 'GET', '2021-05-13 19:59:01.732', '2021-06-17 11:48:40.732', NULL, 0, 0), +(26, 'go-admin/app/admin/apis.SysDictData.GetSysDictDataAll-fm', '数据字典根据key获取', '/api/v1/dict-data/option-select', 'SYS', 'GET', '2021-05-13 19:59:01.832', '2021-06-17 11:48:40.732', NULL, 0, 0), +(27, 'go-admin/app/admin/apis.SysDept.GetPage-fm', '部门列表', '/api/v1/dept', 'BUS', 'GET', '2021-05-13 19:59:01.940', '2021-06-17 11:48:40.732', NULL, 0, 0), +(28, 'go-admin/app/admin/apis.SysDept.Get-fm', '部门通过id获取', '/api/v1/dept/:id', 'BUS', 'GET', '2021-05-13 19:59:02.009', '2021-06-17 11:48:40.732', NULL, 0, 0), +(29, 'go-admin/app/admin/apis.SysDept.Get2Tree-fm', '查询部门下拉树【角色权限-自定权限】', '/api/v1/deptTree', 'SYS', 'GET', '2021-05-13 19:59:02.050', '2021-06-17 11:48:40.732', NULL, 0, 0), +(30, 'go-admin/app/admin/apis/tools.(*Gen).GetDBTableList-fm', '数据库表列表', '/api/v1/db/tables/page', 'SYS', 'GET', '2021-05-13 19:59:02.098', '2021-06-13 20:53:48.730', NULL, 0, 0), +(31, 'go-admin/app/admin/apis/tools.(*Gen).GetDBColumnList-fm', '数据表列列表', '/api/v1/db/columns/page', 'SYS', 'GET', '2021-05-13 19:59:02.140', '2021-06-13 20:53:48.771', NULL, 0, 0), +(32, 'go-admin/app/admin/apis/tools.Gen.GenCode-fm', '数据库表生成到项目', '/api/v1/gen/toproject/:tableId', 'SYS', 'GET', '2021-05-13 19:59:02.183', '2021-06-13 20:53:48.812', NULL, 0, 0), +(33, 'go-admin/app/admin/apis/tools.Gen.GenMenuAndApi-fm', '数据库表生成到DB', '/api/v1/gen/todb/:tableId', 'SYS', 'GET', '2021-05-13 19:59:02.227', '2021-06-13 20:53:48.853', NULL, 0, 0), +(34, 'go-admin/app/admin/apis/tools.(*SysTable).GetSysTablesTree-fm', '关系表数据【代码生成】', '/api/v1/gen/tabletree', 'SYS', 'GET', '2021-05-13 19:59:02.271', '2021-06-13 20:53:48.893', NULL, 0, 0), +(35, 'go-admin/app/admin/apis/tools.Gen.Preview-fm', '生成预览通过id获取', '/api/v1/gen/preview/:tableId', 'SYS', 'GET', '2021-05-13 19:59:02.315', '2021-06-13 20:53:48.935', NULL, 0, 0), +(36, 'go-admin/app/admin/apis/tools.Gen.GenApiToFile-fm', '生成api带文件', '/api/v1/gen/apitofile/:tableId', 'SYS', 'GET', '2021-05-13 19:59:02.357', '2021-06-13 20:53:48.977', NULL, 0, 0), +(37, 'go-admin/app/admin/apis.System.GenerateCaptchaHandler-fm', '验证码获取', '/api/v1/getCaptcha', 'SYS', 'GET', '2021-05-13 19:59:02.405', '2021-06-13 20:53:49.020', NULL, 0, 0), +(38, 'go-admin/app/admin/apis.SysUser.GetInfo-fm', '用户信息获取', '/api/v1/getinfo', 'SYS', 'GET', '2021-05-13 19:59:02.447', '2021-06-13 20:53:49.065', NULL, 0, 0), +(39, 'go-admin/app/admin/apis.SysMenu.GetPage-fm', '菜单列表', '/api/v1/menu', 'BUS', 'GET', '2021-05-13 19:59:02.497', '2021-06-17 11:48:40.732', NULL, 0, 0), +(40, 'go-admin/app/admin/apis.SysMenu.GetMenuTreeSelect-fm', '查询菜单下拉树结构【废弃】', '/api/v1/menuTreeselect', 'SYS', 'GET', '2021-05-13 19:59:02.542', '2021-06-03 22:37:21.857', NULL, 0, 0), +(41, 'go-admin/app/admin/apis.SysMenu.Get-fm', '菜单通过id获取', '/api/v1/menu/:id', 'BUS', 'GET', '2021-05-13 19:59:02.584', '2021-06-17 11:48:40.732', NULL, 0, 0), +(42, 'go-admin/app/admin/apis.SysMenu.GetMenuRole-fm', '角色菜单【顶部左侧菜单】', '/api/v1/menurole', 'SYS', 'GET', '2021-05-13 19:59:02.630', '2021-06-13 20:53:49.574', NULL, 0, 0), +(43, 'go-admin/app/admin/apis.SysMenu.GetMenuIDS-fm', '获取角色对应的菜单id数组【废弃】', '/api/v1/menuids', 'SYS', 'GET', '2021-05-13 19:59:02.675', '2021-06-03 22:39:52.500', NULL, 0, 0), +(44, 'go-admin/app/admin/apis.SysRole.GetPage-fm', '角色列表', '/api/v1/role', 'BUS', 'GET', '2021-05-13 19:59:02.720', '2021-06-17 11:48:40.732', NULL, 0, 0), +(45, 'go-admin/app/admin/apis.SysMenu.GetMenuTreeSelect-fm', '菜单权限列表【角色配菜单使用】', '/api/v1/roleMenuTreeselect/:roleId', 'SYS', 'GET', '2021-05-13 19:59:02.762', '2021-06-17 11:48:40.732', NULL, 0, 0), +(46, 'go-admin/app/admin/apis.SysDept.GetDeptTreeRoleSelect-fm', '角色部门结构树【自定义数据权限】', '/api/v1/roleDeptTreeselect/:roleId', 'SYS', 'GET', '2021-05-13 19:59:02.809', '2021-06-17 11:48:40.732', NULL, 0, 0), +(47, 'go-admin/app/admin/apis.SysRole.Get-fm', '角色通过id获取', '/api/v1/role/:id', 'BUS', 'GET', '2021-05-13 19:59:02.850', '2021-06-17 11:48:40.732', NULL, 0, 0), +(48, 'github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth.(*GinJWTMiddleware).RefreshHandler-fm', '刷新token', '/api/v1/refresh_token', 'SYS', 'GET', '2021-05-13 19:59:02.892', '2021-06-13 20:53:49.278', NULL, 0, 0), +(53, 'go-admin/app/admin/apis.SysConfig.GetPage-fm', '参数列表', '/api/v1/config', 'BUS', 'GET', '2021-05-13 19:59:03.116', '2021-06-17 11:48:40.732', NULL, 0, 0), +(54, 'go-admin/app/admin/apis.SysConfig.Get-fm', '参数通过id获取', '/api/v1/config/:id', 'BUS', 'GET', '2021-05-13 19:59:03.157', '2021-06-17 11:48:40.732', NULL, 0, 0), +(55, 'go-admin/app/admin/apis.SysConfig.GetSysConfigByKEYForService-fm', '参数通过键名搜索【基础默认配置】', '/api/v1/configKey/:configKey', 'SYS', 'GET', '2021-05-13 19:59:03.198', '2021-06-13 20:53:49.745', NULL, 0, 0), +(57, 'go-admin/app/jobs/apis.SysJob.RemoveJobForService-fm', 'job移除', '/api/v1/job/remove/:id', 'BUS', 'GET', '2021-05-13 19:59:03.295', '2021-06-13 20:53:49.786', NULL, 0, 0), +(58, 'go-admin/app/jobs/apis.SysJob.StartJobForService-fm', 'job启动', '/api/v1/job/start/:id', 'BUS', 'GET', '2021-05-13 19:59:03.339', '2021-06-13 20:53:49.829', NULL, 0, 0), +(59, 'go-admin/app/admin/apis.SysPost.GetPage-fm', '岗位列表', '/api/v1/post', 'BUS', 'GET', '2021-05-13 19:59:03.381', '2021-06-17 11:48:40.732', NULL, 0, 0), +(60, 'go-admin/app/admin/apis.SysPost.Get-fm', '岗位通过id获取', '/api/v1/post/:id', 'BUS', 'GET', '2021-05-13 19:59:03.433', '2021-06-17 11:48:40.732', NULL, 0, 0), +(62, 'go-admin/app/admin/apis.SysConfig.GetSysConfigBySysApp-fm', '系统前端参数', '/api/v1/app-config', 'SYS', 'GET', '2021-05-13 19:59:03.526', '2021-06-13 20:53:49.994', NULL, 0, 0), +(63, 'go-admin/app/admin/apis.SysUser.GetProfile-fm', '*用户信息获取', '/api/v1/user/profile', 'SYS', 'GET', '2021-05-13 19:59:03.567', '2021-06-13 20:53:50.038', NULL, 0, 0), +(66, 'github.com/go-admin-team/go-admin-core/sdk/pkg/ws.(*Manager).WsClient-fm', '链接ws【定时任务log】', '/ws/:id/:channel', 'BUS', 'GET', '2021-05-13 19:59:03.705', '2021-06-13 20:53:50.167', NULL, 0, 0), +(67, 'github.com/go-admin-team/go-admin-core/sdk/pkg/ws.(*Manager).UnWsClient-fm', '退出ws【定时任务log】', '/wslogout/:id/:channel', 'BUS', 'GET', '2021-05-13 19:59:03.756', '2021-06-13 20:53:50.209', NULL, 0, 0), +(68, 'go-admin/common/middleware/handler.Ping', '*用户基本信息', '/info', 'SYS', 'GET', '2021-05-13 19:59:03.800', '2021-06-13 20:53:50.251', NULL, 0, 0), +(72, 'go-admin/common/actions.CreateAction.func1', '分类创建', '/api/v1/syscategory', 'BUS', 'POST', '2021-05-13 19:59:03.982', '2021-06-13 20:53:50.336', NULL, 0, 0), +(73, 'go-admin/common/actions.CreateAction.func1', '内容创建', '/api/v1/syscontent', 'BUS', 'POST', '2021-05-13 19:59:04.027', '2021-06-13 20:53:50.375', NULL, 0, 0), +(76, 'go-admin/common/actions.CreateAction.func1', 'job创建', '/api/v1/sysjob', 'BUS', 'POST', '2021-05-13 19:59:04.164', '2021-06-13 20:53:50.500', NULL, 0, 0), +(80, 'go-admin/app/admin/apis.SysDictData.Insert-fm', '字典数据创建', '/api/v1/dict/data', 'BUS', 'POST', '2021-05-13 19:59:04.347', '2021-06-17 11:48:40.732', NULL, 0, 0), +(81, 'go-admin/app/admin/apis.SysDictType.Insert-fm', '字典类型创建', '/api/v1/dict/type', 'BUS', 'POST', '2021-05-13 19:59:04.391', '2021-06-17 11:48:40.732', NULL, 0, 0), +(82, 'go-admin/app/admin/apis.SysDept.Insert-fm', '部门创建', '/api/v1/dept', 'BUS', 'POST', '2021-05-13 19:59:04.435', '2021-06-17 11:48:40.732', NULL, 0, 0), +(85, 'github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth.(*GinJWTMiddleware).LoginHandler-fm', '*登录', '/api/v1/login', 'SYS', 'POST', '2021-05-13 19:59:04.597', '2021-06-13 20:53:50.784', NULL, 0, 0), +(86, 'go-admin/common/middleware/handler.LogOut', '*退出', '/api/v1/logout', 'SYS', 'POST', '2021-05-13 19:59:04.642', '2021-06-13 20:53:50.824', NULL, 0, 0), +(87, 'go-admin/app/admin/apis.SysConfig.Insert-fm', '参数创建', '/api/v1/config', 'BUS', 'POST', '2021-05-13 19:59:04.685', '2021-06-17 11:48:40.732', NULL, 0, 0), +(88, 'go-admin/app/admin/apis.SysMenu.Insert-fm', '菜单创建', '/api/v1/menu', 'BUS', 'POST', '2021-05-13 19:59:04.777', '2021-06-17 11:48:40.732', NULL, 0, 0), +(89, 'go-admin/app/admin/apis.SysPost.Insert-fm', '岗位创建', '/api/v1/post', 'BUS', 'POST', '2021-05-13 19:59:04.886', '2021-06-17 11:48:40.732', NULL, 0, 0), +(90, 'go-admin/app/admin/apis.SysRole.Insert-fm', '角色创建', '/api/v1/role', 'BUS', 'POST', '2021-05-13 19:59:04.975', '2021-06-17 11:48:40.732', NULL, 0, 0), +(91, 'go-admin/app/admin/apis.SysUser.InsetAvatar-fm', '*用户头像编辑', '/api/v1/user/avatar', 'SYS', 'POST', '2021-05-13 19:59:05.058', '2021-06-13 20:53:51.079', NULL, 0, 0), +(92, 'go-admin/app/admin/apis.SysApi.Update-fm', '接口编辑', '/api/v1/sys-api/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.122', '2021-06-17 11:48:40.732', NULL, 0, 0), +(95, 'go-admin/common/actions.UpdateAction.func1', '分类编辑', '/api/v1/syscategory/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.255', '2021-06-13 20:53:51.247', NULL, 0, 0), +(96, 'go-admin/common/actions.UpdateAction.func1', '内容编辑', '/api/v1/syscontent/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.299', '2021-06-13 20:53:51.289', NULL, 0, 0), +(97, 'go-admin/common/actions.UpdateAction.func1', 'job编辑', '/api/v1/sysjob', 'BUS', 'PUT', '2021-05-13 19:59:05.343', '2021-06-13 20:53:51.331', NULL, 0, 0), +(101, 'go-admin/app/admin/apis.SysDictData.Update-fm', '字典数据编辑', '/api/v1/dict/data/:dictCode', 'BUS', 'PUT', '2021-05-13 19:59:05.519', '2021-06-17 11:48:40.732', NULL, 0, 0), +(102, 'go-admin/app/admin/apis.SysDictType.Update-fm', '字典类型编辑', '/api/v1/dict/type/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.569', '2021-06-17 11:48:40.732', NULL, 0, 0), +(103, 'go-admin/app/admin/apis.SysDept.Update-fm', '部门编辑', '/api/v1/dept/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.613', '2021-06-17 11:48:40.732', NULL, 0, 0), +(104, 'go-admin/app/other/apis.SysFileDir.Update-fm', '文件夹编辑', '/api/v1/file-dir/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.662', '2021-06-13 20:53:51.847', NULL, 0, 0), +(105, 'go-admin/app/other/apis.SysFileInfo.Update-fm', '文件编辑', '/api/v1/file-info/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.709', '2021-06-13 20:53:51.892', NULL, 0, 0), +(106, 'go-admin/app/admin/apis.SysRole.Update-fm', '角色编辑', '/api/v1/role/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.752', '2021-06-17 11:48:40.732', NULL, 0, 0), +(107, 'go-admin/app/admin/apis.SysRole.Update2DataScope-fm', '角色数据权限修改', '/api/v1/roledatascope', 'BUS', 'PUT', '2021-05-13 19:59:05.803', '2021-06-17 11:48:40.732', NULL, 0, 0), +(108, 'go-admin/app/admin/apis.SysConfig.Update-fm', '参数编辑', '/api/v1/config/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.848', '2021-06-17 11:48:40.732', NULL, 0, 0), +(109, 'go-admin/app/admin/apis.SysMenu.Update-fm', '编辑菜单', '/api/v1/menu/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.891', '2021-06-17 11:48:40.732', NULL, 0, 0), +(110, 'go-admin/app/admin/apis.SysPost.Update-fm', '岗位编辑', '/api/v1/post/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.934', '2021-06-17 11:48:40.732', NULL, 0, 0), +(111, 'go-admin/app/admin/apis.SysUser.UpdatePwd-fm', '*用户修改密码', '/api/v1/user/pwd', 'SYS', 'PUT', '2021-05-13 19:59:05.987', '2021-06-13 20:53:51.724', NULL, 0, 0), +(112, 'go-admin/common/actions.DeleteAction.func1', '分类删除', '/api/v1/syscategory', 'BUS', 'DELETE', '2021-05-13 19:59:06.030', '2021-06-13 20:53:52.237', NULL, 0, 0), +(113, 'go-admin/common/actions.DeleteAction.func1', '内容删除', '/api/v1/syscontent', 'BUS', 'DELETE', '2021-05-13 19:59:06.076', '2021-06-13 20:53:52.278', NULL, 0, 0), +(114, 'go-admin/app/admin/apis.SysLoginLog.Delete-fm', '登录日志删除', '/api/v1/sys-login-log', 'BUS', 'DELETE', '2021-05-13 19:59:06.118', '2021-06-17 11:48:40.732', NULL, 0, 0), +(115, 'go-admin/app/admin/apis.SysOperaLog.Delete-fm', '操作日志删除', '/api/v1/sys-opera-log', 'BUS', 'DELETE', '2021-05-13 19:59:06.162', '2021-06-17 11:48:40.732', NULL, 0, 0), +(116, 'go-admin/common/actions.DeleteAction.func1', 'job删除', '/api/v1/sysjob', 'BUS', 'DELETE', '2021-05-13 19:59:06.206', '2021-06-13 20:53:52.323', NULL, 0, 0), +(117, 'go-admin/app/other/apis.SysChinaAreaData.Delete-fm', '行政区删除', '/api/v1/sys-area-data', 'BUS', 'DELETE', '2021-05-13 19:59:06.249', '2021-06-13 20:53:52.061', NULL, 0, 0), +(120, 'go-admin/app/admin/apis.SysDictData.Delete-fm', '字典数据删除', '/api/v1/dict/data', 'BUS', 'DELETE', '2021-05-13 19:59:06.387', '2021-06-17 11:48:40.732', NULL, 0, 0), +(121, 'go-admin/app/admin/apis.SysDictType.Delete-fm', '字典类型删除', '/api/v1/dict/type', 'BUS', 'DELETE', '2021-05-13 19:59:06.432', '2021-06-17 11:48:40.732', NULL, 0, 0), +(122, 'go-admin/app/admin/apis.SysDept.Delete-fm', '部门删除', '/api/v1/dept/:id', 'BUS', 'DELETE', '2021-05-13 19:59:06.475', '2021-06-17 11:48:40.732', NULL, 0, 0), +(123, 'go-admin/app/other/apis.SysFileDir.Delete-fm', '文件夹删除', '/api/v1/file-dir/:id', 'BUS', 'DELETE', '2021-05-13 19:59:06.520', '2021-06-13 20:53:52.539', NULL, 0, 0), +(124, 'go-admin/app/other/apis.SysFileInfo.Delete-fm', '文件删除', '/api/v1/file-info/:id', 'BUS', 'DELETE', '2021-05-13 19:59:06.566', '2021-06-13 20:53:52.580', NULL, 0, 0), +(125, 'go-admin/app/admin/apis.SysConfig.Delete-fm', '参数删除', '/api/v1/config', 'BUS', 'DELETE', '2021-05-13 19:59:06.612', '2021-06-17 11:48:40.732', NULL, 0, 0), +(126, 'go-admin/app/admin/apis.SysMenu.Delete-fm', '删除菜单', '/api/v1/menu', 'BUS', 'DELETE', '2021-05-13 19:59:06.654', '2021-06-17 11:48:40.732', NULL, 0, 0), +(127, 'go-admin/app/admin/apis.SysPost.Delete-fm', '岗位删除', '/api/v1/post/:id', 'BUS', 'DELETE', '2021-05-13 19:59:06.702', '2021-06-17 11:48:40.732', NULL, 0, 0), +(128, 'go-admin/app/admin/apis.SysRole.Delete-fm', '角色删除', '/api/v1/role', 'BUS', 'DELETE', '2021-05-13 19:59:06.746', '2021-06-17 11:48:40.732', NULL, 0, 0), +(131, 'github.com/go-admin-team/go-admin-core/tools/transfer.Handler.func1', '系统指标', '/api/v1/metrics', 'SYS', 'GET', '2021-05-17 22:13:55.933', '2021-06-13 20:53:49.614', NULL, 0, 0), +(132, 'go-admin/app/other/router.registerMonitorRouter.func1', '健康状态', '/api/v1/health', 'SYS', 'GET', '2021-05-17 22:13:56.285', '2021-06-13 20:53:49.951', NULL, 0, 0), +(133, 'go-admin/app/admin/apis.HelloWorld', '项目默认接口', '/', 'SYS', 'GET', '2021-05-24 10:30:44.553', '2021-06-13 20:53:47.406', NULL, 0, 0), +(134, 'go-admin/app/other/apis.ServerMonitor.ServerInfo-fm', '服务器基本状态', '/api/v1/server-monitor', 'SYS', 'GET', '2021-05-24 10:30:44.937', '2021-06-13 20:53:48.255', NULL, 0, 0), +(135, 'go-admin/app/admin/apis.SysApi.GetPage-fm', '接口列表', '/api/v1/sys-api', 'BUS', 'GET', '2021-05-24 11:37:53.303', '2021-06-17 11:48:40.732', NULL, 0, 0), +(136, 'go-admin/app/admin/apis.SysApi.Get-fm', '接口通过id获取', '/api/v1/sys-api/:id', 'BUS', 'GET', '2021-05-24 11:37:53.359', '2021-06-17 11:48:40.732', NULL, 0, 0), +(137, 'go-admin/app/admin/apis.SysLoginLog.GetPage-fm', '登录日志列表', '/api/v1/sys-login-log', 'BUS', 'GET', '2021-05-24 11:47:30.397', '2021-06-17 11:48:40.732', NULL, 0, 0), +(138, 'go-admin/app/other/apis.File.UploadFile-fm', '文件上传', '/api/v1/public/uploadFile', 'SYS', 'POST', '2021-05-25 19:16:18.493', '2021-06-13 20:53:50.866', NULL, 0, 0), +(139, 'go-admin/app/admin/apis.SysConfig.Update2Set-fm', '参数信息修改【参数配置】', '/api/v1/set-config', 'BUS', 'PUT', '2021-05-27 09:45:14.853', '2021-06-17 11:48:40.732', NULL, 0, 0), +(140, 'go-admin/app/admin/apis.SysConfig.Get2Set-fm', '参数获取全部【配置使用】', '/api/v1/set-config', 'BUS', 'GET', '2021-05-27 11:54:14.384', '2021-06-17 11:48:40.732', NULL, 0, 0), +(141, 'go-admin/app/admin/apis.SysUser.GetPage-fm', '管理员列表', '/api/v1/sys-user', 'BUS', 'GET', '2021-06-13 19:24:57.111', '2021-06-17 20:31:14.318', NULL, 0, 0), +(142, 'go-admin/app/admin/apis.SysUser.Get-fm', '管理员通过id获取', '/api/v1/sys-user/:id', 'BUS', 'GET', '2021-06-13 19:24:57.188', '2021-06-17 20:31:14.318', NULL, 0, 0), +(143, 'go-admin/app/admin/apis/tools.(*SysTable).GetSysTablesInfo-fm', '', '/api/v1/sys/tables/info', '', 'GET', '2021-06-13 19:24:57.437', '2021-06-13 20:53:48.047', NULL, 0, 0), +(144, 'go-admin/app/admin/apis/tools.(*SysTable).GetSysTables-fm', '', '/api/v1/sys/tables/info/:tableId', '', 'GET', '2021-06-13 19:24:57.510', '2021-06-13 20:53:48.088', NULL, 0, 0), +(145, 'go-admin/app/admin/apis/tools.(*SysTable).GetSysTableList-fm', '', '/api/v1/sys/tables/page', '', 'GET', '2021-06-13 19:24:57.582', '2021-06-13 20:53:48.128', NULL, 0, 0), +(146, 'github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1', '', '/static/*filepath', '', 'GET', '2021-06-13 19:24:59.641', '2021-06-13 20:53:50.081', NULL, 0, 0), +(147, 'github.com/swaggo/gin-swagger.CustomWrapHandler.func1', '', '/swagger/*any', '', 'GET', '2021-06-13 19:24:59.713', '2021-06-13 20:53:50.123', NULL, 0, 0), +(148, 'github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1', '', '/form-generator/*filepath', '', 'GET', '2021-06-13 19:24:59.914', '2021-06-13 20:53:50.295', NULL, 0, 0), +(149, 'go-admin/app/admin/apis/tools.(*SysTable).InsertSysTable-fm', '', '/api/v1/sys/tables/info', '', 'POST', '2021-06-13 19:25:00.163', '2021-06-13 20:53:50.539', NULL, 0, 0), +(150, 'go-admin/app/admin/apis.SysUser.Insert-fm', '管理员创建', '/api/v1/sys-user', 'BUS', 'POST', '2021-06-13 19:25:00.233', '2021-06-17 20:31:14.318', NULL, 0, 0), +(151, 'go-admin/app/admin/apis.SysUser.Update-fm', '管理员编辑', '/api/v1/sys-user', 'BUS', 'PUT', '2021-06-13 19:25:00.986', '2021-06-17 20:31:14.318', NULL, 0, 0), +(152, 'go-admin/app/admin/apis/tools.(*SysTable).UpdateSysTable-fm', '', '/api/v1/sys/tables/info', '', 'PUT', '2021-06-13 19:25:01.149', '2021-06-13 20:53:51.375', NULL, 0, 0), +(153, 'go-admin/app/admin/apis.SysRole.Update2Status-fm', '', '/api/v1/role-status', '', 'PUT', '2021-06-13 19:25:01.446', '2021-06-13 20:53:51.636', NULL, 0, 0), +(154, 'go-admin/app/admin/apis.SysUser.ResetPwd-fm', '', '/api/v1/user/pwd/reset', '', 'PUT', '2021-06-13 19:25:01.601', '2021-06-13 20:53:51.764', NULL, 0, 0), +(155, 'go-admin/app/admin/apis.SysUser.UpdateStatus-fm', '', '/api/v1/user/status', '', 'PUT', '2021-06-13 19:25:01.671', '2021-06-13 20:53:51.806', NULL, 0, 0), +(156, 'go-admin/app/admin/apis.SysUser.Delete-fm', '管理员删除', '/api/v1/sys-user', 'BUS', 'DELETE', '2021-06-13 19:25:02.043', '2021-06-17 20:31:14.318', NULL, 0, 0), +(157, 'go-admin/app/admin/apis/tools.(*SysTable).DeleteSysTables-fm', '', '/api/v1/sys/tables/info/:tableId', '', 'DELETE', '2021-06-13 19:25:02.283', '2021-06-13 20:53:52.367', NULL, 0, 0), +(158, 'github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1', '', '/static/*filepath', '', 'HEAD', '2021-06-13 19:25:02.734', '2021-06-13 20:53:52.791', NULL, 0, 0), +(159, 'github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1', '', '/form-generator/*filepath', '', 'HEAD', '2021-06-13 19:25:02.808', '2021-06-13 20:53:52.838', NULL, 0, 0); +SET IDENTITY_INSERT sys_api OFF; + +INSERT INTO sys_config VALUES +(1, '皮肤样式', 'sys_index_skinName', 'skin-green', 'Y', '0', '主框架页-默认皮肤样式名称:蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow', 1, 1, '2021-05-13 19:56:37.913', '2021-06-05 13:50:13.123', NULL), +(2, '初始密码', 'sys_user_initPassword', '123456', 'Y', '0', '用户管理-账号初始密码:123456', 1, 1, '2021-05-13 19:56:37.913', '2021-05-13 19:56:37.913', NULL), +(3, '侧栏主题', 'sys_index_sideTheme', 'theme-dark', 'Y', '0', '主框架页-侧边栏主题:深色主题theme-dark,浅色主题theme-light', 1, 1, '2021-05-13 19:56:37.913', '2021-05-13 19:56:37.913', NULL), +(4, '系统名称', 'sys_app_name', 'go-admin管理系统', 'Y', '1', '', 1, 0, '2021-03-17 08:52:06.067', '2021-05-28 10:08:25.248', NULL), +(5, '系统logo', 'sys_app_logo', 'https://gitee.com/mydearzwj/image/raw/master/img/go-admin.png', 'Y', '1', '', 1, 0, '2021-03-17 08:53:19.462', '2021-03-17 08:53:19.462', NULL); + +SET IDENTITY_INSERT sys_dept ON; +INSERT INTO sys_dept (dept_id, parent_id, dept_path, dept_name, sort, leader, phone, email, status, create_by, update_by, created_at, updated_at, deleted_at)VALUES +(1, 0, '/0/1/', '爱拓科技', 0, 'aituo', '13782218188', 'atuo@aituo.com', '2', 1, 1, '2021-05-13 19:56:37.913', '2021-06-05 17:06:44.960', NULL), +(7, 1, '/0/1/7/', '研发部', 1, 'aituo', '13782218188', 'atuo@aituo.com', '2', 1, 1, '2021-05-13 19:56:37.913', '2021-06-16 21:35:00.109', NULL), +(8, 1, '/0/1/8/', '运维部', 0, 'aituo', '13782218188', 'atuo@aituo.com', '2', 1, 1, '2021-05-13 19:56:37.913', '2021-06-16 21:41:39.747', NULL), +(9, 1, '/0/1/9/', '客服部', 0, 'aituo', '13782218188', 'atuo@aituo.com', '2', 1, 1, '2021-05-13 19:56:37.913', '2021-06-05 17:07:05.993', NULL), +(10, 1, '/0/1/10/', '人力资源', 3, 'aituo', '13782218188', 'atuo@aituo.com', '1', 1, 1, '2021-05-13 19:56:37.913', '2021-06-05 17:07:08.503', NULL); +SET IDENTITY_INSERT sys_dept OFF; + +INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, + status, "default", remark, create_by, update_by, created_at, updated_at, deleted_at)VALUES +(1, 0, '正常', '2', 'sys_normal_disable', '', '', '', '2', '', '系统正常', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:40.168', NULL); +INSERT INTO sys_dict_data VALUES (2, 0, '停用', '1', 'sys_normal_disable', '', '', '', '2', '', '系统停用', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (3, 0, '男', '0', 'sys_user_sex', '', '', '', '2', '', '性别男', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (4, 0, '女', '1', 'sys_user_sex', '', '', '', '2', '', '性别女', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (5, 0, '未知', '2', 'sys_user_sex', '', '', '', '2', '', '性别未知', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (6, 0, '显示', '0', 'sys_show_hide', '', '', '', '2', '', '显示菜单', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (7, 0, '隐藏', '1', 'sys_show_hide', '', '', '', '2', '', '隐藏菜单', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (8, 0, '是', 'Y', 'sys_yes_no', '', '', '', '2', '', '系统默认是', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (9, 0, '否', 'N', 'sys_yes_no', '', '', '', '2', '', '系统默认否', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (10, 0, '正常', '2', 'sys_job_status', '', '', '', '2', '', '正常状态', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (11, 0, '停用', '1', 'sys_job_status', '', '', '', '2', '', '停用状态', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (12, 0, '默认', 'DEFAULT', 'sys_job_group', '', '', '', '2', '', '默认分组', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (13, 0, '系统', 'SYSTEM', 'sys_job_group', '', '', '', '2', '', '系统分组', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (14, 0, '通知', '1', 'sys_notice_type', '', '', '', '2', '', '通知', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (15, 0, '公告', '2', 'sys_notice_type', '', '', '', '2', '', '公告', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (16, 0, '正常', '2', 'sys_common_status', '', '', '', '2', '', '正常状态', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (17, 0, '关闭', '1', 'sys_common_status', '', '', '', '2', '', '关闭状态', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (18, 0, '新增', '1', 'sys_oper_type', '', '', '', '2', '', '新增操作', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (19, 0, '修改', '2', 'sys_oper_type', '', '', '', '2', '', '修改操作', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (20, 0, '删除', '3', 'sys_oper_type', '', '', '', '2', '', '删除操作', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (21, 0, '授权', '4', 'sys_oper_type', '', '', '', '2', '', '授权操作', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (22, 0, '导出', '5', 'sys_oper_type', '', '', '', '2', '', '导出操作', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (23, 0, '导入', '6', 'sys_oper_type', '', '', '', '2', '', '导入操作', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (24, 0, '强退', '7', 'sys_oper_type', '', '', '', '2', '', '强退操作', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (25, 0, '生成代码', '8', 'sys_oper_type', '', '', '', '2', '', '生成操作', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (26, 0, '清空数据', '9', 'sys_oper_type', '', '', '', '2', '', '清空操作', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (27, 0, '成功', '0', 'sys_notice_status', '', '', '', '2', '', '成功状态', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (28, 0, '失败', '1', 'sys_notice_status', '', '', '', '2', '', '失败状态', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (29, 0, '登录', '10', 'sys_oper_type', '', '', '', '2', '', '登录操作', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (30, 0, '退出', '11', 'sys_oper_type', '', '', '', '2', '', '', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (31, 0, '获取验证码', '12', 'sys_oper_type', '', '', '', '2', '', '获取验证码', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_data VALUES (32, 0, '正常', '1', 'sys_content_status', '', '', '', '1', '', '', 1, 1, '2021-05-13 19:56:40.845', '2021-05-13 19:56:40.845', NULL); +INSERT INTO sys_dict_data VALUES (33, 1, '禁用', '2', 'sys_content_status', '', '', '', '1', '', '', 1, 1, '2021-05-13 19:56:40.845', '2021-05-13 19:56:40.845', NULL); + + +INSERT INTO sys_dict_type (dict_id, dict_name, dict_type, status, remark, create_by, update_by, created_at, updated_at, + deleted_at)VALUES (1, '系统开关', 'sys_normal_disable', '2', '系统开关列表', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_type VALUES (2, '用户性别', 'sys_user_sex', '2', '用户性别列表', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_type VALUES (3, '菜单状态', 'sys_show_hide', '2', '菜单状态列表', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_type VALUES (4, '系统是否', 'sys_yes_no', '2', '系统是否列表', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_type VALUES (5, '任务状态', 'sys_job_status', '2', '任务状态列表', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_type VALUES (6, '任务分组', 'sys_job_group', '2', '任务分组列表', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_type VALUES (7, '通知类型', 'sys_notice_type', '2', '通知类型列表', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_type VALUES (8, '系统状态', 'sys_common_status', '2', '登录状态列表', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_type VALUES (9, '操作类型', 'sys_oper_type', '2', '操作类型列表', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_type VALUES (10, '通知状态', 'sys_notice_status', '2', '通知状态列表', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:37.914', NULL); +INSERT INTO sys_dict_type VALUES (11, '内容状态', 'sys_content_status', '2', '', 1, 1, '2021-05-13 19:56:40.813', '2021-05-13 19:56:40.813', NULL); + + +INSERT INTO sys_job (job_id, job_name, job_group, job_type, cron_expression, invoke_target, args, misfire_policy, concurrent, status, entry_id, created_at, updated_at, deleted_at, create_by, update_by)VALUES +(1, '接口测试', 'DEFAULT', 1, '0/5 * * * * ', 'http://localhost:8000', '', 1, 1, 1, 0, '2021-05-13 19:56:37.914', '2021-06-14 20:59:55.417', NULL, 1, 1), +(2, '函数测试', 'DEFAULT', 2, '0/5 * * * * ', 'ExamplesOne', '参数', 1, 1, 1, 0, '2021-05-13 19:56:37.914', '2021-05-31 23:55:37.221', NULL, 1, 1); + +SET IDENTITY_INSERT sys_menu ON; +INSERT INTO sys_menu (menu_id, menu_name, title, icon, path, paths, menu_type, "action", permission, parent_id, no_cache, breadcrumb, component, sort, visible, is_frame, create_by, update_by, created_at, updated_at, deleted_at)VALUES +(2, 'Admin', '系统管理', 'api-server', '/admin', '/0/2', 'M', '无', '', 0, 1, '', 'Layout', 10, '0', '1', 0, 1, '2021-05-20 21:58:45.679', '2021-06-17 11:48:40.703', NULL), +(3, 'SysUserManage', '用户管理', 'user', '/admin/sys-user', '/0/2/3', 'C', '无', 'admin:sysUser:list', 2, 0, '', '/admin/sys-user/index', 10, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 20:31:14.305', NULL), +(43, '', '新增管理员', 'app-group-fill', '', '/0/2/3/43', 'F', 'POST', 'admin:sysUser:add', 3, 0, '', '', 10, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 20:31:14.305', NULL), +(44, '', '查询管理员', 'app-group-fill', '', '/0/2/3/44', 'F', 'GET', 'admin:sysUser:query', 3, 0, '', '', 40, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 20:31:14.305', NULL), +(45, '', '修改管理员', 'app-group-fill', '', '/0/2/3/45', 'F', 'PUT', 'admin:sysUser:edit', 3, 0, '', '', 30, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 20:31:14.305', NULL), +(46, '', '删除管理员', 'app-group-fill', '', '/0/2/3/46', 'F', 'DELETE', 'admin:sysUser:remove', 3, 0, '', '', 20, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 20:31:14.305', NULL), +(51, 'SysMenuManage', '菜单管理', 'tree-table', '/admin/sys-menu', '/0/2/51', 'C', '无', 'admin:sysMenu:list', 2, 1, '', '/admin/sys-menu/index', 30, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(52, 'SysRoleManage', '角色管理', 'peoples', '/admin/sys-role', '/0/2/52', 'C', '无', 'admin:sysRole:list', 2, 1, '', '/admin/sys-role/index', 20, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(56, 'SysDeptManage', '部门管理', 'tree', '/admin/sys-dept', '/0/2/56', 'C', '无', 'admin:sysDept:list', 2, 0, '', '/admin/sys-dept/index', 40, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(57, 'SysPostManage', '岗位管理', 'pass', '/admin/sys-post', '/0/2/57', 'C', '无', 'admin:sysPost:list', 2, 0, '', '/admin/sys-post/index', 50, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(58, 'Dict', '字典管理', 'education', '/admin/dict', '/0/2/58', 'C', '无', 'admin:sysDictType:list', 2, 0, '', '/admin/dict/index', 60, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(59, 'SysDictDataManage', '字典数据', 'education', '/admin/dict/data/:dictId', '/0/2/59', 'C', '无', 'admin:sysDictData:list', 2, 0, '', '/admin/dict/data', 100, '1', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(60, 'Tools', '开发工具', 'dev-tools', '/dev-tools', '/0/60', 'M', '无', '', 0, 0, '', 'Layout', 40, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-05 22:15:03.465', NULL), +(61, 'Swagger', '系统接口', 'guide', '/dev-tools/swagger', '/0/60/61', 'C', '无', '', 60, 0, '', '/dev-tools/swagger/index', 1, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-05 22:15:03.465', NULL), +(62, 'SysConfigManage', '参数管理', 'swagger', '/admin/sys-config', '/0/2/62', 'C', '无', 'admin:sysConfig:list', 2, 0, '', '/admin/sys-config/index', 70, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(211, 'Log', '日志管理', 'log', '/log', '/0/2/211', 'M', '', '', 2, 0, '', '/log/index', 80, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(212, 'SysLoginLogManage', '登录日志', 'logininfor', '/admin/sys-login-log', '/0/2/211/212', 'C', '', 'admin:sysLoginLog:list', 211, 0, '', '/admin/sys-login-log/index', 1, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(216, 'OperLog', '操作日志', 'skill', '/admin/sys-oper-log', '/0/2/211/216', 'C', '', 'admin:sysOperLog:list', 211, 0, '', '/admin/sys-oper-log/index', 1, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(220, '', '新增菜单', 'app-group-fill', '', '/0/2/51/220', 'F', '', 'admin:sysMenu:add', 51, 0, '', '', 1, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(221, '', '修改菜单', 'app-group-fill', '', '/0/2/51/221', 'F', '', 'admin:sysMenu:edit', 51, 0, '', '', 1, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(222, '', '查询菜单', 'app-group-fill', '', '/0/2/51/222', 'F', '', 'admin:sysMenu:query', 51, 0, '', '', 1, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(223, '', '删除菜单', 'app-group-fill', '', '/0/2/51/223', 'F', '', 'admin:sysMenu:remove', 51, 0, '', '', 1, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(224, '', '新增角色', 'app-group-fill', '', '/0/2/52/224', 'F', '', 'admin:sysRole:add', 52, 0, '', '', 1, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(225, '', '查询角色', 'app-group-fill', '', '/0/2/52/225', 'F', '', 'admin:sysRole:query', 52, 0, '', '', 1, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(226, '', '修改角色', 'app-group-fill', '', '/0/2/52/226', 'F', '', 'admin:sysRole:update', 52, 0, '', '', 1, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(227, '', '删除角色', 'app-group-fill', '', '/0/2/52/227', 'F', '', 'admin:sysRole:remove', 52, 0, '', '', 1, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(228, '', '查询部门', 'app-group-fill', '', '/0/2/56/228', 'F', '', 'admin:sysDept:query', 56, 0, '', '', 40, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(229, '', '新增部门', 'app-group-fill', '', '/0/2/56/229', 'F', '', 'admin:sysDept:add', 56, 0, '', '', 10, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(230, '', '修改部门', 'app-group-fill', '', '/0/2/56/230', 'F', '', 'admin:sysDept:edit', 56, 0, '', '', 30, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(231, '', '删除部门', 'app-group-fill', '', '/0/2/56/231', 'F', '', 'admin:sysDept:remove', 56, 0, '', '', 20, '0', '1', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(232, '', '查询岗位', 'app-group-fill', '', '/0/2/57/232', 'F', '', 'admin:sysPost:query', 57, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(233, '', '新增岗位', 'app-group-fill', '', '/0/2/57/233', 'F', '', 'admin:sysPost:add', 57, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(234, '', '修改岗位', 'app-group-fill', '', '/0/2/57/234', 'F', '', 'admin:sysPost:edit', 57, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(235, '', '删除岗位', 'app-group-fill', '', '/0/2/57/235', 'F', '', 'admin:sysPost:remove', 57, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(236, '', '查询字典', 'app-group-fill', '', '/0/2/58/236', 'F', '', 'admin:sysDictType:query', 58, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(237, '', '新增类型', 'app-group-fill', '', '/0/2/58/237', 'F', '', 'admin:sysDictType:add', 58, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(238, '', '修改类型', 'app-group-fill', '', '/0/2/58/238', 'F', '', 'admin:sysDictType:edit', 58, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(239, '', '删除类型', 'app-group-fill', '', '/0/2/58/239', 'F', '', 'system:sysdicttype:remove', 58, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(240, '', '查询数据', 'app-group-fill', '', '/0/2/59/240', 'F', '', 'admin:sysDictData:query', 59, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(241, '', '新增数据', 'app-group-fill', '', '/0/2/59/241', 'F', '', 'admin:sysDictData:add', 59, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(242, '', '修改数据', 'app-group-fill', '', '/0/2/59/242', 'F', '', 'admin:sysDictData:edit', 59, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(243, '', '删除数据', 'app-group-fill', '', '/0/2/59/243', 'F', '', 'admin:sysDictData:remove', 59, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(244, '', '查询参数', 'app-group-fill', '', '/0/2/62/244', 'F', '', 'admin:sysConfig:query', 62, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(245, '', '新增参数', 'app-group-fill', '', '/0/2/62/245', 'F', '', 'admin:sysConfig:add', 62, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(246, '', '修改参数', 'app-group-fill', '', '/0/2/62/246', 'F', '', 'admin:sysConfig:edit', 62, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(247, '', '删除参数', 'app-group-fill', '', '/0/2/62/247', 'F', '', 'admin:sysConfig:remove', 62, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(248, '', '查询登录日志', 'app-group-fill', '', '/0/2/211/212/248', 'F', '', 'admin:sysLoginLog:query', 212, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(249, '', '删除登录日志', 'app-group-fill', '', '/0/2/211/212/249', 'F', '', 'admin:sysLoginLog:remove', 212, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(250, '', '查询操作日志', 'app-group-fill', '', '/0/2/211/216/250', 'F', '', 'admin:sysOperLog:query', 216, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(251, '', '删除操作日志', 'app-group-fill', '', '/0/2/211/216/251', 'F', '', 'admin:sysOperLog:remove', 216, 0, '', '', 0, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-17 11:48:40.703', NULL), +(261, 'Gen', '代码生成', 'code', '/dev-tools/gen', '/0/60/261', 'C', '', '', 60, 0, '', '/dev-tools/gen/index', 2, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-16 21:26:12.446', NULL), +(262, 'EditTable', '代码生成修改', 'build', '/dev-tools/editTable', '/0/60/262', 'C', '', '', 60, 0, '', '/dev-tools/gen/editTable', 100, '1', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-16 21:26:12.446', NULL), +(264, 'Build', '表单构建', 'build', '/dev-tools/build', '/0/60/264', 'C', '', '', 60, 0, '', '/dev-tools/build/index', 1, '0', '1', 1, 1, '2020-04-11 15:52:48.000', '2021-06-16 21:26:12.446', NULL), +(269, 'ServerMonitor', '服务监控', 'druid', '/sys-tools/monitor', '/0/60/269', 'C', '', 'sysTools:serverMonitor:list', 537, 0, '', '/sys-tools/monitor', 0, '0', '1', 1, 1, '2020-04-14 00:28:19.000', '2021-06-16 21:26:12.446', NULL), +(459, 'Schedule', '定时任务', 'time-range', '/schedule', '/0/459', 'M', '无', '', 0, 0, '', 'Layout', 20, '0', '1', 1, 1, '2020-08-03 09:17:37.000', '2021-06-05 22:15:03.465', NULL), +(460, 'ScheduleManage', 'Schedule', 'job', '/schedule/manage', '/0/459/460', 'C', '无', 'job:sysJob:list', 459, 0, '', '/schedule/index', 0, '0', '1', 1, 1, '2020-08-03 09:17:37.000', '2021-06-05 22:15:03.465', NULL), +(461, 'sys_job', '分页获取定时任务', 'app-group-fill', '', '/0/459/460/461', 'F', '无', 'job:sysJob:query', 460, 0, '', '', 0, '0', '1', 1, 1, '2020-08-03 09:17:37.000', '2021-06-05 22:15:03.465', NULL), +(462, 'sys_job', '创建定时任务', 'app-group-fill', '', '/0/459/460/462', 'F', '无', 'job:sysJob:add', 460, 0, '', '', 0, '0', '1', 1, 1, '2020-08-03 09:17:37.000', '2021-06-05 22:15:03.465', NULL), +(463, 'sys_job', '修改定时任务', 'app-group-fill', '', '/0/459/460/463', 'F', '无', 'job:sysJob:edit', 460, 0, '', '', 0, '0', '1', 1, 1, '2020-08-03 09:17:37.000', '2021-06-05 22:15:03.465', NULL), +(464, 'sys_job', '删除定时任务', 'app-group-fill', '', '/0/459/460/464', 'F', '无', 'job:sysJob:remove', 460, 0, '', '', 0, '0', '1', 1, 1, '2020-08-03 09:17:37.000', '2021-06-05 22:15:03.465', NULL), +(471, 'JobLog', '日志', 'bug', '/schedule/log', '/0/459/471', 'C', '', '', 459, 0, '', '/schedule/log', 0, '1', '1', 1, 1, '2020-08-05 21:24:46.000', '2021-06-05 22:15:03.465', NULL), +(528, 'SysApiManage', '接口管理', 'api-doc', '/admin/sys-api', '/0/527/528', 'C', '无', 'admin:sysApi:list', 2, 0, '', '/admin/sys-api/index', 0, '0', '0', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(529, '', '查询接口', 'app-group-fill', '', '/0/527/528/529', 'F', '无', 'admin:sysApi:query', 528, 0, '', '', 40, '0', '0', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(531, '', '修改接口', 'app-group-fill', '', '/0/527/528/531', 'F', '无', 'admin:sysApi:edit', 528, 0, '', '', 30, '0', '0', 0, 1, '2021-05-20 22:08:44.526', '2021-06-17 11:48:40.703', NULL), +(537, 'SysTools', '系统工具', 'system-tools', '/sys-tools', '', 'M', '', '', 0, 0, '', 'Layout', 30, '0', '1', 1, 1, '2021-05-21 11:13:32.166', '2021-06-16 21:26:12.446', NULL), +(540, 'SysConfigSet', '参数设置', 'system-tools', '/admin/sys-config/set', '', 'C', '', 'admin:sysConfigSet:list', 2, 0, '', '/admin/sys-config/set', 0, '0', '1', 1, 1, '2021-05-25 16:06:52.560', '2021-06-17 11:48:40.703', NULL), +(542, '', '修改', 'upload', '', '', 'F', '', 'admin:sysConfigSet:update', 540, 0, '', '', 0, '0', '1', 1, 1, '2021-06-13 11:45:48.670', '2021-06-17 11:48:40.703', NULL); +SET IDENTITY_INSERT sys_menu OFF; +INSERT INTO sys_menu_api_rule (sys_menu_menu_id, sys_api_id)VALUES (216, 6); +(250, 6), +(58, 21), +(236, 21), +(238, 23), +(59, 24), +(240, 24), +(242, 25), +(58, 26), +(236, 26), +(56, 27), +(228, 27), +(230, 28), +(226, 29), +(51, 39), +(51, 135), +(222, 39), +(221, 41), +(52, 44), +(225, 44), +(226, 45), +(226, 46), +(226, 47), +(62, 53), +(244, 53), +(246, 54), +(57, 59), +(232, 59), +(234, 60), +(241, 80), +(237, 81), +(229, 82), +(245, 87), +(220, 88), +(233, 89), +(224, 90), +(531, 92), +(242, 101), +(238, 102), +(230, 103), +(226, 106), +(226, 107), +(246, 108), +(221, 109), +(234, 110), +(249, 114), +(251, 115), +(243, 120), +(239, 121), +(231, 122), +(247, 125), +(223, 126), +(235, 127), +(227, 128), +(528, 135), +(529, 135), +(531, 136), +(212, 137), +(248, 137), +(542, 139), +(540, 140), +(3, 141), +(44, 141), +(45, 142), +(43, 150), +(45, 151), +(46, 156); +INSERT INTO sys_post (post_id, post_name, post_code, sort, status, remark, create_by, update_by, created_at, updated_at, deleted_at)VALUES +(1, '首席执行官', 'CEO', 0, '2','首席执行官', 1, 1, '2021-05-13 19:56:37.913', '2021-05-13 19:56:37.913', NULL), +(2, '首席技术执行官', 'CTO', 2, '2','首席技术执行官', 1, 1,'2021-05-13 19:56:37.913', '2021-05-13 19:56:37.913', NULL), +(3, '首席运营官', 'COO', 3, '2','测试工程师', 1, 1,'2021-05-13 19:56:37.913', '2021-05-13 19:56:37.913', NULL); +INSERT INTO sys_role (role_id, role_name, status, role_key, role_sort, flag, remark, admin, data_scope, create_by, update_by, created_at, updated_at, deleted_at)VALUES +(1, '系统管理员', '2', 'admin', 1, '', '', 1, '', 1, 1, '2021-05-13 19:56:37.913', '2021-05-13 19:56:37.913', NULL); +INSERT INTO sys_user VALUES (1, 'admin', '$2a$10$/Glr4g9Svr6O0kvjsRJCXu3f0W8/dsP3XZyVNi1019ratWpSPMyw.', 'zhangwj', '13818888888', 1, '', '', '1', '1@qq.com', 1, 1, '', '2', 1, 1, '2021-05-13 19:56:37.914', '2021-05-13 19:56:40.205', NULL); +-- 数据完成 ; \ No newline at end of file diff --git a/config/settings.yml b/config/settings.yml index ca718615..8e7ed870 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -27,7 +27,8 @@ settings: # token 过期时间 单位:秒 timeout: 3600 database: - # 数据库类型 mysql,sqlite3, postgres + # 数据库类型 mysql, sqlite3, postgres, sqlserver + # sqlserver: sqlserver://用户名:密码@地址?database=数据库名 driver: mysql # 数据库连接字符串 mysql 缺省信息 charset=utf8&parseTime=True&loc=Local&timeout=1000ms source: user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local&timeout=1000ms @@ -70,4 +71,4 @@ settings: # blockingTimeout: 5 # reclaimInterval: 1 locker: - redis: + redis: \ No newline at end of file diff --git a/go.mod b/go.mod index 32f540c7..c28d385e 100644 --- a/go.mod +++ b/go.mod @@ -29,5 +29,6 @@ require ( gorm.io/driver/mysql v1.0.4-0.20201206014609-ae5fd10184f6 gorm.io/driver/postgres v1.0.6-0.20201208020313-1ed927cfab53 gorm.io/driver/sqlite v1.1.5-0.20201206014648-c84401fbe3ba + gorm.io/driver/sqlserver v1.0.4 gorm.io/gorm v1.21.11 -) +) \ No newline at end of file From f114424079b7e55ad5ad61af150a95acaf459cb4 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Sun, 13 Feb 2022 00:23:20 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix=F0=9F=90=9B:=20fix=20monitor=20macos=20?= =?UTF-8?q?env=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/other/apis/sys_server_monitor.go | 125 +++++++++++++++++++++------ go-admin-db.db | Bin 335872 -> 335872 bytes go.mod | 5 +- 3 files changed, 100 insertions(+), 30 deletions(-) diff --git a/app/other/apis/sys_server_monitor.go b/app/other/apis/sys_server_monitor.go index a8054052..a7a4172e 100644 --- a/app/other/apis/sys_server_monitor.go +++ b/app/other/apis/sys_server_monitor.go @@ -2,18 +2,21 @@ package apis import ( "fmt" - "github.com/shirou/gopsutil/host" + "github.com/shirou/gopsutil/v3/net" + "regexp" "runtime" "strconv" + "strings" "time" "github.com/gin-gonic/gin" "github.com/go-admin-team/go-admin-core/sdk/api" "github.com/go-admin-team/go-admin-core/sdk/pkg" _ "github.com/go-admin-team/go-admin-core/sdk/pkg/response" - "github.com/shirou/gopsutil/cpu" - "github.com/shirou/gopsutil/disk" - "github.com/shirou/gopsutil/mem" + "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v3/disk" + "github.com/shirou/gopsutil/v3/host" + "github.com/shirou/gopsutil/v3/mem" ) const ( @@ -23,11 +26,28 @@ const ( GB = 1024 * MB ) +var ( + Version string + expectDiskFsTypes = []string{ + "apfs", "ext4", "ext3", "ext2", "f2fs", "reiserfs", "jfs", "btrfs", + "fuseblk", "zfs", "simfs", "ntfs", "fat32", "exfat", "xfs", "fuse.rclone", + } + excludeNetInterfaces = []string{ + "lo", "tun", "docker", "veth", "br-", "vmbr", "vnet", "kube", + } + getMacDiskNo = regexp.MustCompile(`\/dev\/disk(\d)s.*`) +) + +var ( + netInSpeed, netOutSpeed, netInTransfer, netOutTransfer, lastUpdateNetStats uint64 + cachedBootTime time.Time +) + type ServerMonitor struct { api.Api } -//获取相差时间 +// GetHourDiffer 获取相差时间 func GetHourDiffer(startTime, endTime string) int64 { var hour int64 t1, err := time.ParseInLocation("2006-01-02 15:04:05", startTime, time.Local) @@ -64,33 +84,28 @@ func (e ServerMonitor) ServerInfo(c *gin.Context) { osDic["hostName"] = sysInfo.Hostname osDic["time"] = time.Now().Format("2006-01-02 15:04:05") - dis, _ := disk.Usage("/") - diskTotalGB := int(dis.Total) / GB - diskFreeGB := int(dis.Free) / GB - diskDic := make(map[string]interface{}, 0) - diskDic["total"] = diskTotalGB - diskDic["free"] = diskFreeGB - mem, _ := mem.VirtualMemory() - memUsedMB := int(mem.Used) / GB - memTotalMB := int(mem.Total) / GB - memFreeMB := int(mem.Free) / GB - memUsedPercent := int(mem.UsedPercent) memDic := make(map[string]interface{}, 0) - memDic["total"] = memTotalMB - memDic["used"] = memUsedMB - memDic["free"] = memFreeMB - memDic["usage"] = memUsedPercent + memDic["used"] = mem.Used / MB + memDic["total"] = mem.Total / MB + + fmt.Println("mem", int(mem.Total/mem.Used*100)) + memDic["percent"] = pkg.Round(mem.UsedPercent, 2) + + swapDic := make(map[string]interface{}, 0) + swapDic["used"] = mem.SwapTotal - mem.SwapFree + swapDic["total"] = mem.SwapTotal cpuDic := make(map[string]interface{}, 0) cpuDic["cpuInfo"], _ = cpu.Info() percent, _ := cpu.Percent(0, false) - cpuDic["Percent"] = pkg.Round(percent[0], 2) + cpuDic["percent"] = pkg.Round(percent[0], 2) cpuDic["cpuNum"], _ = cpu.Counts(false) //服务器磁盘信息 disklist := make([]disk.UsageStat, 0) //所有分区 + var diskTotal, diskUsed, diskUsedPercent float64 diskInfo, err := disk.Partitions(true) if err == nil { for _, p := range diskInfo { @@ -101,16 +116,72 @@ func (e ServerMonitor) ServerInfo(c *gin.Context) { diskDetail.Used = diskDetail.Used / 1024 / 1024 diskDetail.Free = diskDetail.Free / 1024 / 1024 disklist = append(disklist, *diskDetail) + } } } + d, _ := disk.Usage("/") + + diskTotal = float64(d.Total / GB) + diskUsed = float64(d.Used / GB) + diskUsedPercent, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", d.UsedPercent), 64) + + diskDic := make(map[string]interface{}, 0) + diskDic["total"] = diskTotal + diskDic["used"] = diskUsed + diskDic["percent"] = diskUsedPercent + + bootTime, _ := host.BootTime() + cachedBootTime = time.Unix(int64(bootTime), 0) + + TrackNetworkSpeed() + netDic := make(map[string]interface{}, 0) + netDic["in"] = pkg.Round(float64(netInSpeed/KB), 2) + netDic["out"] = pkg.Round(float64(netOutSpeed/KB), 2) e.Custom(gin.H{ - "code": 200, - "os": osDic, - "mem": memDic, - "cpu": cpuDic, - "disk": diskDic, - "diskList": disklist, + "code": 200, + "os": osDic, + "mem": memDic, + "cpu": cpuDic, + "disk": diskDic, + "net": netDic, + "swap": swapDic, + "location": "Aliyun", + "bootTime": GetHourDiffer(cachedBootTime.Format("2006-01-02 15:04:05"), time.Now().Format("2006-01-02 15:04:05")), }) } + +func TrackNetworkSpeed() { + var innerNetInTransfer, innerNetOutTransfer uint64 + nc, err := net.IOCounters(true) + if err == nil { + for _, v := range nc { + if isListContainsStr(excludeNetInterfaces, v.Name) { + continue + } + innerNetInTransfer += v.BytesRecv + innerNetOutTransfer += v.BytesSent + } + now := uint64(time.Now().Unix()) + diff := now - lastUpdateNetStats + if diff > 0 { + netInSpeed = (innerNetInTransfer - netInTransfer) / diff + fmt.Println("netInSpeed", netInSpeed) + netOutSpeed = (innerNetOutTransfer - netOutTransfer) / diff + fmt.Println("netOutSpeed", netOutSpeed) + } + netInTransfer = innerNetInTransfer + netOutTransfer = innerNetOutTransfer + lastUpdateNetStats = now + } +} + +func isListContainsStr(list []string, str string) bool { + for i := 0; i < len(list); i++ { + if strings.Contains(str, list[i]) { + return true + } + } + return false +} diff --git a/go-admin-db.db b/go-admin-db.db index 5152f46f01355ce66606ca35ebb7339afcce872c..ca8e07201def51a5fcf3b6866d6711da66da7a2c 100644 GIT binary patch delta 2143 zcmah~eQZ?47N41WX7Aq5+1-Aw6j`KDw6yFlR<>1Wp+y^7p{@1BK7wArT4E ztKuW_hpi=!F9u)h13#eJ!dfOi;$?;#mnS_HDo$!K6|KVI$I`6~b)9L(Eh4c$s`Fck1J%6x%z6+Kgq|1ZtT??f6HQ z8b1weNP2WTyTpEA-?1TMP^5O_K6YL1!f+%UluIieCVfStbd{yjEzgWIZ?|>}wKvW; z1q~!}Sc5{nIF4TGQOVfTvfRsvU1p=Qt3!;B{)1SMf)*jJx067MepJuVI<;)H$QUv% zNc#9AzD|R`VI1L37r9nk=pfIyz`lZx@$IjWqoTnN2Z-o9Oy(;fH#>rK5rQYuT>dr9 z+r*k0>LVU4PQM~<+|y6el9o$oN;9PCk%T(0DiUQ&k7=SclIB}>bf1?r|QNAK3>Vo{I*Cly)v=(;J!zu-<)n_L5~2k85BF}w~bibG-~j1OWDdPLr?Tlm6s z%H3YaHc`#Zc|3Fwu9NxQ&-!UuBE6o_XPId2xcvAcKj5dulj5vvsHM2UQDqIYv-#RL zVGb{yPM7j`&O^F5GM%m@Vt)*hF@Z;UM+~xfdxtD=Q$H;Eb<5{a;VP8<&p_)D+iDNn ztE>;KrRLM7ZR|FXzC-&#TjT!JU844=A=f@SMz_HQs8UWUS>$<=g!iH!(Rx|S4I=j} z9KwWd;$uA%X?AqOxDwuQ4)%f**kJN2=b)X?_2avWj>2uC_YF8s!6AP&#jbyWiWPE~ z$t9XIuGM!03i*}{nl7F^4m%)UYW1Tg#Om$O>`M8`dCU#QTSi3Rq8-%I-FK;d>SEVs z8lxrfHiVUD$R)BAJMxdSNvg~jOQK+7k^WEMs_N+TW#jY4zYHmb^7Dsa4LHklOqe|w4um3Gy;{5h@C>cK=nk%_i<^Pe}%h$aQTU3(uJ8pTdB+(Alm?OiX?8K2{ pU4XHg7~>hlJs05y8)}sIlmhY`QE@doBa3enK1%%{z8QgJ;};8mc((um delta 4615 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 Date: Sun, 13 Feb 2022 00:31:46 +0800 Subject: [PATCH 7/7] =?UTF-8?q?docs=F0=9F=93=9D:=20=20update=20version=202?= =?UTF-8?q?.0.9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/global/adm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/global/adm.go b/common/global/adm.go index 22da11c8..9755dc67 100644 --- a/common/global/adm.go +++ b/common/global/adm.go @@ -2,7 +2,7 @@ package global const ( // Version go-admin version info - Version = "2.0.8" + Version = "2.0.9" ) var (