From 9c8c12e44379105775b916b55adcbd298652ee26 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 17:03:23 +0800 Subject: [PATCH 001/130] =?UTF-8?q?fix:=20=E5=A4=9A=E8=AF=AD=E8=A8=80ne=5F?= =?UTF-8?q?info=5Fstatus=E5=8F=98=E6=9B=B4=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/i18n_data.xlsx | Bin 105423 -> 105462 bytes config/locales/i18n_table.xlsx | Bin 55622 -> 55769 bytes database/upgrade/upg_sys_dict_data.sql | 16 ++++++++++++---- .../upgrade/upg_sys_dict_data1_i18n_zh.sql | 8 ++++---- .../upgrade/upg_sys_dict_data2_i18n_en.sql | 8 ++++---- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/config/locales/i18n_data.xlsx b/config/locales/i18n_data.xlsx index 307172f595c0149fd5fb4a910207d94f962cdc09..f85f78a458d947e6a2cf84262b6920b6cb794eb1 100644 GIT binary patch delta 54822 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

*9*@Z{8z6 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

%xQB?9rUrD_`ov!+Gm@9VtOxVE@D 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 TfSUmom)n~G6$WgV0RR91;-YP( diff --git a/config/locales/i18n_table.xlsx b/config/locales/i18n_table.xlsx index a65e5b9d05c52e2b9245f91110482ff4d7637887..67105cddd121fe3fea7023a8b1f4f6b5017a1fa4 100644 GIT binary patch delta 40436 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

Ln(p$k_>C0m%XqZLNoJeIkbyd*w1 zZ_psWaqkVr*xs^6orimuY_I2W>KU3Wwvm`zT}7HR62)?XW%sxnINDxM7e7G+SM5qb zonHUD`q?u;SHP!2KE8PLx`SRvd#{Q_=uSKrP-J6!G5--?gjdYSTuG{_-mg*~Np$dbOZ*YGU3O*7IE= zHC^Y`iSySN@w9RZhOpzzKOV+?C6uXFjJHh4<{{9fz&LiB=f`Pl*hrL9|BjHsB5CGT zRwIk)&}EsF<48HRq~!JI_PSi0)RC^$%b}6=9CQIAj;~+0;uI@A!><*n9ETXjno`bv zcuTua*&s&fZpOXHUS2jeYD92cTPywwd2}F|$ z6ap@L^LM%%hQ4`Sd{6#KBzSG@bLAaB2gzO&xE=k;bn)%M@N#y!&ie8sa}nu^sZQ%# zR_8+yBj5eBe=q#ck-D3SZy9T~GiqqkM2XV{ZvX_@T%kg?i?6QAGcr>mUdtShb=o;r z=QWac37giJoBW%(H4*7%URenv90u6KUYr83A?Fs?L3`}IZ0t-M5ld`qxE+;rQE?o{ z0j96{MFfwHPWpYp7tK@cCZ`HIHoHn}4;(V4 zX@X%H=NN{?-N}WXo<>{jOULgrPL><=OmsOg2G*Eka0ufx6-M!*SE>d#o`R?Rns zhVL=wS0rRe!^TEI^DTL!N-K$c#0=2qZ)Y{9@@K`bKj}dcP4Wr1knmHkN0VM}2u5cG zklpoc9HP1Mfh_t9r+pYr={2?ji9fJ_%4rz zps&hDujR?Wv(zA|aZSf`QmWJGzTVeH-FM*--7YES{d~bOKJF~?r5F2?mj(?kmqpx) zT%59P7_0+pKm(0dl8i zzeV`NkVb`-kvc8;$1m~oN-4VpFivgd7{$faq@WRbvf4lF$6zQBPrupuuB-<4tZKFH zCLK5GJzz-mqhd}Vf5IVBI8)xbL(}X2Kwjm*gn)KDmTZ1#Mn_e*cx`STK{Lm znaCCn8}Ego_+T*kUdF6Ud|p&~ISBCGg+jSTQMuYvwZ`X9kqNqgEZLP_+mb=4J)41o zSBtcFtZZmm_=2q0ZSyW6{f&9PLQXvk2Erp%X}uU8tzEfn>dGs@Prg2!3465RZwd6T zzU2wvYxZZ-$KVMxA;(&3y(I3E{b=7@lC1Ov!8O*958>O#yAy|{MMT4L+Aw%vjU}F9 z0WsXd{j1k3{yw5J-SVjHr6%Pd$N5%GY(G|Tkl+{Hb5083;j;QfdSr}1_#C>VAVBTd zm5B@8NRaLueZf&~(W}86mEkL>Y5!$HMmGji6pf^8)dWZ6LZ}3XfWn*x)Luy2$}g8Y z+{owKTT#O3vSU5DH@^lXCa!1Iy$PxB=D(k~lOlaY;o|-}CvTPV z;*HX>bl#W6!S0Oi-#3RBTHB=F>l!Jf1rYnRLhaPik*qtz%l>S%pFV;BaM^kT2=D<{ zF!1e0L{VYiZ;Xgm6B1*0%-!?_ZchPXs}ekBlWE=W*lx8F8o>r#uRXtecpwGdCmxrr zHlV&j5yz>Ye*hVjbjBxcNV2oC%IIONYHN2?iA3;vMTBa?6{&`5&N=Ck9?SEwFc^(- z`K`%vUDUYZ%T-1i*>0djd9mcsB_gD#Gx9NLCBNk2JB)kUF%Kilm;0hs2djG2kA@Fr z{6C6MsN{?E;oOAYw7D4^3R#iP^|#L(zjF?eq{WT?*7dlHSG}BwE#|(8QV$WHIoa(| zBJDgMxKB*p{@F>j4_=xn$k&1O$tbc?D@y-XKpqP1@#A0*e9<*P^}rLlJhkT0acT?2FK4DB#+H9RKbz*z0oqcP~qqs*&F=URl)~ZXQnC zZ+IaW<%M*!t-coW(S!M#{&4o+dPI%l z%~O;oHz^8GfpYf-^=}UJR^kpME;WqPB1E*E@pI`O8M^%Wia4+{qVCq@Et#tVyYAQ)( z-_IRJ6Xf=d>}aBw-Q19xb^ngUIw_xk+7$h&@ADJF@{JqA3OC4zA2`NRdoFh))~yi>tgr33h#Zq30#RQwX*s7E@kisLaV!nT=z$dme2y% z95xl%fg6pbYa9(XmX^T>u z92-NXdraZt)EE^ks{KY5ae22s?KoxyU9S{SKoWuY*9rwzzekEnD{EgQN-Q-!uL|@) zY3TieDE=d+oP9abV)S`gbI<*8dcBrDEBFCTExQC6Y{kB3+T!sdJXy4GA!(09r_kBy zWoZGf1gTJ1J8^W;7Uo>OOdX2>d@HG9Wyy+8sU6n$ro~*4QA>2SYTY)I6SjuHu~8f% z&E8tTM&9Ts;T2yyF>1SuzD6K~^&(Z)$d5hT*$RiMPMh}($#L<;56hPuvpjw`{X0vao!-nN#!jpHo>{%ZEvAvD@LH6 z1_(ekoj&hX42*4W_C3^)Ud(#F^I~@^603dBt+b*i&)-o8fA4N)l=$q+4VRI-0Uha85arG0aR&*_E#q#tt<69kt! zEK6IqJP4N&O(D#`3H3df8kK~e|JghF0i=(xCm2*Q!4yXPROO5jlUs>HV@;yN0p&(` z>Z}%ny%w=Uuk}ol88ezc4+U76*!iBfH~`PiSto8(UR$6#!WEHoB4%2gs%Yq#q;a5- zn4FH1(EIJ^t?BOiLwy=KDc66emTuiR#5l*vr^C3coXI{(7L4fm+AFYJ&^OiwBZc=? zY%Ety8o$S^MMe+ruK0>Nr(cx6s%9oFIgwRSx(5**`-^CD057Tz^hf;GJCdSvy=m|~ zd)wVVXTgXxtnzzig)4-Nn!hpieL?dl)tus-)0jMuVzUinMsE@SL zCg|H13N%u!g)&^l#`j28?PI-KzB;cpl}XL}2M61}%_i-xmNa!x=aQgX7)E}O=$0JC zo$NqdvkBUpN&48s<)79%(U*>O84C^A4y+**d)}jbDr+=FikYu~Q*W|-z3&?lZKwWa z~n30i=TJ(gZQIW*0?l>w0p<0Asr$z$6wruVf z5JD1R#4a^5-k<5^@hA!y8;I+=eoek9>bCGgb?80~XZmF`iqXUp_KYRlev%;> zx{aSxV|#eFe!g~Rjv=Xna=unIRfSnlh@M`l6UhxM5|ER58yTxT9S@tG+je#$M?{oR z?h-vbs9B}M@}1IE?oLBOE8STKkOUeSBiLS|tEQB4Rg!1XlpYcV?pa3Uv*XzJfL~2H zcy00%e4Ef-wN<0aZ(U^c@>$6XyAxyei239N4Fz7>ec$2-7t=H76-^UNbvE7}OS}WE zF5g5w1-0Bsd(SlPqSt4}`IhY|)8f{iX(10EIqU+yj7f$aBr2%yKn+=!0$=9ye!2sFUq?jLip~U<~$l7(#U|lX9FAaW*N3MU*dPbI!_UlkVFeA zJl?ia1U{J|s?V-3?uH7r6 zC9G6W{D`GHVV_YtQBCa1@Ry9wq;c46%@XFtjdGM}i3i4oDwF;wcmI3}MKS1P`bBL= z11oRRL@viQ0g?U;ceqk1-$?bd$iCwU$yQiClCi4I`{mcRb1|XW?|1-@fkO+nAjid` zO_Qth4YNhrc}9%#D*kVJ0-d++SDSn6=5t>OXtWexGxg;;VwHbhPkd->Y}9x~rRUE| zdTjD*HMI0A{o5+s&ondkt$JRg6?P2O7q0XHD<3$kw7ze4vF(b(B=H1QKAaKGEBG`% zM8(~`{q!FGnTw6cvw7lIKn>G}CR3(CLM-}Rc_^GK`Vjd~MZq#0HF}k~`OO>;RrYxC zmDqDr2+1;quRENSt-C)OmO{?#2ccF5E!!maYF=={FynGl&%Btyfw#3yp@0ou=hVsLVNQEXx&>Rj`7dT&t4=>_T>6Cke$G|h%xOL z;y}SMIk8S6@cDkUfZbqxk5Q$rIlr5uZreU^j!qfPeb3sBhIdkT#fwniO(HUA@CiGm5dr4 z1ztp_3jksb(i*PQkW77|1o0bryBDz}UiEI}Xw43_%tNEJeq$Q-ij~S`SW3nBON(ui zVae3>K4O@%Q>0X_4Ovw<*PHfs^)gpdX3x0b-&jl~%#7JXa2SBOAJo>=er|7*F1I|R z4hCF%16m7kzwG?l=ez!V%=h_v>1|1B04q`D0Ms$x^)rZ`P68O|CgbfNlIVyqkIHzYD_$_0^}Vfi}I*hBhji@z5k zVSUvUSh=;p4rU}1vY{_KfTVVl$&jzF2C5~$I?huNzUce@zJ#Rj4m|_Bc(6}3pMLz_ zOoC);Hjzv~jM58Ai$0<*2Ckb>3vl0>n!P|#qek`O{V@j*pybKKQ<=hRY1casDe==c zM@gYjhk7j!qjva3r&4)1-B(p#pqS}8f3|xxF6*N+^1d6;h=)BEOE;A#B$?wD*_oRF zCK!!zw%~n?&!)B`73xnpF0p)@^n5(>IJ1qvUwuFNKzOjSVcgO|wKe$uWvU~Efamgj z0Zp_<(iDLZx+-zJBk%VfLN)ja_HOu^CFy#>qd0=^n7IU+bR7jdr1N}}eIo*_m_D98 zOBweIZ@*7*Dr?qw5hvh8;c?+?+t=m6*JiOTF6UPH0lr!-r2gjQpV)D`yX| zhdt4rouR}k_1JJ|=J%VoMUQ%W7}XhOFnakRq0!)jc+U9qMyMZ=pO}me_SX3;AUZi` z?tQMZR)BFL%k4;T%c~;7#dR&~bvA@I?jOnqD|DFN4UT5Y!>U<86DbU$t1FVZ^m)~2 zBlf)_CO8WB|8Pl`w zij2Y6we4chNwq%zLKZv`N}c%X2z~I)rkmkup8-+mx{^D`LWBJ`RekOHf_^zCMB<3v zV)wbNI`v(0G+hioiqgsap}L{_T=OG3UP`F>7ib;oAr%&g62;c%5q2_}Lx_oH67_gp z4rbIq7>NOU_?BcZaqBbP8}1+1udlNUGBBfRQfDUO5vk>1u5DgpEhMDZwbiHP7&d;G zka#J4cj}4QGGNKXi4xr}J;r9lBfStnhWj4IMWEP-lYSxC`qeZu?%erEOSC0kxhGsS zclp~;P7#sjQO7RP*srC_rloqhLz>AK&hwBP;Q5Zmbc<~=&f=0Onq2c}n6=AdJ(N(1 zxoYjKsYem`ADjnM*lH*W5AmXJI21qs5Wb$o%4jS(%xe~g^Kbb?I%#a!+OXvC){6FX z0b6)z{t04jhAu%5Arj~M2j;+docl3tZY>dfJ;@5u=fj_Cn@q#VJ&L!zKOo7)f2Ak& z21HeCP961p4&Nu@4ZF-=V^Lx+?$^P9&;kmnWNp5xyvtV~$UU(!*!kbUX*#(zJx!`tVB=_7y(uV8T7sg14d97%_| zT-AiIuhbu2lUy_BZGk^4Ss37V=zlXZ)-uC@@-SgDSoKDelf&6v%4T1S$W@2gy0o6%b+se#1(A^#Wayh=0P zW{6$ryTXbWWSuVvAz4Vv2&L~>-4+7w7)0fyWJsko~Vi=8w&6ePzpY?cKK7(N^_La?Zz;O8Hn7Yo>l?4&ST z!s)DqK7XupJe{#Z|Npu;)2O7gK8^#1O6kE|lW4Hf5GmIO+&;SvorAoac1T{9fGix#xVp@9w*M z?;hEU z$gxJn)X9xvtLH^tMk0I`zTB_CsQSIE04~=OdLn#0y(~)i)IB8}-wjt$nd)}6UwedKaR3?dr(>IToKPTKR#y9RMWO_;oJ$I>;@}|)qxBb1m9(NOH zg@>t7rOhX0_Kg+m(*#SI$d5Mx?4#SS4i^O$N4iW1y&c7pUZ+=K3cAFc3llSOM`EfI zmW@5Np!^x4Ffs17J+Q=&z1K1b1me@BUy1~N7Vk~X5Ume zn7kez#bIJ+o##J470Dr>-Q!bCn-}>F7xLdx&TGzboe@v&v2t8%ao94-DHO_t zH6G~&z5<6HBuXFs6jjcPV>A-B_b)}K8_zeKtFQjz=IT`ydkEPnHdxVjcvi9X`XOe&A#-RhUK9*N4Bx0C z_N;vTxg8juxq1=?RjXNZ$266cP&Hc_YWM8P4Qn5g1-4PWE%3-kx^MIz`GN9!Bd!bo zOZ4%kI1ZEbZcXcJ=hGmwKH}W+;j*YmB5znQHq?b#{GRm{a!){q0xkpD{K%9*l(8 zw2IQz`6QVQGs}uW!QERCS)R7j*Z_W`qx-3zMQ4TLW?o38)M z_^~9rrQ|yV27xAk?w9+hj=>TGISyPzou|92nf2HTG$QK$I6S~J2y}~)Q%*{4e37Z4 z6TbNAmp6`;L6$QlAo|L?80LUU=W#UOtDqOF4TLx-x|F>C-)z`oK-lLHd&SAzu@nAK zGc%f|$+Pvy>C=+3f&pikA|@LU$J7_S&cfqfrZj@%wX^QaFYTj>Ey6n><2BOrDaCGV zJzp;UM+@$YO*o?lOK7jwgUe%vfwSo^$Jc69J2K9Dz+iAr5nX*L1#kM9komLGWGiKq zHc3kSgFLEhsGVSu!y8)3T6EyUIttp!(|xw#g8?` zD!&z)b+LHLRL*SJxu0eN(jqR_%K=r(W9r6%j9hCw&5j;D(p*czRKr6+QnVpOM(12k zlX9kf&1yr%@Qm%X68ooda0}%N3 zRRTRI;&CJ`jDr<4i;`>ZT1dM SY-3p74jz7^BK=D6t@k&GN3pH| delta 40281 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 z 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 UQw(C@O6n;#jtfBG!zc3p0(nPJzyJUM diff --git a/database/upgrade/upg_sys_dict_data.sql b/database/upgrade/upg_sys_dict_data.sql index 629fd952..e37bad51 100644 --- a/database/upgrade/upg_sys_dict_data.sql +++ b/database/upgrade/upg_sys_dict_data.sql @@ -159,15 +159,23 @@ INSERT IGNORE INTO `sys_dict_data` VALUES (114, 0, 'dictData.ne_host_authMode.0' INSERT IGNORE INTO `sys_dict_data` VALUES (115, 1, 'dictData.ne_host_authMode.1', '1', 'ne_host_authMode', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (116, 0, 'dictData.ne_host_cmd_groupId.0', '0', 'ne_host_cmd_groupId', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (117, 1, 'dictData.ne_host_cmd_groupId.1', '1', 'ne_host_cmd_groupId', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (118, 0, 'dictData.ne_info_status.0', '0', 'ne_info_status', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (119, 1, 'dictData.ne_info_status.1', '1', 'ne_info_status', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (120, 2, 'dictData.ne_info_status.2', '2', 'ne_info_status', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (121, 3, 'dictData.ne_info_status.3', '3', 'ne_info_status', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (118, 0, 'dictData.ne_info_status.0', '0', 'ne_info_status', '', 'error', '1', 'supervisor', 1706620000000, 'supervisor', 1709642157849, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (119, 1, 'dictData.ne_info_status.1', '1', 'ne_info_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1709642164831, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (120, 2, 'dictData.ne_info_status.2', '2', 'ne_info_status', '', 'warning', '1', 'supervisor', 1706620000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (121, 3, 'dictData.ne_info_status.3', '3', 'ne_info_status', '', '', '1', 'supervisor', 1706620000000, 'supervisor', 1709642169871, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (122, 0, 'ne_license_status.0', '0', 'ne_license_status', '', 'warning', '1', 'supervisor', 1706620000000, 'supervisor', 1712720196537, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (123, 1, 'ne_license_status.1', '1', 'ne_license_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); -- 指定记录条件更新 UPDATE `sys_dict_data` SET `dict_value` = 'Module Tracing' WHERE `dict_code` = 3425; +UPDATE `sys_dict_data` SET `dict_value` = '离线' WHERE `dict_code` = 2111; +UPDATE `sys_dict_data` SET `dict_value` = '在线' WHERE `dict_code` = 2112; +UPDATE `sys_dict_data` SET `dict_value` = '等待同步' WHERE `dict_code` = 2113; +UPDATE `sys_dict_data` SET `dict_value` = '-' WHERE `dict_code` = 2114; +UPDATE `sys_dict_data` SET `dict_value` = 'Offline' WHERE `dict_code` = 4111; +UPDATE `sys_dict_data` SET `dict_value` = 'Online' WHERE `dict_code` = 4112; +UPDATE `sys_dict_data` SET `dict_value` = 'Wait Sync' WHERE `dict_code` = 4113; +UPDATE `sys_dict_data` SET `dict_value` = '-' WHERE `dict_code` = 4114; SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index 26e8926f..84b47b73 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -631,10 +631,10 @@ INSERT IGNORE INTO `sys_dict_data` VALUES (2107, 2107, 'neInfo.errKeyExists', ' INSERT IGNORE INTO `sys_dict_data` VALUES (2108, 2108, 'log.operate.title.imsCDR', 'IMS-CDR会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (2109, 2109, 'menu.dashboard.amfUE', 'UE', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (2110, 2110, 'log.operate.title.amfUE', 'AMF-UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '同步配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '等待同步', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (2115, 2115, 'dictType.ne_info_status', '网元信息状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (2116, 2116, 'menu.tools.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (2117, 2117, 'log.operate.title.neConfig', '网元参数配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index ee73ee0f..f073d796 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -631,10 +631,10 @@ INSERT IGNORE INTO `sys_dict_data` VALUES (4107, 4107, 'neInfo.errKeyExists', 'N INSERT IGNORE INTO `sys_dict_data` VALUES (4108, 4108, 'log.operate.title.imsCDR', 'IMS-CDR session', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (4109, 4109, 'menu.dashboard.amfUE', 'UE', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (4110, 4110, 'log.operate.title.amfUE', 'AMF-UE event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', 'Sync Config', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', 'Wait Sync', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (4115, 4115, 'dictType.ne_info_status', 'NE Info State', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (4116, 4116, 'menu.tools.neQuickSetup', 'NE Quick Setup', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (4117, 4117, 'log.operate.title.neConfig', 'NE Parameter Configuration', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); From 513a5bb5fe1f004eb5e9477100b2fad6e168a4e5 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 17:04:23 +0800 Subject: [PATCH 002/130] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Efstp=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BC=A0=E8=BE=93=E5=B7=A5=E5=85=B7=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 + go.sum | 8 ++ src/framework/utils/parse/parse.go | 58 ++++++++ src/framework/utils/ssh/ssh.go | 215 +++++++++++++++++++++++++++-- 4 files changed, 272 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 0dc59fa8..19b3fb72 100644 --- a/go.mod +++ b/go.mod @@ -49,6 +49,7 @@ require ( github.com/creack/pty v1.1.9 // indirect github.com/go-admin-team/go-admin-core v1.3.12-0.20221121065133-27b7dbe27a8f // indirect github.com/go-gsm/charset v1.0.0 // indirect + github.com/kr/fs v0.1.0 // indirect golang.org/x/sync v0.6.0 // indirect golang.org/x/time v0.1.0 // indirect ) @@ -112,6 +113,7 @@ require ( github.com/nyaruka/phonenumbers v1.0.55 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/pkg/sftp v1.13.6 github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/reiver/go-oi v1.0.0 // indirect github.com/richardlehane/mscfb v1.0.4 // indirect diff --git a/go.sum b/go.sum index 4e517ecd..942cbf71 100644 --- a/go.sum +++ b/go.sum @@ -435,6 +435,7 @@ github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZX github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -585,6 +586,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo= +github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -780,6 +783,7 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= @@ -868,6 +872,7 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= @@ -964,6 +969,7 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -974,6 +980,7 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= @@ -986,6 +993,7 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= diff --git a/src/framework/utils/parse/parse.go b/src/framework/utils/parse/parse.go index ff8145c0..49758619 100644 --- a/src/framework/utils/parse/parse.go +++ b/src/framework/utils/parse/parse.go @@ -1,8 +1,10 @@ package parse import ( + "encoding/json" "fmt" "image/color" + "os" "reflect" "regexp" "strconv" @@ -10,6 +12,7 @@ import ( "time" "github.com/robfig/cron/v3" + "gopkg.in/yaml.v3" ) // Number 解析数值型 @@ -165,3 +168,58 @@ func Color(colorStr string) *color.RGBA { A: 255, // 不透明 } } + +// ConvertConfigToMap 将配置内容转换为Map结构数据 +// +// configType 类型支持:txt json yaml yml +func ConvertConfigToMap(configType, content string) (map[string]any, error) { + // 类型支持:viper.SupportedExts + // config := viper.New() + // config.SetConfigType(configType) + // err := config.ReadConfig(bytes.NewBuffer([]byte(content))) + // return config.AllSettings(), err + + var configMap map[string]interface{} + var err error + if configType == "txt" { + configMap = map[string]interface{}{ + "txt": content, + } + } + if configType == "yaml" || configType == "yml" { + err = yaml.Unmarshal([]byte(content), &configMap) + } + if configType == "json" { + err = json.Unmarshal([]byte(content), &configMap) + } + return configMap, err +} + +// ConvertConfigToFile 将数据写入到指定文件内 +// +// configType 类型支持:txt json yaml yml +func ConvertConfigToFile(configType, filePath string, data any) error { + // viper.SupportedExts + // config := viper.New() + // config.SetConfigType(configType) + // for key, value := range mapData { + // config.Set(key, value) + // } + // return config.WriteConfigAs(filePath) + + var dataByte []byte + var err error + if configType == "" || configType == "txt" { + dataByte = []byte(data.(string)) + } + if configType == "yaml" || configType == "yml" { + dataByte, err = yaml.Marshal(data) + } + if configType == "json" { + dataByte, err = json.Marshal(data) + } + if err != nil { + return err + } + return os.WriteFile(filePath, dataByte, 0644) +} diff --git a/src/framework/utils/ssh/ssh.go b/src/framework/utils/ssh/ssh.go index 15423619..54ddb94a 100644 --- a/src/framework/utils/ssh/ssh.go +++ b/src/framework/utils/ssh/ssh.go @@ -6,12 +6,14 @@ import ( "io" "os" "os/user" + "path/filepath" "strings" "sync" "time" "be.ems/src/framework/logger" "be.ems/src/framework/utils/cmd" + gosftp "github.com/pkg/sftp" gossh "golang.org/x/crypto/ssh" ) @@ -239,12 +241,11 @@ func (s *SSHClientSession) Write(cmd string) (int, error) { return s.Stdin.Write([]byte(cmd)) } -// Read 读取结果 等待一会才有结果 +// Read 读取结果 func (s *SSHClientSession) Read() []byte { if s.Stdout == nil { return []byte{} } - // time.Sleep(300 * time.Millisecond) bs := s.Stdout.Bytes() if len(bs) > 0 { s.Stdout.Reset() @@ -253,15 +254,6 @@ func (s *SSHClientSession) Read() []byte { return []byte{} } -// CombinedOutput 发送命令带结果返回 -func (s *SSHClientSession) CombinedOutput(cmd string) (string, error) { - n, err := s.Write(cmd) - if n == 0 || err != nil { - return "", err - } - return string(s.Read()), nil -} - // singleWriter SSH客户端会话消息 type singleWriter struct { b bytes.Buffer @@ -283,3 +275,204 @@ func (w *singleWriter) Reset() { defer w.mu.Unlock() w.b.Reset() } + +// NewClientSFTP 创建SSH客户端SFTP对象 +func (c *ConnSSH) NewClientSFTP() (*SSHClientSFTP, error) { + sftpClient, err := gosftp.NewClient(c.Client) + if err != nil { + logger.Errorf("NewClientSFTP failed to create sftp: => %s", err.Error()) + return nil, err + } + + return &SSHClientSFTP{ + Client: sftpClient, + }, nil +} + +// SSHClientSFTP SSH客户端SFTP对象 +type SSHClientSFTP struct { + Client *gosftp.Client +} + +// Close 关闭会话 +func (s *SSHClientSFTP) Close() { + if s.Client != nil { + s.Client.Close() + } +} + +// CopyDirRemoteToLocal 复制目录-远程到本地 +func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error { + // 列出远程目录中的文件和子目录 + remoteFiles, err := s.Client.ReadDir(remoteDir) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to reading remote directory %s: => %s", remoteDir, err.Error()) + return err + } + + // 创建本地目录 + err = os.MkdirAll(localDir, 0755) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to creating local directory %s: => %s", localDir, err.Error()) + return err + } + + // 遍历远程文件和子目录并复制到本地 + for _, remoteFile := range remoteFiles { + remotePath := filepath.Join(remoteDir, remoteFile.Name()) + localPath := filepath.Join(localDir, remoteFile.Name()) + + if remoteFile.IsDir() { + // 如果是子目录,则递归复制子目录 + err = s.CopyDirRemoteToLocal(remotePath, localPath) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to copying remote directory %s: => %s", remotePath, err.Error()) + continue + } + } else { + // 如果是文件,则复制文件内容 + remoteFile, err := s.Client.Open(remotePath) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to opening remote file %s: => %s", remotePath, err.Error()) + continue + } + defer remoteFile.Close() + + localFile, err := os.Create(localPath) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to creating local file %s: => %s", localPath, err.Error()) + continue + } + defer localFile.Close() + + _, err = io.Copy(localFile, remoteFile) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to copying file contents from %s to %s: => %s", remotePath, localPath, err.Error()) + continue + } + } + } + return nil +} + +// CopyDirRemoteToLocal 复制目录-本地到远程 +func (s *SSHClientSFTP) CopyDirLocalToRemote(localDir, remoteDir string) error { + // 创建远程目录 + err := s.Client.MkdirAll(remoteDir) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remoteDir, err.Error()) + return err + } + + // 遍历本地目录中的文件和子目录并复制到远程 + err = filepath.Walk(localDir, func(localPath string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + // 生成远程路径 + remotePath := filepath.Join(remoteDir, localPath[len(localDir):]) + + if info.IsDir() { + // 如果是子目录,则创建远程目录 + err := s.Client.MkdirAll(remotePath) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error()) + return nil + } + } else { + // 如果是文件,则复制文件内容 + localFile, err := os.Open(localPath) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to opening local file %s: => %s", localPath, err.Error()) + return nil + } + defer localFile.Close() + + remoteFile, err := s.Client.Create(remotePath) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to creating remote file %s: => %s", remotePath, err.Error()) + return nil + } + defer remoteFile.Close() + + _, err = io.Copy(remoteFile, localFile) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to copying file contents from %s to %s: => %s", localPath, remotePath, err.Error()) + return nil + } + } + + return nil + }) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to walking local directory: => %s", err.Error()) + return err + } + return nil +} + +// CopyDirRemoteToLocal 复制文件-远程到本地 +func (s *SSHClientSFTP) CopyFileRemoteToLocal(remotePath, localPath string) error { + // 打开远程文件 + remoteFile, err := s.Client.Open(remotePath) + if err != nil { + logger.Errorf("CopyFileRemoteToLocal failed to opening remote file: => %s", err.Error()) + return err + } + defer remoteFile.Close() + + // 如果目标文件已经存在,先将目标文件重命名 + if info, err := os.Stat(localPath); err == nil && !info.IsDir() { + ext := filepath.Ext(localPath) + name := localPath[0 : len(localPath)-len(ext)] + newName := fmt.Sprintf("%s-%s%s", name, time.Now().Format("20060102_150405"), ext) + err := os.Rename(localPath, newName) + if err != nil { + return err + } + } + + // 创建本地文件 + localFile, err := os.Create(localPath) + if err != nil { + logger.Errorf("CopyFileRemoteToLocal failed to creating local file: => %s", err.Error()) + return err + } + defer localFile.Close() + + // 复制文件内容 + _, err = io.Copy(localFile, remoteFile) + if err != nil { + logger.Errorf("CopyFileRemoteToLocal failed to copying contents: => %s", err.Error()) + return err + } + return nil +} + +// CopyDirRemoteToLocal 复制文件-本地到远程 +func (s *SSHClientSFTP) CopyFileLocalToRemote(localPath, remotePath string) error { + // 打开本地文件 + localFile, err := os.Open(localPath) + if err != nil { + logger.Errorf("CopyFileLocalToRemote failed to opening local file: => %s", err.Error()) + return err + } + defer localFile.Close() + + // 创建远程文件 + remoteFile, err := s.Client.Create(remotePath) + if err != nil { + logger.Errorf("CopyFileLocalToRemote failed to creating remote file: => %s", err.Error()) + return err + } + defer remoteFile.Close() + + // 复制文件内容 + _, err = io.Copy(remoteFile, localFile) + if err != nil { + logger.Errorf("CopyFileLocalToRemote failed to copying contents: => %s", err.Error()) + return err + } + return nil +} From 5970a8b5f2ccc5ab5ed5f03ee05d1002cdac7657 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 17:07:23 +0800 Subject: [PATCH 003/130] =?UTF-8?q?feat:=20=E5=AE=89=E8=A3=85=E5=8C=85?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=88=B0=E7=BD=91=E5=85=83=E4=B8=BB=E6=9C=BA?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=AE=89=E8=A3=85=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_software.go | 34 ++-- .../network_element/service/ne_software.go | 7 +- .../service/ne_software.impl.go | 186 +++++++++++++++--- 3 files changed, 185 insertions(+), 42 deletions(-) diff --git a/src/modules/network_element/controller/ne_software.go b/src/modules/network_element/controller/ne_software.go index 03d1614c..54123045 100644 --- a/src/modules/network_element/controller/ne_software.go +++ b/src/modules/network_element/controller/ne_software.go @@ -151,40 +151,44 @@ func (s *NeSoftwareController) Remove(c *gin.Context) { c.JSON(200, result.OkMsg(msg)) } -// 网元软件包安装检查 +// 网元软件包安装 // -// POST /checkInstall -func (s *NeSoftwareController) CheckInstall(c *gin.Context) { +// POST /install +func (s *NeSoftwareController) Install(c *gin.Context) { language := ctx.AcceptLanguage(c) - var body model.NeSoftware + var body struct { + Action string `json:"action" binding:"required,oneof=install upgrade"` // 安装行为 + Software model.NeSoftware `json:"software" binding:"required"` // 软件包信息 + Preinput map[string]string `json:"preinput" binding:"required"` // 预先输入参数 + } err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.HostId == "" { + if err != nil || body.Software.HostId == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } // 检查是否存在软件包记录 neSoftwares := s.neSoftwareService.SelectList(model.NeSoftware{ - NeType: body.NeType, - Name: body.Name, - Version: body.Version, + NeType: body.Software.NeType, + Name: body.Software.Name, + Version: body.Software.Version, }) if len(neSoftwares) <= 0 { - body.CreateBy = ctx.LoginUserToUserName(c) - body.ID = s.neSoftwareService.Insert(body) + body.Software.CreateBy = ctx.LoginUserToUserName(c) + body.Software.ID = s.neSoftwareService.Insert(body.Software) } else { neSoftware := neSoftwares[0] - neSoftware.Path = body.Path - neSoftware.Description = body.Description + neSoftware.Path = body.Software.Path + neSoftware.Description = body.Software.Description neSoftware.UpdateBy = ctx.LoginUserToUserName(c) s.neSoftwareService.Update(neSoftware) } // 进行安装检查 - cmdStrArr, err := s.neSoftwareService.UploadToNeHost(body) + output, err := s.neSoftwareService.InstallToNeHost(body.Action, body.Software, body.Preinput) if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) return } - c.JSON(200, result.OkData(cmdStrArr)) + c.JSON(200, result.OkData(output)) } diff --git a/src/modules/network_element/service/ne_software.go b/src/modules/network_element/service/ne_software.go index 5f5e10f2..9ecfc09d 100644 --- a/src/modules/network_element/service/ne_software.go +++ b/src/modules/network_element/service/ne_software.go @@ -25,7 +25,8 @@ type INeSoftware interface { // CheckUniqueTypeAndNameAndVersion 校验网元类型和文件名版本是否唯一 CheckUniqueTypeAndNameAndVersion(neType, name, version, id string) bool - // UploadToNeHost 安装包上传到网元主机 - // 返回执行命令步骤 - UploadToNeHost(neSoftware model.NeSoftware) ([]string, error) + // InstallToNeHost 安装包上传到网元主机执行安装命令 + // + // action 安装行为:install upgrade + InstallToNeHost(action string, neSoftware model.NeSoftware, preinput map[string]string) (string, error) } diff --git a/src/modules/network_element/service/ne_software.impl.go b/src/modules/network_element/service/ne_software.impl.go index 77783a33..0c4cd6fa 100644 --- a/src/modules/network_element/service/ne_software.impl.go +++ b/src/modules/network_element/service/ne_software.impl.go @@ -5,6 +5,7 @@ import ( "os" "path/filepath" "strings" + "time" "be.ems/src/framework/utils/file" "be.ems/src/framework/utils/ssh" @@ -47,26 +48,66 @@ func (r *NeSoftwareImpl) SelectById(id string) model.NeSoftware { // Insert 新增信息 func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string { - return r.neSoftwareRepository.Insert(neSoftware) + inserId := r.neSoftwareRepository.Insert(neSoftware) + if inserId != "" { + // 更新同类型的新包版本 + neVersions := NewNeVersionImpl.SelectList(model.NeVersion{NeType: neSoftware.NeType}) + if len(neVersions) > 0 { + for _, neVersion := range neVersions { + neVersion.NewVersion = neSoftware.Version + neVersion.NewPath = neSoftware.Path + neVersion.Status = "3" + neVersion.UpdateBy = neSoftware.CreateBy + NewNeVersionImpl.Update(neVersion) + } + } + } + return inserId } // Update 修改信息 func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 { - return r.neSoftwareRepository.Update(neSoftware) + rows := r.neSoftwareRepository.Update(neSoftware) + if rows > 0 { + // 更新同类型的新包版本 + neVersions := NewNeVersionImpl.SelectList(model.NeVersion{ + NeType: neSoftware.NeType, + NewPath: neSoftware.Path, + Status: "3", + }) + if len(neVersions) > 0 { + for _, neVersion := range neVersions { + neVersion.NewVersion = neSoftware.Version + neVersion.UpdateBy = neSoftware.UpdateBy + NewNeVersionImpl.Update(neVersion) + } + } + } + return rows } // DeleteByIds 批量删除信息 func (r *NeSoftwareImpl) DeleteByIds(ids []string) (int64, error) { // 检查是否存在 - rowIds := r.neSoftwareRepository.SelectByIds(ids) - if len(rowIds) <= 0 { + rows := r.neSoftwareRepository.SelectByIds(ids) + if len(rows) <= 0 { return 0, fmt.Errorf("neSoftware.noData") } - if len(rowIds) == len(ids) { + if len(rows) == len(ids) { + // 遍历软件包列表进行文件删除 + for _, row := range rows { + // 检查文件是否存在 + filePath := file.ParseUploadFilePath(row.Path) + if _, err := os.Stat(filePath); err != nil { + continue + } + os.Remove(filePath) + } rows := r.neSoftwareRepository.DeleteByIds(ids) return rows, nil } + // 删除信息失败! return 0, fmt.Errorf("delete fail") } @@ -84,14 +125,14 @@ func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neType, name, version, return uniqueId == "" } -// UploadToNeHost 安装包上传到网元主机 -// 返回执行命令步骤 -func (r *NeSoftwareImpl) UploadToNeHost(neSoftware model.NeSoftware) ([]string, error) { - cmdStrArr := []string{} +// InstallToNeHost 安装包上传到网元主机执行安装命令 +// +// action 安装行为:install upgrade +func (r *NeSoftwareImpl) InstallToNeHost(action string, neSoftware model.NeSoftware, preinput map[string]string) (string, error) { // 检查文件是否存在 filePath := file.ParseUploadFilePath(neSoftware.Path) if _, err := os.Stat(filePath); err != nil { - return cmdStrArr, fmt.Errorf("file read failure") + return "", fmt.Errorf("file read failure") } fileName := filepath.Base(neSoftware.Path) if strings.Contains(fileName, "*") { @@ -103,35 +144,132 @@ func (r *NeSoftwareImpl) UploadToNeHost(neSoftware model.NeSoftware) ([]string, // 检查网元主机 neHostInfo := NewNeHostImpl.SelectById(neSoftware.HostId) if neHostInfo.HostType != "ssh" || neHostInfo.HostID != neSoftware.HostId { - return cmdStrArr, fmt.Errorf("no found host info") + return "", fmt.Errorf("no found host info") } // 上传软件包到 /tmp if err := ssh.FileSCPLocalToNe(neHostInfo.Addr, filePath, neFilePath); err != nil { - return cmdStrArr, fmt.Errorf("error uploading package") + return "", fmt.Errorf("error uploading package") } + // ========= 安装命令 start ========= + cmdStrArr := []string{} + // 命令终止结束标记 + okFlagStr := fmt.Sprintf("%s software %s successful!", neSoftware.NeType, action) // 安装软件包 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo dpkg -i %s", neFilePath)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo dpkg -i %s \n", neFilePath)) + // 预先参数 if neSoftware.NeType == "IMS" { + if !strings.Contains(fileName, "ims") { + return "", fmt.Errorf("error file package not ims") + } + // P/I/S-CSCF Config 配置覆盖 + if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("%s \n", pisCSCF)) + } // 公网 PLMN地址 - cmdStrArr = append(cmdStrArr, "sudo /usr/local/etc/ims/default/tools/modipplmn.sh {PUBIP} {MCC} {MNC}") + pubIP, pubIPOk := preinput["pubIP"] + mcc, mccOk := preinput["mcc"] + mnc, mncOk := preinput["mnc"] + if pubIPOk && pubIP != "" && mccOk && mcc != "" && mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", pubIP, mcc, mnc)) + } // 内网 服务地址 - cmdStrArr = append(cmdStrArr, "sudo /usr/local/etc/ims/default/tools/modintraip.sh {PRIIP}") - // 10s后停止服务 + if priIP, ok := preinput["priIP"]; ok && priIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", priIP)) + } cmdStrArr = append(cmdStrArr, "sudo ims-start") - cmdStrArr = append(cmdStrArr, `nohup sh -c "sleep 10s && sudo ims-stop" > /dev/null 2>&1 &`) - } else { // 10s后停止服务 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart", strings.ToLower(neSoftware.NeType))) - cmdStrArr = append(cmdStrArr, fmt.Sprintf(`nohup sh -c "sleep 10s && sudo service %s stop" > /dev/null 2>&1 &`, strings.ToLower(neSoftware.NeType))) + if action == "install" { + cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 15s && sudo ims-stop\" > /dev/null 2>&1 & \n") + } + } else if neSoftware.NeType == "OMC" { + cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart \n") + // 10s后停止服务 + if action == "install" { + cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 15s && sudo /usr/local/omc/bin/omcsvc.sh stop\" > /dev/null 2>&1 & \n") + } + } else { + neTypeLower := strings.ToLower(neSoftware.NeType) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) + // 10s后停止服务 + if action == "install" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 15s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) + } } // 删除软件包 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s", neFilePath)) - + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", neFilePath)) // 结束 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s software install successful!'", neSoftware.NeType)) - return cmdStrArr, nil + cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) + // ========= 安装命令 end ========= + + // ssh连接客户端 + var connSSH ssh.ConnSSH + neHostInfo.CopyTo(&connSSH) + client, err := connSSH.NewClient() + if err != nil { + return "", fmt.Errorf("neinfo ssh client new err") + } + defer client.Close() + // ssh连接会话 + clientSession, err := client.NewClientSession(80, 24) + if err != nil { + return "", fmt.Errorf("neinfo ssh client session new err") + } + defer clientSession.Close() + + firstRead := true // 首次命令进行记录日志信息 + logMsg := "" // 日志信息 + done := make(chan bool) // 完成信号 + // 实时读取SSH消息直接输出 + msTicker := time.NewTicker(100 * time.Millisecond) + defer msTicker.Stop() + // 超时退出 + timeoutTicker := time.NewTicker(30 * time.Second) + defer timeoutTicker.Stop() + go func() { + for { + select { + case <-timeoutTicker.C: + done <- true + return + case <-msTicker.C: + outputByte := clientSession.Read() + if len(outputByte) > 0 { + outputStr := string(outputByte) + // 非首次进行记录命令 + if !firstRead { + logMsg += outputStr + } + // IMS预输入 + if neSoftware.NeType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? ") { + shiftElement := cmdStrArr[0] // 获取第一个元素 + cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除 + clientSession.Write(shiftElement) + continue + } + // 命令终止符后继续执行命令 + if len(cmdStrArr) > 0 && strings.LastIndex(outputStr, "~$ ") > 2 { + if firstRead { + firstRead = false + } + shiftElement := cmdStrArr[0] // 获取第一个元素 + cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除 + clientSession.Write(shiftElement) + continue + } + // 最后输出的退出标记 + if strings.LastIndex(outputStr, okFlagStr) > 5 { + done <- true + break + } + } + } + } + }() + // 等待写入协程完成 + <-done + return logMsg, nil } From ebd02cb3e99f6ecc3783fd3a443e7131739cb168 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 17:11:24 +0800 Subject: [PATCH 004/130] =?UTF-8?q?ref:=20=E7=BD=91=E5=85=83=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E6=BF=80=E6=B4=BB=E6=8E=88=E6=9D=83code/change/state?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_license.go | 99 +++++++++---------- .../network_element/model/ne_license.go | 5 +- .../network_element/service/ne_license.go | 8 +- .../service/ne_license.impl.go | 61 ++++++++---- 4 files changed, 94 insertions(+), 79 deletions(-) diff --git a/src/modules/network_element/controller/ne_license.go b/src/modules/network_element/controller/ne_license.go index 7022df85..1795655c 100644 --- a/src/modules/network_element/controller/ne_license.go +++ b/src/modules/network_element/controller/ne_license.go @@ -37,6 +37,14 @@ func (s *NeLicenseController) List(c *gin.Context) { querys := ctx.QueryMap(c) data := s.neLicenseService.SelectPage(querys) + // 过滤屏蔽授权文件 + rows := data["rows"].([]model.NeLicense) + arr := &rows + for i := range *arr { + (*arr)[i].ActivationRequestCode = "-" + (*arr)[i].LicensePath = "-" + } + c.JSON(200, result.Ok(data)) } @@ -73,24 +81,17 @@ func (s *NeLicenseController) Add(c *gin.Context) { return } - // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeId) - if neInfo.NeId != body.NeId || neInfo.IP == "" { - c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) - return - } - // 检查属性值唯一 - uniqueInfo := s.neLicenseService.CheckUniqueTypeAndID(neInfo.NeType, neInfo.NeId, "") + uniqueInfo := s.neLicenseService.CheckUniqueTypeAndID(body.NeType, body.NeId, "") if !uniqueInfo { // 网元授权激活操作【%s】失败,网元类型信息已存在 - msg := i18n.TTemplate(language, "neLicense.errKeyExists", map[string]any{"name": neInfo.NeType}) + msg := i18n.TTemplate(language, "neLicense.errKeyExists", map[string]any{"name": body.NeType}) c.JSON(200, result.ErrMsg(msg)) return } // 读取授权码 - code, _ := s.neLicenseService.ReadLicenseInfo(neInfo) + code, _ := s.neLicenseService.ReadLicenseInfo(body) body.ActivationRequestCode = code body.CreateBy = ctx.LoginUserToUserName(c) @@ -180,15 +181,8 @@ func (s *NeLicenseController) Code(c *gin.Context) { return } - // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeId) - if neInfo.NeId != querys.NeId || neInfo.IP == "" { - c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) - return - } - // 检查是否存在授权记录 - neLicense := s.neLicenseService.SelectByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) + neLicense := s.neLicenseService.SelectByNeTypeAndNeID(querys.NeType, querys.NeId) if neLicense.NeId != querys.NeId { // 没有可访问网元授权激活数据! c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) @@ -196,7 +190,7 @@ func (s *NeLicenseController) Code(c *gin.Context) { } // 更新授权码 - code, licensePath := s.neLicenseService.ReadLicenseInfo(neInfo) + code, licensePath := s.neLicenseService.ReadLicenseInfo(neLicense) neLicense.ActivationRequestCode = code if licensePath != "" { neLicense.LicensePath = licensePath @@ -218,7 +212,7 @@ func (s *NeLicenseController) Change(c *gin.Context) { language := ctx.AcceptLanguage(c) var body model.NeLicense err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.HostId == "" { + if err != nil || body.LicensePath == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -226,23 +220,30 @@ func (s *NeLicenseController) Change(c *gin.Context) { // 检查是否存在授权记录 neLicense := s.neLicenseService.SelectByNeTypeAndNeID(body.NeType, body.NeId) if neLicense.NeId != body.NeId { - body.Status = "0" - body.CreateBy = ctx.LoginUserToUserName(c) - body.ID = s.neLicenseService.Insert(body) - } else { - neLicense.LicensePath = body.LicensePath - neLicense.Status = "0" - neLicense.UpdateBy = ctx.LoginUserToUserName(c) - s.neLicenseService.Update(neLicense) - } - - // 进行上传替换 - err = s.neLicenseService.UploadToNeHost(body) - if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) + // 没有可访问网元授权激活数据! + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) return } - c.JSON(200, result.Ok(nil)) + + // 更新授权记录 + if body.Remark != "" { + neLicense.Remark = body.Remark + } + neLicense.LicensePath = body.LicensePath + neLicense.Status = "0" + neLicense.UpdateBy = ctx.LoginUserToUserName(c) + upRows := s.neLicenseService.Update(neLicense) + if upRows > 0 { + // 进行上传替换 + err = s.neLicenseService.UploadLicense(body) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.JSON(200, result.Ok(nil)) + return + } + c.JSON(200, result.Err(nil)) } // 网元授权激活状态 @@ -259,35 +260,31 @@ func (s *NeLicenseController) State(c *gin.Context) { return } - // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeId) - if neInfo.NeId != querys.NeId || neInfo.IP == "" { - c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) - return - } - // 检查是否存在授权记录 - neLicense := s.neLicenseService.SelectByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) + neLicense := s.neLicenseService.SelectByNeTypeAndNeID(querys.NeType, querys.NeId) if neLicense.NeId != querys.NeId { // 没有可访问网元授权激活数据! c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) return } - // 查询网元状态 - neState, err := neService.NeState(neInfo) - if err != nil { - c.JSON(200, result.ErrMsg("network element service anomaly")) + // 查询网元获取IP获取网元状态 + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neLicense.NeType, neLicense.NeId) + if neInfo.NeId != neLicense.NeId || neInfo.IP == "" { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return } + neLicense.Status = "0" + if neState, err := neService.NeState(neInfo); err == nil { + neLicense.SerialNum = fmt.Sprint(neState["sn"]) + neLicense.ExpiryDate = fmt.Sprint(neState["expire"]) + neLicense.Status = "1" + } // 更新授权信息 - neLicense.SerialNum = fmt.Sprint(neState["sn"]) - neLicense.ExpiryDate = fmt.Sprint(neState["expire"]) - code, licensePath := s.neLicenseService.ReadLicenseInfo(neInfo) + code, licensePath := s.neLicenseService.ReadLicenseInfo(neLicense) neLicense.ActivationRequestCode = code neLicense.LicensePath = licensePath - neLicense.Status = "1" neLicense.UpdateBy = ctx.LoginUserToUserName(c) rows := s.neLicenseService.Update(neLicense) if rows > 0 { diff --git a/src/modules/network_element/model/ne_license.go b/src/modules/network_element/model/ne_license.go index 2f202bc6..de0c36df 100644 --- a/src/modules/network_element/model/ne_license.go +++ b/src/modules/network_element/model/ne_license.go @@ -9,7 +9,7 @@ type NeLicense struct { LicensePath string `json:"licensePath" gorm:"license_path"` // 激活授权文件 SerialNum string `json:"serialNum" gorm:"serial_num"` // 序列号 ExpiryDate string `json:"expiryDate" gorm:"expiry_date"` // 许可证到期日期 - Status string `json:"status" gorm:"status"` // 状态 ''ACTIVE'',''INACTIVE'',''PENDING'' + Status string `json:"status" gorm:"status"` // 状态 0无效 1有效 ''ACTIVE'',''INACTIVE'',''PENDING'' Remark string `json:"remark" gorm:"remark"` // 备注 CreateBy string `json:"createBy" gorm:"create_by"` // 创建者 CreateTime int64 `json:"createTime" gorm:"create_time"` // 创建时间 @@ -18,8 +18,7 @@ type NeLicense struct { // ====== 非数据库字段属性 ====== - Reload bool `json:"reload,omitempty" gorm:"-"` // 刷新重启网元 - HostId string `json:"hostId,omitempty" gorm:"-"` // 已记录的主机ID + Reload bool `json:"reload,omitempty" gorm:"-"` // 刷新重启网元 } // TableName 表名称 diff --git a/src/modules/network_element/service/ne_license.go b/src/modules/network_element/service/ne_license.go index c5ea23a1..ab91a77a 100644 --- a/src/modules/network_element/service/ne_license.go +++ b/src/modules/network_element/service/ne_license.go @@ -29,9 +29,9 @@ type INeLicense interface { SelectByNeTypeAndNeID(neType, neId string) model.NeLicense // ReadLicenseInfo 读取授权文件信息 - // 激活申请码, 激活文件 - ReadLicenseInfo(neInfo model.NeInfo) (string, string) + // 返回激活申请码, 激活文件 + ReadLicenseInfo(neLicense model.NeLicense) (string, string) - // UploadToNeHost 授权文件上传到网元主机 - UploadToNeHost(neLicense model.NeLicense) error + // UploadLicense 授权文件上传到网元主机 + UploadLicense(neLicense model.NeLicense) error } diff --git a/src/modules/network_element/service/ne_license.impl.go b/src/modules/network_element/service/ne_license.impl.go index d41b1918..4b1fd11f 100644 --- a/src/modules/network_element/service/ne_license.impl.go +++ b/src/modules/network_element/service/ne_license.impl.go @@ -8,7 +8,6 @@ import ( "time" "be.ems/src/framework/utils/file" - "be.ems/src/framework/utils/ssh" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" ) @@ -109,64 +108,84 @@ func (r *NeLicenseImpl) SelectByNeTypeAndNeID(neType, neId string) model.NeLicen } // ReadLicenseInfo 读取授权文件信息 -// 激活申请码, 激活文件 -func (r *NeLicenseImpl) ReadLicenseInfo(neInfo model.NeInfo) (string, string) { - neTypeLower := strings.ToLower(neInfo.NeType) +// 返回激活申请码, 激活文件 +func (r *NeLicenseImpl) ReadLicenseInfo(neLicense model.NeLicense) (string, string) { + neTypeLower := strings.ToLower(neLicense.NeType) // 网管本地路径 omcPath := "/usr/local/etc/omc/ne_license" if runtime.GOOS == "windows" { omcPath = fmt.Sprintf("C:%s", omcPath) } - omcPath = fmt.Sprintf("%s/%s/%s", omcPath, neTypeLower, neInfo.NeId) + omcPath = fmt.Sprintf("%s/%s/%s", omcPath, neTypeLower, neLicense.NeId) // 网元端授权文件路径 nePath := fmt.Sprintf("/usr/local/etc/%s/license", neTypeLower) - // 复制授权申请码到本地 - err := ssh.FileSCPNeToLocal(neInfo.IP, nePath+"/Activation_request_code.txt", omcPath+"/Activation_request_code.txt") + // 网元主机的SSH客户端 + sshclient, err := NewNeInfoImpl.NeRunSSHclient(neLicense.NeType, neLicense.NeId) if err != nil { return "", "" } + defer sshclient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshclient.NewClientSFTP() + if err != nil { + return "", "" + } + defer sftpClient.Close() + + // 复制授权申请码到本地 + if err = sftpClient.CopyFileRemoteToLocal(nePath+"/Activation_request_code.txt", omcPath+"/Activation_request_code.txt"); err != nil { + return "", "" + } // 读取文件内容 bytes, err := os.ReadFile(omcPath + "/Activation_request_code.txt") if err != nil { return "", "" } - // 激活文件 + // 复制激活文件到本地 licensePath := "" - if err = ssh.FileSCPNeToLocal(neInfo.IP, nePath+"/system.ini", omcPath+"/system.ini"); err == nil { + if err = sftpClient.CopyFileRemoteToLocal(nePath+"/system.ini", omcPath+"/system.ini"); err == nil { licensePath = omcPath + "/system.ini" } return strings.TrimSpace(string(bytes)), licensePath } -// UploadToNeHost 授权文件上传到网元主机 -func (r *NeLicenseImpl) UploadToNeHost(neLicense model.NeLicense) error { - +// UploadLicense 授权文件上传到网元主机 +func (r *NeLicenseImpl) UploadLicense(neLicense model.NeLicense) error { // 检查文件是否存在 omcLicensePath := file.ParseUploadFilePath(neLicense.LicensePath) if _, err := os.Stat(omcLicensePath); err != nil { return fmt.Errorf("file read failure") } - // 检查网元主机 - neHostInfo := NewNeHostImpl.SelectById(neLicense.HostId) - if neHostInfo.HostType != "ssh" || neHostInfo.HostID != neLicense.HostId { - return fmt.Errorf("no found host info") - } - // 网元端授权文件路径 neTypeLower := strings.ToLower(neLicense.NeType) neLicensePath := fmt.Sprintf("/usr/local/etc/%s/license", neTypeLower) // 修改文件夹权限 NewNeInfoImpl.NeRunCMD(neLicense.NeType, neLicense.NeId, fmt.Sprintf("sudo chmod o+w %s/", neLicensePath)) + NewNeInfoImpl.NeRunCMD(neLicense.NeType, neLicense.NeId, fmt.Sprintf("sudo chmod o+w %s/system.ini", neLicensePath)) // 尝试备份授权文件 neLicensePathBack := fmt.Sprintf("%s/system_%s.ini", neLicensePath, time.Now().Format("20060102_150405")) NewNeInfoImpl.NeRunCMD(neLicense.NeType, neLicense.NeId, fmt.Sprintf("sudo cp -rf %s/system.ini %s", neLicensePath, neLicensePathBack)) + + // 网元主机的SSH客户端 + sshclient, err := NewNeInfoImpl.NeRunSSHclient(neLicense.NeType, neLicense.NeId) + if err != nil { + return err + } + defer sshclient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshclient.NewClientSFTP() + if err != nil { + return err + } + defer sftpClient.Close() + // 上传授权文件去覆盖 - NewNeInfoImpl.NeRunCMD(neLicense.NeType, neLicense.NeId, fmt.Sprintf("sudo chmod o+w %s/system.ini", neLicensePath)) - if err := ssh.FileSCPLocalToNe(neHostInfo.Addr, omcLicensePath, neLicensePath+"/system.ini"); err != nil { - return fmt.Errorf("error uploading license") + err = sftpClient.CopyFileLocalToRemote(omcLicensePath, neLicensePath+"/system.ini") + if err != nil { + return err } // 重启服务 From ca0f047f22eefb5d924a2ed818ef4d2c0712e9a7 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 17:12:37 +0800 Subject: [PATCH 005/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=87=BD=E6=95=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/model/ne_version.go | 2 +- src/modules/network_element/repository/ne_version.impl.go | 6 +++--- src/modules/network_element/service/ne_version.go | 4 ++-- src/modules/network_element/service/ne_version.impl.go | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/modules/network_element/model/ne_version.go b/src/modules/network_element/model/ne_version.go index 50f21cc2..30f73498 100644 --- a/src/modules/network_element/model/ne_version.go +++ b/src/modules/network_element/model/ne_version.go @@ -11,7 +11,7 @@ type NeVersion struct { PrePath string `json:"prePath" gorm:"pre_path"` // 上一版本软件包 NewVersion string `json:"newVersion" gorm:"new_version"` // 下一版本 NewPath string `json:"newPath" gorm:"new_path"` // 下一版本软件包 - Status string `json:"status" gorm:"status"` // 当前状态 (Uploaded下一版本上传 Inactive下一版本待激活 Active当前已激活) + Status string `json:"status" gorm:"status"` // 当前状态 1当前版本 2上一版本 3有新版本 (Uploaded下一版本上传 Inactive下一版本待激活 Active当前已激活) CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者 CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间 UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者 diff --git a/src/modules/network_element/repository/ne_version.impl.go b/src/modules/network_element/repository/ne_version.impl.go index 7eebfec7..5991abd8 100644 --- a/src/modules/network_element/repository/ne_version.impl.go +++ b/src/modules/network_element/repository/ne_version.impl.go @@ -76,8 +76,8 @@ func (r *NeVersionImpl) SelectPage(query map[string]any) map[string]any { conditions = append(conditions, "version like concat(?, '%')") params = append(params, strings.Trim(v.(string), " ")) } - if v, ok := query["filePath"]; ok && v != "" { - conditions = append(conditions, "file_path like concat(?, '%')") + if v, ok := query["path"]; ok && v != "" { + conditions = append(conditions, "path like concat(?, '%')") params = append(params, strings.Trim(v.(string), " ")) } @@ -108,7 +108,7 @@ func (r *NeVersionImpl) SelectPage(query map[string]any) map[string]any { // 分页 pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " limit ?,? " + pageSql := " order by update_time desc limit ?,? " params = append(params, pageNum*pageSize) params = append(params, pageSize) diff --git a/src/modules/network_element/service/ne_version.go b/src/modules/network_element/service/ne_version.go index d0ebc058..5e86b679 100644 --- a/src/modules/network_element/service/ne_version.go +++ b/src/modules/network_element/service/ne_version.go @@ -22,8 +22,8 @@ type INeVersion interface { // DeleteByIds 批量删除信息 DeleteByIds(ids []string) (int64, error) - // SelectByTypeAndID 通过网元类型和网元ID查询 - SelectByTypeAndID(neType, neId string) model.NeVersion + // SelectByNeTypeAndNeID 通过网元类型和网元ID查询 + SelectByNeTypeAndNeID(neType, neId string) model.NeVersion // CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一 CheckUniqueTypeAndID(neType, neId, id string) bool diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index d3f4f08b..5e2df893 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -66,8 +66,8 @@ func (r *NeVersionImpl) DeleteByIds(ids []string) (int64, error) { return 0, fmt.Errorf("delete fail") } -// SelectByTypeAndID 通过网元类型和网元ID查询 -func (r *NeVersionImpl) SelectByTypeAndID(neType, neId string) model.NeVersion { +// SelectByNeTypeAndNeID 通过网元类型和网元ID查询 +func (r *NeVersionImpl) SelectByNeTypeAndNeID(neType, neId string) model.NeVersion { neVersions := r.neVersionRepository.SelectList(model.NeVersion{ NeType: neType, NeId: neId, From bc599ec5b0800473e1ec6473d44ce4a72569501d Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 17:13:54 +0800 Subject: [PATCH 006/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=96=B0=E5=A2=9E=E6=9B=B4=E6=96=B0=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=89=88=E6=9C=AC=E5=92=8C=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_info.go | 115 +++++++++++--- src/modules/network_element/model/ne_info.go | 11 +- .../repository/ne_info.impl.go | 21 ++- .../network_element/service/ne_info.go | 12 +- .../network_element/service/ne_info.impl.go | 140 +++++++++++------- 5 files changed, 209 insertions(+), 90 deletions(-) diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index 55c10c3f..a204572e 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -17,15 +17,21 @@ import ( // 实例化控制层 NeInfoController 结构体 var NewNeInfo = &NeInfoController{ - neInfoService: neService.NewNeInfoImpl, + neInfoService: neService.NewNeInfoImpl, + neLicenseService: neService.NewNeLicenseImpl, + neVersionService: neService.NewNeVersionImpl, } // 网元信息请求 // -// PATH / +// PATH /info type NeInfoController struct { // 网元信息服务 neInfoService neService.INeInfo + // 网元授权激活信息服务 + neLicenseService neService.INeLicense + // 网元版本信息服务 + neVersionService neService.INeVersion } // neStateCacheMap 网元状态缓存最后一次成功的信息 @@ -146,7 +152,8 @@ func (s *NeInfoController) ConfigFileRead(c *gin.Context) { var querys struct { NeType string `form:"neType" binding:"required"` NeID string `form:"neId" binding:"required"` - FilePath string `form:"filePath"` // 不带文件路径时进行复制覆盖本地网元配置目录 + FilePath string `form:"filePath"` // 不带文件路径时进行复制覆盖本地网元配置目录 + FileType string `form:"fileType" binding:"oneof='' txt json yaml yml"` // 根据指定文件类型进行解析序列出map->json } if err := c.ShouldBindQuery(&querys); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) @@ -160,16 +167,8 @@ func (s *NeInfoController) ConfigFileRead(c *gin.Context) { return } - data := s.neInfoService.NeConfigFileRead(neInfo, querys.FilePath) - if querys.FilePath == "" { - c.JSON(200, result.OkData(data)) - return - } - if len(data) > 0 { - c.JSON(200, result.OkData(data[0])) - return - } - c.JSON(200, result.ErrMsg("no data")) + data := s.neInfoService.NeConfigFileRead(neInfo, querys.FilePath, querys.FileType) + c.JSON(200, result.OkData(data)) } // 网元端配置文件写入 @@ -181,8 +180,9 @@ func (s *NeInfoController) ConfigFileWrite(c *gin.Context) { NeType string `json:"neType" binding:"required"` NeID string `json:"neId" binding:"required"` FilePath string `json:"filePath" binding:"required"` - Content string `json:"content" binding:"required"` - Sync bool `json:"sync"` + FileType string `json:"fileType" binding:"oneof='' txt json yaml yml"` // 解析内容数据到对应文件类型 + Content any `json:"content" binding:"required"` // 内容 + Sync bool `json:"sync"` // 同步到网元 } if err := c.ShouldBindJSON(&body); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) @@ -196,7 +196,7 @@ func (s *NeInfoController) ConfigFileWrite(c *gin.Context) { return } - err := s.neInfoService.NeConfigFileWirte(neInfo, body.FilePath, body.Content, body.Sync) + err := s.neInfoService.NeConfigFileWirte(neInfo, body.FilePath, body.FileType, body.Content, body.Sync) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -260,19 +260,50 @@ func (s *NeInfoController) Add(c *gin.Context) { } // 获取网元状态是否正常 - _, err = neService.NeState(body) + body.ServerState, err = neService.NeState(body) if err != nil { - body.Status = "1" + body.Status = "0" } else { // 下发网管配置信息给网元 _, err = neService.NeConfigOMC(body) if err == nil { - body.Status = "0" + body.Status = "1" } else { - body.Status = "3" + body.Status = "2" } } + loginUserName := ctx.LoginUserToUserName(c) + // 新增Version信息 + neVersion := model.NeVersion{ + NeType: body.NeType, + NeId: body.NeId, + CreateBy: loginUserName, + } + // 新增License信息 + neLicense := model.NeLicense{ + NeType: body.NeType, + NeId: body.NeId, + CreateBy: loginUserName, + } + + // 已有网元可获取的信息 + if body.ServerState != nil { + if v, ok := body.ServerState["version"]; ok && v != nil { + neVersion.Version = v.(string) + } + if v, ok := body.ServerState["sn"]; ok && v != nil { + neLicense.SerialNum = v.(string) + } + if v, ok := body.ServerState["expire"]; ok && v != nil { + neLicense.ExpiryDate = v.(string) + neLicense.Status = "1" + } + } + + s.neVersionService.Insert(neVersion) + s.neLicenseService.Insert(neLicense) + body.UpdateBy = loginUserName insertId := s.neInfoService.Insert(body) if insertId != "" { c.JSON(200, result.Ok(nil)) @@ -311,19 +342,55 @@ func (s *NeInfoController) Edit(c *gin.Context) { } // 获取网元状态是否正常 - _, err = neService.NeState(body) + body.ServerState, err = neService.NeState(body) if err != nil { - body.Status = "1" + body.Status = "0" } else { // 下发网管配置信息给网元 _, err = neService.NeConfigOMC(body) if err == nil { - body.Status = "0" + body.Status = "1" } else { - body.Status = "3" + body.Status = "2" } } + loginUserName := ctx.LoginUserToUserName(c) + neLicense := s.neLicenseService.SelectByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) + neVersion := s.neVersionService.SelectByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) + + // 已有网元可获取的信息 + if body.ServerState != nil { + if v, ok := body.ServerState["version"]; ok && v != nil { + neVersion.Version = v.(string) + neVersion.UpdateBy = loginUserName + } + if v, ok := body.ServerState["sn"]; ok && v != nil { + neLicense.SerialNum = v.(string) + } + if v, ok := body.ServerState["expire"]; ok && v != nil { + neLicense.ExpiryDate = v.(string) + neLicense.Status = "1" + neLicense.UpdateBy = loginUserName + } + } + + if neVersion.NeType != body.NeType || neVersion.NeId != body.NeId { + neVersion.NeType = body.NeType + neVersion.NeId = body.NeId + } + if neVersion.ID != "" { + s.neVersionService.Update(neVersion) + } + if neLicense.NeType != body.NeType || neLicense.NeId != body.NeId { + neVersion.NeType = body.NeType + neVersion.NeId = body.NeId + } + if neLicense.ID != "" { + s.neLicenseService.Update(neLicense) + } + + body.UpdateBy = loginUserName rows := s.neInfoService.Update(body) if rows > 0 { c.JSON(200, result.Ok(nil)) diff --git a/src/modules/network_element/model/ne_info.go b/src/modules/network_element/model/ne_info.go index c08e71a0..59ce4b71 100644 --- a/src/modules/network_element/model/ne_info.go +++ b/src/modules/network_element/model/ne_info.go @@ -10,13 +10,14 @@ type NeInfo struct { IP string `json:"ip" binding:"required"` Port int64 `json:"port" binding:"required,number,max=65535,min=1"` PvFlag string `json:"pvFlag" binding:"oneof=PNF VNF"` // enum('PNF','VNF') - Province string `json:"province"` + Province string `json:"province"` // 省份地域 VendorName string `json:"vendorName"` Dn string `json:"dn"` - NeAddress string `json:"neAddress"` - Status string `json:"status"` // 0: 在线 1: 下线 2: 备用 3: 待下发配置 - UpdateTime string `json:"updateTime"` - HostIDs string `json:"hostIds"` // 网元主机ID组 数据格式(ssh,telnet,telnet) + NeAddress string `json:"neAddress"` // MAC地址 + Status string `json:"status"` // 0离线 1在线 2配置待下发 + UpdateBy string `json:"updateBy"` // 更新者 + UpdateTime string `json:"updateTime"` // 更新时间 + HostIDs string `json:"hostIds"` // 网元主机ID组 数据格式(ssh,telnet,telnet) // ====== 非数据库字段属性 ====== diff --git a/src/modules/network_element/repository/ne_info.impl.go b/src/modules/network_element/repository/ne_info.impl.go index 85fdea50..cd06d84a 100644 --- a/src/modules/network_element/repository/ne_info.impl.go +++ b/src/modules/network_element/repository/ne_info.impl.go @@ -34,7 +34,7 @@ var neListSort = []string{ // 实例化数据层 NeInfoImpl 结构体 var NewNeInfoImpl = &NeInfoImpl{ - selectSql: `select id, ne_type, ne_id, rm_uid, ne_name, ip, port, pv_flag, province, vendor_name, dn, ne_address, status, update_time, host_ids from ne_info`, + selectSql: `select id, ne_type, ne_id, rm_uid, ne_name, ip, port, pv_flag, province, vendor_name, dn, ne_address, status, update_time, update_by, host_ids from ne_info`, resultMap: map[string]string{ "id": "ID", @@ -51,6 +51,7 @@ var NewNeInfoImpl = &NeInfoImpl{ "ne_address": "NeAddress", "status": "Status", "update_time": "UpdateTime", + "update_by": "UpdateBy", "host_ids": "HostIDs", }, } @@ -298,8 +299,13 @@ func (r *NeInfoImpl) Insert(neInfo model.NeInfo) string { if neInfo.NeAddress != "" { params["ne_address"] = neInfo.NeAddress } - params["status"] = neInfo.Status - params["update_time"] = time.Now() + if neInfo.Status != "" { + params["status"] = neInfo.Status + } + if neInfo.UpdateBy != "" { + params["update_by"] = neInfo.UpdateBy + params["update_time"] = time.Now().UnixMilli() + } if neInfo.HostIDs != "" { params["host_ids"] = neInfo.HostIDs } @@ -360,8 +366,13 @@ func (r *NeInfoImpl) Update(neInfo model.NeInfo) int64 { params["vendor_name"] = neInfo.VendorName params["dn"] = neInfo.Dn params["ne_address"] = neInfo.NeAddress - params["status"] = neInfo.Status - params["update_time"] = time.Now() + if neInfo.Status != "" { + params["status"] = neInfo.Status + } + if neInfo.UpdateBy != "" { + params["update_by"] = neInfo.UpdateBy + params["update_time"] = time.Now().UnixMilli() + } if neInfo.HostIDs != "" { params["host_ids"] = neInfo.HostIDs } diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index a667c017..2c523bc9 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -1,6 +1,9 @@ package service -import "be.ems/src/modules/network_element/model" +import ( + "be.ems/src/framework/utils/ssh" + "be.ems/src/modules/network_element/model" +) // 网元信息 服务层接口 type INeInfo interface { @@ -46,9 +49,12 @@ type INeInfo interface { // NeRunCMD 向网元发送cmd命令 NeRunCMD(neType, neId, cmd string) (string, error) + // NeRunSSHclient 网元主机的SSH客户端-为创建相关连接 + NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) + // NeConfigFileRead 网元配置文件读取 网元配置yaml文件复制到本地后通过filePath读取 - NeConfigFileRead(neInfo model.NeInfo, filePath string) []string + NeConfigFileRead(neInfo model.NeInfo, filePath, fileType string) any // NeConfigFileWirte 网元配置文件写入 content内容 sync同步到网元端 - NeConfigFileWirte(neInfo model.NeInfo, filePath, content string, sync bool) error + NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType string, content any, sync bool) error } diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index af2c0bdb..9aef3bce 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -10,6 +10,7 @@ import ( "be.ems/src/framework/constants/cachekey" "be.ems/src/framework/logger" "be.ems/src/framework/redis" + "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/ssh" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" @@ -18,15 +19,12 @@ import ( // 实例化服务层 NeInfoImpl 结构体 var NewNeInfoImpl = &NeInfoImpl{ neInfoRepository: repository.NewNeInfoImpl, - neHostRepository: repository.NewNeHostImpl, } // 网元信息 服务层处理 type NeInfoImpl struct { // 网元信息数据信息 neInfoRepository repository.INeInfo - // 网元主机连接表 - neHostRepository repository.INeHost } // SelectNeInfoByNeTypeAndNeID 通过ne_type和ne_id查询网元信息 @@ -126,8 +124,8 @@ func (r *NeInfoImpl) SelectPage(query map[string]any, bandStatus bool) map[strin "online": false, } // 网元状态设置为离线 - if v.Status != "1" { - v.Status = "1" + if v.Status != "0" { + v.Status = "0" (*arr)[i].Status = v.Status r.neInfoRepository.Update(v) } @@ -136,13 +134,13 @@ func (r *NeInfoImpl) SelectPage(query map[string]any, bandStatus bool) map[strin result["online"] = true (*arr)[i].ServerState = result // 网元状态设置为在线 - if v.Status != "0" { + if v.Status != "1" { // 下发网管配置信息给网元 _, err = NeConfigOMC(v) - if err != nil { - v.Status = "3" + if err == nil { + v.Status = "1" } else { - v.Status = "0" + v.Status = "2" } (*arr)[i].Status = v.Status r.neInfoRepository.Update(v) @@ -170,8 +168,8 @@ func (r *NeInfoImpl) SelectList(ne model.NeInfo, bandStatus bool) []model.NeInfo "online": false, } // 网元状态设置为离线 - if v.Status != "1" { - v.Status = "1" + if v.Status != "0" { + v.Status = "0" (*neList)[i].Status = v.Status r.neInfoRepository.Update(v) } @@ -183,10 +181,10 @@ func (r *NeInfoImpl) SelectList(ne model.NeInfo, bandStatus bool) []model.NeInfo if v.Status != "0" { // 下发网管配置信息给网元 _, err = NeConfigOMC(v) - if err != nil { - v.Status = "3" + if err == nil { + v.Status = "1" } else { - v.Status = "0" + v.Status = "2" } (*neList)[i].Status = v.Status r.neInfoRepository.Update(v) @@ -209,7 +207,7 @@ func (r *NeInfoImpl) SelectById(infoId string, bandHost bool) model.NeInfo { neInfo := neInfos[0] // 带主机信息 if neInfo.HostIDs != "" && bandHost { - neInfo.Hosts = r.neHostRepository.SelectByIds(strings.Split(neInfo.HostIDs, ",")) + neInfo.Hosts = NewNeHostImpl.neHostRepository.SelectByIds(strings.Split(neInfo.HostIDs, ",")) } return neInfo } @@ -224,7 +222,7 @@ func (r *NeInfoImpl) Insert(neInfo model.NeInfo) string { for _, host := range neInfo.Hosts { host.Title = fmt.Sprintf("%s_%s_%d", strings.ToUpper(neInfo.NeType), neInfo.NeId, host.Port) host.GroupID = "1" - hostId := r.neHostRepository.Insert(host) + hostId := NewNeHostImpl.Insert(host) if hostId != "" { hostIDs = append(hostIDs, hostId) } @@ -248,7 +246,7 @@ func (r *NeInfoImpl) Update(neInfo model.NeInfo) int64 { if host.HostID != "" { host.Title = fmt.Sprintf("%s_%s_%d", strings.ToUpper(neInfo.NeType), neInfo.NeId, host.Port) host.GroupID = "1" - r.neHostRepository.Update(host) + NewNeHostImpl.Update(host) } } } @@ -274,7 +272,17 @@ func (r *NeInfoImpl) DeleteByIds(infoIds []string) (int64, error) { // 主机信息删除 if v.HostIDs != "" { hostIds := strings.Split(v.HostIDs, ",") - r.neHostRepository.DeleteByIds(hostIds) + NewNeHostImpl.DeleteByIds(hostIds) + } + // 删除License + neLicense := NewNeLicenseImpl.SelectByNeTypeAndNeID(v.NeType, v.NeId) + if neLicense.NeId == v.NeId { + NewNeLicenseImpl.DeleteByIds([]string{neLicense.ID}) + } + // 删除Version + neVersion := NewNeVersionImpl.SelectByNeTypeAndNeID(v.NeType, v.NeId) + if neVersion.NeId == v.NeId { + NewNeVersionImpl.DeleteByIds([]string{neVersion.ID}) } // 缓存信息删除 key := fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, v.NeType, v.NeId) @@ -301,47 +309,56 @@ func (r *NeInfoImpl) CheckUniqueNeTypeAndNeId(neType, neId, infoId string) bool // NeRunCMD 向网元发送cmd命令 func (r *NeInfoImpl) NeRunCMD(neType, neId, cmd string) (string, error) { - neInfo := r.SelectNeInfoByNeTypeAndNeID(neType, neId) - if neInfo.NeId != neId { - logger.Errorf("NeRunCMD NeType:%s NeID:%s not found", neType, neId) - return "", fmt.Errorf("neinfo not found") - } - // 带主机信息 - if neInfo.HostIDs != "" { - neInfo.Hosts = r.neHostRepository.SelectByIds(strings.Split(neInfo.HostIDs, ",")) - if len(neInfo.Hosts) <= 0 { - logger.Errorf("NeRunCMD Hosts %s not found", neInfo.HostIDs) - return "", fmt.Errorf("neinfo host not found") - } - } - - neHost := neInfo.Hosts[0] - if neHost.HostType != "ssh" { - logger.Errorf("NeRunCMD Hosts first HostType %s not ssh", neHost.HostType) - return "", fmt.Errorf("neinfo host type not ssh") - } - var connSSH ssh.ConnSSH - neHost.CopyTo(&connSSH) - client, err := connSSH.NewClient() + sshClient, err := r.NeRunSSHclient(neType, neId) if err != nil { - logger.Errorf("NeRunCMD NewClient err => %s", err.Error()) - return "", fmt.Errorf("neinfo ssh client new err") + return "", err } - defer client.Close() + defer sshClient.Close() // 执行命令 - output, err := client.RunCMD(cmd) + output, err := sshClient.RunCMD(cmd) if err != nil { logger.Errorf("NeRunCMD RunCMD %s err => %s", output, err.Error()) return "", fmt.Errorf("neinfo ssh run cmd err") } - return output, nil } +// NeRunSSHclient 网元主机的SSH客户端-为创建相关连接 +func (r *NeInfoImpl) NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) { + neInfo := r.SelectNeInfoByNeTypeAndNeID(neType, neId) + if neInfo.NeId != neId { + logger.Errorf("NeRunSSHclient NeType:%s NeID:%s not found", neType, neId) + return nil, fmt.Errorf("neinfo not found") + } + // 取主机信息 + if neInfo.HostIDs == "" { + logger.Errorf("NeRunSSHclient NeType:%s NeID:%s hostId not found", neType, neId) + return nil, fmt.Errorf("neinfo hostId not found") + } + neInfo.Hosts = NewNeHostImpl.neHostRepository.SelectByIds(strings.Split(neInfo.HostIDs, ",")) + if len(neInfo.Hosts) <= 0 { + logger.Errorf("NeRunSSHclient Hosts %s not found", neInfo.HostIDs) + return nil, fmt.Errorf("neinfo host not found") + } + neHost := neInfo.Hosts[0] + if neHost.HostType != "ssh" { + logger.Errorf("NeRunSSHclient Hosts first HostType %s not ssh", neHost.HostType) + return nil, fmt.Errorf("neinfo host type not ssh") + } + + var connSSH ssh.ConnSSH + neHost.CopyTo(&connSSH) + client, err := connSSH.NewClient() + if err != nil { + logger.Errorf("NeRunSSHclient NewClient err => %s", err.Error()) + return nil, fmt.Errorf("neinfo ssh client new err") + } + return client, nil +} + // NeConfigFileRead 网元配置文件读取 网元配置yaml文件复制到本地后通过filePath读取 -func (r *NeInfoImpl) NeConfigFileRead(neInfo model.NeInfo, filePath string) []string { - files := []string{} +func (r *NeInfoImpl) NeConfigFileRead(neInfo model.NeInfo, filePath, fileType string) any { neTypeLower := strings.ToLower(neInfo.NeType) // 网管本地路径 @@ -356,12 +373,23 @@ func (r *NeInfoImpl) NeConfigFileRead(neInfo model.NeInfo, filePath string) []st bytes, err := os.ReadFile(fmt.Sprintf("%s/%s", omcPath, filePath)) if err != nil { logger.Warnf("NeConfigFile ReadFile => %s", err.Error()) - return files + return "read file error" } - files = append(files, string(bytes)) - return files + content := string(bytes) + if fileType == "" || fileType == "txt" { + return content + } + // 序列化Map + mapData, err := parse.ConvertConfigToMap(fileType, content) + if err != nil { + logger.Warnf("NeConfigFile ConvertConfigToMap => %s", err.Error()) + return "content convert type error" + } + return mapData } + // 文件列表 + files := []string{} // 删除原有配置文件 // err := os.RemoveAll(omcPath) // if err != nil { @@ -373,7 +401,7 @@ func (r *NeInfoImpl) NeConfigFileRead(neInfo model.NeInfo, filePath string) []st nePath := "/usr/local/etc" nePath = fmt.Sprintf("%s/%s", nePath, neTypeLower) - // 各个网元与网元间约定配置文件 + // 各个网元与网管间约定配置文件 err := ssh.FileSCPNeToLocal(neInfo.IP, nePath+"/oam_manager.yaml", omcPath+"/oam_manager.yaml") if err == nil { files = append(files, "oam_manager.yaml") @@ -402,7 +430,7 @@ func (r *NeInfoImpl) NeConfigFileRead(neInfo model.NeInfo, filePath string) []st } // NeConfigFileWirte 网元配置文件写入 content内容 sync同步到网元端 -func (r *NeInfoImpl) NeConfigFileWirte(neInfo model.NeInfo, filePath, content string, sync bool) error { +func (r *NeInfoImpl) NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType string, content any, sync bool) error { neTypeLower := strings.ToLower(neInfo.NeType) // 网管本地路径 @@ -412,7 +440,13 @@ func (r *NeInfoImpl) NeConfigFileWirte(neInfo model.NeInfo, filePath, content st } localFilePath := fmt.Sprintf("%s/%s/%s/%s", omcPath, neTypeLower, neInfo.NeId, filePath) - err := os.WriteFile(localFilePath, []byte(content), 0644) + var err error + if fileType == "" || fileType == "txt" { + err = parse.ConvertConfigToFile(fileType, localFilePath, content) + } + if fileType == "json" || fileType == "yaml" || fileType == "yml" { + err = parse.ConvertConfigToFile(fileType, localFilePath, content) + } if err != nil { logger.Warnf("NeConfigFile WriteFile => %s", err.Error()) return fmt.Errorf("please check if the file exists or write permissions") From 841067a8bf6888c3c750451b8ec987a3b049022c Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 17:14:14 +0800 Subject: [PATCH 007/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E5=8C=85=E5=AE=89=E8=A3=85=E6=8E=A5=E5=8F=A3=E5=8F=98?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/network_element.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index e8776157..cd5b8bcc 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -216,10 +216,10 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeSoftware.Remove, ) - neSoftwareGroup.POST("/checkInstall", + neSoftwareGroup.POST("/install", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewNeSoftware.CheckInstall, + controller.NewNeSoftware.Install, ) } From b4df83f6624538368631a5c2bb4e9aebac55edd9 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 17:15:03 +0800 Subject: [PATCH 008/130] =?UTF-8?q?fix:=20=E6=97=A7=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=BD=AF=E4=BB=B6=E5=8C=85/=E7=89=88=E6=9C=AC=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E7=9A=84=E7=BB=93=E6=9E=84=E4=BD=93=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/dborm/dborm.go | 72 ++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/lib/dborm/dborm.go b/lib/dborm/dborm.go index f35c7ee7..a638dd54 100644 --- a/lib/dborm/dborm.go +++ b/lib/dborm/dborm.go @@ -1402,11 +1402,11 @@ type MeasureThreshold struct { type NeSoftware struct { Id int `json:"id" xorm:"pk 'id' autoincr"` NeType string `json:"neType" xorm:"ne_type"` - FileName string `json:"neName" xorm:"file_name"` - Path string `json:"path"` - Version string `json:"version"` - Md5Sum string `json:"md5Sum" xorm:"md5_sum"` - Comment string `json:"comment"` + FileName string `json:"fileName" xorm:"name"` + Path string `json:"path" xorm:"path"` + Version string `json:"version" ` + Md5Sum string `json:"md5Sum" xorm:"-"` + Comment string `json:"comment" xorm:"description"` // Status string `json:"status"` UpdateTime string `json:"createTime" xorm:"-" ` } @@ -1415,18 +1415,18 @@ type NeVersion struct { Id int `json:"id" xorm:"pk 'id' autoincr"` NeType string `json:"neType" xorm:"ne_type"` NeId string `json:"neId" xorm:"ne_id"` - Version string `json:"version"` - FilePath string `json:"filePath" xorm:"file_path"` + Version string `json:"version" ` + FilePath string `json:"filePath" xorm:"path"` NewVersion string `json:"newVersion" xorm:"new_version"` - NewFile string `json:"newFile" xorm:"new_file"` + NewFile string `json:"newFile" xorm:"new_path"` PreVersion string `json:"preVersion" xorm:"pre_version"` - PreFile string `json:"preFile" xorm:"pre_file"` - Status string `json:"status"` + PreFile string `json:"preFile" xorm:"pre_path"` + Status string `json:"status" xorm:"status"` UpdateTime string `json:"createTime" xorm:"-" ` } func XormGetDataBySQL(sql string) (*[]map[string]string, error) { - //log.Debug("XormGetDataBySQL processing... ") + log.Debug("XormGetDataBySQL processing... ") rows := make([]map[string]string, 0) rows, err := DbClient.XEngine.QueryString(sql) @@ -1698,25 +1698,26 @@ func IsPermissionAllowed(token, method, module, dbname, tbname, pack string) (bo type NeLicense struct { NeType string `json:"neType" xorm:"ne_type"` NeID string `json:"neID" xorm:"ne_id"` - SerialNo string `json:"serialNo" xorm:"serial_no"` - Capcity int `json:"capcity" xorm:"capcity"` - Used int `json:"used" xorm:"used"` - FeatureEnabled string `json:"featureEnabled" xorm:"feature_enabled"` - ExpirationDate string `json:"expirationDate" xorm:"expiration_date"` + SerialNo string `json:"serialNo" xorm:"serial_num"` + Capcity int `json:"capcity" xorm:"-"` + Used int `json:"used" xorm:"-"` + FeatureEnabled string `json:"featureEnabled" xorm:"-"` + ExpirationDate string `json:"expirationDate" xorm:"expiry_date"` Status string `json:"status" xorm:"status"` - Path string `json:"path" xorm:"path"` - FileName string `json:"file_name" xorm:"file_name"` - Comment string `json:"comment" xorm:"comment"` + Path string `json:"path" xorm:"license_path"` + FileName string `json:"file_name" xorm:"-"` + Comment string `json:"comment" xorm:"remark"` CreatedAt string `json:"createdAt" xorm:"-"` UpdatedAt string `json:"updatedAt" xorm:"-"` DeletedAt string `json:"deletedAt" xorm:"-"` } func XormAdjustmentNeLicense(neType, neID string, value int) (int64, error) { + return 1, nil //neLicense := NeLicense{NeType: neType, NeID: neID, Capability: value} // session.LogoutTime.Valid = true // session.LogoutTime.Time = time.Now() - res, err := xEngine.Exec("update ne_license set capcity=capcity+? where IFNULL(ne_type, '')=? and IFNULL(ne_id, '')=?", value, neType, neID) + // res, err := xEngine.Exec("update ne_license set capcity=capcity+? where IFNULL(ne_type, '')=? and IFNULL(ne_id, '')=?", value, neType, neID) // defer xSession.Close() //affected, err := xSession.Table("ne_license").Where("ne_type=? and ne_id=?", neType, neID).Update(&neLicense) @@ -1724,25 +1725,26 @@ func XormAdjustmentNeLicense(neType, neID string, value int) (int64, error) { // //affected, err := xSession.Table("ne_license").SQL("ne_tye=? and ne_id=?", neType, neID).Update(session) // err := xSession.SQL("update ne_license set capability=capability+? where ne_type=? and ne_id=?", value, neType, neID) //xSession.Commit() - affected, err := res.RowsAffected() - return affected, err + // affected, err := res.RowsAffected() + // return affected, err } func XormUpdateNeLicense(neType, neID string, capcity int) (int64, error) { - var err error - var res sql.Result - if neType != "" && neID != "" { - res, err = xEngine.Exec("update ne_license set capcity=? where ne_type=? and ne_id=?", capcity, neType, neID) - } else if neType != "" && neID == "" { - res, err = xEngine.Exec("update ne_license set capcity=? where ne_type=?", capcity, neType) - } else if neType == "" && neID != "" { - res, err = xEngine.Exec("update ne_license set capcity=? where ne_id=?", capcity, neID) - } else { - res, err = xEngine.Exec("update ne_license set capcity=?", capcity) - } + return 1, nil + // var err error + // var res sql.Result + // if neType != "" && neID != "" { + // res, err = xEngine.Exec("update ne_license set capcity=? where ne_type=? and ne_id=?", capcity, neType, neID) + // } else if neType != "" && neID == "" { + // res, err = xEngine.Exec("update ne_license set capcity=? where ne_type=?", capcity, neType) + // } else if neType == "" && neID != "" { + // res, err = xEngine.Exec("update ne_license set capcity=? where ne_id=?", capcity, neID) + // } else { + // res, err = xEngine.Exec("update ne_license set capcity=?", capcity) + // } - affected, err := res.RowsAffected() - return affected, err + // affected, err := res.RowsAffected() + // return affected, err } type NorthboundCm struct { From 63595e1981769cee97a16a7af5e0cb24e44d379c Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 19:42:17 +0800 Subject: [PATCH 009/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E4=BF=A1=E6=81=AF=E5=9C=A8=E7=BA=BF=E6=97=B6=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=8E=88=E6=9D=83=E4=BF=A1=E6=81=AF=EF=BC=8C=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=8F=90=E7=A4=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_license.go | 18 +++++----- .../service/ne_license.impl.go | 34 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/modules/network_element/controller/ne_license.go b/src/modules/network_element/controller/ne_license.go index 1795655c..b1253b81 100644 --- a/src/modules/network_element/controller/ne_license.go +++ b/src/modules/network_element/controller/ne_license.go @@ -267,6 +267,7 @@ func (s *NeLicenseController) State(c *gin.Context) { c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) return } + neLicense.Status = "0" // 查询网元获取IP获取网元状态 neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neLicense.NeType, neLicense.NeId) @@ -274,25 +275,24 @@ func (s *NeLicenseController) State(c *gin.Context) { c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return } - neLicense.Status = "0" if neState, err := neService.NeState(neInfo); err == nil { neLicense.SerialNum = fmt.Sprint(neState["sn"]) neLicense.ExpiryDate = fmt.Sprint(neState["expire"]) neLicense.Status = "1" } - // 更新授权信息 - code, licensePath := s.neLicenseService.ReadLicenseInfo(neLicense) - neLicense.ActivationRequestCode = code - neLicense.LicensePath = licensePath - neLicense.UpdateBy = ctx.LoginUserToUserName(c) - rows := s.neLicenseService.Update(neLicense) - if rows > 0 { + // 在线时更新授权信息 + if neLicense.Status == "1" { + code, licensePath := s.neLicenseService.ReadLicenseInfo(neLicense) + neLicense.ActivationRequestCode = code + neLicense.LicensePath = licensePath + neLicense.UpdateBy = ctx.LoginUserToUserName(c) + s.neLicenseService.Update(neLicense) c.JSON(200, result.OkData(map[string]string{ "sn": neLicense.SerialNum, "expire": neLicense.ExpiryDate, })) return } - c.JSON(200, result.Err(nil)) + c.JSON(200, result.ErrMsg(fmt.Sprintf("%s service status exception", neLicense.NeType))) } diff --git a/src/modules/network_element/service/ne_license.impl.go b/src/modules/network_element/service/ne_license.impl.go index 4b1fd11f..8e5fc916 100644 --- a/src/modules/network_element/service/ne_license.impl.go +++ b/src/modules/network_element/service/ne_license.impl.go @@ -121,13 +121,13 @@ func (r *NeLicenseImpl) ReadLicenseInfo(neLicense model.NeLicense) (string, stri nePath := fmt.Sprintf("/usr/local/etc/%s/license", neTypeLower) // 网元主机的SSH客户端 - sshclient, err := NewNeInfoImpl.NeRunSSHclient(neLicense.NeType, neLicense.NeId) + sshClient, err := NewNeInfoImpl.NeRunSSHclient(neLicense.NeType, neLicense.NeId) if err != nil { return "", "" } - defer sshclient.Close() + defer sshClient.Close() // 网元主机的SSH客户端进行文件传输 - sftpClient, err := sshclient.NewClientSFTP() + sftpClient, err := sshClient.NewClientSFTP() if err != nil { return "", "" } @@ -159,29 +159,29 @@ func (r *NeLicenseImpl) UploadLicense(neLicense model.NeLicense) error { return fmt.Errorf("file read failure") } - // 网元端授权文件路径 - neTypeLower := strings.ToLower(neLicense.NeType) - neLicensePath := fmt.Sprintf("/usr/local/etc/%s/license", neTypeLower) - // 修改文件夹权限 - NewNeInfoImpl.NeRunCMD(neLicense.NeType, neLicense.NeId, fmt.Sprintf("sudo chmod o+w %s/", neLicensePath)) - NewNeInfoImpl.NeRunCMD(neLicense.NeType, neLicense.NeId, fmt.Sprintf("sudo chmod o+w %s/system.ini", neLicensePath)) - // 尝试备份授权文件 - neLicensePathBack := fmt.Sprintf("%s/system_%s.ini", neLicensePath, time.Now().Format("20060102_150405")) - NewNeInfoImpl.NeRunCMD(neLicense.NeType, neLicense.NeId, fmt.Sprintf("sudo cp -rf %s/system.ini %s", neLicensePath, neLicensePathBack)) - // 网元主机的SSH客户端 - sshclient, err := NewNeInfoImpl.NeRunSSHclient(neLicense.NeType, neLicense.NeId) + sshClient, err := NewNeInfoImpl.NeRunSSHclient(neLicense.NeType, neLicense.NeId) if err != nil { return err } - defer sshclient.Close() + defer sshClient.Close() // 网元主机的SSH客户端进行文件传输 - sftpClient, err := sshclient.NewClientSFTP() + sftpClient, err := sshClient.NewClientSFTP() if err != nil { return err } defer sftpClient.Close() + // 网元端授权文件路径 + neTypeLower := strings.ToLower(neLicense.NeType) + neLicensePath := fmt.Sprintf("/usr/local/etc/%s/license", neTypeLower) + // 修改文件夹权限 + sshClient.RunCMD(fmt.Sprintf("sudo chmod o+w %s/", neLicensePath)) + sshClient.RunCMD(fmt.Sprintf("sudo chmod o+w %s/system.ini", neLicensePath)) + // 尝试备份授权文件 + neLicensePathBack := fmt.Sprintf("%s/system_%s.ini", neLicensePath, time.Now().Format("20060102_150405")) + sshClient.RunCMD(fmt.Sprintf("sudo cp -rf %s/system.ini %s", neLicensePath, neLicensePathBack)) + // 上传授权文件去覆盖 err = sftpClient.CopyFileLocalToRemote(omcLicensePath, neLicensePath+"/system.ini") if err != nil { @@ -196,7 +196,7 @@ func (r *NeLicenseImpl) UploadLicense(neLicense model.NeLicense) error { } else if neTypeLower == "omc" { cmdStr = "sudo /usr/local/omc/bin/omcsvc.sh restart" } - NewNeInfoImpl.NeRunCMD(neLicense.NeType, neLicense.NeId, cmdStr) + sshClient.RunCMD(cmdStr) } return nil } From 390eaae94d3b48093456d804cc55261477df6c14 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 19:43:50 +0800 Subject: [PATCH 010/130] =?UTF-8?q?ref:=20=E7=BD=91=E5=85=83=E4=BF=A1?= =?UTF-8?q?=E6=81=AFRunSSH=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=AE=9E=E4=BE=8B?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/service/ne_info.go | 8 +- .../network_element/service/ne_info.impl.go | 88 ++++++++++++------- 2 files changed, 59 insertions(+), 37 deletions(-) diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index 2c523bc9..705dbd86 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -46,13 +46,15 @@ type INeInfo interface { // CheckUniqueNeTypeAndNeId 校验同类型下标识是否唯一 CheckUniqueNeTypeAndNeId(neType, neId, infoId string) bool - // NeRunCMD 向网元发送cmd命令 - NeRunCMD(neType, neId, cmd string) (string, error) - // NeRunSSHclient 网元主机的SSH客户端-为创建相关连接 NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) + // NeRunCMD 向网元发送cmd命令 + NeRunCMD(neType, neId, cmd string) (string, error) + // NeConfigFileRead 网元配置文件读取 网元配置yaml文件复制到本地后通过filePath读取 + // + // 返回 string string[] map[string]any NeConfigFileRead(neInfo model.NeInfo, filePath, fileType string) any // NeConfigFileWirte 网元配置文件写入 content内容 sync同步到网元端 diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 9aef3bce..e63868ce 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -307,23 +307,6 @@ func (r *NeInfoImpl) CheckUniqueNeTypeAndNeId(neType, neId, infoId string) bool return uniqueId == "" } -// NeRunCMD 向网元发送cmd命令 -func (r *NeInfoImpl) NeRunCMD(neType, neId, cmd string) (string, error) { - sshClient, err := r.NeRunSSHclient(neType, neId) - if err != nil { - return "", err - } - defer sshClient.Close() - - // 执行命令 - output, err := sshClient.RunCMD(cmd) - if err != nil { - logger.Errorf("NeRunCMD RunCMD %s err => %s", output, err.Error()) - return "", fmt.Errorf("neinfo ssh run cmd err") - } - return output, nil -} - // NeRunSSHclient 网元主机的SSH客户端-为创建相关连接 func (r *NeInfoImpl) NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) { neInfo := r.SelectNeInfoByNeTypeAndNeID(neType, neId) @@ -357,7 +340,26 @@ func (r *NeInfoImpl) NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) { return client, nil } +// NeRunCMD 向网元发送cmd命令 +func (r *NeInfoImpl) NeRunCMD(neType, neId, cmd string) (string, error) { + sshClient, err := r.NeRunSSHclient(neType, neId) + if err != nil { + return "", err + } + defer sshClient.Close() + + // 执行命令 + output, err := sshClient.RunCMD(cmd) + if err != nil { + logger.Errorf("NeRunCMD RunCMD %s err => %s", output, err.Error()) + return "", fmt.Errorf("neinfo ssh run cmd err") + } + return output, nil +} + // NeConfigFileRead 网元配置文件读取 网元配置yaml文件复制到本地后通过filePath读取 +// +// 返回 string string[] map[string]any func (r *NeInfoImpl) NeConfigFileRead(neInfo model.NeInfo, filePath, fileType string) any { neTypeLower := strings.ToLower(neInfo.NeType) @@ -401,27 +403,35 @@ func (r *NeInfoImpl) NeConfigFileRead(neInfo model.NeInfo, filePath, fileType st nePath := "/usr/local/etc" nePath = fmt.Sprintf("%s/%s", nePath, neTypeLower) + // 网元主机的SSH客户端 + sshclient, err := r.NeRunSSHclient(neInfo.NeType, neInfo.NeId) + if err != nil { + return err.Error() + } + defer sshclient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshclient.NewClientSFTP() + if err != nil { + return err.Error() + } + defer sftpClient.Close() + // 各个网元与网管间约定配置文件 - err := ssh.FileSCPNeToLocal(neInfo.IP, nePath+"/oam_manager.yaml", omcPath+"/oam_manager.yaml") - if err == nil { + if err = sftpClient.CopyFileRemoteToLocal(nePath+"/oam_manager.yaml", omcPath+"/oam_manager.yaml"); err == nil { files = append(files, "oam_manager.yaml") } // 根据情况复制网元特殊配置 switch neTypeLower { case "ausf": - err = ssh.FileSCPNeToLocal(neInfo.IP, nePath+"/ausfcfg.yaml", omcPath+"/ausfcfg.yaml") - if err == nil { - files = append(files, "ausfcfg.yaml") + cfgFile := "ausfcfg.yaml" + if err = sftpClient.CopyFileRemoteToLocal(fmt.Sprintf("%s/%s", nePath, cfgFile), fmt.Sprintf("%s/%s", omcPath, cfgFile)); err == nil { + files = append(files, cfgFile) } case "smf": - ssh.FileSCPNeToLocal(neInfo.IP, nePath+"/smf_conf.yaml", omcPath+"/smf_conf.yaml") - if err == nil { - files = append(files, "smf_conf.yaml") - } - ssh.FileSCPNeToLocal(neInfo.IP, nePath+"/smf_policy.yaml", omcPath+"/smf_policy.yaml") - if err == nil { - files = append(files, "smf_policy.yaml") + cfgFile := "smf_conf.yaml" + if err = sftpClient.CopyFileRemoteToLocal(fmt.Sprintf("%s/%s", nePath, cfgFile), fmt.Sprintf("%s/%s", omcPath, cfgFile)); err == nil { + files = append(files, cfgFile) } case "ims": } @@ -448,20 +458,30 @@ func (r *NeInfoImpl) NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType s err = parse.ConvertConfigToFile(fileType, localFilePath, content) } if err != nil { - logger.Warnf("NeConfigFile WriteFile => %s", err.Error()) return fmt.Errorf("please check if the file exists or write permissions") } // 同步到网元端 if sync { + // 网元主机的SSH客户端 + sshClient, err := NewNeInfoImpl.NeRunSSHclient(neInfo.NeType, neInfo.NeId) + if err != nil { + return err + } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + return err + } + defer sftpClient.Close() + // 网元端配置路径 neFilePath := fmt.Sprintf("/usr/local/etc/%s/%s", neTypeLower, filePath) // 修改网元文件权限 - r.NeRunCMD(neInfo.NeType, neInfo.NeId, fmt.Sprintf("sudo chmod o+w %s", neFilePath)) + sshClient.RunCMD(fmt.Sprintf("sudo chmod o+w %s", neFilePath)) // 复制到网元进行覆盖 - err = ssh.FileSCPLocalToNe(neInfo.IP, localFilePath, neFilePath) - if err != nil { - logger.Warnf("NeConfigFile SyncFile => %s", err.Error()) + if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { return fmt.Errorf("please check if scp remote copy is allowed") } } From d71123b5e7c0dee790a40b982f597a5a9970fbf1 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 19:45:42 +0800 Subject: [PATCH 011/130] =?UTF-8?q?style:=20=E5=B1=9E=E6=80=A7=E5=90=8D?= =?UTF-8?q?=E5=8F=98=E6=9B=B4sshClient?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_info.impl.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index e63868ce..bb428387 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -404,13 +404,13 @@ func (r *NeInfoImpl) NeConfigFileRead(neInfo model.NeInfo, filePath, fileType st nePath = fmt.Sprintf("%s/%s", nePath, neTypeLower) // 网元主机的SSH客户端 - sshclient, err := r.NeRunSSHclient(neInfo.NeType, neInfo.NeId) + sshClient, err := r.NeRunSSHclient(neInfo.NeType, neInfo.NeId) if err != nil { return err.Error() } - defer sshclient.Close() + defer sshClient.Close() // 网元主机的SSH客户端进行文件传输 - sftpClient, err := sshclient.NewClientSFTP() + sftpClient, err := sshClient.NewClientSFTP() if err != nil { return err.Error() } From 0b8d0781a2645e7cc6705a6afdfa507ffcc35520 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 19:59:45 +0800 Subject: [PATCH 012/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E7=A7=BB=E9=99=A4hostId=E4=BD=BF=E7=94=A8=E7=BD=91?= =?UTF-8?q?=E5=85=83ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_software.go | 2 +- .../network_element/model/ne_software.go | 2 +- .../service/ne_software.impl.go | 38 +++++++++---------- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/modules/network_element/controller/ne_software.go b/src/modules/network_element/controller/ne_software.go index 54123045..4b4621ed 100644 --- a/src/modules/network_element/controller/ne_software.go +++ b/src/modules/network_element/controller/ne_software.go @@ -162,7 +162,7 @@ func (s *NeSoftwareController) Install(c *gin.Context) { Preinput map[string]string `json:"preinput" binding:"required"` // 预先输入参数 } err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.Software.HostId == "" { + if err != nil || body.Software.NeId == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } diff --git a/src/modules/network_element/model/ne_software.go b/src/modules/network_element/model/ne_software.go index d0166163..3eaf9569 100644 --- a/src/modules/network_element/model/ne_software.go +++ b/src/modules/network_element/model/ne_software.go @@ -15,7 +15,7 @@ type NeSoftware struct { // ====== 非数据库字段属性 ====== - HostId string `json:"hostId,omitempty" gorm:"-"` // 已记录的主机ID + NeId string `json:"neId,omitempty" gorm:"-"` // 网元ID } // TableName 表名称 diff --git a/src/modules/network_element/service/ne_software.impl.go b/src/modules/network_element/service/ne_software.impl.go index 0c4cd6fa..25cadf8d 100644 --- a/src/modules/network_element/service/ne_software.impl.go +++ b/src/modules/network_element/service/ne_software.impl.go @@ -8,7 +8,6 @@ import ( "time" "be.ems/src/framework/utils/file" - "be.ems/src/framework/utils/ssh" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" ) @@ -130,8 +129,8 @@ func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neType, name, version, // action 安装行为:install upgrade func (r *NeSoftwareImpl) InstallToNeHost(action string, neSoftware model.NeSoftware, preinput map[string]string) (string, error) { // 检查文件是否存在 - filePath := file.ParseUploadFilePath(neSoftware.Path) - if _, err := os.Stat(filePath); err != nil { + localFilePath := file.ParseUploadFilePath(neSoftware.Path) + if _, err := os.Stat(localFilePath); err != nil { return "", fmt.Errorf("file read failure") } fileName := filepath.Base(neSoftware.Path) @@ -141,14 +140,21 @@ func (r *NeSoftwareImpl) InstallToNeHost(action string, neSoftware model.NeSoftw nePath := "/tmp" neFilePath := fmt.Sprintf("%s/%s", nePath, fileName) - // 检查网元主机 - neHostInfo := NewNeHostImpl.SelectById(neSoftware.HostId) - if neHostInfo.HostType != "ssh" || neHostInfo.HostID != neSoftware.HostId { - return "", fmt.Errorf("no found host info") + // 网元主机的SSH客户端 + sshClient, err := NewNeInfoImpl.NeRunSSHclient(neSoftware.NeType, neSoftware.NeId) + if err != nil { + return "", err } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + return "", err + } + defer sftpClient.Close() // 上传软件包到 /tmp - if err := ssh.FileSCPLocalToNe(neHostInfo.Addr, filePath, neFilePath); err != nil { + if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { return "", fmt.Errorf("error uploading package") } @@ -205,16 +211,8 @@ func (r *NeSoftwareImpl) InstallToNeHost(action string, neSoftware model.NeSoftw cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) // ========= 安装命令 end ========= - // ssh连接客户端 - var connSSH ssh.ConnSSH - neHostInfo.CopyTo(&connSSH) - client, err := connSSH.NewClient() - if err != nil { - return "", fmt.Errorf("neinfo ssh client new err") - } - defer client.Close() // ssh连接会话 - clientSession, err := client.NewClientSession(80, 24) + clientSession, err := sshClient.NewClientSession(80, 24) if err != nil { return "", fmt.Errorf("neinfo ssh client session new err") } @@ -223,12 +221,12 @@ func (r *NeSoftwareImpl) InstallToNeHost(action string, neSoftware model.NeSoftw firstRead := true // 首次命令进行记录日志信息 logMsg := "" // 日志信息 done := make(chan bool) // 完成信号 + // 超时退出 30s + timeoutTicker := time.NewTicker(30 * time.Second) + defer timeoutTicker.Stop() // 实时读取SSH消息直接输出 msTicker := time.NewTicker(100 * time.Millisecond) defer msTicker.Stop() - // 超时退出 - timeoutTicker := time.NewTicker(30 * time.Second) - defer timeoutTicker.Stop() go func() { for { select { From 507a1690bd7e49d665500969c3e4503d16bc3a36 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 11 Apr 2024 21:04:24 +0800 Subject: [PATCH 013/130] =?UTF-8?q?feat:=20ssh=E6=94=AF=E6=8C=81=E5=85=8D?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_host.go | 63 ++++++++++++------- src/modules/network_element/model/ne_host.go | 2 +- .../network_element/service/ne_info.impl.go | 8 ++- src/modules/ws/controller/ws.go | 10 ++- 4 files changed, 55 insertions(+), 28 deletions(-) diff --git a/src/modules/network_element/controller/ne_host.go b/src/modules/network_element/controller/ne_host.go index 7baca4bd..3aad7628 100644 --- a/src/modules/network_element/controller/ne_host.go +++ b/src/modules/network_element/controller/ne_host.go @@ -167,8 +167,7 @@ func (s *NeHostController) Remove(c *gin.Context) { func (s *NeHostController) Test(c *gin.Context) { language := ctx.AcceptLanguage(c) var body model.NeHost - err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil { + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -176,8 +175,13 @@ func (s *NeHostController) Test(c *gin.Context) { if body.HostType == "ssh" { var connSSH ssh.ConnSSH body.CopyTo(&connSSH) - - client, err := connSSH.NewClient() + var client *ssh.ConnSSH + var err error + if body.AuthMode == "2" { + client, err = connSSH.NewClientByLocalPrivate() + } else { + client, err = connSSH.NewClient() + } if err != nil { // 连接主机失败,请检查连接参数后重试 c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo"))) @@ -213,8 +217,7 @@ func (s *NeHostController) Cmd(c *gin.Context) { HostID string `json:"hostId" binding:"required"` // 主机ID Cmd string `json:"cmd" binding:"required"` // 执行命令 } - err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil { + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -230,8 +233,13 @@ func (s *NeHostController) Cmd(c *gin.Context) { if neHost.HostType == "ssh" { var connSSH ssh.ConnSSH neHost.CopyTo(&connSSH) - - client, err := connSSH.NewClient() + var client *ssh.ConnSSH + var err error + if neHost.AuthMode == "2" { + client, err = connSSH.NewClientByLocalPrivate() + } else { + client, err = connSSH.NewClient() + } if err != nil { // 连接主机失败,请检查连接参数后重试 c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo"))) @@ -278,17 +286,21 @@ func (s *NeHostController) Cmd(c *gin.Context) { func (s *NeHostController) CheckBySSH(c *gin.Context) { language := ctx.AcceptLanguage(c) var body model.NeHost - err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil { + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } var connSSH ssh.ConnSSH body.CopyTo(&connSSH) - // 创建链接SSH客户端 - client, err := connSSH.NewClient() + var client *ssh.ConnSSH + var err error + if body.AuthMode == "2" { + client, err = connSSH.NewClientByLocalPrivate() + } else { + client, err = connSSH.NewClient() + } if err != nil { // 连接主机失败,请检查连接参数后重试 c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo"))) @@ -339,18 +351,22 @@ func (s *NeHostController) CheckBySSH(c *gin.Context) { } // 本地免密创建链接直连 - lcoalConnSSH := ssh.ConnSSH{ - User: body.User, - Addr: body.Addr, - Port: body.Port, - } - lcoalClient, err := lcoalConnSSH.NewClientByLocalPrivate() - if err == nil { + if body.AuthMode == "2" { data["sshLink"] = true } else { - data["sshLink"] = false + lcoalConnSSH := ssh.ConnSSH{ + User: body.User, + Addr: body.Addr, + Port: body.Port, + } + lcoalClient, err := lcoalConnSSH.NewClientByLocalPrivate() + if err == nil { + data["sshLink"] = true + defer lcoalClient.Close() + } else { + data["sshLink"] = false + } } - defer lcoalClient.Close() c.JSON(200, result.OkData(data)) } @@ -361,8 +377,7 @@ func (s *NeHostController) CheckBySSH(c *gin.Context) { func (s *NeHostController) AuthorizedBySSH(c *gin.Context) { language := ctx.AcceptLanguage(c) var body model.NeHost - err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil { + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil || body.AuthMode == "2" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -377,8 +392,8 @@ func (s *NeHostController) AuthorizedBySSH(c *gin.Context) { lcoalClient, err := lcoalConnSSH.NewClientByLocalPrivate() if err == nil { sshLink = true + defer lcoalClient.Close() } - defer lcoalClient.Close() if sshLink { // 连接主机成功,无需重复免密授权认证 c.JSON(200, result.OkMsg(i18n.TKey(language, "neHost.okBySSHLink"))) diff --git a/src/modules/network_element/model/ne_host.go b/src/modules/network_element/model/ne_host.go index a479635b..ba7362b2 100644 --- a/src/modules/network_element/model/ne_host.go +++ b/src/modules/network_element/model/ne_host.go @@ -11,7 +11,7 @@ type NeHost struct { Addr string `json:"addr" gorm:"column:addr" binding:"required"` // 主机地址 Port int64 `json:"port" gorm:"column:port" binding:"required,number,max=65535,min=1"` // SSH端口 User string `json:"user" gorm:"column:user" binding:"required"` // 主机用户名 - AuthMode string `json:"authMode" gorm:"column:auth_mode" binding:"oneof=0 1"` // 认证模式(0密码 1主机私钥) + AuthMode string `json:"authMode" gorm:"column:auth_mode" binding:"oneof=0 1 2"` // 认证模式(0密码 1主机私钥 2已免密) Password string `json:"password" gorm:"column:password"` // 认证密码 PrivateKey string `json:"privateKey" gorm:"column:private_key"` // 认证私钥 PassPhrase string `json:"passPhrase" gorm:"column:pass_phrase"` // 认证私钥密码 diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index bb428387..3b44020a 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -332,7 +332,13 @@ func (r *NeInfoImpl) NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) { var connSSH ssh.ConnSSH neHost.CopyTo(&connSSH) - client, err := connSSH.NewClient() + var client *ssh.ConnSSH + var err error + if neHost.AuthMode == "2" { + client, err = connSSH.NewClientByLocalPrivate() + } else { + client, err = connSSH.NewClient() + } if err != nil { logger.Errorf("NeRunSSHclient NewClient err => %s", err.Error()) return nil, fmt.Errorf("neinfo ssh client new err") diff --git a/src/modules/ws/controller/ws.go b/src/modules/ws/controller/ws.go index 50fd01fa..297b8a01 100644 --- a/src/modules/ws/controller/ws.go +++ b/src/modules/ws/controller/ws.go @@ -144,8 +144,14 @@ func (s *WSController) SSH(c *gin.Context) { // 创建链接SSH客户端 var connSSH ssh.ConnSSH neHost.CopyTo(&connSSH) - client, err := connSSH.NewClient() - if err != nil { + var client *ssh.ConnSSH + var clientErr error + if neHost.AuthMode == "2" { + client, clientErr = connSSH.NewClientByLocalPrivate() + } else { + client, clientErr = connSSH.NewClient() + } + if clientErr != nil { // 连接主机失败,请检查连接参数后重试 c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo"))) return From 15445c8e59845c9f094532f82b6ba347d1f37967 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 12 Apr 2024 09:36:55 +0800 Subject: [PATCH 014/130] =?UTF-8?q?style:=20ssh=E8=AE=A4=E8=AF=81=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E6=96=B0=E5=A2=9E=E5=85=8D=E5=AF=86=E8=AE=A4=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/i18n_data.xlsx | Bin 105462 -> 105553 bytes config/locales/i18n_table.xlsx | Bin 55769 -> 55829 bytes database/upgrade/upg_sys_dict_data.sql | 7 ++++++- .../upgrade/upg_sys_dict_data1_i18n_zh.sql | 1 + .../upgrade/upg_sys_dict_data2_i18n_en.sql | 1 + 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/config/locales/i18n_data.xlsx b/config/locales/i18n_data.xlsx index f85f78a458d947e6a2cf84262b6920b6cb794eb1..5ea03cbb0437af65770b13cb0d12408a3dd4aa1e 100644 GIT binary patch literal 105553 zcmcd!c{r49+b6}-B2ijoX|aw_qCvKbgk&9}P>Il!X)MXEdfLd6B{ZV!MtCY^r=Cbi z_BMth%g9pJY%||=&&)k`ruUEUJ&yPLzT-Q(=DP0dI+x%1I~O{dOv_g>K>xXUtVJ36 z-|&A{g8$aEL9s=A&(&JDKO{@L`>o2p^syvys{nY0W1t_FM) zymJ3Cd*0+;Qe`D_H^Kcxs5&d7-?J_Iw`d<AK=_BRS=Id(l+rs*yh5sCT4 zah%olJKOcg=OgO}oAr7OUf&!^c@Xe&NB++ODGj|my1>TJ46 ztwCqDS)yjh?`?NDOwkVyvi!6zPEXgciRk8$&uO~4TI@G}(4BKNhSr;|T5fjBW)gGX z$Rp^}&}75jQY-yw)u=evOWEznI1EWZ-)vhKZ#)b`NGyTh-Yb}Fl{;j!NR%HqE6 zL=WrN43fhs1M$clR+g>k`z>ZqL*;KjbL(sPEVJg&z6}<4!lPS0R=lpgZ2RTDg%QU( zrQzC@eEXi1U0B^U{L**Dql}`$>w2YoxPsTJFoYIac5mo;oVUSwWQglm*eDV&Ew;JB*i&7e>38^e$IXFRV*Crc>Hz{=F*~^8 z^)s&6$-xnQ0lMV)yQa`3-{=FE{MG{-@S;KTi+`%=fxL@f8&gB1@T;`+f*j?FNOo@` zTdpHrU1TKKD&3CdTn<%`S!J<5Rr1KeHCJ>_A|HG?_tWOYioJh5PC@C9nA~0y_0M(R ziD5zfW`)06;OQ%ATlg ziYAGcyWPKiy^d7MDcrHOqVm$EOa)dmq_)yGp(>4!(p%g`gJX8Bk6i9p;p2Vk>8j&J z35-#vj~ZnpeX^fi`|9Fa{l5&vJce@5bQr54`)+Rfag-OO`|gaKpK)G7xM4(bo`Xjh|JqYqZ2I*Gqtjr@JM*U;i4a{p=1-@1`i-how0()^fzKBM<_ zx~G;)46s4cJHH`e0#|$aZ}Q#G{}0wu{(&>v{=9>=rKRI+a}&SklW4(x1_lF}T4w!pRjQ17h zPgYc9Hc$K<>GPVXH764L3Q5DH0TQvlP{C`wqO#C^WJJkhqQzJX(pCP6i&1@dyY3m7m@<_h{O2G!qH!RN)x7{ zUc_ICg&rfm#13r|u_2oDtCp>KlF<6FaB?U!7mF=vCidhOPE0mb@(_CxN&DR{_nmX_ZMDN+g{apClyq5tBb^DCpl#j~2Bk zY#7&TZYK6mYAX>ZTBE&2D@K%vJ(G4%4<{IVjrS&!Mx#l;n=^hX z4Ym+V%!y-R=ETZ?FwFx>6CC3c1JR_33MJC70dxUr+_1RrVMAgw@n`urB`;!INnyU{ zNV#(}@tZRrGch3AbNnXw9Eq+L)k&n%=vF)Z8QGRj+ z?FlZVgO4~-{_SQV5jEIaQJdL((sM1bBtVH+xq5s^8$3a~{Z;U#uSYiRY<5p1{Z8jo z9DQy11MNv9c|~^hgRgPg{~2BKnfNpJcVFaac}YMOxKE_l*tg2&$qsWb*@@pDNzLZO z!E$hU4Pod~qPY@rVDPm$aZ<^%y7K2F`Vw1M*w4uTulkK+q~?hpiLuWgvPr{u(%A1x zFHc@i(od|~qh@zfb>xN0hMua*YrUD*2BRAe1mrf$D}BD^Iqvdbz(;$+AfM+*Z2)QF zu+sI+X3qiLaR0GUzGl<3&<3yEeEsNx!pB6UnCKUeaX%lDF~Mu{Tf1}Nq=Zw;xZfwE zmf`y{24|eL@(f#g?_W+Snw0((&%ySw=m|%_$D(8o?T2KDf<~+Y&-Sf;+t!jj zVa@AsaYwj@`qe@%{wZ!AK zFQ+X)Og=4^ zQhg2uHr3r{DoyCIhPL$g><(%)x)v9lhl)#Le8gG89r;&GNX(mU#;k8OSh}$ zlKIe_BDTub#d}zUt_sH|?Ky&I<2f78?C<)1`7ze>#(wRej#XH`d(c#+XE8F_f2FOn zM7)`KGk-I)!6GN*^20pf605Y;OCI+eeQ7_~I{zBNP{Fln*O6U6a^L~Bd~BD{WL@8; zA2*-yDrA>uF7q!PS$0F@D)S*Ve*sxP{w@)J?qC5{D@z;i4Nknb2c$Oo3RmD#g{?jZ zT(z^SajPW0Fju-WWc|*xV9&*)V|U#49_3UO8~iTgzXMvG9P{bi86V;BcwuD?nE;N* zNh=Gv)X>t2FJi(ilvLZ&#fHOL6Gg?-`QEtZb>(wXIr9em zMrGLKg+kBGKYqpZ>0{FU)&E;``EpU)|I$@$VlJre`DGVVb8~`n50|S))Q3|nYFwHY z+nc($04yef#eOeoi){joN)Ax(A^Dg@sgmd-`Ouh9#)=CN7;+B@5L~Pe3O5X z86!Ah5|V&7+)(>d5Fvfhs{y(|sdh!__WC`^d(bzMW0I~%ahK@wC*D<281gw2eOrAf zFTmqo%%?jX?~QII1YA+_SN--eMrs^9gdb8jxpch2b8`2GR@LS(?8@QraQnTw5r|bc zz;Aq32Y2Uy((T^6M|HzHy$#z0BGp!g9r6V)xiMZni?cW`@3zK@KJ@s|>*E2NCIfxk zoQ`Hke3gHq&AH-`w!g(W@P-Kt zuBdHET%M^eLCmJ`I9Uh}6+{3b+~p1lVd`Q+SP&y6lNq!5F_1weEqvb?_3%x$W<0@M z16JV(ACt~f47aL1mwKJP>XXW%IM=2UMNQqm53lSq8ay z59d;@Pbn_55`3uWNX2f{hUZnmtuj8}rGkgVEg)b<_rG)~y|kx&U{L#YkFu690T1@sj9ETZFu_r?A*Q2&Tv z@io9gciI)$_R~&azxNgIdVM=Vgud!4=mz(L-@v3nRv_WlRb!uJasLbmf3vq{mxctG z{E9$;zfPt>cIa}oc5>FdDm3}i!|A9izVDi`Pnqh2^tD>~zgv$R6dT3#Zfrh!@v^m=UrunP*PqEDtOY`!fdTDs z`GdvCW#jPTLuqC4imBjd}{K!|MR>qSL6xZH6O4^ zbuTAPA>&;g-cc70r2kFcmIR-ejX-|Y?m`BnPIQhFQDi1koCtrT&l$ZYm3YBESP4(s z34XFTQ&yp3Nzs9GLco{3M?rRAgYIsM3J9EBD@HcM%pHast_=wyIP(gBd?foHO+;_~ zo;Iti14W9c4Qqh^c>qKxVpv_t-JB=bY-Ajm0ef9wM)W1X2~fX6lg5jY>%)c!*xM67 z-i{Z8`&Y9t>#z970{r*1PtvQ0ZO6%u&|Xzm(3k6-MjeAlmpq5Fs$cOAV1k@g@q0zk zMh32$U#JE&2r{6GtI7ULbOHBAc0uXFtnX8WnSW^Oj*h$;8KJ(sI$9dMp5J`0H$#U< zQ_;ItO>+X#JmcdOD_Hm)yYhcAg3TkqiYVrHPAK0qS{=`K8_5!nd@FJ7ktpN^BvB!0 zzta6haA{^P1II(3Y*Brnb_Vq%{pWeq{p%-C@5->a!99hAec%l|Y~N}1Puf0mOhB@5 zq6`ihQJ_SEj}HPsfS6V7v3nmND1ZdFvd}QzCJR-Zk(aE2WTJdQ;wF#aeJ;;+YJRpq zEOOtn##Htm5W(b_7#}0)J*u4V^fwK>-`t5UweuJKLDA)2t*lm#Mg1NXiG0@ff z=B9LA$#%)b)il(2J^?DIZ(#>54!VJ45oj+z)miogppc`SoT$96+akDA_i&K(YW#}> z5GItFV90rGI1x7yRx`{7iJ!KFoOWdTMvYV#2OV8iX~#A)jy#J?N}^#H90kL)BVR%m zFx0Bmkn`C<0>a~JHy`B2!Tnz-Nc~qQ$FrH+z(AMPlmh=E5C|LuMG@hY>*D~Xk9>X4 zFeyHtUGzg0t!O786{kSr=QF?XSS6G3ae)a<&#J(6&iW96YrOMv?%XwbG%fm`enh4umcF;Lfu;xY@x28Q;se!I;amsxl zx6s;{_pvj#)^mUlo+Ce8b1+#Ny;h@sw$LU=QD1$U;B5th_kb*T)QfX;S(9+R?81t3 z_b(xE;NdWTYk}P}v=opNgi%R}uvd#MpY+iR>a#^#X{4mAp_GcYkEx-z-=Uo_0 z=MlKesP*~=uXdrJ%MUq)ntp2A_q5Anv7%gF^8G1uZD8;VM-AM-<@v~&^Oz{6Kw1x< zJ3ndC0&?2m-n>F4Y#-U5comTVlm@bSCn&Jftlp?(11j=7S?4UqLCi+BxqkzjdkNUw zt0MtqtKnDbr8r9Yf%XS!r0Q%5i=7m^TdSxVDr@B024PRczStyyJ)xgSb~SN7fiaFQ zNPVkq`aHth;Q>5466b0{~jn}aG& znoLG08J;860n`o5ZFwwMZ8Bi>=&_G2&^svZAZtBPn=Ti=@m;7VTLdE0*H)mtA<#?{ zo3Z7el_1~^xy%QBDc5U;#^?D7>ht~Q5^_;CBMG1;)P1V(PFyI~r#^r=e}Recq)wi! zaK5@H?D4W=&bL86$27mcJ$=)i3Sj^{QhYqF1Fr|a0NeOv8(&?N-TtT=V7@E;)C9?$1>;r-jYqbXM3(dAacY^Up> zYRs8#ON~6Juiy4;hTUfQNlc~~fR1n7^#|KtT-~d+pA)qkXzmM2?46H;K!?mn;PeF| zONK${J6(T3=u0^OS8(5NbJh?(u1Tx#exoZahxEzT3y~DwqN;V&^&2FBA`}5E2E0Rr ztC_no5WqgJn)Kad`bDv@(-A!aK+BI`?GN2`S!u@Kur2&Ch&)h~$U{{cFdr#3){UkH zm3Q7ZsD?I$4*NoW4;+94+sgw~xwr!kJM;`kMP9u)*VC7p(r}Ik$dNOkp9Go>j|(>&$|NPlm;fsd z1z(aV0|O{LEM4B@hRLjs*mzK@uiRqAM!iH>b?QoHJmRid|}WMXdo2zB>2>1 z7sw?f<+!$0oU8wIC+7XmC%8{WzzF))q#_RYXrWyDs6PO9&+jr?-PW*b9?)+vIR2>v zg8dZ!p^f$8bo2%!FrH!s3gdtXGWGNa%QUYsAg()0JBAO!te*N2fCz=6KQe-aeVNC* zZgUEYl%J~})(&hjTQT+u4uJ!~3xx&I^$e_@5hA0ru=K*fEBaVw{ zW_e~1>O0qybLM#wpxBq|S*}PX=iibCM%5$HR*5(tzjY3j2wW(|h;#htQJN!$NFcH! z&dE1+H~qzUwAtu;;^#i2m)pHBf6HxfKmRS+9sMn7$F6Pn9UfPU#0aOzJkzzN=|K-4kDT`v>D~rdw-!><0X9B=$eJ5qn4G*bz5= zaWxLL4VGIl%(xcs4=vl0kG9;(lQB$@VSS%3Blsf#H@NfSBsPHKBNGS9I-W0Wc7?78 zkC%C}2=tJ^wl6y|b;|r072SL6=N=-~T8pg>lH~V)>ud4cr*<>m*W!IsQT&JuZR6UM zFd4PB+;wVOFn_B~+gTΝ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%0A9{7 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 z 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 DZ2Z^P diff --git a/config/locales/i18n_table.xlsx b/config/locales/i18n_table.xlsx index 67105cddd121fe3fea7023a8b1f4f6b5017a1fa4..fec507fe23eb25016639c24e57127d48f8d82eb5 100644 GIT binary patch delta 23269 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 g^zTf&>3<;q8|bg2@NcLh>krg1PYPwfEiU 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 Date: Fri, 12 Apr 2024 17:25:06 +0800 Subject: [PATCH 015/130] =?UTF-8?q?fix:=20=E6=96=87=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E6=8E=A5=E5=8F=A3=E6=97=A0=E6=96=87=E4=BB=B6=E5=93=8D?= =?UTF-8?q?=E5=BA=94json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/file/file.go | 4 ++-- src/modules/common/controller/file.go | 14 ++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/framework/utils/file/file.go b/src/framework/utils/file/file.go index d0a602ad..51854149 100644 --- a/src/framework/utils/file/file.go +++ b/src/framework/utils/file/file.go @@ -177,13 +177,13 @@ func ReadUploadFileStream(filePath, headerRange string) (map[string]any, error) "range": "", "chunkSize": 0, "fileSize": 0, - "data": nil, + "data": []byte{}, } // 文件大小 fileSize := getFileSize(fileAsbPath) if fileSize <= 0 { - return result, nil + return result, fmt.Errorf("file does not exist") } result["fileSize"] = fileSize diff --git a/src/modules/common/controller/file.go b/src/modules/common/controller/file.go index 35062434..c251c2ed 100644 --- a/src/modules/common/controller/file.go +++ b/src/modules/common/controller/file.go @@ -43,13 +43,6 @@ func (s *FileController) Download(c *gin.Context) { return } routerPath := string(decodedBytes) - // 地址文件名截取 - fileName := routerPath[strings.LastIndex(routerPath, "/")+1:] - - // 响应头 - c.Writer.Header().Set("Content-Disposition", `attachment; filename="`+url.QueryEscape(fileName)+`"`) - c.Writer.Header().Set("Accept-Ranges", "bytes") - c.Writer.Header().Set("Content-Type", "application/octet-stream") // 断点续传 headerRange := c.GetHeader("Range") @@ -58,6 +51,12 @@ func (s *FileController) Download(c *gin.Context) { c.JSON(200, result.ErrMsg(err.Error())) return } + + // 响应头 + c.Writer.Header().Set("Content-Disposition", `attachment; filename="`+url.QueryEscape(filepath.Base(routerPath))+`"`) + c.Writer.Header().Set("Accept-Ranges", "bytes") + c.Writer.Header().Set("Content-Type", "application/octet-stream") + if headerRange != "" { c.Writer.Header().Set("Content-Range", fmt.Sprint(resultMap["range"])) c.Writer.Header().Set("Content-Length", fmt.Sprint(resultMap["chunkSize"])) @@ -65,7 +64,6 @@ func (s *FileController) Download(c *gin.Context) { } else { c.Writer.Header().Set("Content-Length", fmt.Sprint(resultMap["fileSize"])) c.Status(200) - } c.Writer.Write(resultMap["data"].([]byte)) } From b0e3825dd127e3515cdd7e81465f8812d0690cde Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 12 Apr 2024 17:25:43 +0800 Subject: [PATCH 016/130] =?UTF-8?q?fix:=20=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=A1=A8=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/ne_info.sql | 33 ++++++++++--------- database/install/ne_license.sql | 33 +++++++++---------- database/install/ne_software.sql | 25 +++++++------- database/install/ne_version.sql | 33 +++++++++++-------- features/cm/software.go | 8 ++--- .../network_element/model/ne_version.go | 9 +++-- 6 files changed, 76 insertions(+), 65 deletions(-) diff --git a/database/install/ne_info.sql b/database/install/ne_info.sql index 8ea39bda..055144f4 100644 --- a/database/install/ne_info.sql +++ b/database/install/ne_info.sql @@ -23,24 +23,25 @@ DROP TABLE IF EXISTS `ne_info`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `ne_info` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(32) NOT NULL, - `ne_id` varchar(32) NOT NULL DEFAULT '', - `rm_uid` varchar(40) DEFAULT NULL, - `ne_name` varchar(64) DEFAULT NULL, - `ip` varchar(128) DEFAULT '', - `port` int(11) DEFAULT NULL, - `pv_flag` enum('PNF','VNF') DEFAULT 'PNF', - `province` varchar(32) DEFAULT NULL, - `vendor_name` varchar(64) DEFAULT NULL, - `dn` varchar(255) DEFAULT NULL, - `ne_address` varchar(64) DEFAULT NULL, - `status` int(11) DEFAULT 0 COMMENT '0: 在线 1: 下线 2: 备用 3: 待下发配置', - `update_time` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `host_ids` varchar(64) DEFAULT '' COMMENT '网元主机ID组 数据格式(ssh,telnet,telnet)', + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `rm_uid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `port` int DEFAULT NULL, + `pv_flag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'PNF' COMMENT '''PNF'',''VNF''', + `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '省份地域', + `vendor_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `dn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'MAC地址', + `status` int DEFAULT '0' COMMENT '0离线 1在线 2配置待下发', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `host_ids` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '网元主机ID组 数据格式(ssh,telnet,telnet)', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `idx_netype_neid` (`ne_type`,`ne_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=218 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元信息表'; +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元信息表'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/ne_license.sql b/database/install/ne_license.sql index 47b7d681..3eadb5cf 100644 --- a/database/install/ne_license.sql +++ b/database/install/ne_license.sql @@ -23,23 +23,22 @@ DROP TABLE IF EXISTS `ne_license`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `ne_license` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(16) DEFAULT NULL, - `ne_id` varchar(32) DEFAULT '', - `serial_no` varchar(16) DEFAULT NULL, - `capcity` int(11) DEFAULT NULL, - `used` int(11) DEFAULT NULL, - `feature_enabled` varchar(64) DEFAULT NULL, - `expiration_date` varchar(16) DEFAULT NULL, - `status` enum('ACTIVE','INACTIVE','PENDING') DEFAULT 'ACTIVE', - `path` varchar(128) DEFAULT NULL, - `file_name` varchar(64) DEFAULT NULL, - `comment` varchar(255) DEFAULT NULL, - `created_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `updated_at` datetime DEFAULT NULL, - `deleted_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='NE license management'; + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', + `activation_request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '激活申请代码', + `license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '激活授权文件', + `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '序列号', + `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '许可证到期日期', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '状态 ''ACTIVE'',''INACTIVE'',''PENDING''', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', + `create_by` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `update_by` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uk_type_id` (`ne_type`,`ne_id`) USING BTREE COMMENT '唯一网元类型和网元ID' +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元授权激活信息'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/ne_software.sql b/database/install/ne_software.sql index 266c246b..d757a110 100644 --- a/database/install/ne_software.sql +++ b/database/install/ne_software.sql @@ -23,18 +23,19 @@ DROP TABLE IF EXISTS `ne_software`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `ne_software` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(32) DEFAULT NULL, - `file_name` varchar(64) DEFAULT NULL, - `path` varchar(128) DEFAULT '', - `version` varchar(32) DEFAULT NULL, - `md5_sum` varchar(64) DEFAULT NULL, - `status` enum('Uploaded','Inactive','Active') DEFAULT NULL, - `comment` varchar(255) DEFAULT NULL, - `update_time` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `patch_time` datetime DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=68 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包名称', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包路径', + `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本', + `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包说明', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uk_type_name_version` (`ne_type`,`name`,`version`) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元软件包'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/ne_version.sql b/database/install/ne_version.sql index d64da845..acf1d5b8 100644 --- a/database/install/ne_version.sql +++ b/database/install/ne_version.sql @@ -23,19 +23,26 @@ DROP TABLE IF EXISTS `ne_version`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `ne_version` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(32) DEFAULT NULL, - `ne_id` varchar(32) DEFAULT NULL, - `version` varchar(32) DEFAULT NULL, - `file_path` varchar(255) DEFAULT NULL, - `pre_version` varchar(32) DEFAULT NULL, - `pre_file` varchar(255) DEFAULT NULL, - `new_version` varchar(32) DEFAULT NULL, - `new_file` varchar(255) DEFAULT NULL, - `status` enum('Uploaded','Inactive','Active') DEFAULT NULL, - `update_time` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(), - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '当前包名', + `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '当前版本', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '当前软件包', + `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上一版本包名', + `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '上一版本', + `pre_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '上一版本软件包', + `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '新版本报名', + `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '新版本', + `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '新版软件包', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '当前状态 1当前版本 2上一版本 3有新版本', + `create_by` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `update_by` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uk_type_id` (`ne_type`,`ne_id`) USING BTREE COMMENT '唯一网元类型和ID' +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元版本信息'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/features/cm/software.go b/features/cm/software.go index 98b8fe79..6feb42e7 100644 --- a/features/cm/software.go +++ b/features/cm/software.go @@ -608,7 +608,7 @@ func DistributeSoftwareToNF(w http.ResponseWriter, r *http.Request) { Version: (*neSoftware)[0]["version"], FilePath: fmt.Sprintf("%s/software/%s/%s", config.GetYamlConfig().NE.OmcDir, neTypeLower, fileName), PreVersion: (*neVersion)[0]["version"], - PreFile: (*neVersion)[0]["file_path"], + PreFile: (*neVersion)[0]["path"], Status: SoftwareStatusInactive, } @@ -692,7 +692,7 @@ func ActiveSoftwareToNF(w http.ResponseWriter, r *http.Request) { log.Trace("neVersion:", neVersion) if !config.GetYamlConfig().OMC.TestMode { - filePath := (*neVersion)[0]["file_path"] + filePath := (*neVersion)[0]["path"] sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip) srcFile := fmt.Sprintf("%s/actpkg.sh", config.GetYamlConfig().OMC.BinDir) @@ -916,7 +916,7 @@ func RollBackSoftwareToNF(w http.ResponseWriter, r *http.Request) { PreVersion: "-", PreFile: "-", NewVersion: (*neVersion)[0]["version"], - NewFile: (*neVersion)[0]["file_path"], + NewFile: (*neVersion)[0]["path"], Status: SoftwareStatusActive, } @@ -1018,7 +1018,7 @@ func RollBackSoftwareToNF(w http.ResponseWriter, r *http.Request) { PreVersion: "-", PreFile: "-", NewVersion: (*neVersion)[0]["version"], - NewFile: (*neVersion)[0]["file_path"], + NewFile: (*neVersion)[0]["path"], Status: SoftwareStatusActive, } diff --git a/src/modules/network_element/model/ne_version.go b/src/modules/network_element/model/ne_version.go index 30f73498..ddde0af0 100644 --- a/src/modules/network_element/model/ne_version.go +++ b/src/modules/network_element/model/ne_version.go @@ -5,13 +5,16 @@ type NeVersion struct { ID string `json:"id" gorm:"id"` NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型 NeId string `json:"neId" gorm:"ne_id" binding:"required"` // 网元ID + Name string `json:"name" gorm:"name"` // 当前包名 Version string `json:"version" gorm:"version" binding:"required"` // 当前版本 Path string `json:"path" gorm:"path" binding:"required"` // 当前软件包 + PreName string `json:"preName" gorm:"pre_name"` // 上一版本包名 PreVersion string `json:"preVersion" gorm:"pre_version"` // 上一版本 PrePath string `json:"prePath" gorm:"pre_path"` // 上一版本软件包 - NewVersion string `json:"newVersion" gorm:"new_version"` // 下一版本 - NewPath string `json:"newPath" gorm:"new_path"` // 下一版本软件包 - Status string `json:"status" gorm:"status"` // 当前状态 1当前版本 2上一版本 3有新版本 (Uploaded下一版本上传 Inactive下一版本待激活 Active当前已激活) + NewName string `json:"newName" gorm:"new_name"` // 新版本包名 + NewVersion string `json:"newVersion" gorm:"new_version"` // 新版本 + NewPath string `json:"newPath" gorm:"new_path"` // 新版本软件包 + Status string `json:"status" gorm:"status"` // 当前状态 1当前版本 2上一版本 3有新版本 CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者 CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间 UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者 From e87e5c3664350d3e1bb02d0c889e12faa2db63c7 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 12 Apr 2024 17:26:30 +0800 Subject: [PATCH 017/130] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=93=8D=E4=BD=9C=E5=8D=87=E7=BA=A7=E5=92=8C=E5=9B=9E?= =?UTF-8?q?=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_version.go | 32 ++++ .../network_element/network_element.go | 5 + .../repository/ne_version.impl.go | 23 ++- .../network_element/service/ne_version.go | 5 + .../service/ne_version.impl.go | 148 ++++++++++++++++++ 5 files changed, 212 insertions(+), 1 deletion(-) diff --git a/src/modules/network_element/controller/ne_version.go b/src/modules/network_element/controller/ne_version.go index 5fab991e..06e8cbc8 100644 --- a/src/modules/network_element/controller/ne_version.go +++ b/src/modules/network_element/controller/ne_version.go @@ -150,3 +150,35 @@ func (s *NeVersionController) Remove(c *gin.Context) { msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) c.JSON(200, result.OkMsg(msg)) } + +// 网元版本操作 +// +// POST /operate +func (s *NeVersionController) Operate(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + Action string `json:"action" binding:"required,oneof=upgrade rollback"` // 操作行为 + NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型 + NeId string `json:"neId" gorm:"ne_id" binding:"required"` // 网元ID + Preinput map[string]string `json:"preinput" ` // 预先输入参数 + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + neVersion := s.neVersionService.SelectByNeTypeAndNeID(body.NeType, body.NeId) + if neVersion.NeId != body.NeId { + // 没有可访问网元版本数据! + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neVersion.noData"))) + return + } + + // 进行相关命令操作 + output, err := s.neVersionService.Operate(body.Action, neVersion, body.Preinput) + if err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + c.JSON(200, result.OkData(output)) +} diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index cd5b8bcc..fc4ad1aa 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -188,6 +188,11 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neVersion", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeVersion.Remove, ) + neVersionGroup.POST("/operate", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neVersion", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewNeVersion.Operate, + ) } // 网元软件包信息 diff --git a/src/modules/network_element/repository/ne_version.impl.go b/src/modules/network_element/repository/ne_version.impl.go index 5991abd8..0bcfe659 100644 --- a/src/modules/network_element/repository/ne_version.impl.go +++ b/src/modules/network_element/repository/ne_version.impl.go @@ -15,17 +15,20 @@ import ( // 实例化数据层 NewNeVersion 结构体 var NewNeVersionImpl = &NeVersionImpl{ selectSql: `select - id, ne_type, ne_id, version, path, pre_version, pre_path, new_version, new_path, status, create_by, create_time, update_by, update_time + id, ne_type, ne_id, name, version, path, pre_name, pre_version, pre_path, new_name, new_version, new_path, status, create_by, create_time, update_by, update_time from ne_version`, resultMap: map[string]string{ "id": "ID", "ne_type": "NeType", "ne_id": "NeId", + "name": "name", "version": "Version", "path": "Path", + "pre_name": "preName", "pre_version": "PreVersion", "pre_path": "PrePath", + "new_name": "NewName", "new_version": "NewVersion", "new_path": "NewPath", "status": "Status", @@ -223,18 +226,27 @@ func (r *NeVersionImpl) Insert(neVersion model.NeVersion) string { if neVersion.NeId != "" { params["ne_id"] = neVersion.NeId } + if neVersion.Name != "" { + params["name"] = neVersion.Name + } if neVersion.Version != "" { params["version"] = neVersion.Version } if neVersion.Path != "" { params["path"] = neVersion.Path } + if neVersion.PreName != "" { + params["pre_name"] = neVersion.PreName + } if neVersion.PreVersion != "" { params["pre_version"] = neVersion.PreVersion } if neVersion.PrePath != "" { params["pre_path"] = neVersion.PrePath } + if neVersion.NewName != "" { + params["new_name"] = neVersion.NewName + } if neVersion.NewVersion != "" { params["new_version"] = neVersion.NewVersion } @@ -286,18 +298,27 @@ func (r *NeVersionImpl) Update(neVersion model.NeVersion) int64 { if neVersion.NeId != "" { params["ne_id"] = neVersion.NeId } + if neVersion.Name != "" { + params["name"] = neVersion.Name + } if neVersion.Version != "" { params["version"] = neVersion.Version } if neVersion.Path != "" { params["path"] = neVersion.Path } + if neVersion.PreName != "" { + params["pre_name"] = neVersion.PreName + } if neVersion.PreVersion != "" { params["pre_version"] = neVersion.PreVersion } if neVersion.PrePath != "" { params["pre_path"] = neVersion.PrePath } + if neVersion.NewName != "" { + params["new_name"] = neVersion.NewName + } if neVersion.NewVersion != "" { params["new_version"] = neVersion.NewVersion } diff --git a/src/modules/network_element/service/ne_version.go b/src/modules/network_element/service/ne_version.go index 5e86b679..09090f9f 100644 --- a/src/modules/network_element/service/ne_version.go +++ b/src/modules/network_element/service/ne_version.go @@ -27,4 +27,9 @@ type INeVersion interface { // CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一 CheckUniqueTypeAndID(neType, neId, id string) bool + + // Operate 操作版本上传到网元主机执行命令 + // + // action 安装行为:upgrade rollback + Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) } diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 5e2df893..018d3d36 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -2,7 +2,12 @@ package service import ( "fmt" + "os" + "path/filepath" + "strings" + "time" + "be.ems/src/framework/utils/file" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" ) @@ -89,3 +94,146 @@ func (r *NeVersionImpl) CheckUniqueTypeAndID(neType, neId, id string) bool { } return uniqueId == "" } + +// Operate 操作版本上传到网元主机执行命令 +// +// action 安装行为:upgrade rollback +func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) { + softwarePath := neVersion.Path + if action == "upgrade" { + softwarePath = neVersion.NewPath + } + if action == "rollback" { + softwarePath = neVersion.PrePath + } + // 检查文件是否存在 + localFilePath := file.ParseUploadFilePath(softwarePath) + if _, err := os.Stat(localFilePath); err != nil { + return "", fmt.Errorf("file read failure") + } + fileName := filepath.Base(softwarePath) + if strings.Contains(fileName, "*") { + fileName = strings.ReplaceAll(fileName, "*", "_") + } + nePath := "/tmp" + neFilePath := fmt.Sprintf("%s/%s", nePath, fileName) + + // 网元主机的SSH客户端 + sshClient, err := NewNeInfoImpl.NeRunSSHclient(neVersion.NeType, neVersion.NeId) + if err != nil { + return "", err + } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + return "", err + } + defer sftpClient.Close() + + // 上传软件包到 /tmp + if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { + return "", fmt.Errorf("error uploading package") + } + + // ========= 安装命令 start ========= + // 命令终止结束标记 + okFlagStr := fmt.Sprintf("%s version %s successful!", neVersion.NeType, action) + // 安装软件包 + pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", neFilePath) + fileExt := filepath.Ext(strings.ToLower(fileName)) + if strings.HasSuffix(fileExt, "rpm") { + pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s", neFilePath) + } + + // 预先参数 + cmdStrArr := []string{} + if neVersion.NeType == "OMC" { + cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh stop") + cmdStrArr = append(cmdStrArr, pkgCmdStr) + cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart") + return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 15s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && "))) + } else if neVersion.NeType == "IMS" { + if !strings.Contains(strings.ToLower(fileName), "ims") { + return "", fmt.Errorf("error file package not ims") + } + cmdStrArr = append(cmdStrArr, "sudo ims-stop \n") + cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + // P/I/S-CSCF Config 配置覆盖 + if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("%s \n", pisCSCF)) + } + cmdStrArr = append(cmdStrArr, "sudo ims-start \n") + } else { + neTypeLower := strings.ToLower(neVersion.NeType) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s stop \n", neTypeLower)) + cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) + } + + // 删除软件包 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", neFilePath)) + // 结束 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) + // ========= 安装命令 end ========= + + // ssh连接会话 + clientSession, err := sshClient.NewClientSession(80, 24) + if err != nil { + return "", fmt.Errorf("neinfo ssh client session new err") + } + defer clientSession.Close() + + firstRead := true // 首次命令进行记录日志信息 + logMsg := "" // 日志信息 + done := make(chan bool) // 完成信号 + // 超时退出 30s + timeoutTicker := time.NewTicker(30 * time.Second) + defer timeoutTicker.Stop() + // 实时读取SSH消息直接输出 + msTicker := time.NewTicker(100 * time.Millisecond) + defer msTicker.Stop() + go func() { + for { + select { + case <-timeoutTicker.C: + done <- true + return + case <-msTicker.C: + outputByte := clientSession.Read() + if len(outputByte) > 0 { + outputStr := string(outputByte) + // 非首次进行记录命令 + if !firstRead { + logMsg += outputStr + } + // IMS预输入 + if neVersion.NeType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? ") { + shiftElement := cmdStrArr[0] // 获取第一个元素 + cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除 + clientSession.Write(shiftElement) + continue + } + // 命令终止符后继续执行命令 + if len(cmdStrArr) > 0 && strings.LastIndex(outputStr, "~$ ") > 2 { + if firstRead { + firstRead = false + } + shiftElement := cmdStrArr[0] // 获取第一个元素 + cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除 + clientSession.Write(shiftElement) + continue + } + // 最后输出的退出标记 + if strings.LastIndex(outputStr, okFlagStr) > 5 { + done <- true + break + } + } + } + } + }() + // 等待写入协程完成 + <-done + return logMsg, nil +} From 2cb4c2fc9badbb5eb7493bfe53d00beec3c79476 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 12 Apr 2024 17:27:12 +0800 Subject: [PATCH 018/130] =?UTF-8?q?fix:=20=E8=BD=AF=E4=BB=B6=E6=8A=A5?= =?UTF-8?q?=E7=9B=B4=E8=A3=85=E8=AE=B0=E5=BD=95=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_software.go | 9 ++-- .../network_element/service/ne_software.go | 4 +- .../service/ne_software.impl.go | 45 ++++++++++++------- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/modules/network_element/controller/ne_software.go b/src/modules/network_element/controller/ne_software.go index 4b4621ed..94ecc1fc 100644 --- a/src/modules/network_element/controller/ne_software.go +++ b/src/modules/network_element/controller/ne_software.go @@ -157,9 +157,8 @@ func (s *NeSoftwareController) Remove(c *gin.Context) { func (s *NeSoftwareController) Install(c *gin.Context) { language := ctx.AcceptLanguage(c) var body struct { - Action string `json:"action" binding:"required,oneof=install upgrade"` // 安装行为 - Software model.NeSoftware `json:"software" binding:"required"` // 软件包信息 - Preinput map[string]string `json:"preinput" binding:"required"` // 预先输入参数 + Software model.NeSoftware `json:"software" binding:"required"` // 软件包信息 + Preinput map[string]string `json:"preinput" binding:"required"` // 预先输入参数 } err := c.ShouldBindBodyWith(&body, binding.JSON) if err != nil || body.Software.NeId == "" { @@ -184,8 +183,8 @@ func (s *NeSoftwareController) Install(c *gin.Context) { s.neSoftwareService.Update(neSoftware) } - // 进行安装检查 - output, err := s.neSoftwareService.InstallToNeHost(body.Action, body.Software, body.Preinput) + // 进行安装 + output, err := s.neSoftwareService.InstallToNeHost(body.Software, body.Preinput) if err != nil { c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) return diff --git a/src/modules/network_element/service/ne_software.go b/src/modules/network_element/service/ne_software.go index 9ecfc09d..0b10dd62 100644 --- a/src/modules/network_element/service/ne_software.go +++ b/src/modules/network_element/service/ne_software.go @@ -26,7 +26,5 @@ type INeSoftware interface { CheckUniqueTypeAndNameAndVersion(neType, name, version, id string) bool // InstallToNeHost 安装包上传到网元主机执行安装命令 - // - // action 安装行为:install upgrade - InstallToNeHost(action string, neSoftware model.NeSoftware, preinput map[string]string) (string, error) + InstallToNeHost(neSoftware model.NeSoftware, preinput map[string]string) (string, error) } diff --git a/src/modules/network_element/service/ne_software.impl.go b/src/modules/network_element/service/ne_software.impl.go index 25cadf8d..df1454e4 100644 --- a/src/modules/network_element/service/ne_software.impl.go +++ b/src/modules/network_element/service/ne_software.impl.go @@ -53,6 +53,7 @@ func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string { neVersions := NewNeVersionImpl.SelectList(model.NeVersion{NeType: neSoftware.NeType}) if len(neVersions) > 0 { for _, neVersion := range neVersions { + neVersion.NewName = neSoftware.Name neVersion.NewVersion = neSoftware.Version neVersion.NewPath = neSoftware.Path neVersion.Status = "3" @@ -76,7 +77,9 @@ func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 { }) if len(neVersions) > 0 { for _, neVersion := range neVersions { + neVersion.NewName = neSoftware.Name neVersion.NewVersion = neSoftware.Version + neVersion.Status = "3" neVersion.UpdateBy = neSoftware.UpdateBy NewNeVersionImpl.Update(neVersion) } @@ -125,9 +128,7 @@ func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neType, name, version, } // InstallToNeHost 安装包上传到网元主机执行安装命令 -// -// action 安装行为:install upgrade -func (r *NeSoftwareImpl) InstallToNeHost(action string, neSoftware model.NeSoftware, preinput map[string]string) (string, error) { +func (r *NeSoftwareImpl) InstallToNeHost(neSoftware model.NeSoftware, preinput map[string]string) (string, error) { // 检查文件是否存在 localFilePath := file.ParseUploadFilePath(neSoftware.Path) if _, err := os.Stat(localFilePath); err != nil { @@ -159,15 +160,20 @@ func (r *NeSoftwareImpl) InstallToNeHost(action string, neSoftware model.NeSoftw } // ========= 安装命令 start ========= - cmdStrArr := []string{} + // 命令终止结束标记 - okFlagStr := fmt.Sprintf("%s software %s successful!", neSoftware.NeType, action) + okFlagStr := fmt.Sprintf("%s software install successful!", neSoftware.NeType) // 安装软件包 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo dpkg -i %s \n", neFilePath)) + pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s \n", neFilePath) + fileExt := filepath.Ext(strings.ToLower(fileName)) + if strings.HasSuffix(fileExt, "rpm") { + pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s \n", neFilePath) + } // 预先参数 + cmdStrArr := []string{pkgCmdStr} if neSoftware.NeType == "IMS" { - if !strings.Contains(fileName, "ims") { + if !strings.Contains(strings.ToLower(fileName), "ims") { return "", fmt.Errorf("error file package not ims") } // P/I/S-CSCF Config 配置覆盖 @@ -187,22 +193,16 @@ func (r *NeSoftwareImpl) InstallToNeHost(action string, neSoftware model.NeSoftw } cmdStrArr = append(cmdStrArr, "sudo ims-start") // 10s后停止服务 - if action == "install" { - cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 15s && sudo ims-stop\" > /dev/null 2>&1 & \n") - } + cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 15s && sudo ims-stop\" > /dev/null 2>&1 & \n") } else if neSoftware.NeType == "OMC" { cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart \n") // 10s后停止服务 - if action == "install" { - cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 15s && sudo /usr/local/omc/bin/omcsvc.sh stop\" > /dev/null 2>&1 & \n") - } + cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 15s && sudo /usr/local/omc/bin/omcsvc.sh stop\" > /dev/null 2>&1 & \n") } else { neTypeLower := strings.ToLower(neSoftware.NeType) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) // 10s后停止服务 - if action == "install" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 15s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) - } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 15s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) } // 删除软件包 @@ -269,5 +269,18 @@ func (r *NeSoftwareImpl) InstallToNeHost(action string, neSoftware model.NeSoftw }() // 等待写入协程完成 <-done + + // 更新Version + neVersion := NewNeVersionImpl.SelectByNeTypeAndNeID(neSoftware.NeType, neSoftware.NeId) + if neVersion.NeId == neSoftware.NeId { + neVersion.Name = neSoftware.Name + neVersion.Version = neSoftware.Version + neVersion.Path = neSoftware.Path + neVersion.NewName = "-" + neVersion.NewVersion = "-" + neVersion.NewPath = "-" + neVersion.Status = "1" + NewNeVersionImpl.Update(neVersion) + } return logMsg, nil } From ae96f958875a16f9e1d161f8f2dc079d8df6bfae Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 12 Apr 2024 19:25:47 +0800 Subject: [PATCH 019/130] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=93=8D=E4=BD=9Cstart=20restart=20stop=20reboot=20po?= =?UTF-8?q?weroff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_action.go | 49 +++++++++++++++++++ .../network_element/network_element.go | 5 ++ 2 files changed, 54 insertions(+) diff --git a/src/modules/network_element/controller/ne_action.go b/src/modules/network_element/controller/ne_action.go index 783e3c07..1336e5d6 100644 --- a/src/modules/network_element/controller/ne_action.go +++ b/src/modules/network_element/controller/ne_action.go @@ -155,3 +155,52 @@ func (s *NeActionController) Files(c *gin.Context) { "rows": splitRows, })) } + +// 网元服务操作 +// +// PUT /service +func (s *NeActionController) Service(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + NeType string `json:"neType" binding:"required"` + NeID string `json:"neId" binding:"required"` + Action string `json:"action" binding:"required,oneof=start restart stop reboot poweroff"` // 操作行为 + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeID) + if neInfo.NeId != body.NeID || neInfo.IP == "" { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + + neTypeLower := strings.ToLower(neInfo.NeType) + cmdStr := fmt.Sprintf("sudo service %s %s", neTypeLower, body.Action) + if neTypeLower == "omc" { + cmdStr = fmt.Sprintf("sudo /usr/local/bin/omcsvc.sh %s", body.Action) + } else if neTypeLower == "ims" { + if body.Action == "restart" { + cmdStr = "sudo ims-stop && sudo ims-start" + } else { + cmdStr = fmt.Sprintf("sudo ims-%s", body.Action) + } + } + + if body.Action == "reboot" { + cmdStr = "sudo shutdown -r now" + } + if body.Action == "poweroff" { + cmdStr = "sudo shutdown -h now" + } + + _, err := s.neInfoService.NeRunCMD(body.NeType, body.NeID, cmdStr) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.JSON(200, result.Ok(nil)) +} diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index fc4ad1aa..a803dc88 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -36,6 +36,11 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neAction", collectlogs.BUSINESS_TYPE_IMPORT)), controller.NewNeAction.PushFile, ) + neActionGroup.PUT("/service", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neAction", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewNeAction.Service, + ) } // 网元信息 From 12feeeaa642549c8cabc1bc47959025db844b5f3 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 12 Apr 2024 21:48:47 +0800 Subject: [PATCH 020/130] Merge remote-tracking branch 'origin/main' into lichang --- captrace/makefile | 2 +- config/etc/default/restconf.yaml | 4 +- config/goldkpi/kpi_title_all.csv | 34 + crontask/makefile | 2 +- data2html/makefile | 2 +- database/common/kpi_title.sql | 6 +- database/common/param_config.sql | 6 +- database/install/sys_dict_data.sql | 4 +- database/install/sys_dict_type.sql | 2 +- database/install/sys_menu.sql | 6 +- database/install/sys_role_menu.sql | 4 +- .../upgrade/upg_sys_dict_data1_i18n_zh.sql | 1266 +++++++++-------- .../upgrade/upg_sys_dict_data2_i18n_en.sql | 1266 +++++++++-------- database/upgrade/upg_sys_menu.sql | 509 +++++++ database/upgrade/upg_sys_role_menu.sql | 88 ++ .../upgvue3/upg_sys_dict_data1_i18n_zh.sql | 1249 ++++++++-------- .../upgvue3/upg_sys_dict_data2_i18n_en.sql | 1248 ++++++++-------- database/upgvue3/upg_sys_menu.sql | 527 ++++++- database/upgvue3/upg_sys_role_menu.sql | 88 ++ features/mml/mml.go | 4 +- makefile | 2 +- mkpkg.sh | 2 +- restagent/makefile | 2 +- .../config/config/config.default.yaml | 2 +- .../network_element/service/ne_info.impl.go | 4 +- sshsvc/makefile | 2 +- 26 files changed, 3820 insertions(+), 2511 deletions(-) diff --git a/captrace/makefile b/captrace/makefile index b68ac57c..5367c1ef 100644 --- a/captrace/makefile +++ b/captrace/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2404.2 +VERSION = 2.2404.3 PLATFORM = amd64 ARMPLATFORM = aarch64 BUILDDIR = ../../build diff --git a/config/etc/default/restconf.yaml b/config/etc/default/restconf.yaml index 62e26ccb..6ad7b0f5 100644 --- a/config/etc/default/restconf.yaml +++ b/config/etc/default/restconf.yaml @@ -101,9 +101,9 @@ omc: neId: 001 rmUID: 4400HX101 neName: OMC - province: - + province: "" vendor: "" - dn: - + dn: "" chk2ne: false sn: "-" checksign: false diff --git a/config/goldkpi/kpi_title_all.csv b/config/goldkpi/kpi_title_all.csv index a7d23d04..e3a3ba19 100644 --- a/config/goldkpi/kpi_title_all.csv +++ b/config/goldkpi/kpi_title_all.csv @@ -171,3 +171,37 @@ "MOCNGW","MOCNGW.31","{""cn"":""CsServiceNotification"",""en"":""CsServiceNotification""}","CsServiceNotification","CsServiceNotification" "MOCNGW","MOCNGW.32","{""cn"":""DownlinkGenericNasTransport"",""en"":""DownlinkGenericNasTransport""}","DownlinkGenericNasTransport","DownlinkGenericNasTransport" "MOCNGW","MOCNGW.33","{""cn"":""UplinkGenericNasTransport"",""en"":""UplinkGenericNasTransport""}","UplinkGenericNasTransport","UplinkGenericNasTransport" +"IMS","SCSCF.01","{""cn"": ""LTE接入注册用户数"",""en"": ""UR.SubsLTE.fromVoLTE""}","LTE接入注册用户数","UR.SubsLTE.fromVoLTE" +"IMS","SCSCF.02","{""cn"": ""5G接入注册用户数"",""en"": ""UR.Subs5G.fromVo5G""}","5G接入注册用户数","UR.Subs5G.fromVo5G" +"IMS","SCSCF.03","{""cn"": ""初始注册成功次数"",""en"": ""UR.SuccInitReg""}","初始注册成功次数","UR.SuccInitReg" +"IMS","SCSCF.04","{""cn"": ""初始注册请求次数"",""en"": ""UR.AttInitReg""}","初始注册请求次数","UR.AttInitReg" +"IMS","SCSCF.05","{""cn"": ""主叫接通次数"",""en"": ""SC.SuccSessionOrig""}","主叫接通次数","SC.SuccSessionOrig" +"IMS","SCSCF.06","{""cn"": ""主叫试呼次数"",""en"": ""SC.AttSessionOrig""}","主叫试呼次数","SC.AttSessionOrig" +"IMS","SCSCF.07","{""cn"": ""被叫接通次数"",""en"": ""SC.SuccSessionTerm""}","被叫接通次数","SC.SuccSessionTerm" +"IMS","SCSCF.08","{""cn"": ""被叫试呼次数"",""en"": ""SC.AttSessionTerm""}","被叫试呼次数","SC.AttSessionTerm" +"IMS","SCSCF.09","{""cn"": ""主叫应答次数"",""en"": ""SC.AnsSessionOrig""}","主叫应答次数","SC.AnsSessionOrig" +"IMS","SCSCF.10","{""cn"": ""主叫早释次数"",""en"": ""SC.OrigRelBeforeRing""}","主叫早释次数","SC.OrigRelBeforeRing" +"IMS","SCSCF.11","{""cn"": ""主叫振铃早释次数"",""en"": ""SC.OrigRelAfterRing""}","主叫振铃早释次数","SC.OrigRelAfterRing" +"IMS","SCSCF.12","{""cn"": ""主叫403请求禁止次数"",""en"": ""SC.FailSessionOrig.403""}","主叫403请求禁止次数","SC.FailSessionOrig.403" +"IMS","SCSCF.13","{""cn"": ""主叫404未找到次数"",""en"": ""SC.FailSessionOrig.404""}","主叫404未找到次数","SC.FailSessionOrig.404" +"IMS","SCSCF.14","{""cn"": ""主叫408请求超时次数"",""en"": ""SC.FailSessionOrig.408""}","主叫408请求超时次数","SC.FailSessionOrig.408" +"IMS","SCSCF.15","{""cn"": ""主叫480久叫不应次"",""en"": ""SC.FailSessionOrig.480""}","主叫480久叫不应次","SC.FailSessionOrig.480" +"IMS","SCSCF.16","{""cn"": ""主叫484Request-URI不完整次"",""en"": ""SC.FailSessionOrig.484""}","主叫484Request-URI不完整次","SC.FailSessionOrig.484" +"IMS","SCSCF.17","{""cn"": ""主叫486用户忙次数"",""en"": ""SC.FailSessionOrig.486""}","主叫486用户忙次数","SC.FailSessionOrig.486" +"IMS","SCSCF.18","{""cn"": ""主叫487请求终止次数"",""en"": ""SC.FailSessionOrig.487""}","主叫487请求终止次数","SC.FailSessionOrig.487" +"IMS","SCSCF.19","{""cn"": ""主叫600用户忙次数"",""en"": ""SC.FailSessionOrig.600""}","主叫600用户忙次数","SC.FailSessionOrig.600" +"IMS","SCSCF.20","{""cn"": ""主叫603用户拒接次数"",""en"": ""SC.FailSessionOrig.603""}","主叫603用户拒接次数","SC.FailSessionOrig.603" +"IMS","SCSCF.21","{""cn"": ""主叫604用户信息不存在次数"",""en"": ""SC.FailSessionOrig.604""}","主叫604用户信息不存在次数","SC.FailSessionOrig.604" +"IMS","SCSCF.22","{""cn"": ""被叫应答次数"",""en"": ""SC.AnsSessionTerm""}","被叫应答次数","SC.AnsSessionTerm" +"IMS","SCSCF.23","{""cn"": ""被叫早释次"",""en"": ""SC.TermiRelBeforeRing""}","被叫早释次","SC.TermiRelBeforeRing" +"IMS","SCSCF.24","{""cn"": ""被叫振铃早释次数"",""en"": ""SC.TermiRelAfterRing""}","被叫振铃早释次数","SC.TermiRelAfterRing" +"IMS","SCSCF.25","{""cn"": ""被叫403请求禁止次数"",""en"": ""SC.FailSessionTerm.403""}","被叫403请求禁止次数","SC.FailSessionTerm.403" +"IMS","SCSCF.26","{""cn"": ""被叫404未找到次数"",""en"": ""SC.FailSessionTerm.404""}","被叫404未找到次数","SC.FailSessionTerm.404" +"IMS","SCSCF.27","{""cn"": ""被叫408请求超时次数"",""en"": ""SC.FailSessionTerm.408""}","被叫408请求超时次数","SC.FailSessionTerm.408" +"IMS","SCSCF.28","{""cn"": ""被叫480久叫不应次数"",""en"": ""SC.FailSessionTerm.480""}","被叫480久叫不应次数","SC.FailSessionTerm.480" +"IMS","SCSCF.29","{""cn"": ""被叫484Request-URI不完整次数"",""en"": ""SC.FailSessionTerm.484""}","被叫484Request-URI不完整次数","SC.FailSessionTerm.484" +"IMS","SCSCF.30","{""cn"": ""被叫486用户忙次数"",""en"": ""SC.FailSessionTerm.486""}","被叫486用户忙次数","SC.FailSessionTerm.486" +"IMS","SCSCF.31","{""cn"": ""被叫487请求终止次数"",""en"": ""SC.FailSessionTerm.487""}","被叫487请求终止次数","SC.FailSessionTerm.487" +"IMS","SCSCF.32","{""cn"": ""被叫600用户忙次数"",""en"": ""SC.FailSessionTerm.600""}","被叫600用户忙次数","SC.FailSessionTerm.600" +"IMS","SCSCF.33","{""cn"": ""被叫603用户拒接次数"",""en"": ""SC.FailSessionTerm.603""}","被叫603用户拒接次数","SC.FailSessionTerm.603" +"IMS","SCSCF.34","{""cn"": ""被叫604用户信息不存在次数"",""en"": ""SC.FailSessionTerm.604""}","被叫604用户信息不存在次数","SC.FailSessionTerm.604" diff --git a/crontask/makefile b/crontask/makefile index 6ca33175..5ac64ee1 100644 --- a/crontask/makefile +++ b/crontask/makefile @@ -1,7 +1,7 @@ # Makefile for OMC-OMC-crontask project PROJECT = OMC -VERSION = 2.2404.2 +VERSION = 2.2404.3 LIBDIR = be.ems/lib BINNAME = crontask diff --git a/data2html/makefile b/data2html/makefile index 7a0c056b..fb450557 100644 --- a/data2html/makefile +++ b/data2html/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2404.2 +VERSION = 2.2404.3 RelDate = `date +%Y%m%d` Release = $(RelDate) RelVer = $(VERSION)-$(RelDate) diff --git a/database/common/kpi_title.sql b/database/common/kpi_title.sql index c7a29b9f..1d7c53a9 100644 --- a/database/common/kpi_title.sql +++ b/database/common/kpi_title.sql @@ -31,7 +31,7 @@ CREATE TABLE `kpi_title` ( `en_title` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, KEY `idx_kpi_id` (`kpi_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=441 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; +) ENGINE=InnoDB AUTO_INCREMENT=853 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -40,7 +40,7 @@ CREATE TABLE `kpi_title` ( LOCK TABLES `kpi_title` WRITE; /*!40000 ALTER TABLE `kpi_title` DISABLE KEYS */; -INSERT INTO `kpi_title` VALUES (269,'AMF','AMF.01','{\"cn\": \"AMF注册态用户数\", \"en\": \"AMF.RegSub\"}','AMF注册态用户数','AMF.RegSub'),(270,'AMF','AMF.02','{\"cn\": \"AMF初始注册请求次数\", \"en\": \"AMF.AttInitReg\"}','AMF初始注册请求次数','AMF.AttInitReg'),(271,'AMF','AMF.03','{\"cn\": \"AMF初始注册成功次数\", \"en\": \"AMF.SuccInitReg\"}','AMF初始注册成功次数','AMF.SuccInitReg'),(272,'AMF','AMF.04','{\"cn\": \"AMF初始注册失败次数_非法用户\", \"en\": \"AMF.FailedInitReg.3\"}','AMF初始注册失败次数_非法用户','AMF.FailedInitReg.3'),(273,'AMF','AMF.05','{\"cn\": \"AMF初始注册失败次数_PEI不允许\", \"en\": \"AMF.FailedInitReg.5\"}','AMF初始注册失败次数_PEI不允许','AMF.FailedInitReg.5'),(274,'AMF','AMF.06','{\"cn\": \"AMF初始注册失败次数_非法设备\", \"en\": \"AMF.FailedInitReg.6\"}','AMF初始注册失败次数_非法设备','AMF.FailedInitReg.6'),(275,'AMF','AMF.07','{\"cn\": \"AMF初始注册失败次数_5GS服务不允许_用户原因\", \"en\": \"AMF.FailedInitReg.7.User\"}','AMF初始注册失败次数_5GS服务不允许_用户原因','AMF.FailedInitReg.7.User'),(276,'AMF','AMF.08','{\"cn\": \"AMF初始注册失败次数_跟踪区内无合适小区_用户原因\", \"en\": \"AMF.FailedInitReg.15.User\"}','AMF初始注册失败次数_跟踪区内无合适小区_用户原因','AMF.FailedInitReg.15.User'),(277,'AMF','AMF.09','{\"cn\": \"AMF初始注册失败次数_N1模式不允许\", \"en\": \"AMF.FailedInitReg.27\"}','AMF初始注册失败次数_N1模式不允许','AMF.FailedInitReg.27'),(278,'AMF','AMF.10','{\"cn\": \"AMF初始注册失败次数_PLMN不允许\", \"en\": \"AMF.FailedInitReg.11\"}','AMF初始注册失败次数_PLMN不允许','AMF.FailedInitReg.11'),(279,'AMF','AMF.11','{\"cn\": \"AMF初始注册失败次数_跟踪区不允许\", \"en\": \"AMF.FailedInitReg.12\"}','AMF初始注册失败次数_跟踪区不允许','AMF.FailedInitReg.12'),(280,'AMF','AMF.12','{\"cn\": \"AMF初始注册失败次数_漫游跟踪区禁止接入\", \"en\": \"AMF.FailedInitReg.13\"}','AMF初始注册失败次数_漫游跟踪区禁止接入','AMF.FailedInitReg.13'),(281,'AMF','AMF.13','{\"cn\": \"AMF初始注册失败次数_无可用网络切片\", \"en\": \"AMF.FailedInitReg.62\"}','AMF初始注册失败次数_无可用网络切片','AMF.FailedInitReg.62'),(282,'AMF','AMF.14','{\"cn\": \"AMF初始注册失败次数_协议错误_用户原因\", \"en\": \"AMF.FailedInitReg.111.User\"}','AMF初始注册失败次数_协议错误_用户原因','AMF.FailedInitReg.111.User'),(283,'AMF','AMF.15','{\"cn\": \"AMF一次寻呼响应次数\", \"en\": \"AMF.FirstPagingSucc\"}','AMF一次寻呼响应次数','AMF.FirstPagingSucc'),(284,'AMF','AMF.16','{\"cn\": \"AMF二次寻呼响应次数\", \"en\": \"AMF.SecondPagingSucc\"}','AMF二次寻呼响应次数','AMF.SecondPagingSucc'),(285,'AMF','AMF.17','{\"cn\": \"AMF寻呼请求次数\", \"en\": \"AMF.PagAtt\"}','AMF寻呼请求次数','AMF.PagAtt'),(286,'AMF','AMF.18','{\"cn\": \"AMF业务请求被拒次数\", \"en\": \"AMF.FailServiceReq\"}','AMF业务请求被拒次数','AMF.FailServiceReq'),(287,'AMF','AMF.19','{\"cn\": \"AMF业务请求尝试次数\", \"en\": \"AMF.AttServiceReq\"}','AMF业务请求尝试次数','AMF.AttServiceReq'),(288,'SMF','SMF.01','{\"cn\": \"5G实时PDU会话数\", \"en\": \"SMF.MeanPduSession\"}','5G实时PDU会话数','SMF.MeanPduSession'),(289,'SMF','SMF.02','{\"cn\": \"PDU会话建立成功次数\", \"en\": \"SMF.SuccCreatePduSession\"}','PDU会话建立成功次数','SMF.SuccCreatePduSession'),(290,'SMF','SMF.03','{\"cn\": \"PDU会话建立请求次数\", \"en\": \"SMF.AttCreatePduSession\"}','PDU会话建立请求次数','SMF.AttCreatePduSession'),(291,'SMF','SMF.04','{\"cn\": \"IMS PDU会话建立成功次数\", \"en\": \"SMF.SuccCreatePduSession._Ims\"}','IMS PDU会话建立成功次数','SMF.SuccCreatePduSession._Ims'),(292,'SMF','SMF.05','{\"cn\": \"IMS PDU会话建立请求次数\", \"en\": \"SMF.AttCreatePduSession._Ims\"}','IMS PDU会话建立请求次数','SMF.AttCreatePduSession._Ims'),(293,'SMF','SMF.06','{\"cn\": \"EPS-Fallback成功数\", \"en\": \"SMF.SuccSmfModifyBearerResponse.Epsfb\"}','EPS-Fallback成功数','SMF.SuccSmfModifyBearerResponse.Epsfb'),(294,'SMF','SMF.07','{\"cn\": \"EPS-Fallback请求数\", \"en\": \"SMF.AttSmfModifyPduSession.Epsfb\"}','EPS-Fallback请求数','SMF.AttSmfModifyPduSession.Epsfb'),(295,'UDM','UDM.01','{\"cn\": \"5G注册用户数\", \"en\": \"UDR.5gActSub\"}','5G注册用户数','UDR.5gActSub'),(296,'UDM','UDM.02','{\"cn\": \"AMF发起的UECM注册请求次数\", \"en\": \"UDM.AmfUecmRegReq\"}','AMF发起的UECM注册请求次数','UDM.AmfUecmRegReq'),(297,'UDM','UDM.03','{\"cn\": \"AMF发起的UECM注册成功次数\", \"en\": \"UDM.AmfUecmRegSucc\"}','AMF发起的UECM注册成功次数','UDM.AmfUecmRegSucc'),(298,'UDM','UDM.04','{\"cn\": \"SMF发起的UECM注册成功次数\", \"en\": \"UDM.SmfUecmRegSucc\"}','SMF发起的UECM注册成功次数','UDM.SmfUecmRegSucc'),(299,'UDM','UDM.05','{\"cn\": \"SMF发起的UECM注册请求次数\", \"en\": \"UDM.SmfUecmRegReq\"}','SMF发起的UECM注册请求次数','UDM.SmfUecmRegReq'),(300,'UDM','UDM.06','{\"cn\": \"4G注册用户数\", \"en\": \"SUB.EpsActSubsInHss\"}','4G注册用户数','SUB.EpsActSubsInHss'),(301,'UDM','UDM.07','{\"cn\": \"4G鉴权信息查询成功次数\", \"en\": \"DIAM.AucInfoAnsSucc\"}','4G鉴权信息查询成功次数','DIAM.AucInfoAnsSucc'),(302,'UDM','UDM.08','{\"cn\": \"4G鉴权信息查询请求次数\", \"en\": \"DIAM.AucInfoReq\"}','4G鉴权信息查询请求次数','DIAM.AucInfoReq'),(303,'UDM','UDM.09','{\"cn\": \"4G更新位置成功次数\", \"en\": \"DIAM.UpdateLocationAnsSucc\"}','4G更新位置成功次数','DIAM.UpdateLocationAnsSucc'),(304,'UDM','UDM.10','{\"cn\": \"4G更新位置请求次数\", \"en\": \"DIAM.UpdateLocationReq\"}','4G更新位置请求次数','DIAM.UpdateLocationReq'),(305,'UDM','UDM.11','{\"cn\": \"SAR成功响应总次数\", \"en\": \"UR.SuccSAA\"}','SAR成功响应总次数','UR.SuccSAA'),(306,'UDM','UDM.12','{\"cn\": \"SAR请求总次数\", \"en\": \"UR.AttSAR\"}','SAR请求总次数','UR.AttSAR'),(307,'UDM','UDM.13','{\"cn\": \"LIR成功响应总次数\", \"en\": \"LIQ.SuccLIA\"}','LIR成功响应总次数','LIQ.SuccLIA'),(308,'UDM','UDM.14','{\"cn\": \"LIR请求总次数\", \"en\": \"LIQ.AttLIR\"}','LIR请求总次数','LIQ.AttLIR'),(309,'AUSF','AUSF.01','{\"cn\": \"鉴权成功次数\", \"en\": \"Ausf.UeAuthAnsSucc\"}','鉴权成功次数','Ausf.UeAuthAnsSucc'),(310,'AUSF','AUSF.02','{\"cn\": \"鉴权请求次数\", \"en\": \"Ausf.UeAuthReq\"}','鉴权请求次数','Ausf.UeAuthReq'),(311,'UPF','UPF.01','{\"cn\": \"PFCP会话建立成功次数\", \"en\": \"UPF.PfcpSessionEstabSucc\"}','PFCP会话建立成功次数','UPF.PfcpSessionEstabSucc'),(312,'UPF','UPF.02','{\"cn\": \"PFCP会话建立请求次数\", \"en\": \"UPF.PfcpSessionEstabReq\"}','PFCP会话建立请求次数','UPF.PfcpSessionEstabReq'),(313,'UPF','UPF.03','{\"cn\": \"N6接口上行字节数\", \"en\": \"UPF.N6OgOct\"}','N6接口上行字节数','UPF.N6OgOct'),(314,'UPF','UPF.04','{\"cn\": \"N6接口下行字节数\", \"en\": \"UPF.N6IncOct\"}','N6接口下行字节数','UPF.N6IncOct'),(315,'UPF','UPF.05','{\"cn\": \"N3接口上行字节数\", \"en\": \"UPF.N3OgOct\"}','N3接口上行字节数','UPF.N3OgOct'),(316,'UPF','UPF.06','{\"cn\": \"N3接口下行字节数\", \"en\": \"UPF.N3IncOct\"}','N3接口下行字节数','UPF.N3IncOct'),(317,'UPF','UPF.07','{\"cn\": \"SGi接口上行字节数\", \"en\": \"IP.PeakThroughputUlSgi\"}','SGi接口上行字节数','IP.PeakThroughputUlSgi'),(318,'UPF','UPF.08','{\"cn\": \"SGi接口下行字节数\", \"en\": \"IP.PeakThroughputDlSgi\"}','SGi接口下行字节数','IP.PeakThroughputDlSgi'),(319,'UPF','UPF.09','{\"cn\": \"S1-U接口上行字节数\", \"en\": \"GTP.OutOctS1uSgw\"}','S1-U接口上行字节数','GTP.OutOctS1uSgw'),(320,'UPF','UPF.10','{\"cn\": \"S1-U接口下行字节数\", \"en\": \"GTP.IncOctS1uSgw\"}','S1-U接口下行字节数','GTP.IncOctS1uSgw'),(321,'AMF','AMF.20','{\"cn\": \"EPS在线用户数\", \"en\": \"SUB.NbrSub.EcmIdle+SUB.NbrSub.EcmConnected\"}','EPS在线用户数','SUB.NbrSub.EcmIdle+SUB.NbrSub.EcmConnected'),(322,'AMF','AMF.21','{\"cn\": \"EPS附着成功次数\", \"en\": \"MM.SuccEpsAttach\"}','EPS附着成功次数','MM.SuccEpsAttach'),(323,'AMF','AMF.22','{\"cn\": \"EPS附着请求次数\", \"en\": \"MM.AttEpsAttach\"}','EPS附着请求次数','MM.AttEpsAttach'),(324,'AMF','AMF.23','{\"cn\": \"EPS附着失败次数_非法用户\", \"en\": \"MM.FailedEpsAttach.3\"}','EPS附着失败次数_非法用户','MM.FailedEpsAttach.3'),(325,'AMF','AMF.24','{\"cn\": \"EPS附着失败次数_非法终端\", \"en\": \"MM.FailedEpsAttach.5\"}','EPS附着失败次数_非法终端','MM.FailedEpsAttach.5'),(326,'AMF','AMF.25','{\"cn\": \"EPS附着失败次数_非法ME\", \"en\": \"MM.FailedEpsAttach.6\"}','EPS附着失败次数_非法ME','MM.FailedEpsAttach.6'),(327,'AMF','AMF.26','{\"cn\": \"EPS附着失败次数_EPS服务不允许_用户原因\", \"en\": \"MM.FailedEpsAttach.7.User\"}','EPS附着失败次数_EPS服务不允许_用户原因','MM.FailedEpsAttach.7.User'),(328,'AMF','AMF.27','{\"cn\": \"EPS附着失败次数_EPS和非EPS服务不允许\", \"en\": \"MM.FailedEpsAttach.8\"}','EPS附着失败次数_EPS和非EPS服务不允许','MM.FailedEpsAttach.8'),(329,'AMF','AMF.28','{\"cn\": \"EPS附着失败次数_跟踪区内无合适小区_用户原因\", \"en\": \"MM.FailedEpsAttach.15.User\"}','EPS附着失败次数_跟踪区内无合适小区_用户原因','MM.FailedEpsAttach.15.User'),(330,'AMF','AMF.29','{\"cn\": \"EPS附着失败次数_ESM失败_用户原因\", \"en\": \"MM.FailedEpsAttach.19.User\"}','EPS附着失败次数_ESM失败_用户原因','MM.FailedEpsAttach.19.User'),(331,'AMF','AMF.30','{\"cn\": \"MME一次寻呼响应次数\", \"en\": \"MM.FirstPagingSucc\"}','MME一次寻呼响应次数','MM.FirstPagingSucc'),(332,'AMF','AMF.31','{\"cn\": \"MME二次寻呼响应次数\", \"en\": \"MM.SecondPagingSucc\"}','MME二次寻呼响应次数','MM.SecondPagingSucc'),(333,'AMF','AMF.32','{\"cn\": \"MME寻呼请求次数\", \"en\": \"MM.PagAtt\"}','MME寻呼请求次数','MM.PagAtt'),(334,'SMF','SMF.08','{\"cn\": \"4G在线会话数\", \"en\": \"SM.MeanNbrBearerPgw.Default\"}','4G在线会话数','SM.MeanNbrBearerPgw.Default'),(335,'SMF','SMF.09','{\"cn\": \"PGW缺省承载建立成功个数\", \"en\": \"SM.SuccCreateDefaultEpsBearer\"}','PGW缺省承载建立成功个数','SM.SuccCreateDefaultEpsBearer'),(336,'SMF','SMF.10','{\"cn\": \"PGW缺省承载建立请求个数\", \"en\": \"SM.AttCreateDefaultEpsBearer\"}','PGW缺省承载建立请求个数','SM.AttCreateDefaultEpsBearer'),(337,'SMF','SMF.11','{\"cn\": \"PGW专用承载建立成功个数\", \"en\": \"SM.SuccCreateDedicatedEpsBearer\"}','PGW专用承载建立成功个数','SM.SuccCreateDedicatedEpsBearer'),(338,'SMF','SMF.12','{\"cn\": \"PGW专用承载建立请求个数\", \"en\": \"SM.AttCreateDedicatedEpsBearer\"}','PGW专用承载建立请求个数','SM.AttCreateDedicatedEpsBearer'),(339,'SMF','SMF.13','{\"cn\": \"IMS缺省承载成功建立个数\", \"en\": \"SM.SuccCreateDefaultEpsBearer._Ims\"}','IMS缺省承载成功建立个数','SM.SuccCreateDefaultEpsBearer._Ims'),(340,'SMF','SMF.14','{\"cn\": \"IMS缺省承载请求建立个数\", \"en\": \"SM.AttCreateDefaultEpsBearer._Ims\"}','IMS缺省承载请求建立个数','SM.AttCreateDefaultEpsBearer._Ims'),(341,'AMF','AMF.A.02','{\"cn\":\"AMF移动性注册更新成功次数\",\"en\":\"AMF.SuccMobiReg\"}','AMF移动性注册更新成功次数','AMF.SuccMobiReg'),(342,'AMF','AMF.A.03','{\"cn\":\"AMF移动性注册更新失败次数\",\"en\":\"AMF.FailedMobiReg\"}','AMF移动性注册更新失败次数','AMF.FailedMobiReg'),(343,'AMF','AMF.A.04','{\"cn\":\"AMF紧急注册请求次数\",\"en\":\"AMF.AttEmergReg\"}','AMF紧急注册请求次数','AMF.AttEmergReg'),(344,'AMF','AMF.A.05','{\"cn\":\"AMF紧急注册成功次数\",\"en\":\"AMF.SuccEmergReg\"}','AMF紧急注册成功次数','AMF.SuccEmergReg'),(345,'AMF','AMF.A.06','{\"cn\":\"AMF紧急注册失败次数\",\"en\":\"AMF.FailedEmergReg\"}','AMF紧急注册失败次数','AMF.FailedEmergReg'),(346,'AMF','AMF.A.07','{\"cn\":\"UE发起的去注册请求次数\",\"en\":\"AMF.AttUeDereg\"}','UE发起的去注册请求次数','AMF.AttUeDereg'),(347,'AMF','AMF.A.08','{\"cn\":\"UE发起的去注册成功次数\",\"en\":\"AMF.SuccUeDereg\"}','UE发起的去注册成功次数','AMF.SuccUeDereg'),(348,'AMF','AMF.A.09','{\"cn\":\"AMF发起的去注册请求次数\",\"en\":\"AMF.AttAmfDereg\"}','AMF发起的去注册请求次数','AMF.AttAmfDereg'),(349,'AMF','AMF.A.10','{\"cn\":\"AMF发起的去注册成功次数\",\"en\":\"AMF.SuccAmfDereg\"}','AMF发起的去注册成功次数','AMF.SuccAmfDereg'),(350,'AMF','AMF.A.11','{\"cn\":\"UDM发起的去注册请求次数\",\"en\":\"AMF.AttUdmDereg\"}','UDM发起的去注册请求次数','AMF.AttUdmDereg'),(351,'AMF','AMF.A.12','{\"cn\":\"UDM发起的去注册成功次数\",\"en\":\"AMF.SuccUdmDereg\"}','UDM发起的去注册成功次数','AMF.SuccUdmDereg'),(352,'AMF','AMF.A.13','{\"cn\":\"AMF寻呼失败次数\",\"en\":\"AMF.PagFail\"}','AMF寻呼失败次数','AMF.PagFail'),(353,'AMF','AMF.A.14','{\"cn\":\"AMF隐式去注册次数\",\"en\":\"AMF.ImplicitDereg\"}','AMF隐式去注册次数','AMF.ImplicitDereg'),(354,'SMF','SMF.A.01','{\"cn\":\"PDU会话接受次数\",\"en\":\"SMF.PduSessAcpt\"}','PDU会话接受次数','SMF.PduSessAcpt'),(355,'SMF','SMF.A.02','{\"cn\":\"基站Pdu资源创建成功次数\",\"en\":\"SM.PduResSetupSucc\"}','基站Pdu资源创建成功次数','SM.PduResSetupSucc'),(356,'SMF','SMF.A.03','{\"cn\":\"查询用户SM数据失败次数\",\"en\":\"SM.RetrieveSmDataFail\"}','查询用户SM数据失败次数','SM.RetrieveSmDataFail'),(357,'SMF','SMF.A.04','{\"cn\":\"PFCP会话建立失败次数\",\"en\":\"SM.PfcpSessEstFail\"}','PFCP会话建立失败次数','SM.PfcpSessEstFail'),(358,'SMF','SMF.A.05','{\"cn\":\"基站Pdu资源创建失败次数\",\"en\":\"SM.PduResSetupFail\"}','基站Pdu资源创建失败次数','SM.PduResSetupFail'),(359,'SMF','SMF.A.06','{\"cn\":\"PFCP会话修改失败次数\",\"en\":\"SM.PfcpSessMdfyFail\"}','PFCP会话修改失败次数','SM.PfcpSessMdfyFail'),(360,'SMF','SMF.A.07','{\"cn\":\"PDU会话拒绝次数\",\"en\":\"SM.PduSessRejt\"}','PDU会话拒绝次数','SM.PduSessRejt'),(361,'SMF','SMF.A.08','{\"cn\":\"PDU会话释放指示次数\",\"en\":\"SM.PduSessRelCmd\"}','PDU会话释放指示次数','SM.PduSessRelCmd'),(362,'NSSF','NSSF.A.02','{\"cn\":\"可用AMF注册次数\",\"en\":\"NSSF.SuccAvailAMFPut\"}','可用AMF注册成功次数','NSSF.SuccAvailAMFPut'),(363,'NSSF','NSSF.A.03','{\"cn\":\"可用AMF注册更新成功次数\",\"en\":\"NSSF.AvailAMFPut\"}','可用AMF注册次数','NSSF.AvailAMFPut'),(364,'NSSF','NSSF.A.04','{\"cn\":\"可用AMF注册更新次数\",\"en\":\"NSSF.SuccAvailAMFPatch\"}','可用AMF注册更新成功次数','NSSF.SuccAvailAMFPatch'),(365,'NSSF','NSSF.A.01','{\"cn\":\"可用AMF注册成功次数\",\"en\":\"NSSF.AvailAMFPatch\"}','可用AMF注册更新次数','NSSF.AvailAMFPatch'),(366,'NSSF','NSSF.A.05','{\"cn\":\"可用AMF去注册成功次数\",\"en\":\"NSSF.SuccAvailAMFDelete\"}','可用AMF去注册成功次数','NSSF.SuccAvailAMFDelete'),(367,'NSSF','NSSF.A.06','{\"cn\":\"可用AMF去注册次数\",\"en\":\"NSSF.AvailAMFDelete\"}','可用AMF去注册次数','NSSF.AvailAMFDelete'),(368,'NSSF','NSSF.A.07','{\"cn\":\"网元订阅成功次数\",\"en\":\"NSSF.SuccAvailSubscription\"}','网元订阅成功次数','NSSF.SuccAvailSubscription'),(369,'NSSF','NSSF.A.08','{\"cn\":\"网元订阅次数\",\"en\":\"NSSF.AvailSubscription\"}','网元订阅次数','NSSF.AvailSubscription'),(370,'NSSF','NSSF.A.09','{\"cn\":\"网元去订阅成功次数\",\"en\":\"NSSF.SuccAvailUnsubscription\"}','网元去订阅成功次数','NSSF.SuccAvailUnsubscription'),(371,'NSSF','NSSF.A.10','{\"cn\":\"网元去订阅次数\",\"en\":\"NSSF.AvailUnsubscription\"}','网元去订阅次数','NSSF.AvailUnsubscription'),(372,'NSSF','NSSF.A.11','{\"cn\":\"向NRF注册成功次数\",\"en\":\"NSSF.SuccNRFReg\"}','向NRF注册成功次数','NSSF.SuccNRFReg'),(373,'NSSF','NSSF.A.12','{\"cn\":\"向NRF注册次数\",\"en\":\"NSSF.NRFReg\"}','向NRF注册次数','NSSF.NRFReg'),(374,'NSSF','NSSF.A.13','{\"cn\":\"向NRF发送心跳次数\",\"en\":\"NSSF.NRFHeartbeat\"}','向NRF发送心跳次数','NSSF.NRFHeartbeat'),(375,'NSSF','NSSF.A.14','{\"cn\":\"当前注册AMF个数\",\"en\":\"NSSF.CurrentAMFCount\"}','当前注册AMF个数','NSSF.CurrentAMFCount'),(376,'NSSF','NSSF.A.15','{\"cn\":\"当前订阅网元个数\",\"en\":\"NSSF.CurrentSubscriperCount\"}','当前订阅网元个数','NSSF.CurrentSubscriperCount'),(377,'MME','MME.A.01','{\"cn\":\"MME附着请求次数\",\"en\":\"EpsAttachAtt\"}','MME附着请求次数','EpsAttachAtt'),(378,'MME','MME.A.02','{\"cn\":\"MME附着成功次数\",\"en\":\"EpsAttachSucc\"}','MME附着成功次数','EpsAttachSucc'),(379,'MME','MME.A.03','{\"cn\":\"MME附着失败次数\",\"en\":\"EpsAttachFail\"}','MME附着失败次数','EpsAttachFail'),(380,'MME','MME.A.04','{\"cn\":\"MME组合附着请求次数\",\"en\":\"CombAttachAtt\"}','MME组合附着请求次数','CombAttachAtt'),(381,'MME','MME.A.05','{\"cn\":\"MME组合附着成功次数\",\"en\":\"CombAttachSucc\"}','MME组合附着成功次数','CombAttachSucc'),(382,'MME','MME.A.06','{\"cn\":\"MME组合附着失败次数\",\"en\":\"CombAttachFail\"}','MME组合附着失败次数','CombAttachFail'),(383,'MME','MME.A.07','{\"cn\":\"MME紧急附着请求次数\",\"en\":\"EmergAttachAtt\"}','MME紧急附着请求次数','EmergAttachAtt'),(384,'MME','MME.A.08','{\"cn\":\"MME紧急附着成功次数\",\"en\":\"EmergAttachSucc\"}','MME紧急附着成功次数','EmergAttachSucc'),(385,'MME','MME.A.09','{\"cn\":\"MME紧急附着失败次数\",\"en\":\"EmergAttachFail\"}','MME紧急附着失败次数','EmergAttachFail'),(386,'MME','MME.A.10','{\"cn\":\"UE发起的分离请求次数\",\"en\":\"EpsDetachUeAtt\"}','UE发起的分离请求次数','EpsDetachUeAtt'),(387,'MME','MME.A.11','{\"cn\":\"UE发起的分离请求成功次数\",\"en\":\"EpsDetachUeSucc\"}','UE发起的分离请求成功次数','EpsDetachUeSucc'),(388,'MME','MME.A.12','{\"cn\":\"MME发起的分离请求次数\",\"en\":\"EpsDetachMMEAtt\"}','MME发起的分离请求次数','EpsDetachMMEAtt'),(389,'MME','MME.A.13','{\"cn\":\"MME发起的分离请求成功次数\",\"en\":\"EpsDetachMMESucc\"}','MME发起的分离请求成功次数','EpsDetachMMESucc'),(390,'MME','MME.A.14','{\"cn\":\"伴随SGW内切换的TAU请求次数\",\"en\":\"TauIntraSgwAtt\"}','伴随SGW内切换的TAU请求次数','TauIntraSgwAtt'),(391,'MME','MME.A.15','{\"cn\":\"伴随SGW内切换的TAU成功请求次数\",\"en\":\"TauIntraSgwSucc\"}','伴随SGW内切换的TAU成功请求次数','TauIntraSgwSucc'),(392,'MME','MME.A.16','{\"cn\":\"伴随SGW内切换的TAU失败请求次数\",\"en\":\"TauIntraSgwFail\"}','伴随SGW内切换的TAU失败请求次数','TauIntraSgwFail'),(393,'MME','MME.A.17','{\"cn\":\"MME寻呼次数\",\"en\":\"PagingEpsAtt\"}','MME寻呼次数','PagingEpsAtt'),(394,'MME','MME.A.18','{\"cn\":\"MME寻呼成功次数\",\"en\":\"PagingEpsSucc\"}','MME寻呼成功次数','PagingEpsSucc'),(395,'MME','MME.A.19','{\"cn\":\"MME寻呼失败次数\",\"en\":\"PagingEpsFail\"}','MME寻呼失败次数','PagingEpsFail'),(396,'MME','MME.A.20','{\"cn\":\"MME隐式分离请求次数\",\"en\":\"EpsImplicitDetach\"}','MME隐式分离请求次数','EpsImplicitDetach'),(397,'MME','MME.A.21','{\"cn\":\"MME激活专用承载请求次数\",\"en\":\"ActDedicatedEpsBearerAtt\"}','MME激活专用承载请求次数','ActDedicatedEpsBearerAtt'),(398,'MME','MME.A.22','{\"cn\":\"MME激活专用承载请求成功次数\",\"en\":\"ActDedicatedEpsBearerSucc\"}','MME激活专用承载请求成功次数','ActDedicatedEpsBearerSucc'),(399,'MME','MME.A.23','{\"cn\":\"MME激活专用承载请求失败次数\",\"en\":\"ActDedicatedEpsBearerFail\"}','MME激活专用承载请求失败次数','ActDedicatedEpsBearerFail'),(400,'MME','MME.A.24','{\"cn\":\"MME去激活专用承载请求次数\",\"en\":\"DeactEpsDedicatedBearerAtt\"}','MME去激活专用承载请求次数','DeactEpsDedicatedBearerAtt'),(401,'MME','MME.A.25','{\"cn\":\"MME去激活专用承载请求成功次数\",\"en\":\"DeactEpsDedicatedBearerSucc\"}','MME去激活专用承载请求成功次数','DeactEpsDedicatedBearerSucc'),(402,'MME','MME.A.26','{\"cn\":\"MME修改专用承载请求次数\",\"en\":\"ModEpsBearerAtt\"}','MME修改专用承载请求次数','ModEpsBearerAtt'),(403,'MME','MME.A.27','{\"cn\":\"MME修改专用承载请求成功次数\",\"en\":\"ModEpsBearerSucc\"}','MME修改专用承载请求成功次数','ModEpsBearerSucc'),(404,'MME','MME.A.28','{\"cn\":\"MME修改专用承载请求失败次数\",\"en\":\"ModEpsBearerFail\"}','MME修改专用承载请求失败次数','ModEpsBearerFail'),(405,'MME','MME.A.29','{\"cn\":\"MME服务请求次数\",\"en\":\"EpsServiceReqAtt\"}','MME服务请求次数','EpsServiceReqAtt'),(406,'MME','MME.A.30','{\"cn\":\"MME服务请求成功次数\",\"en\":\"EpsServiceReqSucc\"}','MME服务请求成功次数','EpsServiceReqSucc'),(407,'MME','MME.A.31','{\"cn\":\"MME服务请求失败次数\",\"en\":\"EpsServiceReqFail\"}','MME服务请求失败次数','EpsServiceReqFail'),(408,'MOCNGW','MOCNGW.01','{\"cn\":\"AttachRequest\",\"en\":\"AttachRequest\"}','AttachRequest','AttachRequest'),(409,'MOCNGW','MOCNGW.02','{\"cn\":\"AttachAccept\",\"en\":\"AttachAccept\"}','AttachAccept','AttachAccept'),(410,'MOCNGW','MOCNGW.03','{\"cn\":\"AttachComplete\",\"en\":\"AttachComplete\"}','AttachComplete','AttachComplete'),(411,'MOCNGW','MOCNGW.04','{\"cn\":\"AttachReject\",\"en\":\"AttachReject\"}','AttachReject','AttachReject'),(412,'MOCNGW','MOCNGW.05','{\"cn\":\"DetachRequest\",\"en\":\"DetachRequest\"}','DetachRequest','DetachRequest'),(413,'MOCNGW','MOCNGW.06','{\"cn\":\"DetachAccept\",\"en\":\"DetachAccept\"}','DetachAccept','DetachAccept'),(414,'MOCNGW','MOCNGW.07','{\"cn\":\"TrackingAreaUpdateRequest\",\"en\":\"TrackingAreaUpdateRequest\"}','TrackingAreaUpdateRequest','TrackingAreaUpdateRequest'),(415,'MOCNGW','MOCNGW.08','{\"cn\":\"TrackingAreaUpdateAccept\",\"en\":\"TrackingAreaUpdateAccept\"}','TrackingAreaUpdateAccept','TrackingAreaUpdateAccept'),(416,'MOCNGW','MOCNGW.09','{\"cn\":\"TrackingAreaUpdateComplete\",\"en\":\"TrackingAreaUpdateComplete\"}','TrackingAreaUpdateComplete','TrackingAreaUpdateComplete'),(417,'MOCNGW','MOCNGW.10','{\"cn\":\"TrackingAreaUpdateReject\",\"en\":\"TrackingAreaUpdateReject\"}','TrackingAreaUpdateReject','TrackingAreaUpdateReject'),(418,'MOCNGW','MOCNGW.11','{\"cn\":\"ServiceRequest\",\"en\":\"ServiceRequest\"}','ServiceRequest','ServiceRequest'),(419,'MOCNGW','MOCNGW.12','{\"cn\":\"ExtendedServiceRequest\",\"en\":\"ExtendedServiceRequest\"}','ExtendedServiceRequest','ExtendedServiceRequest'),(420,'MOCNGW','MOCNGW.13','{\"cn\":\"ControlPlaneServiceRequest\",\"en\":\"ControlPlaneServiceRequest\"}','ControlPlaneServiceRequest','ControlPlaneServiceRequest'),(421,'MOCNGW','MOCNGW.14','{\"cn\":\"ServiceReject\",\"en\":\"ServiceReject\"}','ServiceReject','ServiceReject'),(422,'MOCNGW','MOCNGW.15','{\"cn\":\"ServiceAccept\",\"en\":\"ServiceAccept\"}','ServiceAccept','ServiceAccept'),(423,'MOCNGW','MOCNGW.16','{\"cn\":\"GutiReallocationCommand\",\"en\":\"GutiReallocationCommand\"}','GutiReallocationCommand','GutiReallocationCommand'),(424,'MOCNGW','MOCNGW.17','{\"cn\":\"GutiReallocationComplete\",\"en\":\"GutiReallocationComplete\"}','GutiReallocationComplete','GutiReallocationComplete'),(425,'MOCNGW','MOCNGW.18','{\"cn\":\"AuthenticationRequest\",\"en\":\"AuthenticationRequest\"}','AuthenticationRequest','AuthenticationRequest'),(426,'MOCNGW','MOCNGW.19','{\"cn\":\"AuthenticationResponse\",\"en\":\"AuthenticationResponse\"}','AuthenticationResponse','AuthenticationResponse'),(427,'MOCNGW','MOCNGW.20','{\"cn\":\"AuthenticationReject\",\"en\":\"AuthenticationReject\"}','AuthenticationReject','AuthenticationReject'),(428,'MOCNGW','MOCNGW.21','{\"cn\":\"AuthenticationFailure\",\"en\":\"AuthenticationFailure\"}','AuthenticationFailure','AuthenticationFailure'),(429,'MOCNGW','MOCNGW.22','{\"cn\":\"IdentityRequest\",\"en\":\"IdentityRequest\"}','IdentityRequest','IdentityRequest'),(430,'MOCNGW','MOCNGW.23','{\"cn\":\"IdentityResponse\",\"en\":\"IdentityResponse\"}','IdentityResponse','IdentityResponse'),(431,'MOCNGW','MOCNGW.24','{\"cn\":\"SecurityModeCommand\",\"en\":\"SecurityModeCommand\"}','SecurityModeCommand','SecurityModeCommand'),(432,'MOCNGW','MOCNGW.25','{\"cn\":\"SecurityModeComplete\",\"en\":\"SecurityModeComplete\"}','SecurityModeComplete','SecurityModeComplete'),(433,'MOCNGW','MOCNGW.26','{\"cn\":\"SecurityModeReject\",\"en\":\"SecurityModeReject\"}','SecurityModeReject','SecurityModeReject'),(434,'MOCNGW','MOCNGW.27','{\"cn\":\"EmmStatus\",\"en\":\"EmmStatus\"}','EmmStatus','EmmStatus'),(435,'MOCNGW','MOCNGW.28','{\"cn\":\"EmmInformation\",\"en\":\"EmmInformation\"}','EmmInformation','EmmInformation'),(436,'MOCNGW','MOCNGW.29','{\"cn\":\"DownlinkNasTransport\",\"en\":\"DownlinkNasTransport\"}','DownlinkNasTransport','DownlinkNasTransport'),(437,'MOCNGW','MOCNGW.30','{\"cn\":\"UplinkNasTransport\",\"en\":\"UplinkNasTransport\"}','UplinkNasTransport','UplinkNasTransport'),(438,'MOCNGW','MOCNGW.31','{\"cn\":\"CsServiceNotification\",\"en\":\"CsServiceNotification\"}','CsServiceNotification','CsServiceNotification'),(439,'MOCNGW','MOCNGW.32','{\"cn\":\"DownlinkGenericNasTransport\",\"en\":\"DownlinkGenericNasTransport\"}','DownlinkGenericNasTransport','DownlinkGenericNasTransport'),(440,'MOCNGW','MOCNGW.33','{\"cn\":\"UplinkGenericNasTransport\",\"en\":\"UplinkGenericNasTransport\"}','UplinkGenericNasTransport','UplinkGenericNasTransport'); +INSERT INTO `kpi_title` VALUES (647,'AMF','AMF.01','{\"cn\": \"AMF注册态用户数\", \"en\": \"AMF.RegSub\"}','AMF注册态用户数','AMF.RegSub'),(648,'AMF','AMF.02','{\"cn\": \"AMF初始注册请求次数\", \"en\": \"AMF.AttInitReg\"}','AMF初始注册请求次数','AMF.AttInitReg'),(649,'AMF','AMF.03','{\"cn\": \"AMF初始注册成功次数\", \"en\": \"AMF.SuccInitReg\"}','AMF初始注册成功次数','AMF.SuccInitReg'),(650,'AMF','AMF.04','{\"cn\": \"AMF初始注册失败次数_非法用户\", \"en\": \"AMF.FailedInitReg.3\"}','AMF初始注册失败次数_非法用户','AMF.FailedInitReg.3'),(651,'AMF','AMF.05','{\"cn\": \"AMF初始注册失败次数_PEI不允许\", \"en\": \"AMF.FailedInitReg.5\"}','AMF初始注册失败次数_PEI不允许','AMF.FailedInitReg.5'),(652,'AMF','AMF.06','{\"cn\": \"AMF初始注册失败次数_非法设备\", \"en\": \"AMF.FailedInitReg.6\"}','AMF初始注册失败次数_非法设备','AMF.FailedInitReg.6'),(653,'AMF','AMF.07','{\"cn\": \"AMF初始注册失败次数_5GS服务不允许_用户原因\", \"en\": \"AMF.FailedInitReg.7.User\"}','AMF初始注册失败次数_5GS服务不允许_用户原因','AMF.FailedInitReg.7.User'),(654,'AMF','AMF.08','{\"cn\": \"AMF初始注册失败次数_跟踪区内无合适小区_用户原因\", \"en\": \"AMF.FailedInitReg.15.User\"}','AMF初始注册失败次数_跟踪区内无合适小区_用户原因','AMF.FailedInitReg.15.User'),(655,'AMF','AMF.09','{\"cn\": \"AMF初始注册失败次数_N1模式不允许\", \"en\": \"AMF.FailedInitReg.27\"}','AMF初始注册失败次数_N1模式不允许','AMF.FailedInitReg.27'),(656,'AMF','AMF.10','{\"cn\": \"AMF初始注册失败次数_PLMN不允许\", \"en\": \"AMF.FailedInitReg.11\"}','AMF初始注册失败次数_PLMN不允许','AMF.FailedInitReg.11'),(657,'AMF','AMF.11','{\"cn\": \"AMF初始注册失败次数_跟踪区不允许\", \"en\": \"AMF.FailedInitReg.12\"}','AMF初始注册失败次数_跟踪区不允许','AMF.FailedInitReg.12'),(658,'AMF','AMF.12','{\"cn\": \"AMF初始注册失败次数_漫游跟踪区禁止接入\", \"en\": \"AMF.FailedInitReg.13\"}','AMF初始注册失败次数_漫游跟踪区禁止接入','AMF.FailedInitReg.13'),(659,'AMF','AMF.13','{\"cn\": \"AMF初始注册失败次数_无可用网络切片\", \"en\": \"AMF.FailedInitReg.62\"}','AMF初始注册失败次数_无可用网络切片','AMF.FailedInitReg.62'),(660,'AMF','AMF.14','{\"cn\": \"AMF初始注册失败次数_协议错误_用户原因\", \"en\": \"AMF.FailedInitReg.111.User\"}','AMF初始注册失败次数_协议错误_用户原因','AMF.FailedInitReg.111.User'),(661,'AMF','AMF.15','{\"cn\": \"AMF一次寻呼响应次数\", \"en\": \"AMF.FirstPagingSucc\"}','AMF一次寻呼响应次数','AMF.FirstPagingSucc'),(662,'AMF','AMF.16','{\"cn\": \"AMF二次寻呼响应次数\", \"en\": \"AMF.SecondPagingSucc\"}','AMF二次寻呼响应次数','AMF.SecondPagingSucc'),(663,'AMF','AMF.17','{\"cn\": \"AMF寻呼请求次数\", \"en\": \"AMF.PagAtt\"}','AMF寻呼请求次数','AMF.PagAtt'),(664,'AMF','AMF.18','{\"cn\": \"AMF业务请求被拒次数\", \"en\": \"AMF.FailServiceReq\"}','AMF业务请求被拒次数','AMF.FailServiceReq'),(665,'AMF','AMF.19','{\"cn\": \"AMF业务请求尝试次数\", \"en\": \"AMF.AttServiceReq\"}','AMF业务请求尝试次数','AMF.AttServiceReq'),(666,'SMF','SMF.01','{\"cn\": \"5G实时PDU会话数\", \"en\": \"SMF.MeanPduSession\"}','5G实时PDU会话数','SMF.MeanPduSession'),(667,'SMF','SMF.02','{\"cn\": \"PDU会话建立成功次数\", \"en\": \"SMF.SuccCreatePduSession\"}','PDU会话建立成功次数','SMF.SuccCreatePduSession'),(668,'SMF','SMF.03','{\"cn\": \"PDU会话建立请求次数\", \"en\": \"SMF.AttCreatePduSession\"}','PDU会话建立请求次数','SMF.AttCreatePduSession'),(669,'SMF','SMF.04','{\"cn\": \"IMS PDU会话建立成功次数\", \"en\": \"SMF.SuccCreatePduSession._Ims\"}','IMS PDU会话建立成功次数','SMF.SuccCreatePduSession._Ims'),(670,'SMF','SMF.05','{\"cn\": \"IMS PDU会话建立请求次数\", \"en\": \"SMF.AttCreatePduSession._Ims\"}','IMS PDU会话建立请求次数','SMF.AttCreatePduSession._Ims'),(671,'SMF','SMF.06','{\"cn\": \"EPS-Fallback成功数\", \"en\": \"SMF.SuccSmfModifyBearerResponse.Epsfb\"}','EPS-Fallback成功数','SMF.SuccSmfModifyBearerResponse.Epsfb'),(672,'SMF','SMF.07','{\"cn\": \"EPS-Fallback请求数\", \"en\": \"SMF.AttSmfModifyPduSession.Epsfb\"}','EPS-Fallback请求数','SMF.AttSmfModifyPduSession.Epsfb'),(673,'UDM','UDM.01','{\"cn\": \"5G注册用户数\", \"en\": \"UDR.5gActSub\"}','5G注册用户数','UDR.5gActSub'),(674,'UDM','UDM.02','{\"cn\": \"AMF发起的UECM注册请求次数\", \"en\": \"UDM.AmfUecmRegReq\"}','AMF发起的UECM注册请求次数','UDM.AmfUecmRegReq'),(675,'UDM','UDM.03','{\"cn\": \"AMF发起的UECM注册成功次数\", \"en\": \"UDM.AmfUecmRegSucc\"}','AMF发起的UECM注册成功次数','UDM.AmfUecmRegSucc'),(676,'UDM','UDM.04','{\"cn\": \"SMF发起的UECM注册成功次数\", \"en\": \"UDM.SmfUecmRegSucc\"}','SMF发起的UECM注册成功次数','UDM.SmfUecmRegSucc'),(677,'UDM','UDM.05','{\"cn\": \"SMF发起的UECM注册请求次数\", \"en\": \"UDM.SmfUecmRegReq\"}','SMF发起的UECM注册请求次数','UDM.SmfUecmRegReq'),(678,'UDM','UDM.06','{\"cn\": \"4G注册用户数\", \"en\": \"SUB.EpsActSubsInHss\"}','4G注册用户数','SUB.EpsActSubsInHss'),(679,'UDM','UDM.07','{\"cn\": \"4G鉴权信息查询成功次数\", \"en\": \"DIAM.AucInfoAnsSucc\"}','4G鉴权信息查询成功次数','DIAM.AucInfoAnsSucc'),(680,'UDM','UDM.08','{\"cn\": \"4G鉴权信息查询请求次数\", \"en\": \"DIAM.AucInfoReq\"}','4G鉴权信息查询请求次数','DIAM.AucInfoReq'),(681,'UDM','UDM.09','{\"cn\": \"4G更新位置成功次数\", \"en\": \"DIAM.UpdateLocationAnsSucc\"}','4G更新位置成功次数','DIAM.UpdateLocationAnsSucc'),(682,'UDM','UDM.10','{\"cn\": \"4G更新位置请求次数\", \"en\": \"DIAM.UpdateLocationReq\"}','4G更新位置请求次数','DIAM.UpdateLocationReq'),(683,'UDM','UDM.11','{\"cn\": \"SAR成功响应总次数\", \"en\": \"UR.SuccSAA\"}','SAR成功响应总次数','UR.SuccSAA'),(684,'UDM','UDM.12','{\"cn\": \"SAR请求总次数\", \"en\": \"UR.AttSAR\"}','SAR请求总次数','UR.AttSAR'),(685,'UDM','UDM.13','{\"cn\": \"LIR成功响应总次数\", \"en\": \"LIQ.SuccLIA\"}','LIR成功响应总次数','LIQ.SuccLIA'),(686,'UDM','UDM.14','{\"cn\": \"LIR请求总次数\", \"en\": \"LIQ.AttLIR\"}','LIR请求总次数','LIQ.AttLIR'),(687,'AUSF','AUSF.01','{\"cn\": \"鉴权成功次数\", \"en\": \"Ausf.UeAuthAnsSucc\"}','鉴权成功次数','Ausf.UeAuthAnsSucc'),(688,'AUSF','AUSF.02','{\"cn\": \"鉴权请求次数\", \"en\": \"Ausf.UeAuthReq\"}','鉴权请求次数','Ausf.UeAuthReq'),(689,'UPF','UPF.01','{\"cn\": \"PFCP会话建立成功次数\", \"en\": \"UPF.PfcpSessionEstabSucc\"}','PFCP会话建立成功次数','UPF.PfcpSessionEstabSucc'),(690,'UPF','UPF.02','{\"cn\": \"PFCP会话建立请求次数\", \"en\": \"UPF.PfcpSessionEstabReq\"}','PFCP会话建立请求次数','UPF.PfcpSessionEstabReq'),(691,'UPF','UPF.03','{\"cn\": \"N6接口上行字节数\", \"en\": \"UPF.N6OgOct\"}','N6接口上行字节数','UPF.N6OgOct'),(692,'UPF','UPF.04','{\"cn\": \"N6接口下行字节数\", \"en\": \"UPF.N6IncOct\"}','N6接口下行字节数','UPF.N6IncOct'),(693,'UPF','UPF.05','{\"cn\": \"N3接口上行字节数\", \"en\": \"UPF.N3OgOct\"}','N3接口上行字节数','UPF.N3OgOct'),(694,'UPF','UPF.06','{\"cn\": \"N3接口下行字节数\", \"en\": \"UPF.N3IncOct\"}','N3接口下行字节数','UPF.N3IncOct'),(695,'UPF','UPF.07','{\"cn\": \"SGi接口上行字节数\", \"en\": \"IP.PeakThroughputUlSgi\"}','SGi接口上行字节数','IP.PeakThroughputUlSgi'),(696,'UPF','UPF.08','{\"cn\": \"SGi接口下行字节数\", \"en\": \"IP.PeakThroughputDlSgi\"}','SGi接口下行字节数','IP.PeakThroughputDlSgi'),(697,'UPF','UPF.09','{\"cn\": \"S1-U接口上行字节数\", \"en\": \"GTP.OutOctS1uSgw\"}','S1-U接口上行字节数','GTP.OutOctS1uSgw'),(698,'UPF','UPF.10','{\"cn\": \"S1-U接口下行字节数\", \"en\": \"GTP.IncOctS1uSgw\"}','S1-U接口下行字节数','GTP.IncOctS1uSgw'),(699,'AMF','AMF.20','{\"cn\": \"EPS在线用户数\", \"en\": \"SUB.NbrSub.EcmIdle+SUB.NbrSub.EcmConnected\"}','EPS在线用户数','SUB.NbrSub.EcmIdle+SUB.NbrSub.EcmConnected'),(700,'AMF','AMF.21','{\"cn\": \"EPS附着成功次数\", \"en\": \"MM.SuccEpsAttach\"}','EPS附着成功次数','MM.SuccEpsAttach'),(701,'AMF','AMF.22','{\"cn\": \"EPS附着请求次数\", \"en\": \"MM.AttEpsAttach\"}','EPS附着请求次数','MM.AttEpsAttach'),(702,'AMF','AMF.23','{\"cn\": \"EPS附着失败次数_非法用户\", \"en\": \"MM.FailedEpsAttach.3\"}','EPS附着失败次数_非法用户','MM.FailedEpsAttach.3'),(703,'AMF','AMF.24','{\"cn\": \"EPS附着失败次数_非法终端\", \"en\": \"MM.FailedEpsAttach.5\"}','EPS附着失败次数_非法终端','MM.FailedEpsAttach.5'),(704,'AMF','AMF.25','{\"cn\": \"EPS附着失败次数_非法ME\", \"en\": \"MM.FailedEpsAttach.6\"}','EPS附着失败次数_非法ME','MM.FailedEpsAttach.6'),(705,'AMF','AMF.26','{\"cn\": \"EPS附着失败次数_EPS服务不允许_用户原因\", \"en\": \"MM.FailedEpsAttach.7.User\"}','EPS附着失败次数_EPS服务不允许_用户原因','MM.FailedEpsAttach.7.User'),(706,'AMF','AMF.27','{\"cn\": \"EPS附着失败次数_EPS和非EPS服务不允许\", \"en\": \"MM.FailedEpsAttach.8\"}','EPS附着失败次数_EPS和非EPS服务不允许','MM.FailedEpsAttach.8'),(707,'AMF','AMF.28','{\"cn\": \"EPS附着失败次数_跟踪区内无合适小区_用户原因\", \"en\": \"MM.FailedEpsAttach.15.User\"}','EPS附着失败次数_跟踪区内无合适小区_用户原因','MM.FailedEpsAttach.15.User'),(708,'AMF','AMF.29','{\"cn\": \"EPS附着失败次数_ESM失败_用户原因\", \"en\": \"MM.FailedEpsAttach.19.User\"}','EPS附着失败次数_ESM失败_用户原因','MM.FailedEpsAttach.19.User'),(709,'AMF','AMF.30','{\"cn\": \"MME一次寻呼响应次数\", \"en\": \"MM.FirstPagingSucc\"}','MME一次寻呼响应次数','MM.FirstPagingSucc'),(710,'AMF','AMF.31','{\"cn\": \"MME二次寻呼响应次数\", \"en\": \"MM.SecondPagingSucc\"}','MME二次寻呼响应次数','MM.SecondPagingSucc'),(711,'AMF','AMF.32','{\"cn\": \"MME寻呼请求次数\", \"en\": \"MM.PagAtt\"}','MME寻呼请求次数','MM.PagAtt'),(712,'SMF','SMF.08','{\"cn\": \"4G在线会话数\", \"en\": \"SM.MeanNbrBearerPgw.Default\"}','4G在线会话数','SM.MeanNbrBearerPgw.Default'),(713,'SMF','SMF.09','{\"cn\": \"PGW缺省承载建立成功个数\", \"en\": \"SM.SuccCreateDefaultEpsBearer\"}','PGW缺省承载建立成功个数','SM.SuccCreateDefaultEpsBearer'),(714,'SMF','SMF.10','{\"cn\": \"PGW缺省承载建立请求个数\", \"en\": \"SM.AttCreateDefaultEpsBearer\"}','PGW缺省承载建立请求个数','SM.AttCreateDefaultEpsBearer'),(715,'SMF','SMF.11','{\"cn\": \"PGW专用承载建立成功个数\", \"en\": \"SM.SuccCreateDedicatedEpsBearer\"}','PGW专用承载建立成功个数','SM.SuccCreateDedicatedEpsBearer'),(716,'SMF','SMF.12','{\"cn\": \"PGW专用承载建立请求个数\", \"en\": \"SM.AttCreateDedicatedEpsBearer\"}','PGW专用承载建立请求个数','SM.AttCreateDedicatedEpsBearer'),(717,'SMF','SMF.13','{\"cn\": \"IMS缺省承载成功建立个数\", \"en\": \"SM.SuccCreateDefaultEpsBearer._Ims\"}','IMS缺省承载成功建立个数','SM.SuccCreateDefaultEpsBearer._Ims'),(718,'SMF','SMF.14','{\"cn\": \"IMS缺省承载请求建立个数\", \"en\": \"SM.AttCreateDefaultEpsBearer._Ims\"}','IMS缺省承载请求建立个数','SM.AttCreateDefaultEpsBearer._Ims'),(719,'AMF','AMF.A.02','{\"cn\":\"AMF移动性注册更新成功次数\",\"en\":\"AMF.SuccMobiReg\"}','AMF移动性注册更新成功次数','AMF.SuccMobiReg'),(720,'AMF','AMF.A.03','{\"cn\":\"AMF移动性注册更新失败次数\",\"en\":\"AMF.FailedMobiReg\"}','AMF移动性注册更新失败次数','AMF.FailedMobiReg'),(721,'AMF','AMF.A.04','{\"cn\":\"AMF紧急注册请求次数\",\"en\":\"AMF.AttEmergReg\"}','AMF紧急注册请求次数','AMF.AttEmergReg'),(722,'AMF','AMF.A.05','{\"cn\":\"AMF紧急注册成功次数\",\"en\":\"AMF.SuccEmergReg\"}','AMF紧急注册成功次数','AMF.SuccEmergReg'),(723,'AMF','AMF.A.06','{\"cn\":\"AMF紧急注册失败次数\",\"en\":\"AMF.FailedEmergReg\"}','AMF紧急注册失败次数','AMF.FailedEmergReg'),(724,'AMF','AMF.A.07','{\"cn\":\"UE发起的去注册请求次数\",\"en\":\"AMF.AttUeDereg\"}','UE发起的去注册请求次数','AMF.AttUeDereg'),(725,'AMF','AMF.A.08','{\"cn\":\"UE发起的去注册成功次数\",\"en\":\"AMF.SuccUeDereg\"}','UE发起的去注册成功次数','AMF.SuccUeDereg'),(726,'AMF','AMF.A.09','{\"cn\":\"AMF发起的去注册请求次数\",\"en\":\"AMF.AttAmfDereg\"}','AMF发起的去注册请求次数','AMF.AttAmfDereg'),(727,'AMF','AMF.A.10','{\"cn\":\"AMF发起的去注册成功次数\",\"en\":\"AMF.SuccAmfDereg\"}','AMF发起的去注册成功次数','AMF.SuccAmfDereg'),(728,'AMF','AMF.A.11','{\"cn\":\"UDM发起的去注册请求次数\",\"en\":\"AMF.AttUdmDereg\"}','UDM发起的去注册请求次数','AMF.AttUdmDereg'),(729,'AMF','AMF.A.12','{\"cn\":\"UDM发起的去注册成功次数\",\"en\":\"AMF.SuccUdmDereg\"}','UDM发起的去注册成功次数','AMF.SuccUdmDereg'),(730,'AMF','AMF.A.13','{\"cn\":\"AMF寻呼失败次数\",\"en\":\"AMF.PagFail\"}','AMF寻呼失败次数','AMF.PagFail'),(731,'AMF','AMF.A.14','{\"cn\":\"AMF隐式去注册次数\",\"en\":\"AMF.ImplicitDereg\"}','AMF隐式去注册次数','AMF.ImplicitDereg'),(732,'SMF','SMF.A.01','{\"cn\":\"PDU会话接受次数\",\"en\":\"SMF.PduSessAcpt\"}','PDU会话接受次数','SMF.PduSessAcpt'),(733,'SMF','SMF.A.02','{\"cn\":\"基站Pdu资源创建成功次数\",\"en\":\"SM.PduResSetupSucc\"}','基站Pdu资源创建成功次数','SM.PduResSetupSucc'),(734,'SMF','SMF.A.03','{\"cn\":\"查询用户SM数据失败次数\",\"en\":\"SM.RetrieveSmDataFail\"}','查询用户SM数据失败次数','SM.RetrieveSmDataFail'),(735,'SMF','SMF.A.04','{\"cn\":\"PFCP会话建立失败次数\",\"en\":\"SM.PfcpSessEstFail\"}','PFCP会话建立失败次数','SM.PfcpSessEstFail'),(736,'SMF','SMF.A.05','{\"cn\":\"基站Pdu资源创建失败次数\",\"en\":\"SM.PduResSetupFail\"}','基站Pdu资源创建失败次数','SM.PduResSetupFail'),(737,'SMF','SMF.A.06','{\"cn\":\"PFCP会话修改失败次数\",\"en\":\"SM.PfcpSessMdfyFail\"}','PFCP会话修改失败次数','SM.PfcpSessMdfyFail'),(738,'SMF','SMF.A.07','{\"cn\":\"PDU会话拒绝次数\",\"en\":\"SM.PduSessRejt\"}','PDU会话拒绝次数','SM.PduSessRejt'),(739,'SMF','SMF.A.08','{\"cn\":\"PDU会话释放指示次数\",\"en\":\"SM.PduSessRelCmd\"}','PDU会话释放指示次数','SM.PduSessRelCmd'),(740,'NSSF','NSSF.A.02','{\"cn\":\"可用AMF注册次数\",\"en\":\"NSSF.SuccAvailAMFPut\"}','可用AMF注册成功次数','NSSF.SuccAvailAMFPut'),(741,'NSSF','NSSF.A.03','{\"cn\":\"可用AMF注册更新成功次数\",\"en\":\"NSSF.AvailAMFPut\"}','可用AMF注册次数','NSSF.AvailAMFPut'),(742,'NSSF','NSSF.A.04','{\"cn\":\"可用AMF注册更新次数\",\"en\":\"NSSF.SuccAvailAMFPatch\"}','可用AMF注册更新成功次数','NSSF.SuccAvailAMFPatch'),(743,'NSSF','NSSF.A.01','{\"cn\":\"可用AMF注册成功次数\",\"en\":\"NSSF.AvailAMFPatch\"}','可用AMF注册更新次数','NSSF.AvailAMFPatch'),(744,'NSSF','NSSF.A.05','{\"cn\":\"可用AMF去注册成功次数\",\"en\":\"NSSF.SuccAvailAMFDelete\"}','可用AMF去注册成功次数','NSSF.SuccAvailAMFDelete'),(745,'NSSF','NSSF.A.06','{\"cn\":\"可用AMF去注册次数\",\"en\":\"NSSF.AvailAMFDelete\"}','可用AMF去注册次数','NSSF.AvailAMFDelete'),(746,'NSSF','NSSF.A.07','{\"cn\":\"网元订阅成功次数\",\"en\":\"NSSF.SuccAvailSubscription\"}','网元订阅成功次数','NSSF.SuccAvailSubscription'),(747,'NSSF','NSSF.A.08','{\"cn\":\"网元订阅次数\",\"en\":\"NSSF.AvailSubscription\"}','网元订阅次数','NSSF.AvailSubscription'),(748,'NSSF','NSSF.A.09','{\"cn\":\"网元去订阅成功次数\",\"en\":\"NSSF.SuccAvailUnsubscription\"}','网元去订阅成功次数','NSSF.SuccAvailUnsubscription'),(749,'NSSF','NSSF.A.10','{\"cn\":\"网元去订阅次数\",\"en\":\"NSSF.AvailUnsubscription\"}','网元去订阅次数','NSSF.AvailUnsubscription'),(750,'NSSF','NSSF.A.11','{\"cn\":\"向NRF注册成功次数\",\"en\":\"NSSF.SuccNRFReg\"}','向NRF注册成功次数','NSSF.SuccNRFReg'),(751,'NSSF','NSSF.A.12','{\"cn\":\"向NRF注册次数\",\"en\":\"NSSF.NRFReg\"}','向NRF注册次数','NSSF.NRFReg'),(752,'NSSF','NSSF.A.13','{\"cn\":\"向NRF发送心跳次数\",\"en\":\"NSSF.NRFHeartbeat\"}','向NRF发送心跳次数','NSSF.NRFHeartbeat'),(753,'NSSF','NSSF.A.14','{\"cn\":\"当前注册AMF个数\",\"en\":\"NSSF.CurrentAMFCount\"}','当前注册AMF个数','NSSF.CurrentAMFCount'),(754,'NSSF','NSSF.A.15','{\"cn\":\"当前订阅网元个数\",\"en\":\"NSSF.CurrentSubscriperCount\"}','当前订阅网元个数','NSSF.CurrentSubscriperCount'),(755,'MME','MME.A.01','{\"cn\":\"MME附着请求次数\",\"en\":\"EpsAttachAtt\"}','MME附着请求次数','EpsAttachAtt'),(756,'MME','MME.A.02','{\"cn\":\"MME附着成功次数\",\"en\":\"EpsAttachSucc\"}','MME附着成功次数','EpsAttachSucc'),(757,'MME','MME.A.03','{\"cn\":\"MME附着失败次数\",\"en\":\"EpsAttachFail\"}','MME附着失败次数','EpsAttachFail'),(758,'MME','MME.A.04','{\"cn\":\"MME组合附着请求次数\",\"en\":\"CombAttachAtt\"}','MME组合附着请求次数','CombAttachAtt'),(759,'MME','MME.A.05','{\"cn\":\"MME组合附着成功次数\",\"en\":\"CombAttachSucc\"}','MME组合附着成功次数','CombAttachSucc'),(760,'MME','MME.A.06','{\"cn\":\"MME组合附着失败次数\",\"en\":\"CombAttachFail\"}','MME组合附着失败次数','CombAttachFail'),(761,'MME','MME.A.07','{\"cn\":\"MME紧急附着请求次数\",\"en\":\"EmergAttachAtt\"}','MME紧急附着请求次数','EmergAttachAtt'),(762,'MME','MME.A.08','{\"cn\":\"MME紧急附着成功次数\",\"en\":\"EmergAttachSucc\"}','MME紧急附着成功次数','EmergAttachSucc'),(763,'MME','MME.A.09','{\"cn\":\"MME紧急附着失败次数\",\"en\":\"EmergAttachFail\"}','MME紧急附着失败次数','EmergAttachFail'),(764,'MME','MME.A.10','{\"cn\":\"UE发起的分离请求次数\",\"en\":\"EpsDetachUeAtt\"}','UE发起的分离请求次数','EpsDetachUeAtt'),(765,'MME','MME.A.11','{\"cn\":\"UE发起的分离请求成功次数\",\"en\":\"EpsDetachUeSucc\"}','UE发起的分离请求成功次数','EpsDetachUeSucc'),(766,'MME','MME.A.12','{\"cn\":\"MME发起的分离请求次数\",\"en\":\"EpsDetachMMEAtt\"}','MME发起的分离请求次数','EpsDetachMMEAtt'),(767,'MME','MME.A.13','{\"cn\":\"MME发起的分离请求成功次数\",\"en\":\"EpsDetachMMESucc\"}','MME发起的分离请求成功次数','EpsDetachMMESucc'),(768,'MME','MME.A.14','{\"cn\":\"伴随SGW内切换的TAU请求次数\",\"en\":\"TauIntraSgwAtt\"}','伴随SGW内切换的TAU请求次数','TauIntraSgwAtt'),(769,'MME','MME.A.15','{\"cn\":\"伴随SGW内切换的TAU成功请求次数\",\"en\":\"TauIntraSgwSucc\"}','伴随SGW内切换的TAU成功请求次数','TauIntraSgwSucc'),(770,'MME','MME.A.16','{\"cn\":\"伴随SGW内切换的TAU失败请求次数\",\"en\":\"TauIntraSgwFail\"}','伴随SGW内切换的TAU失败请求次数','TauIntraSgwFail'),(771,'MME','MME.A.17','{\"cn\":\"MME寻呼次数\",\"en\":\"PagingEpsAtt\"}','MME寻呼次数','PagingEpsAtt'),(772,'MME','MME.A.18','{\"cn\":\"MME寻呼成功次数\",\"en\":\"PagingEpsSucc\"}','MME寻呼成功次数','PagingEpsSucc'),(773,'MME','MME.A.19','{\"cn\":\"MME寻呼失败次数\",\"en\":\"PagingEpsFail\"}','MME寻呼失败次数','PagingEpsFail'),(774,'MME','MME.A.20','{\"cn\":\"MME隐式分离请求次数\",\"en\":\"EpsImplicitDetach\"}','MME隐式分离请求次数','EpsImplicitDetach'),(775,'MME','MME.A.21','{\"cn\":\"MME激活专用承载请求次数\",\"en\":\"ActDedicatedEpsBearerAtt\"}','MME激活专用承载请求次数','ActDedicatedEpsBearerAtt'),(776,'MME','MME.A.22','{\"cn\":\"MME激活专用承载请求成功次数\",\"en\":\"ActDedicatedEpsBearerSucc\"}','MME激活专用承载请求成功次数','ActDedicatedEpsBearerSucc'),(777,'MME','MME.A.23','{\"cn\":\"MME激活专用承载请求失败次数\",\"en\":\"ActDedicatedEpsBearerFail\"}','MME激活专用承载请求失败次数','ActDedicatedEpsBearerFail'),(778,'MME','MME.A.24','{\"cn\":\"MME去激活专用承载请求次数\",\"en\":\"DeactEpsDedicatedBearerAtt\"}','MME去激活专用承载请求次数','DeactEpsDedicatedBearerAtt'),(779,'MME','MME.A.25','{\"cn\":\"MME去激活专用承载请求成功次数\",\"en\":\"DeactEpsDedicatedBearerSucc\"}','MME去激活专用承载请求成功次数','DeactEpsDedicatedBearerSucc'),(780,'MME','MME.A.26','{\"cn\":\"MME修改专用承载请求次数\",\"en\":\"ModEpsBearerAtt\"}','MME修改专用承载请求次数','ModEpsBearerAtt'),(781,'MME','MME.A.27','{\"cn\":\"MME修改专用承载请求成功次数\",\"en\":\"ModEpsBearerSucc\"}','MME修改专用承载请求成功次数','ModEpsBearerSucc'),(782,'MME','MME.A.28','{\"cn\":\"MME修改专用承载请求失败次数\",\"en\":\"ModEpsBearerFail\"}','MME修改专用承载请求失败次数','ModEpsBearerFail'),(783,'MME','MME.A.29','{\"cn\":\"MME服务请求次数\",\"en\":\"EpsServiceReqAtt\"}','MME服务请求次数','EpsServiceReqAtt'),(784,'MME','MME.A.30','{\"cn\":\"MME服务请求成功次数\",\"en\":\"EpsServiceReqSucc\"}','MME服务请求成功次数','EpsServiceReqSucc'),(785,'MME','MME.A.31','{\"cn\":\"MME服务请求失败次数\",\"en\":\"EpsServiceReqFail\"}','MME服务请求失败次数','EpsServiceReqFail'),(786,'MOCNGW','MOCNGW.01','{\"cn\":\"AttachRequest\",\"en\":\"AttachRequest\"}','AttachRequest','AttachRequest'),(787,'MOCNGW','MOCNGW.02','{\"cn\":\"AttachAccept\",\"en\":\"AttachAccept\"}','AttachAccept','AttachAccept'),(788,'MOCNGW','MOCNGW.03','{\"cn\":\"AttachComplete\",\"en\":\"AttachComplete\"}','AttachComplete','AttachComplete'),(789,'MOCNGW','MOCNGW.04','{\"cn\":\"AttachReject\",\"en\":\"AttachReject\"}','AttachReject','AttachReject'),(790,'MOCNGW','MOCNGW.05','{\"cn\":\"DetachRequest\",\"en\":\"DetachRequest\"}','DetachRequest','DetachRequest'),(791,'MOCNGW','MOCNGW.06','{\"cn\":\"DetachAccept\",\"en\":\"DetachAccept\"}','DetachAccept','DetachAccept'),(792,'MOCNGW','MOCNGW.07','{\"cn\":\"TrackingAreaUpdateRequest\",\"en\":\"TrackingAreaUpdateRequest\"}','TrackingAreaUpdateRequest','TrackingAreaUpdateRequest'),(793,'MOCNGW','MOCNGW.08','{\"cn\":\"TrackingAreaUpdateAccept\",\"en\":\"TrackingAreaUpdateAccept\"}','TrackingAreaUpdateAccept','TrackingAreaUpdateAccept'),(794,'MOCNGW','MOCNGW.09','{\"cn\":\"TrackingAreaUpdateComplete\",\"en\":\"TrackingAreaUpdateComplete\"}','TrackingAreaUpdateComplete','TrackingAreaUpdateComplete'),(795,'MOCNGW','MOCNGW.10','{\"cn\":\"TrackingAreaUpdateReject\",\"en\":\"TrackingAreaUpdateReject\"}','TrackingAreaUpdateReject','TrackingAreaUpdateReject'),(796,'MOCNGW','MOCNGW.11','{\"cn\":\"ServiceRequest\",\"en\":\"ServiceRequest\"}','ServiceRequest','ServiceRequest'),(797,'MOCNGW','MOCNGW.12','{\"cn\":\"ExtendedServiceRequest\",\"en\":\"ExtendedServiceRequest\"}','ExtendedServiceRequest','ExtendedServiceRequest'),(798,'MOCNGW','MOCNGW.13','{\"cn\":\"ControlPlaneServiceRequest\",\"en\":\"ControlPlaneServiceRequest\"}','ControlPlaneServiceRequest','ControlPlaneServiceRequest'),(799,'MOCNGW','MOCNGW.14','{\"cn\":\"ServiceReject\",\"en\":\"ServiceReject\"}','ServiceReject','ServiceReject'),(800,'MOCNGW','MOCNGW.15','{\"cn\":\"ServiceAccept\",\"en\":\"ServiceAccept\"}','ServiceAccept','ServiceAccept'),(801,'MOCNGW','MOCNGW.16','{\"cn\":\"GutiReallocationCommand\",\"en\":\"GutiReallocationCommand\"}','GutiReallocationCommand','GutiReallocationCommand'),(802,'MOCNGW','MOCNGW.17','{\"cn\":\"GutiReallocationComplete\",\"en\":\"GutiReallocationComplete\"}','GutiReallocationComplete','GutiReallocationComplete'),(803,'MOCNGW','MOCNGW.18','{\"cn\":\"AuthenticationRequest\",\"en\":\"AuthenticationRequest\"}','AuthenticationRequest','AuthenticationRequest'),(804,'MOCNGW','MOCNGW.19','{\"cn\":\"AuthenticationResponse\",\"en\":\"AuthenticationResponse\"}','AuthenticationResponse','AuthenticationResponse'),(805,'MOCNGW','MOCNGW.20','{\"cn\":\"AuthenticationReject\",\"en\":\"AuthenticationReject\"}','AuthenticationReject','AuthenticationReject'),(806,'MOCNGW','MOCNGW.21','{\"cn\":\"AuthenticationFailure\",\"en\":\"AuthenticationFailure\"}','AuthenticationFailure','AuthenticationFailure'),(807,'MOCNGW','MOCNGW.22','{\"cn\":\"IdentityRequest\",\"en\":\"IdentityRequest\"}','IdentityRequest','IdentityRequest'),(808,'MOCNGW','MOCNGW.23','{\"cn\":\"IdentityResponse\",\"en\":\"IdentityResponse\"}','IdentityResponse','IdentityResponse'),(809,'MOCNGW','MOCNGW.24','{\"cn\":\"SecurityModeCommand\",\"en\":\"SecurityModeCommand\"}','SecurityModeCommand','SecurityModeCommand'),(810,'MOCNGW','MOCNGW.25','{\"cn\":\"SecurityModeComplete\",\"en\":\"SecurityModeComplete\"}','SecurityModeComplete','SecurityModeComplete'),(811,'MOCNGW','MOCNGW.26','{\"cn\":\"SecurityModeReject\",\"en\":\"SecurityModeReject\"}','SecurityModeReject','SecurityModeReject'),(812,'MOCNGW','MOCNGW.27','{\"cn\":\"EmmStatus\",\"en\":\"EmmStatus\"}','EmmStatus','EmmStatus'),(813,'MOCNGW','MOCNGW.28','{\"cn\":\"EmmInformation\",\"en\":\"EmmInformation\"}','EmmInformation','EmmInformation'),(814,'MOCNGW','MOCNGW.29','{\"cn\":\"DownlinkNasTransport\",\"en\":\"DownlinkNasTransport\"}','DownlinkNasTransport','DownlinkNasTransport'),(815,'MOCNGW','MOCNGW.30','{\"cn\":\"UplinkNasTransport\",\"en\":\"UplinkNasTransport\"}','UplinkNasTransport','UplinkNasTransport'),(816,'MOCNGW','MOCNGW.31','{\"cn\":\"CsServiceNotification\",\"en\":\"CsServiceNotification\"}','CsServiceNotification','CsServiceNotification'),(817,'MOCNGW','MOCNGW.32','{\"cn\":\"DownlinkGenericNasTransport\",\"en\":\"DownlinkGenericNasTransport\"}','DownlinkGenericNasTransport','DownlinkGenericNasTransport'),(818,'MOCNGW','MOCNGW.33','{\"cn\":\"UplinkGenericNasTransport\",\"en\":\"UplinkGenericNasTransport\"}','UplinkGenericNasTransport','UplinkGenericNasTransport'),(819,'IMS','SCSCF.01','{\"cn\": \"LTE接入注册用户数\",\"en\": \"UR.SubsLTE.fromVoLTE\"}','LTE接入注册用户数','UR.SubsLTE.fromVoLTE'),(820,'IMS','SCSCF.02','{\"cn\": \"5G接入注册用户数\",\"en\": \"UR.Subs5G.fromVo5G\"}','5G接入注册用户数','UR.Subs5G.fromVo5G'),(821,'IMS','SCSCF.03','{\"cn\": \"初始注册成功次数\",\"en\": \"UR.SuccInitReg\"}','初始注册成功次数','UR.SuccInitReg'),(822,'IMS','SCSCF.04','{\"cn\": \"初始注册请求次数\",\"en\": \"UR.AttInitReg\"}','初始注册请求次数','UR.AttInitReg'),(823,'IMS','SCSCF.05','{\"cn\": \"主叫接通次数\",\"en\": \"SC.SuccSessionOrig\"}','主叫接通次数','SC.SuccSessionOrig'),(824,'IMS','SCSCF.06','{\"cn\": \"主叫试呼次数\",\"en\": \"SC.AttSessionOrig\"}','主叫试呼次数','SC.AttSessionOrig'),(825,'IMS','SCSCF.07','{\"cn\": \"被叫接通次数\",\"en\": \"SC.SuccSessionTerm\"}','被叫接通次数','SC.SuccSessionTerm'),(826,'IMS','SCSCF.08','{\"cn\": \"被叫试呼次数\",\"en\": \"SC.AttSessionTerm\"}','被叫试呼次数','SC.AttSessionTerm'),(827,'IMS','SCSCF.09','{\"cn\": \"主叫应答次数\",\"en\": \"SC.AnsSessionOrig\"}','主叫应答次数','SC.AnsSessionOrig'),(828,'IMS','SCSCF.10','{\"cn\": \"主叫早释次数\",\"en\": \"SC.OrigRelBeforeRing\"}','主叫早释次数','SC.OrigRelBeforeRing'),(829,'IMS','SCSCF.11','{\"cn\": \"主叫振铃早释次数\",\"en\": \"SC.OrigRelAfterRing\"}','主叫振铃早释次数','SC.OrigRelAfterRing'),(830,'IMS','SCSCF.12','{\"cn\": \"主叫403请求禁止次数\",\"en\": \"SC.FailSessionOrig.403\"}','主叫403请求禁止次数','SC.FailSessionOrig.403'),(831,'IMS','SCSCF.13','{\"cn\": \"主叫404未找到次数\",\"en\": \"SC.FailSessionOrig.404\"}','主叫404未找到次数','SC.FailSessionOrig.404'),(832,'IMS','SCSCF.14','{\"cn\": \"主叫408请求超时次数\",\"en\": \"SC.FailSessionOrig.408\"}','主叫408请求超时次数','SC.FailSessionOrig.408'),(833,'IMS','SCSCF.15','{\"cn\": \"主叫480久叫不应次\",\"en\": \"SC.FailSessionOrig.480\"}','主叫480久叫不应次','SC.FailSessionOrig.480'),(834,'IMS','SCSCF.16','{\"cn\": \"主叫484Request-URI不完整次\",\"en\": \"SC.FailSessionOrig.484\"}','主叫484Request-URI不完整次','SC.FailSessionOrig.484'),(835,'IMS','SCSCF.17','{\"cn\": \"主叫486用户忙次数\",\"en\": \"SC.FailSessionOrig.486\"}','主叫486用户忙次数','SC.FailSessionOrig.486'),(836,'IMS','SCSCF.18','{\"cn\": \"主叫487请求终止次数\",\"en\": \"SC.FailSessionOrig.487\"}','主叫487请求终止次数','SC.FailSessionOrig.487'),(837,'IMS','SCSCF.19','{\"cn\": \"主叫600用户忙次数\",\"en\": \"SC.FailSessionOrig.600\"}','主叫600用户忙次数','SC.FailSessionOrig.600'),(838,'IMS','SCSCF.20','{\"cn\": \"主叫603用户拒接次数\",\"en\": \"SC.FailSessionOrig.603\"}','主叫603用户拒接次数','SC.FailSessionOrig.603'),(839,'IMS','SCSCF.21','{\"cn\": \"主叫604用户信息不存在次数\",\"en\": \"SC.FailSessionOrig.604\"}','主叫604用户信息不存在次数','SC.FailSessionOrig.604'),(840,'IMS','SCSCF.22','{\"cn\": \"被叫应答次数\",\"en\": \"SC.AnsSessionTerm\"}','被叫应答次数','SC.AnsSessionTerm'),(841,'IMS','SCSCF.23','{\"cn\": \"被叫早释次\",\"en\": \"SC.TermiRelBeforeRing\"}','被叫早释次','SC.TermiRelBeforeRing'),(842,'IMS','SCSCF.24','{\"cn\": \"被叫振铃早释次数\",\"en\": \"SC.TermiRelAfterRing\"}','被叫振铃早释次数','SC.TermiRelAfterRing'),(843,'IMS','SCSCF.25','{\"cn\": \"被叫403请求禁止次数\",\"en\": \"SC.FailSessionTerm.403\"}','被叫403请求禁止次数','SC.FailSessionTerm.403'),(844,'IMS','SCSCF.26','{\"cn\": \"被叫404未找到次数\",\"en\": \"SC.FailSessionTerm.404\"}','被叫404未找到次数','SC.FailSessionTerm.404'),(845,'IMS','SCSCF.27','{\"cn\": \"被叫408请求超时次数\",\"en\": \"SC.FailSessionTerm.408\"}','被叫408请求超时次数','SC.FailSessionTerm.408'),(846,'IMS','SCSCF.28','{\"cn\": \"被叫480久叫不应次数\",\"en\": \"SC.FailSessionTerm.480\"}','被叫480久叫不应次数','SC.FailSessionTerm.480'),(847,'IMS','SCSCF.29','{\"cn\": \"被叫484Request-URI不完整次数\",\"en\": \"SC.FailSessionTerm.484\"}','被叫484Request-URI不完整次数','SC.FailSessionTerm.484'),(848,'IMS','SCSCF.30','{\"cn\": \"被叫486用户忙次数\",\"en\": \"SC.FailSessionTerm.486\"}','被叫486用户忙次数','SC.FailSessionTerm.486'),(849,'IMS','SCSCF.31','{\"cn\": \"被叫487请求终止次数\",\"en\": \"SC.FailSessionTerm.487\"}','被叫487请求终止次数','SC.FailSessionTerm.487'),(850,'IMS','SCSCF.32','{\"cn\": \"被叫600用户忙次数\",\"en\": \"SC.FailSessionTerm.600\"}','被叫600用户忙次数','SC.FailSessionTerm.600'),(851,'IMS','SCSCF.33','{\"cn\": \"被叫603用户拒接次数\",\"en\": \"SC.FailSessionTerm.603\"}','被叫603用户拒接次数','SC.FailSessionTerm.603'),(852,'IMS','SCSCF.34','{\"cn\": \"被叫604用户信息不存在次数\",\"en\": \"SC.FailSessionTerm.604\"}','被叫604用户信息不存在次数','SC.FailSessionTerm.604'); /*!40000 ALTER TABLE `kpi_title` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -53,4 +53,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-04-01 19:29:59 +-- Dump completed on 2024-04-12 21:09:32 diff --git a/database/common/param_config.sql b/database/common/param_config.sql index d08648ee..735f1482 100644 --- a/database/common/param_config.sql +++ b/database/common/param_config.sql @@ -32,7 +32,7 @@ CREATE TABLE `param_config` ( `param_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, KEY `id` (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1412 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; +) ENGINE=InnoDB AUTO_INCREMENT=1514 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -41,7 +41,7 @@ CREATE TABLE `param_config` ( LOCK TABLES `param_config` WRITE; /*!40000 ALTER TABLE `param_config` DISABLE KEYS */; -INSERT INTO `param_config` VALUES (595,'N3IWF','','system','System',NULL,'{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IKEBindAddress\",\"filter\":\"\",\"name\":\"ikeBindAddr\",\"type\":\"string\",\"value\":\"192.168.12.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTPBindAddress\",\"filter\":\"\",\"name\":\"gtpBindAddr\",\"type\":\"string\",\"value\":\"192.168.12.161\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"n3iwf.5gc.mnc00.mcc460.pub.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"InternalIP\",\"filter\":\"\",\"name\":\"internalIP\",\"type\":\"string\",\"value\":\"172.16.1.190\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UdmIPAddrPort\",\"filter\":\"\",\"name\":\"udmAddr\",\"type\":\"string\",\"value\":\"172.16.1.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SmfIPAddress\",\"filter\":\"\",\"name\":\"smfIPAddr\",\"type\":\"string\",\"value\":\"172.16.1.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3IPAddress\",\"filter\":\"\",\"name\":\"n3IPAddr\",\"type\":\"string\",\"value\":\"192.168.1.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6IPAddress\",\"filter\":\"\",\"name\":\"n6IPAddr\",\"type\":\"string\",\"value\":\"192.168.1.161\"}]}'),(822,'MME','','system','System Config','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CSFB Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"VoLTE Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"volteEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1 MME IP\",\"filter\":\"0~64\",\"name\":\"s1MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"S1 MME Port\",\"filter\":\"0~65535\",\"name\":\"s1MmePort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S11 MME IP\",\"filter\":\"0~64\",\"name\":\"s11MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S11 MME Port\",\"filter\":\"0~65535\",\"name\":\"s11MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S10 MME IP\",\"filter\":\"0~64\",\"name\":\"s10MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.178\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S10 MME Port\",\"filter\":\"0~65535\",\"name\":\"s10MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SGs MME IP\",\"filter\":\"0~64\",\"name\":\"sgsMmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"SGs MME Port\",\"filter\":\"0~65535\",\"name\":\"sgsMmePort\",\"type\":\"int\",\"value\":\"29118\"}]}'),(823,'MME','','gummei','Gummei List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"46000\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Group ID\",\"filter\":\"0~65535\",\"name\":\"groupId\",\"type\":\"int\",\"value\":\"4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Code\",\"filter\":\"0~255\",\"name\":\"code\",\"type\":\"int\",\"value\":\"1\"}]}'),(824,'MME','','tai','TAI List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"46000\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"}]}'),(825,'MME','','hss','HSS List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IMSI Prefix\",\"filter\":\"^[0-9]{1,15}$\",\"name\":\"imsiPre\",\"type\":\"regex\",\"value\":\"46000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HSS Hostname\",\"filter\":\"0~128\",\"name\":\"hssHostname\",\"type\":\"string\",\"value\":\"hss.mnc000.mcc460.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Protocol\",\"filter\":\"0~8\",\"name\":\"protocol\",\"type\":\"string\",\"value\":\"SCTP\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"HSS Port\",\"filter\":\"0~65535\",\"name\":\"hssPort\",\"type\":\"int\",\"value\":\"3868\"}]}'),(826,'MME','','sgw','SGW List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"46000\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SGW IP\",\"filter\":\"0~64\",\"name\":\"sgwIp\",\"type\":\"string\",\"value\":\"192.168.1.180\"}]}'),(827,'MME','','pgw','PGW List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"46000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APN\",\"filter\":\"0~128\",\"name\":\"apn\",\"type\":\"string\",\"value\":\"cmnet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PGW IP\",\"filter\":\"0~64\",\"name\":\"pgwIp\",\"type\":\"string\",\"value\":\"192.168.1.181\"}]}'),(828,'MME','','amf','AMF List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"46000\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~16777215\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF IP\",\"filter\":\"0~64\",\"name\":\"amfIp\",\"type\":\"string\",\"value\":\"192.168.1.188\"}]}'),(1106,'AUSF','','system','System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.130\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"}]}'),(1107,'NRF','','system','System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.180\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"}]}'),(1108,'NRF','','registeredNFs','Registered NFs','get','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~256\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NF Type\",\"filter\":\"^.{1,128}$\",\"name\":\"nfType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Status\",\"filter\":\"^.{1,128}$\",\"name\":\"status\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NF ID\",\"filter\":\"^.{1,128}$\",\"name\":\"nfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"^.{1,128}$\",\"name\":\"ipAddress\",\"type\":\"string\",\"value\":\"\"}]}'),(1120,'PCF','','system','System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"}]}'),(1121,'PCF','','serviceAreaRestriction','Service Area Restriction','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]}'),(1122,'PCF','','pccRules','PCC Rules','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"^.{1,63}$\",\"name\":\"ruleId\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Activate\",\"filter\":\"false;true;\",\"name\":\"activate\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Precedence\",\"filter\":\"0~255\",\"name\":\"precedence\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Usage\",\"filter\":\"{\\\"0\\\":\\\"General\\\", \\\"1\\\":\\\"IMS-Signalling\\\"}\",\"name\":\"flowUsage\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APP ID\",\"filter\":\"^.{1,63}$\",\"name\":\"appId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Template\",\"filter\":\"^.{1,255}$\",\"name\":\"flowTemplate\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QoS ID\",\"filter\":\"^.{1,63}$\",\"name\":\"qosId\",\"type\":\"string\",\"value\":\"qos_cmnet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Traffic Control ID\",\"filter\":\"^.{1,63}$\",\"name\":\"trafficControlId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"usageMonitoringId\",\"type\":\"string\",\"value\":\"\"}]}'),(1123,'PCF','','sessionRules','Session Rules','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"^.{1,63}$\",\"name\":\"ruleId\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Activate\",\"filter\":\"false;true;\",\"name\":\"activate\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"fiveQI\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI Priority Level\",\"filter\":\"0~127\",\"name\":\"fiveQIPriorityLevel\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Usage\",\"filter\":\"{\\\"0\\\":\\\"General\\\", \\\"1\\\":\\\"IMS-Signalling\\\"}\",\"name\":\"flowUsage\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"usageMonitoringId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"ambrDl\",\"type\":\"string\",\"value\":\"200Mbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"ambrUl\",\"type\":\"string\",\"value\":\"100Mbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Averaging Window\",\"filter\":\"0~4095\",\"name\":\"averagingWindow\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Data Burst Volume\",\"filter\":\"0~4095\",\"name\":\"maxDataBurstVolume\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"1~15\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrUl\",\"type\":\"string\",\"value\":\"\"}]}'),(1124,'PCF','','gxServer','Gx Server','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{0,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc000.mcc460.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{0,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc000.mcc460.3gppnetwork.org\"}]}'),(1125,'PCF','','rxServer','Rx Server','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{0,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc000.mcc460.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{0,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc000.mcc460.3gppnetwork.org\"}]}'),(1126,'PCF','','flowTemplate','Flow Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~256\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Template Name\",\"filter\":\"^.{1,63}$\",\"name\":\"templateName\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Description\",\"filter\":\"^.{1,127}$\",\"name\":\"flowDescription\",\"type\":\"string\",\"value\":\"permit out ip from any to assigned\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Direction\",\"filter\":\"{\\\"0\\\":\\\"Unspecified\\\", \\\"1\\\":\\\"Uplink\\\", \\\"2\\\":\\\"Downlink\\\", \\\"3\\\":\\\"Bidirectional\\\"}\",\"name\":\"flowDirection\",\"type\":\"enum\",\"value\":\"0\"}]}'),(1127,'PCF','','qosTemplate','QoS Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QoS ID\",\"filter\":\"^.{1,63}$\",\"name\":\"qosId\",\"type\":\"string\",\"value\":\"qos_cmnet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"fiveQI\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI Priority Level\",\"filter\":\"0~127\",\"name\":\"fiveQIPriorityLevel\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"1~15\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default QoS Flow Indication\",\"filter\":\"false;true;\",\"name\":\"defQosFlowIndication\",\"type\":\"bool\",\"value\":\"false\"}]}'),(1128,'PCF','','usageMonitoringTemplate','Usage Monitoring Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"umId\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold(KB)\",\"filter\":\"\",\"name\":\"volumeThreshold\",\"type\":\"int\",\"value\":\"5242880\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold Uplink(KB)\",\"filter\":\"\",\"name\":\"volumeThresholdUplink\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold Downlink(KB)\",\"filter\":\"\",\"name\":\"volumeThresholdDownlink\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Time Threshold\",\"filter\":\"\",\"name\":\"timeThreshold\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inactivity Time\",\"filter\":\"\",\"name\":\"inactivityTime\",\"type\":\"int\",\"value\":\"0\"}]}'),(1129,'PCF','','trafficControlTemplate','Traffic Control Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Traffic Control ID\",\"filter\":\"^.{1,63}$\",\"name\":\"tcId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Status\",\"filter\":\"{\\\"0\\\":\\\"Disable\\\", \\\"1\\\":\\\"Uplink\\\", \\\"2\\\":\\\"Downlink\\\", \\\"3\\\":\\\"Enable\\\", \\\"4\\\":\\\"Remove\\\"}\",\"name\":\"flowStatus\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Mute Notify\",\"filter\":\"false;true;\",\"name\":\"muteNotif\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Route to Location DNAI\",\"filter\":\"^.{1,63}$\",\"name\":\"dnai\",\"type\":\"string\",\"value\":\"\"}]}'),(1130,'PCF','','headerEnrichTemplate','Header Enrich Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Template Name\",\"filter\":\"^.{1,63}$\",\"name\":\"templateName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Header Type\",\"filter\":\"{\\\"0\\\":\\\"GPSI\\\", \\\"1\\\":\\\"SUPI\\\", \\\"2\\\":\\\"UE IP\\\", \\\"3\\\":\\\"User Location\\\", \\\"4\\\":\\\"DNN\\\"}\",\"name\":\"headerType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Header Name\",\"filter\":\"^.{1,63}$\",\"name\":\"headerName\",\"type\":\"string\",\"value\":\"\"}]}'),(1237,'AMF','','system','System Config','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF Name\",\"filter\":\"0~64\",\"name\":\"amfName\",\"type\":\"string\",\"value\":\"AMF\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Relative Capacity\",\"filter\":\"0~255\",\"name\":\"relativeCapacity\",\"type\":\"int\",\"value\":\"255\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\",\\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Server IP\",\"filter\":\"0~64\",\"name\":\"sbiServerIp\",\"type\":\"string\",\"value\":\"192.168.1.183\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Server Port\",\"filter\":\"0~65535\",\"name\":\"sbiServerPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"0~64\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF URI\",\"filter\":\"0~64\",\"name\":\"ausfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.130:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"0~64\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF URI\",\"filter\":\"0~64\",\"name\":\"smfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.150:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"0~64\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LMF URI\",\"filter\":\"0~64\",\"name\":\"lmfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.200:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NEF URI\",\"filter\":\"0~64\",\"name\":\"nefUri\",\"type\":\"string\",\"value\":\"http://172.16.5.210:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Correction Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"dnnCorrectionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN\",\"filter\":\"0~64\",\"name\":\"defaultDnn\",\"type\":\"string\",\"value\":\"cmnet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Integrity Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NIA0\\\",\\\"1\\\":\\\"NIA1\\\",\\\"2\\\":\\\"NIA2\\\",\\\"3\\\":\\\"NIA3\\\"}\",\"name\":\"integrityAlgorithm\",\"type\":\"enum\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Ciphering Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NEA0\\\",\\\"1\\\":\\\"NEA1\\\",\\\"2\\\":\\\"NEA2\\\",\\\"3\\\":\\\"NEA3\\\"}\",\"name\":\"cipheringAlgorithm\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3502\",\"filter\":\"1~65535\",\"name\":\"t3502\",\"type\":\"int\",\"value\":\"720\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3512\",\"filter\":\"1~65535\",\"name\":\"t3512\",\"type\":\"int\",\"value\":\"3600\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3513\",\"filter\":\"1~65535\",\"name\":\"t3513\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3522\",\"filter\":\"1~65535\",\"name\":\"t3522\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3550\",\"filter\":\"1~65535\",\"name\":\"t3550\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3555\",\"filter\":\"1~65535\",\"name\":\"t3555\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3560\",\"filter\":\"1~65535\",\"name\":\"t3560\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3565\",\"filter\":\"1~65535\",\"name\":\"t3565\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3570\",\"filter\":\"1~65535\",\"name\":\"t3570\",\"type\":\"int\",\"value\":\"6\"}]}'),(1238,'AMF','','association','TNL Association List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NGAP IP\",\"filter\":\"0~64\",\"name\":\"ngapIp\",\"type\":\"string\",\"value\":\"192.168.1.183\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"NGAP SCTP Port\",\"filter\":\"0~65535\",\"name\":\"ngapSctpPort\",\"type\":\"int\",\"value\":\"38412\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Weight\",\"filter\":\"0~255\",\"name\":\"weightFactor\",\"type\":\"int\",\"value\":\"255\"}]}'),(1239,'AMF','','guami','GUAMI List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"46000\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"}]}'),(1240,'AMF','','tai','TAI List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"46000\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~8\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"1\"}]}'),(1241,'AMF','','slice','Slice List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"46000\"},{\"access\":\"read-write\",\"comment\":\"0~127\",\"display\":\"SST\",\"filter\":\"0~127\",\"name\":\"sst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SD\",\"filter\":\"^[A-Fa-f0-9]{6}\",\"name\":\"sd\",\"type\":\"regex\",\"value\":\"000001\"}]}'),(1243,'NSSF','','general','General','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NSSF Name\",\"filter\":\"\",\"name\":\"nssfName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Level\",\"filter\":\"\",\"name\":\"logLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NF ID\",\"filter\":\"\",\"name\":\"nfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemId\",\"type\":\"int\",\"value\":\"0\"}]}'),(1244,'NSSF','','sbi','SBI','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"\",\"name\":\"scheme\",\"type\":\"string\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register IPv4\",\"filter\":\"\",\"name\":\"registerIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Binding IPv4\",\"filter\":\"\",\"name\":\"bindingIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register IPv6\",\"filter\":\"\",\"name\":\"registerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Binding IPv6\",\"filter\":\"\",\"name\":\"bindingIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Port\",\"filter\":\"\",\"name\":\"port\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet IPv4\",\"filter\":\"\",\"name\":\"telnetIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet IPv6\",\"filter\":\"\",\"name\":\"telnetIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet Port\",\"filter\":\"\",\"name\":\"telnetPort\",\"type\":\"int\",\"value\":\"4100\"}]}'),(1245,'NSSF','','supportedNetworkSliceList','Supported Network Slice List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"\",\"name\":\"mcc\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"\",\"name\":\"mnc\",\"type\":\"string\",\"value\":\"01\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TAC\",\"filter\":\"\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported SST\",\"filter\":\"\",\"name\":\"supportedSst\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported SD\",\"filter\":\"\",\"name\":\"supportedSd\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restricted SST\",\"filter\":\"\",\"name\":\"restrictedSst\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restricted SD\",\"filter\":\"\",\"name\":\"restrictedSd\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF ID\",\"filter\":\"\",\"name\":\"nrfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NSI ID\",\"filter\":\"\",\"name\":\"nsiId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Access Type\",\"filter\":\"\",\"name\":\"accessType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF Set ID\",\"filter\":\"\",\"name\":\"amfSetId\",\"type\":\"string\",\"value\":\"\"}]}'),(1246,'NSSF','','plmnMappingList','PLMN Mapping List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Operator Name\",\"filter\":\"\",\"name\":\"operatorName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"\",\"name\":\"mcc\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"\",\"name\":\"mnc\",\"type\":\"string\",\"value\":\"02\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Serving SNSSAI SST\",\"filter\":\"\",\"name\":\"servingSnssaiSst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Serving SNSSAI SD\",\"filter\":\"\",\"name\":\"servingSnssaiSd\",\"type\":\"string\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Home SNSSAI SST\",\"filter\":\"\",\"name\":\"homeSnssaiSst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Home SNSSAI SD\",\"filter\":\"\",\"name\":\"homeSnssaiSd\",\"type\":\"string\",\"value\":\"1\"}]}'),(1264,'UPF','','general','General','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Config File Directory\",\"filter\":\"\",\"name\":\"configFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/etc/upf/\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"EXE File Directory\",\"filter\":\"\",\"name\":\"exeFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/bin/\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"1~8\",\"display\":\"Data Forwarder Number\",\"filter\":\"1~8\",\"name\":\"dataForwarderNum\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Common Statistic Interval\",\"filter\":\"\",\"name\":\"commonStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Statistic Interval\",\"filter\":\"\",\"name\":\"userStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N3 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN3OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N6 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN6OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Checksum Offload\",\"filter\":\"0~255\",\"name\":\"checksumOffload\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Downlink Buffer Num\",\"filter\":\"\",\"name\":\"maxDownlinkBufferNum\",\"type\":\"int\",\"value\":\"50\"}]}'),(1265,'UPF','','logger','Logger','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log File Full Path\",\"filter\":\"\",\"name\":\"logFileFullPath\",\"type\":\"string\",\"value\":\"/var/log/upf.log\"},{\"access\":\"read-write\",\"comment\":\"error|warning|info|debug\",\"display\":\"Log Level\",\"filter\":\"\",\"name\":\"logLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"error|warning|info|debug\",\"display\":\"Upfd Log Level\",\"filter\":\"\",\"name\":\"upfdLogLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Upfd Log Transfer\",\"filter\":\"\",\"name\":\"upfdLogTransfer\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Report Caller\",\"filter\":\"\",\"name\":\"reportCaller\",\"type\":\"bool\",\"value\":\"false\"}]}'),(1266,'UPF','','pfcp','PFCP','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv46\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv4\",\"filter\":\"\",\"name\":\"localIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv6\",\"filter\":\"\",\"name\":\"localIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"Local UDP Port\",\"filter\":\"1~65535\",\"name\":\"localUdpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF IPv4\",\"filter\":\"\",\"name\":\"smfIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF IPv6\",\"filter\":\"\",\"name\":\"smfIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"SMF UDP Port\",\"filter\":\"1~65535\",\"name\":\"smfUdpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Retry Interval\",\"filter\":\"1~255\",\"name\":\"retryInterval\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Max Retry\",\"filter\":\"0~255\",\"name\":\"maxRetry\",\"type\":\"int\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Heartbeat Interval\",\"filter\":\"1~255\",\"name\":\"heartbeatInterval\",\"type\":\"int\",\"value\":\"15\"}]}'),(1267,'UPF','','telnet','Telnet','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enabled\",\"filter\":\"\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv46\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv4\",\"filter\":\"\",\"name\":\"localIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv6\",\"filter\":\"\",\"name\":\"localIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"Local Port\",\"filter\":\"1~65535\",\"name\":\"localPort\",\"type\":\"int\",\"value\":\"4100\"}]}'),(1268,'UPF','','redisDb','Redis DB','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enabled\",\"filter\":\"\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"tcp|udp\",\"display\":\"Net Type\",\"filter\":\"\",\"name\":\"netType\",\"type\":\"string\",\"value\":\"tcp\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Address\",\"filter\":\"\",\"name\":\"serverAddr\",\"type\":\"string\",\"value\":\"0.0.0.0:0\"}]}'),(1269,'UPF','','dataForwarderCommon','Data Forwarder Common','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"upfd|tun\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"string\",\"value\":\"upfd\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Instance ID\",\"filter\":\"1~255\",\"name\":\"instanceId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Main CPU\",\"filter\":\"1~255\",\"name\":\"mainCpu\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"2,3,4,5 or 2-5\",\"display\":\"CPU Workers\",\"filter\":\"\",\"name\":\"cpuWorkers\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"data forwarder already run or not\",\"display\":\"Is Run\",\"filter\":\"0~1\",\"name\":\"isRun\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"Hot Standby work or not\",\"display\":\"Is Hot Standby\",\"filter\":\"0~1\",\"name\":\"isHotStandby\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"The value from which TEID is allocated\",\"display\":\"TEID Start\",\"filter\":\"\",\"name\":\"teidStart\",\"type\":\"int\",\"value\":\"16777216\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Heartbeat Interval\",\"filter\":\"\",\"name\":\"n3HeartbeatInterval\",\"type\":\"int\",\"value\":\"30\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX TX Queue Num\",\"filter\":\"\",\"name\":\"rxTxQueueNum\",\"type\":\"int\",\"value\":\"1\"}]}'),(1270,'UPF','','dataForwarderUpfd','Data Forwarder Upfd','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"Currently only support vfio-pci\",\"display\":\"UIO Driver\",\"filter\":\"\",\"name\":\"uioDriver\",\"type\":\"string\",\"value\":\"vfio-pci\"},{\"access\":\"read-write\",\"comment\":\"The format must be IP:Port\",\"display\":\"Telnet Address IP:Port\",\"filter\":\"\",\"name\":\"commandlineListen\",\"type\":\"string\",\"value\":\"localhost:5002\"},{\"access\":\"read-write\",\"comment\":\"the unit is GB\",\"display\":\"Heap Size GB\",\"filter\":\"1~8\",\"name\":\"heapSizeGB\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"the unit is MB\",\"display\":\"State Seg Size MB\",\"filter\":\"64~512\",\"name\":\"stateSegSizeMB\",\"type\":\"int\",\"value\":\"256\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK No PCI\",\"filter\":\"0~1\",\"name\":\"dpdkNoPci\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Mem Channel Num\",\"filter\":\"0~128\",\"name\":\"memChannelNum\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Base Va\",\"filter\":\"\",\"name\":\"sessionBaseVa\",\"type\":\"string\",\"value\":\"0x2000000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Buffers Per Numa\",\"filter\":\"\",\"name\":\"buffersPerNuma\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 RSS Hash\",\"filter\":\"\",\"name\":\"n3RssHash\",\"type\":\"string\",\"value\":\"\"}]}'),(1271,'UPF','','dataInterfaceList','Data Interface List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"N3|N6|N9|N19\",\"display\":\"Interface Type\",\"filter\":\"\",\"name\":\"interfaceType\",\"type\":\"string\",\"value\":\"N3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interface ID\",\"filter\":\"1~32\",\"name\":\"interfaceId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"host|vmxnet3|dpdk|socket|uds\",\"display\":\"Driver Type\",\"filter\":\"\",\"name\":\"driverType\",\"type\":\"string\",\"value\":\"host\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv4v6\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~8\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"IPv4\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"0.0.0.0\"}],\"comment\":\"\",\"display\":\"IPv4 Address List\",\"filter\":\"0~8\",\"name\":\"ipv4AddrList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~8\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"IPv6 Address List\",\"filter\":\"0~8\",\"name\":\"ipv6AddrList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MAC Address\",\"filter\":\"\",\"name\":\"macAddr\",\"type\":\"string\",\"value\":\"00:00:00:00:00:00\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interface PCI\",\"filter\":\"\",\"name\":\"interfacePCI\",\"type\":\"string\",\"value\":\"0000:00:00.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System Network Card Name\",\"filter\":\"\",\"name\":\"systemNetworkCardName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv4\",\"filter\":\"\",\"name\":\"gatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"null|bak|sub|xor|round|lacp\",\"display\":\"Bond Type\",\"filter\":\"\",\"name\":\"bondType\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Bond ID\",\"filter\":\"0~32\",\"name\":\"bondId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD TX Interval Ms\",\"filter\":\"\",\"name\":\"bfdTxIntervalMs\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD RX Interval Ms\",\"filter\":\"\",\"name\":\"bfdRxIntervalMs\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Name\",\"filter\":\"\",\"name\":\"dnnName\",\"type\":\"string\",\"value\":\"default\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv6\",\"filter\":\"\",\"name\":\"gatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD Gateway IPv4\",\"filter\":\"\",\"name\":\"bfdGatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD Gateway IPv6\",\"filter\":\"\",\"name\":\"bfdGatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MTU\",\"filter\":\"0~65535\",\"name\":\"mtu\",\"type\":\"int\",\"value\":\"1500\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Min\",\"filter\":\"\",\"name\":\"vlanIdMin\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Max\",\"filter\":\"\",\"name\":\"vlanIdMax\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDP Src Port\",\"filter\":\"1~65535\",\"name\":\"udpSrcPort\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDP Listen Port\",\"filter\":\"0~65536\",\"name\":\"udpListenPort\",\"type\":\"int\",\"value\":\"2152\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDS Local File Full Path\",\"filter\":\"\",\"name\":\"udsLocalFileFullPath\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDS Remote File Full Path\",\"filter\":\"\",\"name\":\"udsRemoteFileFullPath\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Detection Type\",\"filter\":\"0~1\",\"name\":\"linkDetectionType\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NAT Interface ID\",\"filter\":\"0~1\",\"name\":\"natInterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"0.0.0.0\"}],\"comment\":\"\",\"display\":\"GTPU Remote IPv4 Pool List\",\"filter\":\"1~32\",\"name\":\"gtpuRemoteIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"GTPU Remote IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"gtpuRemoteIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTPU Signaling Handle\",\"filter\":\"0~1\",\"name\":\"gtpuSignalingHandle\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IMS Default DSCP Value\",\"filter\":\"0~1\",\"name\":\"imsDefaultDSCPValue\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Data Default DSCP Value\",\"filter\":\"0~1\",\"name\":\"dataDefaultDSCPValue\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inner DSCP Value Map\",\"filter\":\"0~1\",\"name\":\"innerDSCPValueMap\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Support Speed Mbps\",\"filter\":\"0~65536\",\"name\":\"maxSupportSpeedMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK RX Queues Number\",\"filter\":\"0~127\",\"name\":\"dpdkRxQueuesNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK TX Queues Number\",\"filter\":\"0~127\",\"name\":\"dpdkTxQueuesNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK RX Desc Number\",\"filter\":\"0~32768\",\"name\":\"dpdkRxDescNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK TX Desc Number\",\"filter\":\"0~32768\",\"name\":\"dpdkTxDescNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK Workers\",\"filter\":\"\",\"name\":\"dpdkworkers\",\"type\":\"string\",\"value\":\"\"}]}'),(1272,'UPF','','networkControlCommon','Network Control Common','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Switch Disabled\",\"filter\":\"0~1\",\"name\":\"localSwitchDisabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TCP Sync Per Second\",\"filter\":\"\",\"name\":\"maxTCPSyncPerSecond\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF Max Support Mbps\",\"filter\":\"\",\"name\":\"upfMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"dscp Inner Mapping\",\"filter\":\"\",\"name\":\"dscpInnerMapping\",\"type\":\"int\",\"value\":\"0\"}]}'),(1273,'UPF','','networkControlDnnList','Network Control DNN List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Name\",\"filter\":\"\",\"name\":\"dnnName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTP Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTPS Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpsProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"\",\"name\":\"name\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Value\",\"filter\":\"\",\"name\":\"value\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"Header Enrich Info List\",\"filter\":\"0~32\",\"name\":\"headerEnrichInfoList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Statistic Enabled\",\"filter\":\"0~1\",\"name\":\"statisticEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Switch Check\",\"filter\":\"0~1\",\"name\":\"localSwitchCheck\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QER Max Support Mbps\",\"filter\":\"\",\"name\":\"qerMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"}],\"comment\":\"\",\"display\":\"UE IPv4 Pool List\",\"filter\":\"0~32\",\"name\":\"ueIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"UE IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"ueIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"}],\"comment\":\"\",\"display\":\"Dst Server IPv4 Pool List\",\"filter\":\"0~32\",\"name\":\"dstServerIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"Dst Server IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"dstServerIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv4v6\",\"display\":\"Gateway IP Type\",\"filter\":\"\",\"name\":\"gatewayIpType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv4\",\"filter\":\"\",\"name\":\"gatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv6\",\"filter\":\"\",\"name\":\"gatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Gateway IPv4\",\"filter\":\"\",\"name\":\"secondaryGatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Gateway IPv6\",\"filter\":\"\",\"name\":\"secondaryGatewayIpv6\",\"type\":\"string\",\"value\":\"\"}]}'),(1274,'UPF','','networkControlSnssaiList','Network Control SNSSAI List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SST\",\"filter\":\"\",\"name\":\"sst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SD\",\"filter\":\"\",\"name\":\"sd\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QER Max Support Mbps\",\"filter\":\"\",\"name\":\"qerMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Statistic Enabled\",\"filter\":\"0~1\",\"name\":\"statisticEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Min\",\"filter\":\"\",\"name\":\"vlanIdMin\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Max\",\"filter\":\"\",\"name\":\"vlanIdMax\",\"type\":\"int\",\"value\":\"0\"}]}'),(1275,'UPF','','networkControlAclWhiteList','Network Control ACL White List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4\",\"filter\":\"\",\"name\":\"dstServerIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4 Mask\",\"filter\":\"\",\"name\":\"dstServerIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6\",\"filter\":\"\",\"name\":\"dstServerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"dstServerIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"}]}'),(1276,'UPF','','networkControlAclBlackList','Network Control ACL Black List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4\",\"filter\":\"\",\"name\":\"dstServerIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4 Mask\",\"filter\":\"\",\"name\":\"dstServerIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6\",\"filter\":\"\",\"name\":\"dstServerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"dstServerIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"}]}'),(1277,'UPF','','networkControlDnsServerList','Network Control DNS Server List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1\",\"display\":\"Enabled\",\"filter\":\"0~1\",\"name\":\"enabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNS Name\",\"filter\":\"\",\"name\":\"dnsName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv4\",\"filter\":\"\",\"name\":\"serverIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv6\",\"filter\":\"\",\"name\":\"serverIpv6\",\"type\":\"string\",\"value\":\"\"}]}'),(1278,'UPF','','dpiCommon','DPI Common','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Detect Packet Num\",\"filter\":\"\",\"name\":\"maxDetectPacketNum\",\"type\":\"int\",\"value\":\"20\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTP Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTPS Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpsProtoEnabled\",\"type\":\"int\",\"value\":\"0\"}]}'),(1279,'UPF','','dpiHeaderEnrichInfoList','DPI Header Enrich Info List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"\",\"name\":\"name\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Value\",\"filter\":\"\",\"name\":\"value\",\"type\":\"string\",\"value\":\"\"}]}'),(1280,'UPF','','dpiAppList','DPI APP List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APP Name\",\"filter\":\"\",\"name\":\"appName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Proxy Enabled\",\"filter\":\"0~1\",\"name\":\"proxyEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Force Check Type\",\"filter\":\"0~1\",\"name\":\"forceCheckType\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"\",\"name\":\"ruleId\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"REGEX Match\",\"filter\":\"\",\"name\":\"regexMatch\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Description\",\"filter\":\"\",\"name\":\"flowDescription\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Custom Name\",\"filter\":\"\",\"name\":\"customName\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"Rule List\",\"filter\":\"0~32\",\"name\":\"ruleList\",\"type\":\"int\",\"value\":\"1\"}]}'),(1285,'IMS','','system','System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Label\",\"filter\":\"\",\"name\":\"label\",\"type\":\"string\",\"value\":\"ims-core\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HPLMN MCC\",\"filter\":\"\",\"name\":\"hplmnMCC\",\"type\":\"string\",\"value\":\"460\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HPLMN MNC\",\"filter\":\"\",\"name\":\"hplmnMNC\",\"type\":\"string\",\"value\":\"00\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IPv4\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IPv6\",\"filter\":\"\",\"name\":\"serviceIPv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Domain Name 1\",\"filter\":\"\",\"name\":\"domainName1\",\"type\":\"string\",\"value\":\"ims.mnc000.mcc460.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Domain Name 2\",\"filter\":\"\",\"name\":\"domainName2\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Domain Name 3\",\"filter\":\"\",\"name\":\"domainName3\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Domain Name 4\",\"filter\":\"\",\"name\":\"domainName4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MultiDomain Indicator\",\"filter\":\"false;true;\",\"name\":\"multiDomainInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Transcode Indicator\",\"filter\":\"false;true;\",\"name\":\"transcodeInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MultiIPStack Indicator\",\"filter\":\"false;true;\",\"name\":\"multiIPStackInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register Timer\",\"filter\":\"120-1000000\",\"name\":\"registerTimer\",\"type\":\"int\",\"value\":\"7200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Call Duration\",\"filter\":\"1800-1000000\",\"name\":\"maxCallDuration\",\"type\":\"int\",\"value\":\"43200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System Indicator\",\"filter\":\"false;true;\",\"name\":\"dispatchSystemInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System IPv4\",\"filter\":\"\",\"name\":\"dispatchSystemIP\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal SMS Indicator\",\"filter\":\"false;true;\",\"name\":\"internalSMSInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal CDR Indicator\",\"filter\":\"false;true;\",\"name\":\"internalCDRInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal KPI Indicator\",\"filter\":\"false;true;\",\"name\":\"internalKPIInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF IP Address\",\"filter\":\"\",\"name\":\"pcfIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.140\"}]}'),(1388,'UDM','','system','System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.140\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF IP\",\"filter\":\"\",\"name\":\"ausfIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.130\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"agt.com\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"0~4095\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Capacity\",\"filter\":\"0~65535\",\"name\":\"capacity\",\"type\":\"int\",\"value\":\"4096\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SUPI Ranges\",\"filter\":\"^imsi-\\\\d{15}~imsi-\\\\d{15}$\",\"name\":\"supiRanges\",\"type\":\"regex\",\"value\":\"imsi-001010100080000~imsi-001010100080099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GPSI Ranges\",\"filter\":\"^msisdn-\\\\d{2,15}~msisdn-\\\\d{2,15}$\",\"name\":\"gpsiRanges\",\"type\":\"regex\",\"value\":\"msisdn-69072000~msisdn-69072099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Link\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"redisLink\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Address\",\"filter\":\"\",\"name\":\"redisAddr\",\"type\":\"string\",\"value\":\"172.16.5.140:6379\"}]}'),(1389,'UDM','','subsUEAmbr','Subs UE AMBR','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"uplink\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"downlink\",\"type\":\"regex\",\"value\":\"2 Gbps\"}]}'),(1390,'UDM','','subsNssais','Subs NSSAIs','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Features\",\"filter\":\"^[0-9a-fA-F]{8}$\",\"name\":\"supportedFeatures\",\"type\":\"regex\",\"value\":\"00000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Single NSSAIs\",\"filter\":\"\",\"name\":\"defaultSingleNSSAIs\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Single NSSAIs\",\"filter\":\"\",\"name\":\"singleNssais\",\"type\":\"string\",\"value\":\"1-000002\"}]}'),(1391,'UDM','','forbiddenAreas','Forbidden Areas','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"}]}'),(1392,'UDM','','serviceAreaRestriction','Service Area Restriction','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]}'),(1393,'UDM','','smfSelection','Subs SMF Selection','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SNSSAI\",\"filter\":\"^\\\\d{1,3}[A-Fa-f0-9]{6}$\",\"name\":\"snssai\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{1,32}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"cmnet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN Indicator\",\"filter\":\"false;true;\",\"name\":\"defaultDnnInd\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LBO Roaming Allowed\",\"filter\":\"false;true;\",\"name\":\"lboRoamingAllowed\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"false;true;\",\"name\":\"iwkEpsInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"false;true;\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"false\"}],\"comment\":\"\",\"display\":\"DNN List\",\"filter\":\"1~4\",\"name\":\"dnnList\",\"type\":\"int\",\"value\":\"1\"}]}'),(1394,'UDM','','dnn','DNN Conf','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default PDU Session Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\"}\",\"name\":\"defaultPDUSessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed PDU Session Types\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\",\\\"5\\\":\\\"IPv4 \\u0026 IPv6\\\",\\\"6\\\":\\\"IPv4 \\u0026 IPv4v6\\\",\\\"7\\\":\\\"IPv6 \\u0026 IPv4v6\\\",\\\"8\\\":\\\"IPv4 \\u0026 IPv6 \\u0026 IPv4v6\\\"}\",\"name\":\"allowedPDUSessionTypes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"5qi\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority Level\",\"filter\":\"1~127\",\"name\":\"priorityLevel\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default SSC Mode\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\"}\",\"name\":\"defaultSSCmode\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed SSC Modes\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\",\\\"3\\\":\\\"SSC Mode1 \\u0026 SSC Mode2\\\",\\\"4\\\":\\\"SSC Mode1 \\u0026 SSC Mode3\\\",\\\"5\\\":\\\"SSC Mode2 \\u0026 SSC Mode3\\\",\\\"6\\\":\\\"SSC Mode1 \\u0026 SSC Mode2 \\u0026 SSC Mode3\\\"}\",\"name\":\"allowedSSCmodes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"\",\"name\":\"interworkingEPSIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristics\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristics\",\"type\":\"string\",\"value\":\"0001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrUL\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrDL\",\"type\":\"regex\",\"value\":\"2 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IP Address\",\"filter\":\"\",\"name\":\"staticIPAddress\",\"type\":\"ipv4\",\"value\":\"192.168.1.100\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Integrity\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneIntegrity\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Confidentiality\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneConfidentiality\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"0~255\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"}]}'),(1395,'UDM','','epsTemplate','EPS User Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{0,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_eps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APN OI Replacement\",\"filter\":\"^.{0,31}$\",\"name\":\"apnOIReplacement\",\"type\":\"string\",\"value\":\"money\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RFSP\",\"filter\":\"\",\"name\":\"rfsp\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RAU TAU Timer\",\"filter\":\"\",\"name\":\"rauTauTimer\",\"type\":\"int\",\"value\":\"120\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]}'),(1396,'UDM','','epsApn','EPS APN','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{0,127}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"cmnet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"IPv4 or IPv6\\\"}\",\"name\":\"pdnType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QCI\",\"filter\":\"1~255\",\"name\":\"qci\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority\",\"filter\":\"1~127\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"8\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Context Identifier\",\"filter\":\"\",\"name\":\"contextIdentifier\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"VPLMN Dynamic Address Allowed\",\"filter\":\"false;true;\",\"name\":\"vplmnDynamicAddressAllowed\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN GW Allocation Type\",\"filter\":\"{\\\"0\\\":\\\"Static\\\",\\\"1\\\":\\\"Dynamic\\\"}\",\"name\":\"pdnGWAllocationType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]}'),(1397,'UDM','','applicationServer','Application Server','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AS Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Handling\",\"filter\":\"{\\\"0\\\":\\\"Session Continued\\\",\\\"1\\\":\\\"Session Terminated\\\"}\",\"name\":\"defaultHandling\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:192.168.8.26:7060\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Diameter Address\",\"filter\":\"^.{1,127}$\",\"name\":\"diameterAddress\",\"type\":\"string\",\"value\":\"mmtel.ims.mnc000.mcc460.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rep Data Size Limit\",\"filter\":\"0~65535\",\"name\":\"repDataSizeLimit\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Request\",\"filter\":\"false;true;\",\"name\":\"includeRegisterRequest\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Response\",\"filter\":\"false;true;\",\"name\":\"includeRegisterResponse\",\"type\":\"bool\",\"value\":\"false\"}]}'),(1398,'UDM','','scscfSet','SCSCF Set','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:scscf.ims.mnc000.mcc460.3gppnetwork.org:6060\"}]}'),(1399,'UDM','','triggerPoint','Trigger Point','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Type CNF\",\"filter\":\"0~1\",\"name\":\"conditionTypeCNF\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Disable\",\"filter\":\"\",\"name\":\"disable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Negated\",\"filter\":\"0~1\",\"name\":\"conditionNegated\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group\",\"filter\":\"0~4096\",\"name\":\"group\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"^.{0,32}$\",\"name\":\"method\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Header\",\"filter\":\"^.{0,64}$\",\"name\":\"sipHeader\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Content\",\"filter\":\"^.{0,64}$\",\"name\":\"sipContent\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"SPT List\",\"filter\":\"1~4\",\"name\":\"sptList\",\"type\":\"int\",\"value\":\"1\"}]}'),(1400,'UDM','','s6aServer','S6a Server','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc000.mcc460.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc000.mcc460.3gppnetwork.org\"}]}'),(1401,'UDM','','cxServer','Cx Server','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc000.mcc460.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc000.mcc460.3gppnetwork.org\"}]}'),(1402,'MOCNGW','','system','System Config','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP South Address\",\"filter\":\"0~64\",\"name\":\"s1apSouthAddr\",\"type\":\"string\",\"value\":\"192.168.7.163\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP North Address\",\"filter\":\"0~64\",\"name\":\"s1apNorthAddr\",\"type\":\"string\",\"value\":\"192.168.8.163\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1048575\",\"display\":\"ENB ID\",\"filter\":\"0~1048575\",\"name\":\"enbId\",\"type\":\"int\",\"value\":\"24\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"userPlaneEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PFCP Address\",\"filter\":\"0~64\",\"name\":\"pfcpAddr\",\"type\":\"string\",\"value\":\"192.168.7.163\"}]}'),(1403,'MOCNGW','','mme','MME List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP Address\",\"filter\":\"0~64\",\"name\":\"s1apAddr\",\"type\":\"string\",\"value\":\"192.168.1.161\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S1AP Port\",\"filter\":\"0~65535\",\"name\":\"s1apPort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"46000\"}]}'),(1404,'MOCNGW','','upgw','UPGW Config','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PFCP Address\",\"filter\":\"0~64\",\"name\":\"pfcpAddr\",\"type\":\"string\",\"value\":\"192.168.1.159\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"PFCP Port\",\"filter\":\"0~65535\",\"name\":\"pfcpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTP-U South Address\",\"filter\":\"0~64\",\"name\":\"gtpuSouthAddr\",\"type\":\"string\",\"value\":\"10.10.1.2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTP-U North Address\",\"filter\":\"0~64\",\"name\":\"gtpuNorthAddr\",\"type\":\"string\",\"value\":\"192.168.7.123\"}]}'),(1408,'SMF','','smfSystem','SMF System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI IP\",\"filter\":\"\",\"name\":\"sbiIpAddr\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Port\",\"filter\":\"0~65535\",\"name\":\"sbiPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4 IPv4\",\"filter\":\"\",\"name\":\"n4Ipv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4 IPv6\",\"filter\":\"\",\"name\":\"n4Ipv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4U IPv4\",\"filter\":\"\",\"name\":\"n4UIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4U IPv6\",\"filter\":\"\",\"name\":\"n4UIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF URI\",\"filter\":\"\",\"name\":\"amfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.120:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"display\":\"5G Charing Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"chgEnable5G\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CHF PRIMARY URI\",\"filter\":\"\",\"name\":\"chfPrimaryUri\",\"type\":\"string\",\"value\":\"http://172.16.5.240:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CHF SECONDARY URI\",\"filter\":\"\",\"name\":\"chfSecondaryUri\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary DNS IPv4\",\"filter\":\"\",\"name\":\"primaryDnsIpv4\",\"type\":\"ipv4\",\"value\":\"114.114.114.114\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary DNS IPv4\",\"filter\":\"\",\"name\":\"secondaryDnsIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary DNS IPv6\",\"filter\":\"\",\"name\":\"primaryDnsIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary DNS IPv6\",\"filter\":\"\",\"name\":\"secondaryDnsIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary PCSCF IPv4\",\"filter\":\"\",\"name\":\"primaryPcscfIpv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary PCSCF IPv4\",\"filter\":\"\",\"name\":\"secondaryPcscfIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary PCSCF IPv6\",\"filter\":\"\",\"name\":\"primaryPcscfIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary PCSCF IPv6\",\"filter\":\"\",\"name\":\"secondaryPcscfIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE MTU\",\"filter\":\"0~65535\",\"name\":\"ueMtu\",\"type\":\"int\",\"value\":\"\"}]}'),(1409,'SMF','','upfConfig','UPF Config','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~2047\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"id\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"e.g. ip:port\",\"display\":\"Address\",\"filter\":\"7~45\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4,IPv6,IPv4v6\",\"display\":\"Ip Pool Type\",\"filter\":\"\",\"name\":\"ipPoolType\",\"type\":\"string\",\"value\":\"IPv4v6\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. 192.168.1.0/24\",\"display\":\"IPv4 Pools\",\"filter\":\"10~256\",\"name\":\"ipv4Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50\",\"display\":\"IPv6 Pools\",\"filter\":\"5~512\",\"name\":\"ipv6Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv4 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv4Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 Start\",\"filter\":\"\",\"name\":\"staticIpv4Start\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 End\",\"filter\":\"\",\"name\":\"staticIpv4End\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv6 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv6Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 Start\",\"filter\":\"\",\"name\":\"staticIpv6Start\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 End\",\"filter\":\"\",\"name\":\"staticIpv6End\",\"type\":\"ipv6\",\"value\":\"\"},{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~2047\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4,IPv6,IPv4v6\",\"display\":\"Ip Pool Type\",\"filter\":\"\",\"name\":\"ipPoolType\",\"type\":\"string\",\"value\":\"IPv4v6\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. 192.168.1.0/24\",\"display\":\"IPv4 Pools\",\"filter\":\"10~256\",\"name\":\"ipv4Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50\",\"display\":\"IPv6 Pools\",\"filter\":\"5~512\",\"name\":\"ipv6Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv4 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv4Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 Start\",\"filter\":\"\",\"name\":\"staticIpv4Start\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 End\",\"filter\":\"\",\"name\":\"staticIpv4End\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv6 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv6Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 Start\",\"filter\":\"\",\"name\":\"staticIpv6Start\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 End\",\"filter\":\"\",\"name\":\"staticIpv6End\",\"type\":\"ipv6\",\"value\":\"\"}],\"display\":\"UE DNN IP Pool\",\"name\":\"ueDnnIpPool\"}]}'),(1410,'SMF','','dnnSelectUpf','DNN Select UPF','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"\"}]}'),(1411,'SMF','','dnnTaiSelectUpf','DNN TAI Select UPF','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"MCC+MNC+TAC\",\"display\":\"TAI\",\"filter\":\"1~64\",\"name\":\"tai\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"upf2-Id\"}]}'); +INSERT INTO `param_config` VALUES (595,'N3IWF','','system','System',NULL,'{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IKEBindAddress\",\"filter\":\"\",\"name\":\"ikeBindAddr\",\"type\":\"string\",\"value\":\"192.168.12.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTPBindAddress\",\"filter\":\"\",\"name\":\"gtpBindAddr\",\"type\":\"string\",\"value\":\"192.168.12.161\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"n3iwf.5gc.mnc00.mcc460.pub.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"InternalIP\",\"filter\":\"\",\"name\":\"internalIP\",\"type\":\"string\",\"value\":\"172.16.1.190\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UdmIPAddrPort\",\"filter\":\"\",\"name\":\"udmAddr\",\"type\":\"string\",\"value\":\"172.16.1.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SmfIPAddress\",\"filter\":\"\",\"name\":\"smfIPAddr\",\"type\":\"string\",\"value\":\"172.16.1.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3IPAddress\",\"filter\":\"\",\"name\":\"n3IPAddr\",\"type\":\"string\",\"value\":\"192.168.1.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6IPAddress\",\"filter\":\"\",\"name\":\"n6IPAddr\",\"type\":\"string\",\"value\":\"192.168.1.161\"}]}'),(1106,'AUSF','','system','System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.130\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"}]}'),(1107,'NRF','','system','System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.180\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"}]}'),(1108,'NRF','','registeredNFs','Registered NFs','get','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~256\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NF Type\",\"filter\":\"^.{1,128}$\",\"name\":\"nfType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Status\",\"filter\":\"^.{1,128}$\",\"name\":\"status\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NF ID\",\"filter\":\"^.{1,128}$\",\"name\":\"nfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"^.{1,128}$\",\"name\":\"ipAddress\",\"type\":\"string\",\"value\":\"\"}]}'),(1243,'NSSF','','general','General','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NSSF Name\",\"filter\":\"\",\"name\":\"nssfName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Level\",\"filter\":\"\",\"name\":\"logLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NF ID\",\"filter\":\"\",\"name\":\"nfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemId\",\"type\":\"int\",\"value\":\"0\"}]}'),(1244,'NSSF','','sbi','SBI','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"\",\"name\":\"scheme\",\"type\":\"string\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register IPv4\",\"filter\":\"\",\"name\":\"registerIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Binding IPv4\",\"filter\":\"\",\"name\":\"bindingIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register IPv6\",\"filter\":\"\",\"name\":\"registerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Binding IPv6\",\"filter\":\"\",\"name\":\"bindingIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Port\",\"filter\":\"\",\"name\":\"port\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet IPv4\",\"filter\":\"\",\"name\":\"telnetIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet IPv6\",\"filter\":\"\",\"name\":\"telnetIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet Port\",\"filter\":\"\",\"name\":\"telnetPort\",\"type\":\"int\",\"value\":\"4100\"}]}'),(1245,'NSSF','','supportedNetworkSliceList','Supported Network Slice List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"\",\"name\":\"mcc\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"\",\"name\":\"mnc\",\"type\":\"string\",\"value\":\"01\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TAC\",\"filter\":\"\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported SST\",\"filter\":\"\",\"name\":\"supportedSst\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported SD\",\"filter\":\"\",\"name\":\"supportedSd\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restricted SST\",\"filter\":\"\",\"name\":\"restrictedSst\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restricted SD\",\"filter\":\"\",\"name\":\"restrictedSd\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF ID\",\"filter\":\"\",\"name\":\"nrfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NSI ID\",\"filter\":\"\",\"name\":\"nsiId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Access Type\",\"filter\":\"\",\"name\":\"accessType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF Set ID\",\"filter\":\"\",\"name\":\"amfSetId\",\"type\":\"string\",\"value\":\"\"}]}'),(1246,'NSSF','','plmnMappingList','PLMN Mapping List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Operator Name\",\"filter\":\"\",\"name\":\"operatorName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"\",\"name\":\"mcc\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"\",\"name\":\"mnc\",\"type\":\"string\",\"value\":\"02\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Serving SNSSAI SST\",\"filter\":\"\",\"name\":\"servingSnssaiSst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Serving SNSSAI SD\",\"filter\":\"\",\"name\":\"servingSnssaiSd\",\"type\":\"string\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Home SNSSAI SST\",\"filter\":\"\",\"name\":\"homeSnssaiSst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Home SNSSAI SD\",\"filter\":\"\",\"name\":\"homeSnssaiSd\",\"type\":\"string\",\"value\":\"1\"}]}'),(1264,'UPF','','general','General','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Config File Directory\",\"filter\":\"\",\"name\":\"configFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/etc/upf/\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"EXE File Directory\",\"filter\":\"\",\"name\":\"exeFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/bin/\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"1~8\",\"display\":\"Data Forwarder Number\",\"filter\":\"1~8\",\"name\":\"dataForwarderNum\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Common Statistic Interval\",\"filter\":\"\",\"name\":\"commonStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Statistic Interval\",\"filter\":\"\",\"name\":\"userStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N3 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN3OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N6 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN6OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Checksum Offload\",\"filter\":\"0~255\",\"name\":\"checksumOffload\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Downlink Buffer Num\",\"filter\":\"\",\"name\":\"maxDownlinkBufferNum\",\"type\":\"int\",\"value\":\"50\"}]}'),(1265,'UPF','','logger','Logger','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log File Full Path\",\"filter\":\"\",\"name\":\"logFileFullPath\",\"type\":\"string\",\"value\":\"/var/log/upf.log\"},{\"access\":\"read-write\",\"comment\":\"error|warning|info|debug\",\"display\":\"Log Level\",\"filter\":\"\",\"name\":\"logLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"error|warning|info|debug\",\"display\":\"Upfd Log Level\",\"filter\":\"\",\"name\":\"upfdLogLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Upfd Log Transfer\",\"filter\":\"\",\"name\":\"upfdLogTransfer\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Report Caller\",\"filter\":\"\",\"name\":\"reportCaller\",\"type\":\"bool\",\"value\":\"false\"}]}'),(1266,'UPF','','pfcp','PFCP','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv46\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv4\",\"filter\":\"\",\"name\":\"localIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv6\",\"filter\":\"\",\"name\":\"localIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"Local UDP Port\",\"filter\":\"1~65535\",\"name\":\"localUdpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF IPv4\",\"filter\":\"\",\"name\":\"smfIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF IPv6\",\"filter\":\"\",\"name\":\"smfIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"SMF UDP Port\",\"filter\":\"1~65535\",\"name\":\"smfUdpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Retry Interval\",\"filter\":\"1~255\",\"name\":\"retryInterval\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Max Retry\",\"filter\":\"0~255\",\"name\":\"maxRetry\",\"type\":\"int\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Heartbeat Interval\",\"filter\":\"1~255\",\"name\":\"heartbeatInterval\",\"type\":\"int\",\"value\":\"15\"}]}'),(1267,'UPF','','telnet','Telnet','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enabled\",\"filter\":\"\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv46\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv4\",\"filter\":\"\",\"name\":\"localIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv6\",\"filter\":\"\",\"name\":\"localIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"Local Port\",\"filter\":\"1~65535\",\"name\":\"localPort\",\"type\":\"int\",\"value\":\"4100\"}]}'),(1268,'UPF','','redisDb','Redis DB','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enabled\",\"filter\":\"\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"tcp|udp\",\"display\":\"Net Type\",\"filter\":\"\",\"name\":\"netType\",\"type\":\"string\",\"value\":\"tcp\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Address\",\"filter\":\"\",\"name\":\"serverAddr\",\"type\":\"string\",\"value\":\"0.0.0.0:0\"}]}'),(1269,'UPF','','dataForwarderCommon','Data Forwarder Common','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"upfd|tun\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"string\",\"value\":\"upfd\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Instance ID\",\"filter\":\"1~255\",\"name\":\"instanceId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Main CPU\",\"filter\":\"1~255\",\"name\":\"mainCpu\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"2,3,4,5 or 2-5\",\"display\":\"CPU Workers\",\"filter\":\"\",\"name\":\"cpuWorkers\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"data forwarder already run or not\",\"display\":\"Is Run\",\"filter\":\"0~1\",\"name\":\"isRun\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"Hot Standby work or not\",\"display\":\"Is Hot Standby\",\"filter\":\"0~1\",\"name\":\"isHotStandby\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"The value from which TEID is allocated\",\"display\":\"TEID Start\",\"filter\":\"\",\"name\":\"teidStart\",\"type\":\"int\",\"value\":\"16777216\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Heartbeat Interval\",\"filter\":\"\",\"name\":\"n3HeartbeatInterval\",\"type\":\"int\",\"value\":\"30\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX TX Queue Num\",\"filter\":\"\",\"name\":\"rxTxQueueNum\",\"type\":\"int\",\"value\":\"1\"}]}'),(1270,'UPF','','dataForwarderUpfd','Data Forwarder Upfd','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"Currently only support vfio-pci\",\"display\":\"UIO Driver\",\"filter\":\"\",\"name\":\"uioDriver\",\"type\":\"string\",\"value\":\"vfio-pci\"},{\"access\":\"read-write\",\"comment\":\"The format must be IP:Port\",\"display\":\"Telnet Address IP:Port\",\"filter\":\"\",\"name\":\"commandlineListen\",\"type\":\"string\",\"value\":\"localhost:5002\"},{\"access\":\"read-write\",\"comment\":\"the unit is GB\",\"display\":\"Heap Size GB\",\"filter\":\"1~8\",\"name\":\"heapSizeGB\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"the unit is MB\",\"display\":\"State Seg Size MB\",\"filter\":\"64~512\",\"name\":\"stateSegSizeMB\",\"type\":\"int\",\"value\":\"256\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK No PCI\",\"filter\":\"0~1\",\"name\":\"dpdkNoPci\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Mem Channel Num\",\"filter\":\"0~128\",\"name\":\"memChannelNum\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Base Va\",\"filter\":\"\",\"name\":\"sessionBaseVa\",\"type\":\"string\",\"value\":\"0x2000000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Buffers Per Numa\",\"filter\":\"\",\"name\":\"buffersPerNuma\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 RSS Hash\",\"filter\":\"\",\"name\":\"n3RssHash\",\"type\":\"string\",\"value\":\"\"}]}'),(1271,'UPF','','dataInterfaceList','Data Interface List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"N3|N6|N9|N19\",\"display\":\"Interface Type\",\"filter\":\"\",\"name\":\"interfaceType\",\"type\":\"string\",\"value\":\"N3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interface ID\",\"filter\":\"1~32\",\"name\":\"interfaceId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"host|vmxnet3|dpdk|socket|uds\",\"display\":\"Driver Type\",\"filter\":\"\",\"name\":\"driverType\",\"type\":\"string\",\"value\":\"host\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv4v6\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~8\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"IPv4\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"0.0.0.0\"}],\"comment\":\"\",\"display\":\"IPv4 Address List\",\"filter\":\"0~8\",\"name\":\"ipv4AddrList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~8\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"IPv6 Address List\",\"filter\":\"0~8\",\"name\":\"ipv6AddrList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MAC Address\",\"filter\":\"\",\"name\":\"macAddr\",\"type\":\"string\",\"value\":\"00:00:00:00:00:00\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interface PCI\",\"filter\":\"\",\"name\":\"interfacePCI\",\"type\":\"string\",\"value\":\"0000:00:00.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System Network Card Name\",\"filter\":\"\",\"name\":\"systemNetworkCardName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv4\",\"filter\":\"\",\"name\":\"gatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"null|bak|sub|xor|round|lacp\",\"display\":\"Bond Type\",\"filter\":\"\",\"name\":\"bondType\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Bond ID\",\"filter\":\"0~32\",\"name\":\"bondId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD TX Interval Ms\",\"filter\":\"\",\"name\":\"bfdTxIntervalMs\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD RX Interval Ms\",\"filter\":\"\",\"name\":\"bfdRxIntervalMs\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Name\",\"filter\":\"\",\"name\":\"dnnName\",\"type\":\"string\",\"value\":\"default\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv6\",\"filter\":\"\",\"name\":\"gatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD Gateway IPv4\",\"filter\":\"\",\"name\":\"bfdGatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD Gateway IPv6\",\"filter\":\"\",\"name\":\"bfdGatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MTU\",\"filter\":\"0~65535\",\"name\":\"mtu\",\"type\":\"int\",\"value\":\"1500\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Min\",\"filter\":\"\",\"name\":\"vlanIdMin\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Max\",\"filter\":\"\",\"name\":\"vlanIdMax\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDP Src Port\",\"filter\":\"1~65535\",\"name\":\"udpSrcPort\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDP Listen Port\",\"filter\":\"0~65536\",\"name\":\"udpListenPort\",\"type\":\"int\",\"value\":\"2152\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDS Local File Full Path\",\"filter\":\"\",\"name\":\"udsLocalFileFullPath\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDS Remote File Full Path\",\"filter\":\"\",\"name\":\"udsRemoteFileFullPath\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Detection Type\",\"filter\":\"0~1\",\"name\":\"linkDetectionType\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NAT Interface ID\",\"filter\":\"0~1\",\"name\":\"natInterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"0.0.0.0\"}],\"comment\":\"\",\"display\":\"GTPU Remote IPv4 Pool List\",\"filter\":\"1~32\",\"name\":\"gtpuRemoteIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"GTPU Remote IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"gtpuRemoteIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTPU Signaling Handle\",\"filter\":\"0~1\",\"name\":\"gtpuSignalingHandle\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IMS Default DSCP Value\",\"filter\":\"0~1\",\"name\":\"imsDefaultDSCPValue\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Data Default DSCP Value\",\"filter\":\"0~1\",\"name\":\"dataDefaultDSCPValue\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inner DSCP Value Map\",\"filter\":\"0~1\",\"name\":\"innerDSCPValueMap\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Support Speed Mbps\",\"filter\":\"0~65536\",\"name\":\"maxSupportSpeedMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK RX Queues Number\",\"filter\":\"0~127\",\"name\":\"dpdkRxQueuesNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK TX Queues Number\",\"filter\":\"0~127\",\"name\":\"dpdkTxQueuesNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK RX Desc Number\",\"filter\":\"0~32768\",\"name\":\"dpdkRxDescNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK TX Desc Number\",\"filter\":\"0~32768\",\"name\":\"dpdkTxDescNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK Workers\",\"filter\":\"\",\"name\":\"dpdkworkers\",\"type\":\"string\",\"value\":\"\"}]}'),(1272,'UPF','','networkControlCommon','Network Control Common','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Switch Disabled\",\"filter\":\"0~1\",\"name\":\"localSwitchDisabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TCP Sync Per Second\",\"filter\":\"\",\"name\":\"maxTCPSyncPerSecond\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF Max Support Mbps\",\"filter\":\"\",\"name\":\"upfMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"dscp Inner Mapping\",\"filter\":\"\",\"name\":\"dscpInnerMapping\",\"type\":\"int\",\"value\":\"0\"}]}'),(1273,'UPF','','networkControlDnnList','Network Control DNN List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Name\",\"filter\":\"\",\"name\":\"dnnName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTP Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTPS Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpsProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"\",\"name\":\"name\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Value\",\"filter\":\"\",\"name\":\"value\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"Header Enrich Info List\",\"filter\":\"0~32\",\"name\":\"headerEnrichInfoList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Statistic Enabled\",\"filter\":\"0~1\",\"name\":\"statisticEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Switch Check\",\"filter\":\"0~1\",\"name\":\"localSwitchCheck\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QER Max Support Mbps\",\"filter\":\"\",\"name\":\"qerMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"}],\"comment\":\"\",\"display\":\"UE IPv4 Pool List\",\"filter\":\"0~32\",\"name\":\"ueIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"UE IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"ueIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"}],\"comment\":\"\",\"display\":\"Dst Server IPv4 Pool List\",\"filter\":\"0~32\",\"name\":\"dstServerIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"Dst Server IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"dstServerIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv4v6\",\"display\":\"Gateway IP Type\",\"filter\":\"\",\"name\":\"gatewayIpType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv4\",\"filter\":\"\",\"name\":\"gatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv6\",\"filter\":\"\",\"name\":\"gatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Gateway IPv4\",\"filter\":\"\",\"name\":\"secondaryGatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Gateway IPv6\",\"filter\":\"\",\"name\":\"secondaryGatewayIpv6\",\"type\":\"string\",\"value\":\"\"}]}'),(1274,'UPF','','networkControlSnssaiList','Network Control SNSSAI List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SST\",\"filter\":\"\",\"name\":\"sst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SD\",\"filter\":\"\",\"name\":\"sd\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QER Max Support Mbps\",\"filter\":\"\",\"name\":\"qerMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Statistic Enabled\",\"filter\":\"0~1\",\"name\":\"statisticEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Min\",\"filter\":\"\",\"name\":\"vlanIdMin\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Max\",\"filter\":\"\",\"name\":\"vlanIdMax\",\"type\":\"int\",\"value\":\"0\"}]}'),(1275,'UPF','','networkControlAclWhiteList','Network Control ACL White List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4\",\"filter\":\"\",\"name\":\"dstServerIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4 Mask\",\"filter\":\"\",\"name\":\"dstServerIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6\",\"filter\":\"\",\"name\":\"dstServerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"dstServerIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"}]}'),(1276,'UPF','','networkControlAclBlackList','Network Control ACL Black List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4\",\"filter\":\"\",\"name\":\"dstServerIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4 Mask\",\"filter\":\"\",\"name\":\"dstServerIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6\",\"filter\":\"\",\"name\":\"dstServerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"dstServerIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"}]}'),(1277,'UPF','','networkControlDnsServerList','Network Control DNS Server List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1\",\"display\":\"Enabled\",\"filter\":\"0~1\",\"name\":\"enabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNS Name\",\"filter\":\"\",\"name\":\"dnsName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv4\",\"filter\":\"\",\"name\":\"serverIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv6\",\"filter\":\"\",\"name\":\"serverIpv6\",\"type\":\"string\",\"value\":\"\"}]}'),(1278,'UPF','','dpiCommon','DPI Common','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Detect Packet Num\",\"filter\":\"\",\"name\":\"maxDetectPacketNum\",\"type\":\"int\",\"value\":\"20\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTP Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTPS Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpsProtoEnabled\",\"type\":\"int\",\"value\":\"0\"}]}'),(1279,'UPF','','dpiHeaderEnrichInfoList','DPI Header Enrich Info List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"\",\"name\":\"name\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Value\",\"filter\":\"\",\"name\":\"value\",\"type\":\"string\",\"value\":\"\"}]}'),(1280,'UPF','','dpiAppList','DPI APP List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APP Name\",\"filter\":\"\",\"name\":\"appName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Proxy Enabled\",\"filter\":\"0~1\",\"name\":\"proxyEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Force Check Type\",\"filter\":\"0~1\",\"name\":\"forceCheckType\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"\",\"name\":\"ruleId\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"REGEX Match\",\"filter\":\"\",\"name\":\"regexMatch\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Description\",\"filter\":\"\",\"name\":\"flowDescription\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Custom Name\",\"filter\":\"\",\"name\":\"customName\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"Rule List\",\"filter\":\"0~32\",\"name\":\"ruleList\",\"type\":\"int\",\"value\":\"1\"}]}'),(1408,'SMF','','smfSystem','SMF System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI IP\",\"filter\":\"\",\"name\":\"sbiIpAddr\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Port\",\"filter\":\"0~65535\",\"name\":\"sbiPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4 IPv4\",\"filter\":\"\",\"name\":\"n4Ipv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4 IPv6\",\"filter\":\"\",\"name\":\"n4Ipv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4U IPv4\",\"filter\":\"\",\"name\":\"n4UIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4U IPv6\",\"filter\":\"\",\"name\":\"n4UIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF URI\",\"filter\":\"\",\"name\":\"amfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.120:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"display\":\"5G Charing Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"chgEnable5G\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CHF PRIMARY URI\",\"filter\":\"\",\"name\":\"chfPrimaryUri\",\"type\":\"string\",\"value\":\"http://172.16.5.240:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CHF SECONDARY URI\",\"filter\":\"\",\"name\":\"chfSecondaryUri\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary DNS IPv4\",\"filter\":\"\",\"name\":\"primaryDnsIpv4\",\"type\":\"ipv4\",\"value\":\"114.114.114.114\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary DNS IPv4\",\"filter\":\"\",\"name\":\"secondaryDnsIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary DNS IPv6\",\"filter\":\"\",\"name\":\"primaryDnsIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary DNS IPv6\",\"filter\":\"\",\"name\":\"secondaryDnsIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary PCSCF IPv4\",\"filter\":\"\",\"name\":\"primaryPcscfIpv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary PCSCF IPv4\",\"filter\":\"\",\"name\":\"secondaryPcscfIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary PCSCF IPv6\",\"filter\":\"\",\"name\":\"primaryPcscfIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary PCSCF IPv6\",\"filter\":\"\",\"name\":\"secondaryPcscfIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE MTU\",\"filter\":\"0~65535\",\"name\":\"ueMtu\",\"type\":\"int\",\"value\":\"\"}]}'),(1409,'SMF','','upfConfig','UPF Config','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~2047\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"id\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"e.g. ip:port\",\"display\":\"Address\",\"filter\":\"7~45\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4,IPv6,IPv4v6\",\"display\":\"Ip Pool Type\",\"filter\":\"\",\"name\":\"ipPoolType\",\"type\":\"string\",\"value\":\"IPv4v6\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. 192.168.1.0/24\",\"display\":\"IPv4 Pools\",\"filter\":\"10~256\",\"name\":\"ipv4Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50\",\"display\":\"IPv6 Pools\",\"filter\":\"5~512\",\"name\":\"ipv6Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv4 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv4Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 Start\",\"filter\":\"\",\"name\":\"staticIpv4Start\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 End\",\"filter\":\"\",\"name\":\"staticIpv4End\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv6 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv6Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 Start\",\"filter\":\"\",\"name\":\"staticIpv6Start\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 End\",\"filter\":\"\",\"name\":\"staticIpv6End\",\"type\":\"ipv6\",\"value\":\"\"},{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~2047\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4,IPv6,IPv4v6\",\"display\":\"Ip Pool Type\",\"filter\":\"\",\"name\":\"ipPoolType\",\"type\":\"string\",\"value\":\"IPv4v6\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. 192.168.1.0/24\",\"display\":\"IPv4 Pools\",\"filter\":\"10~256\",\"name\":\"ipv4Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50\",\"display\":\"IPv6 Pools\",\"filter\":\"5~512\",\"name\":\"ipv6Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv4 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv4Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 Start\",\"filter\":\"\",\"name\":\"staticIpv4Start\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 End\",\"filter\":\"\",\"name\":\"staticIpv4End\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv6 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv6Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 Start\",\"filter\":\"\",\"name\":\"staticIpv6Start\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 End\",\"filter\":\"\",\"name\":\"staticIpv6End\",\"type\":\"ipv6\",\"value\":\"\"}],\"display\":\"UE DNN IP Pool\",\"name\":\"ueDnnIpPool\"}]}'),(1410,'SMF','','dnnSelectUpf','DNN Select UPF','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"\"}]}'),(1411,'SMF','','dnnTaiSelectUpf','DNN TAI Select UPF','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"MCC+MNC+TAC\",\"display\":\"TAI\",\"filter\":\"1~64\",\"name\":\"tai\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"upf2-Id\"}]}'),(1414,'UDM','','epsApn','EPS APN','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{0,127}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"IPv4 or IPv6\\\"}\",\"name\":\"pdnType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QCI\",\"filter\":\"1~255\",\"name\":\"qci\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority\",\"filter\":\"1~127\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"8\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Context Identifier\",\"filter\":\"\",\"name\":\"contextIdentifier\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"VPLMN Dynamic Address Allowed\",\"filter\":\"false;true;\",\"name\":\"vplmnDynamicAddressAllowed\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN GW Allocation Type\",\"filter\":\"{\\\"0\\\":\\\"Static\\\",\\\"1\\\":\\\"Dynamic\\\"}\",\"name\":\"pdnGWAllocationType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]}'),(1421,'UDM','','applicationServer','Application Server','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AS Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Handling\",\"filter\":\"{\\\"0\\\":\\\"Session Continued\\\",\\\"1\\\":\\\"Session Terminated\\\"}\",\"name\":\"defaultHandling\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:192.168.8.26:7060\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Diameter Address\",\"filter\":\"^.{1,127}$\",\"name\":\"diameterAddress\",\"type\":\"string\",\"value\":\"mmtel.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rep Data Size Limit\",\"filter\":\"0~65535\",\"name\":\"repDataSizeLimit\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Request\",\"filter\":\"false;true;\",\"name\":\"includeRegisterRequest\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Response\",\"filter\":\"false;true;\",\"name\":\"includeRegisterResponse\",\"type\":\"bool\",\"value\":\"false\"}]}'),(1426,'UDM','','system','System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.140\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF IP\",\"filter\":\"\",\"name\":\"ausfIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.130\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"agt.com\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"0~4095\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Capacity\",\"filter\":\"0~65535\",\"name\":\"capacity\",\"type\":\"int\",\"value\":\"4096\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SUPI Ranges\",\"filter\":\"^imsi-\\\\d{15}~imsi-\\\\d{15}$\",\"name\":\"supiRanges\",\"type\":\"regex\",\"value\":\"imsi-001010100080000~imsi-001010100080099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GPSI Ranges\",\"filter\":\"^msisdn-\\\\d{2,15}~msisdn-\\\\d{2,15}$\",\"name\":\"gpsiRanges\",\"type\":\"regex\",\"value\":\"msisdn-69072000~msisdn-69072099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Link\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"redisLink\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Address\",\"filter\":\"\",\"name\":\"redisAddr\",\"type\":\"string\",\"value\":\"172.16.5.140:6379\"}]}'),(1427,'UDM','','subsUEAmbr','Subs UE AMBR','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"uplink\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"downlink\",\"type\":\"regex\",\"value\":\"2 Gbps\"}]}'),(1428,'UDM','','subsNssais','Subs NSSAIs','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Features\",\"filter\":\"^[0-9a-fA-F]{8}$\",\"name\":\"supportedFeatures\",\"type\":\"regex\",\"value\":\"00000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Single NSSAIs\",\"filter\":\"\",\"name\":\"defaultSingleNSSAIs\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Single NSSAIs\",\"filter\":\"\",\"name\":\"singleNssais\",\"type\":\"string\",\"value\":\"1-000002\"}]}'),(1429,'UDM','','forbiddenAreas','Forbidden Areas','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"}]}'),(1430,'UDM','','serviceAreaRestriction','Service Area Restriction','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]}'),(1431,'UDM','','smfSelection','Subs SMF Selection','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SNSSAI\",\"filter\":\"^\\\\d{1,3}[A-Fa-f0-9]{6}$\",\"name\":\"snssai\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{1,32}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN Indicator\",\"filter\":\"false;true;\",\"name\":\"defaultDnnInd\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LBO Roaming Allowed\",\"filter\":\"false;true;\",\"name\":\"lboRoamingAllowed\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"false;true;\",\"name\":\"iwkEpsInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"false;true;\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"false\"}],\"comment\":\"\",\"display\":\"DNN List\",\"filter\":\"1~4\",\"name\":\"dnnList\",\"type\":\"int\",\"value\":\"1\"}]}'),(1432,'UDM','','dnn','DNN Conf','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default PDU Session Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\"}\",\"name\":\"defaultPDUSessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed PDU Session Types\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\",\\\"5\\\":\\\"IPv4 \\u0026 IPv6\\\",\\\"6\\\":\\\"IPv4 \\u0026 IPv4v6\\\",\\\"7\\\":\\\"IPv6 \\u0026 IPv4v6\\\",\\\"8\\\":\\\"IPv4 \\u0026 IPv6 \\u0026 IPv4v6\\\"}\",\"name\":\"allowedPDUSessionTypes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"5qi\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority Level\",\"filter\":\"1~127\",\"name\":\"priorityLevel\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default SSC Mode\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\"}\",\"name\":\"defaultSSCmode\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed SSC Modes\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\",\\\"3\\\":\\\"SSC Mode1 \\u0026 SSC Mode2\\\",\\\"4\\\":\\\"SSC Mode1 \\u0026 SSC Mode3\\\",\\\"5\\\":\\\"SSC Mode2 \\u0026 SSC Mode3\\\",\\\"6\\\":\\\"SSC Mode1 \\u0026 SSC Mode2 \\u0026 SSC Mode3\\\"}\",\"name\":\"allowedSSCmodes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"\",\"name\":\"interworkingEPSIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristics\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristics\",\"type\":\"string\",\"value\":\"0001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrUL\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrDL\",\"type\":\"regex\",\"value\":\"2 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IP Address\",\"filter\":\"\",\"name\":\"staticIPAddress\",\"type\":\"ipv4\",\"value\":\"192.168.1.100\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Integrity\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneIntegrity\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Confidentiality\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneConfidentiality\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"0~255\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"}]}'),(1433,'UDM','','epsTemplate','EPS User Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{0,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_eps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APN OI Replacement\",\"filter\":\"^.{0,31}$\",\"name\":\"apnOIReplacement\",\"type\":\"string\",\"value\":\"money\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RFSP\",\"filter\":\"\",\"name\":\"rfsp\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RAU TAU Timer\",\"filter\":\"\",\"name\":\"rauTauTimer\",\"type\":\"int\",\"value\":\"120\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]}'),(1434,'UDM','','scscfSet','SCSCF Set','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060\"}]}'),(1435,'UDM','','triggerPoint','Trigger Point','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Type CNF\",\"filter\":\"0~1\",\"name\":\"conditionTypeCNF\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Disable\",\"filter\":\"\",\"name\":\"disable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Negated\",\"filter\":\"0~1\",\"name\":\"conditionNegated\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group\",\"filter\":\"0~4096\",\"name\":\"group\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"^.{0,32}$\",\"name\":\"method\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Header\",\"filter\":\"^.{0,64}$\",\"name\":\"sipHeader\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Content\",\"filter\":\"^.{0,64}$\",\"name\":\"sipContent\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"SPT List\",\"filter\":\"1~4\",\"name\":\"sptList\",\"type\":\"int\",\"value\":\"1\"}]}'),(1436,'UDM','','s6aServer','S6a Server','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]}'),(1437,'UDM','','cxServer','Cx Server','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]}'),(1449,'PCF','','system','System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"}]}'),(1450,'PCF','','serviceAreaRestriction','Service Area Restriction','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]}'),(1451,'PCF','','pccRules','PCC Rules','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"^.{1,63}$\",\"name\":\"ruleId\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Activate\",\"filter\":\"false;true;\",\"name\":\"activate\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Precedence\",\"filter\":\"0~255\",\"name\":\"precedence\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Usage\",\"filter\":\"{\\\"0\\\":\\\"General\\\", \\\"1\\\":\\\"IMS-Signalling\\\"}\",\"name\":\"flowUsage\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APP ID\",\"filter\":\"^.{1,63}$\",\"name\":\"appId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Template\",\"filter\":\"^.{1,255}$\",\"name\":\"flowTemplate\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QoS ID\",\"filter\":\"^.{1,63}$\",\"name\":\"qosId\",\"type\":\"string\",\"value\":\"qos_internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Traffic Control ID\",\"filter\":\"^.{1,63}$\",\"name\":\"trafficControlId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"usageMonitoringId\",\"type\":\"string\",\"value\":\"\"}]}'),(1452,'PCF','','sessionRules','Session Rules','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"^.{1,63}$\",\"name\":\"ruleId\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Activate\",\"filter\":\"false;true;\",\"name\":\"activate\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"fiveQI\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI Priority Level\",\"filter\":\"0~127\",\"name\":\"fiveQIPriorityLevel\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Usage\",\"filter\":\"{\\\"0\\\":\\\"General\\\", \\\"1\\\":\\\"IMS-Signalling\\\"}\",\"name\":\"flowUsage\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"usageMonitoringId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"ambrDl\",\"type\":\"string\",\"value\":\"200Mbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"ambrUl\",\"type\":\"string\",\"value\":\"100Mbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Averaging Window\",\"filter\":\"0~4095\",\"name\":\"averagingWindow\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Data Burst Volume\",\"filter\":\"0~4095\",\"name\":\"maxDataBurstVolume\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"1~15\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrUl\",\"type\":\"string\",\"value\":\"\"}]}'),(1453,'PCF','','gxServer','Gx Server','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{0,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{0,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]}'),(1454,'PCF','','rxServer','Rx Server','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{0,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{0,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]}'),(1455,'PCF','','flowTemplate','Flow Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~256\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Template Name\",\"filter\":\"^.{1,63}$\",\"name\":\"templateName\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Description\",\"filter\":\"^.{1,127}$\",\"name\":\"flowDescription\",\"type\":\"string\",\"value\":\"permit out ip from any to assigned\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Direction\",\"filter\":\"{\\\"0\\\":\\\"Unspecified\\\", \\\"1\\\":\\\"Uplink\\\", \\\"2\\\":\\\"Downlink\\\", \\\"3\\\":\\\"Bidirectional\\\"}\",\"name\":\"flowDirection\",\"type\":\"enum\",\"value\":\"0\"}]}'),(1456,'PCF','','qosTemplate','QoS Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QoS ID\",\"filter\":\"^.{1,63}$\",\"name\":\"qosId\",\"type\":\"string\",\"value\":\"qos_internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"fiveQI\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI Priority Level\",\"filter\":\"0~127\",\"name\":\"fiveQIPriorityLevel\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"1~15\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default QoS Flow Indication\",\"filter\":\"false;true;\",\"name\":\"defQosFlowIndication\",\"type\":\"bool\",\"value\":\"false\"}]}'),(1457,'PCF','','usageMonitoringTemplate','Usage Monitoring Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"umId\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold(KB)\",\"filter\":\"\",\"name\":\"volumeThreshold\",\"type\":\"int\",\"value\":\"5242880\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold Uplink(KB)\",\"filter\":\"\",\"name\":\"volumeThresholdUplink\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold Downlink(KB)\",\"filter\":\"\",\"name\":\"volumeThresholdDownlink\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Time Threshold\",\"filter\":\"\",\"name\":\"timeThreshold\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inactivity Time\",\"filter\":\"\",\"name\":\"inactivityTime\",\"type\":\"int\",\"value\":\"0\"}]}'),(1458,'PCF','','trafficControlTemplate','Traffic Control Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Traffic Control ID\",\"filter\":\"^.{1,63}$\",\"name\":\"tcId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Status\",\"filter\":\"{\\\"0\\\":\\\"Disable\\\", \\\"1\\\":\\\"Uplink\\\", \\\"2\\\":\\\"Downlink\\\", \\\"3\\\":\\\"Enable\\\", \\\"4\\\":\\\"Remove\\\"}\",\"name\":\"flowStatus\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Mute Notify\",\"filter\":\"false;true;\",\"name\":\"muteNotif\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Route to Location DNAI\",\"filter\":\"^.{1,63}$\",\"name\":\"dnai\",\"type\":\"string\",\"value\":\"\"}]}'),(1459,'PCF','','headerEnrichTemplate','Header Enrich Template','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Template Name\",\"filter\":\"^.{1,63}$\",\"name\":\"templateName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Header Type\",\"filter\":\"{\\\"0\\\":\\\"GPSI\\\", \\\"1\\\":\\\"SUPI\\\", \\\"2\\\":\\\"UE IP\\\", \\\"3\\\":\\\"User Location\\\", \\\"4\\\":\\\"DNN\\\"}\",\"name\":\"headerType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Header Name\",\"filter\":\"^.{1,63}$\",\"name\":\"headerName\",\"type\":\"string\",\"value\":\"\"}]}'),(1473,'AMF','','system','System Config','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF Name\",\"filter\":\"0~64\",\"name\":\"amfName\",\"type\":\"string\",\"value\":\"AMF\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Relative Capacity\",\"filter\":\"0~255\",\"name\":\"relativeCapacity\",\"type\":\"int\",\"value\":\"255\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\",\\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Server IP\",\"filter\":\"0~64\",\"name\":\"sbiServerIp\",\"type\":\"string\",\"value\":\"192.168.1.183\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Server Port\",\"filter\":\"0~65535\",\"name\":\"sbiServerPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"0~64\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF URI\",\"filter\":\"0~64\",\"name\":\"ausfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.130:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"0~64\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF URI\",\"filter\":\"0~64\",\"name\":\"smfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.150:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"0~64\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LMF URI\",\"filter\":\"0~64\",\"name\":\"lmfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.200:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NEF URI\",\"filter\":\"0~64\",\"name\":\"nefUri\",\"type\":\"string\",\"value\":\"http://172.16.5.210:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Correction Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"dnnCorrectionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN\",\"filter\":\"0~64\",\"name\":\"defaultDnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Integrity Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NIA0\\\",\\\"1\\\":\\\"NIA1\\\",\\\"2\\\":\\\"NIA2\\\",\\\"3\\\":\\\"NIA3\\\"}\",\"name\":\"integrityAlgorithm\",\"type\":\"enum\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Ciphering Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NEA0\\\",\\\"1\\\":\\\"NEA1\\\",\\\"2\\\":\\\"NEA2\\\",\\\"3\\\":\\\"NEA3\\\"}\",\"name\":\"cipheringAlgorithm\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3502\",\"filter\":\"1~65535\",\"name\":\"t3502\",\"type\":\"int\",\"value\":\"720\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3512\",\"filter\":\"1~65535\",\"name\":\"t3512\",\"type\":\"int\",\"value\":\"3600\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3513\",\"filter\":\"1~65535\",\"name\":\"t3513\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3522\",\"filter\":\"1~65535\",\"name\":\"t3522\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3550\",\"filter\":\"1~65535\",\"name\":\"t3550\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3555\",\"filter\":\"1~65535\",\"name\":\"t3555\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3560\",\"filter\":\"1~65535\",\"name\":\"t3560\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3565\",\"filter\":\"1~65535\",\"name\":\"t3565\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3570\",\"filter\":\"1~65535\",\"name\":\"t3570\",\"type\":\"int\",\"value\":\"6\"}]}'),(1474,'AMF','','association','TNL Association List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NGAP IP\",\"filter\":\"0~64\",\"name\":\"ngapIp\",\"type\":\"string\",\"value\":\"192.168.1.183\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"NGAP SCTP Port\",\"filter\":\"0~65535\",\"name\":\"ngapSctpPort\",\"type\":\"int\",\"value\":\"38412\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Weight\",\"filter\":\"0~255\",\"name\":\"weightFactor\",\"type\":\"int\",\"value\":\"255\"}]}'),(1475,'AMF','','guami','GUAMI List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"}]}'),(1476,'AMF','','tai','TAI List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~8\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"1\"}]}'),(1477,'AMF','','slice','Slice List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~127\",\"display\":\"SST\",\"filter\":\"0~127\",\"name\":\"sst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SD\",\"filter\":\"^[A-Fa-f0-9]{6}\",\"name\":\"sd\",\"type\":\"regex\",\"value\":\"000001\"}]}'),(1480,'MOCNGW','','system','System Config','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP South Address\",\"filter\":\"0~64\",\"name\":\"s1apSouthAddr\",\"type\":\"string\",\"value\":\"192.168.7.163\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP North Address\",\"filter\":\"0~64\",\"name\":\"s1apNorthAddr\",\"type\":\"string\",\"value\":\"192.168.8.163\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1048575\",\"display\":\"ENB ID\",\"filter\":\"0~1048575\",\"name\":\"enbId\",\"type\":\"int\",\"value\":\"24\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"userPlaneEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PFCP Address\",\"filter\":\"0~64\",\"name\":\"pfcpAddr\",\"type\":\"string\",\"value\":\"192.168.7.163\"}]}'),(1481,'MOCNGW','','mme','MME List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP Address\",\"filter\":\"0~64\",\"name\":\"s1apAddr\",\"type\":\"string\",\"value\":\"192.168.1.161\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S1AP Port\",\"filter\":\"0~65535\",\"name\":\"s1apPort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"}]}'),(1482,'MOCNGW','','upgw','UPGW Config','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PFCP Address\",\"filter\":\"0~64\",\"name\":\"pfcpAddr\",\"type\":\"string\",\"value\":\"192.168.1.159\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"PFCP Port\",\"filter\":\"0~65535\",\"name\":\"pfcpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTP-U South Address\",\"filter\":\"0~64\",\"name\":\"gtpuSouthAddr\",\"type\":\"string\",\"value\":\"10.10.1.2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTP-U North Address\",\"filter\":\"0~64\",\"name\":\"gtpuNorthAddr\",\"type\":\"string\",\"value\":\"192.168.7.123\"}]}'),(1490,'MME','','system','System Config','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"display\":\"CSFB Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"display\":\"VoLTE Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"volteEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S1 MME IP\",\"filter\":\"0~64\",\"name\":\"s1MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"S1 MME Port\",\"filter\":\"0~65535\",\"name\":\"s1MmePort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S11 MME IP\",\"filter\":\"0~64\",\"name\":\"s11MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S11 MME Port\",\"filter\":\"0~65535\",\"name\":\"s11MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S10 MME IP\",\"filter\":\"0~64\",\"name\":\"s10MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.178\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S10 MME Port\",\"filter\":\"0~65535\",\"name\":\"s10MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"SGs MME IP\",\"filter\":\"0~64\",\"name\":\"sgsMmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"SGs MME Port\",\"filter\":\"0~65535\",\"name\":\"sgsMmePort\",\"type\":\"int\",\"value\":\"29118\"}]}'),(1491,'MME','','gummei','Gummei List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Group ID\",\"filter\":\"0~65535\",\"name\":\"groupId\",\"type\":\"int\",\"value\":\"4\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Code\",\"filter\":\"0~255\",\"name\":\"code\",\"type\":\"int\",\"value\":\"1\"}]}'),(1492,'MME','','tai','TAI List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"}]}'),(1493,'MME','','hss','HSS List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{1,15}$\",\"display\":\"IMSI Prefix\",\"filter\":\"^[0-9]{1,15}$\",\"name\":\"imsiPre\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"HSS Hostname\",\"filter\":\"0~128\",\"name\":\"hssHostname\",\"type\":\"string\",\"value\":\"hss.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"0~8\",\"display\":\"Protocol\",\"filter\":\"0~8\",\"name\":\"protocol\",\"type\":\"string\",\"value\":\"SCTP\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"HSS Port\",\"filter\":\"0~65535\",\"name\":\"hssPort\",\"type\":\"int\",\"value\":\"3868\"}]}'),(1494,'MME','','sgw','SGW List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"SGW IP\",\"filter\":\"0~64\",\"name\":\"sgwIp\",\"type\":\"string\",\"value\":\"192.168.1.180\"}]}'),(1495,'MME','','pgw','PGW List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"APN\",\"filter\":\"0~128\",\"name\":\"apn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"PGW IP\",\"filter\":\"0~64\",\"name\":\"pgwIp\",\"type\":\"string\",\"value\":\"192.168.1.181\"}]}'),(1496,'MME','','amf','AMF List','','{\"array\":[{\"access\":\"read-write\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~16777215\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"AMF IP\",\"filter\":\"0~64\",\"name\":\"amfIp\",\"type\":\"string\",\"value\":\"192.168.1.188\"}]}'),(1511,'IMS','','system','System','','{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Label\",\"filter\":\"\",\"name\":\"label\",\"type\":\"string\",\"value\":\"ims-core\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"HPLMN MCC\",\"filter\":\"\",\"name\":\"hplmnMCC\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"HPLMN MNC\",\"filter\":\"\",\"name\":\"hplmnMNC\",\"type\":\"string\",\"value\":\"01\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IPv4\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IPv6\",\"filter\":\"\",\"name\":\"serviceIPv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 1\",\"filter\":\"\",\"name\":\"domainName1\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 2\",\"filter\":\"\",\"name\":\"domainName2\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 3\",\"filter\":\"\",\"name\":\"domainName3\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 4\",\"filter\":\"\",\"name\":\"domainName4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MultiDomain Indicator\",\"filter\":\"false;true;\",\"name\":\"multiDomainInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Transcode Indicator\",\"filter\":\"false;true;\",\"name\":\"transcodeInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MultiIPStack Indicator\",\"filter\":\"false;true;\",\"name\":\"multiIPStackInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register Timer\",\"filter\":\"120-1000000\",\"name\":\"registerTimer\",\"type\":\"int\",\"value\":\"7200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Call Duration\",\"filter\":\"1800-1000000\",\"name\":\"maxCallDuration\",\"type\":\"int\",\"value\":\"43200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System Indicator\",\"filter\":\"false;true;\",\"name\":\"dispatchSystemInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System IPv4\",\"filter\":\"\",\"name\":\"dispatchSystemIP\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal SMS Indicator\",\"filter\":\"false;true;\",\"name\":\"internalSMSInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal CDR Indicator\",\"filter\":\"false;true;\",\"name\":\"internalCDRInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal KPI Indicator\",\"filter\":\"false;true;\",\"name\":\"internalKPIInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF IP Address\",\"filter\":\"\",\"name\":\"pcfIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.140\"}]}'),(1512,'IMS','','plmn','PLMN List','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"^[0-9]{3}$\",\"name\":\"mcc\",\"type\":\"regex\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"^[0-9]{2,3}$\",\"name\":\"mnc\",\"type\":\"regex\",\"value\":\"01\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain\",\"filter\":\"0~128\",\"name\":\"domain\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]}'),(1513,'IMS','','mmtel_dialplan','MMTEL Dialplan','','{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NaName\",\"filter\":\"0~128\",\"name\":\"naName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Title\",\"filter\":\"0~128\",\"name\":\"title\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"0-2\",\"name\":\"method\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Prefix\",\"filter\":\"0~128\",\"name\":\"prefix\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Start\",\"filter\":\"0~128\",\"name\":\"start\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"End\",\"filter\":\"0~128\",\"name\":\"end\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Attrib\",\"filter\":\"0~128\",\"name\":\"attrib\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Len\",\"filter\":\"0~128\",\"name\":\"numberLen\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rsc\",\"filter\":\"0~128\",\"name\":\"rsc\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Nai\",\"filter\":\"0~128\",\"name\":\"e164Nai\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Delete\",\"filter\":\"0~128\",\"name\":\"e164Delete\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Insert\",\"filter\":\"0~128\",\"name\":\"e164Insert\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"Enable: 0,Close 1,Open\",\"display\":\"Admin State\",\"enum\":[0,1],\"filter\":\"0~1\",\"name\":\"adminState\",\"type\":\"int\",\"value\":0}]}'); /*!40000 ALTER TABLE `param_config` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -54,4 +54,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-03-20 17:01:24 +-- Dump completed on 2024-04-12 21:09:35 diff --git a/database/install/sys_dict_data.sql b/database/install/sys_dict_data.sql index fd354f2e..4ac06cab 100644 --- a/database/install/sys_dict_data.sql +++ b/database/install/sys_dict_data.sql @@ -46,7 +46,7 @@ CREATE TABLE `sys_dict_data` ( LOCK TABLES `sys_dict_data` WRITE; /*!40000 ALTER TABLE `sys_dict_data` DISABLE KEYS */; -INSERT INTO `sys_dict_data` VALUES (1,1,'dictData.sex.un','0','sys_user_sex',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(2,2,'dictData.sex.male','1','sys_user_sex',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(3,3,'dictData.sex.female','2','sys_user_sex',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(4,1,'dictData.show','1','sys_show_hide',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(5,2,'dictData.hide','0','sys_show_hide',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(6,1,'dictData.normal','1','sys_normal_disable',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(7,2,'dictData.disable','0','sys_normal_disable',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(8,1,'dictData.yes','Y','sys_yes_no',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(9,2,'dictData.no','N','sys_yes_no',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(10,1,'dictData.success','1','sys_common_status',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(11,2,'dictData.fail','0','sys_common_status',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(12,1,'dictData.jobStatus.normal','1','sys_job_status',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(13,2,'dictData.jobStatus.pause','0','sys_job_status',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(14,1,'dictData.jobGroup.Default','DEFAULT','sys_job_group',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(15,2,'dictData.jobGroup.System','SYSTEM','sys_job_group',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(16,1,'dictData.operType.other','0','sys_oper_type',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(17,2,'dictData.operType.add','1','sys_oper_type',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(18,3,'dictData.operType.edit','2','sys_oper_type',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(19,4,'dictData.operType.delete','3','sys_oper_type',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(20,5,'dictData.operType.auth','4','sys_oper_type',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(21,6,'dictData.operType.export','5','sys_oper_type',NULL,'warning','1','supervisor',1699350000000,NULL,0,NULL),(22,7,'dictData.operType.import','6','sys_oper_type',NULL,'warning','1','supervisor',1699350000000,NULL,0,NULL),(23,8,'dictData.operType.forced quit','7','sys_oper_type',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(24,9,'dictData.operType.clear','8','sys_oper_type',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(25,1,'dictData.trace.interface','Interface','trace_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(26,2,'dictData.trace.device','Device','trace_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(27,3,'dictData.trace.user','UE','trace_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(28,1,'dictData.logType.download','DOWNLOAD','operation_log_type',NULL,'pink','1','supervisor',1699350000000,NULL,0,NULL),(29,2,'dictData.logType.activation','Activation','operation_log_type',NULL,'blue ','1','supervisor',1699350000000,NULL,0,NULL),(30,3,'dictData.logType.add','ADD','operation_log_type',NULL,'cyan','1','supervisor',1699350000000,NULL,0,NULL),(31,4,'dictData.logType.other','AUTO','operation_log_type',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(32,5,'dictData.logType.back','BACK','operation_log_type',NULL,'blue ','1','supervisor',1699350000000,NULL,0,NULL),(33,6,'dictData.logType.delete','DELETE','operation_log_type',NULL,'red','1','supervisor',1699350000000,NULL,0,NULL),(34,7,'dictData.logType.distribute','Distribute','operation_log_type',NULL,'yellow','1','supervisor',1699350000000,NULL,0,NULL),(35,8,'dictData.logType.export','EXPORT','operation_log_type',NULL,'green','1','supervisor',1699350000000,NULL,0,NULL),(36,9,'dictData.logType.query','SELECT','operation_log_type',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(37,10,'dictData.logType.setup','SET','operation_log_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(38,11,'dictData.logType.update','UPDATE','operation_log_type',NULL,'magenta','1','supervisor',1699350000000,NULL,0,NULL),(39,12,'dictData.logType.upload','UPLOAD','operation_log_type',NULL,'yellow','1','supervisor',1699350000000,NULL,0,NULL),(40,13,'dictData.logType.view','View','operation_log_type',NULL,'purple','1','supervisor',1699350000000,NULL,0,NULL),(41,14,'dictData.logType.login','0','security_log_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(42,15,'dictData.logType.logout','1','security_log_type',NULL,'cyan','1','supervisor',1699350000000,NULL,0,NULL),(43,1,'dictData.securityLogType.add','2','security_log_type',NULL,'green','1','supervisor',1699350000000,NULL,0,NULL),(44,2,'dictData.securityLogType.update','3','security_log_type',NULL,'lime','1','supervisor',1699350000000,NULL,0,NULL),(45,3,'dictData.securityLogType.delete','4','security_log_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(46,4,'dictData.securityLogType.lock','5','security_log_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(47,5,'dictData.securityLogType.unlock','6','security_log_type',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(48,6,'dictData.securityLogType.reset','7','security_log_type',NULL,'cyan','1','supervisor',1699350000000,NULL,0,NULL),(49,7,'dictData.securityLogType.deactivate','8','security_log_type',NULL,'blue ','1','supervisor',1699350000000,NULL,0,NULL),(50,8,'dictData.jobSaveLog.no','0','sys_job_save_log',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(51,9,'dictData.jobSaveLog.yes','1','sys_job_save_log',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(52,1,'dictData.neVersionStatus.upload','Uploaded','ne_version_status',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(53,2,'dictData.neVersionStatus.inactive','Inactive','ne_version_status',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(54,3,'dictData.neVersionStatus.active','Active','ne_version_status',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(55,1,'dictData.alarmStatus.history','0','alarm_status',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(56,2,'dictData.alarmStatus.active','1','alarm_status',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(57,1,'dictData.datascope.all','1','sys_role_datascope',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(58,2,'dictData.datascope.custom','2','sys_role_datascope',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(59,3,'dictData.datascope.dept','3','sys_role_datascope',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(60,4,'dictData.datascope.deptAndChid','4','sys_role_datascope',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(61,5,'dictData.datascope.self','5','sys_role_datascope',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(62,1,'dictData.active_alarm_type.communication','CommunicationAlarm','active_alarm_type',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(63,2,'dictData.active_alarm_type.equipment','EquipmentAlarm','active_alarm_type',NULL,'cyan','1','supervisor',1699350000000,NULL,0,NULL),(64,3,'dictData.active_alarm_type.processing','ProcessingFailure','active_alarm_type',NULL,'blue ','1','supervisor',1699350000000,NULL,0,NULL),(65,4,'dictData.active_alarm_type.environmental','EnvironmentalAlarm','active_alarm_type',NULL,'yellow','1','supervisor',1699350000000,NULL,0,NULL),(66,5,'dictData.active_alarm_type.qualityOfService','QualityOfServiceAlarm','active_alarm_type',NULL,'purple','1','supervisor',1699350000000,NULL,0,NULL),(67,0,'dictData.active_clear_type.notCleared','0','active_clear_type',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(68,1,'dictData.active_clear_type.auto','1','active_clear_type',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(69,2,'dictData.active_clear_type.hand','2','active_clear_type',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(70,0,'dictData.active_ack_state.unconfirmed','0','active_ack_state',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(71,1,'dictData.active_ack_state.confirmed','1','active_ack_state',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(72,1,'dictData.active_alarm_severity.critical','Critical','active_alarm_severity',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(73,2,'dictData.active_alarm_severity.major','Major','active_alarm_severity',NULL,'cyan','1','supervisor',1699350000000,NULL,0,NULL),(74,3,'dictData.active_alarm_severity.minor','Minor','active_alarm_severity',NULL,'blue ','1','supervisor',1699350000000,NULL,0,NULL),(75,4,'dictData.active_alarm_severity.warning','Warning','active_alarm_severity',NULL,'yellow','1','supervisor',1699350000000,NULL,0,NULL),(76,5,'dictData.active_alarm_severity.event','Event','active_alarm_severity',NULL,'purple','1','supervisor',1699350000000,NULL,0,NULL),(77,1,'dictType.index_status.normal','normal','index_status','#91cc75',NULL,'1','supervisor',1702019464083,'supervisor',1702021768318,NULL),(78,2,'dictType.index_status.abnormal','abnormal','index_status','#ee6666',NULL,'1','supervisor',1702019496965,'supervisor',1702021757053,NULL),(79,1,'dictData.cdr_sip_code.200','200','cdr_sip_code',NULL,NULL,'1','supervisor',1706611926184,'supervisor',1706611931945,NULL),(80,3,'dictData.cdr_sip_code.403','403','cdr_sip_code',NULL,NULL,'1','supervisor',1706612097209,NULL,0,NULL),(81,8,'dictData.cdr_sip_code.408','408','cdr_sip_code',NULL,NULL,'1','supervisor',1706612130088,NULL,0,NULL),(82,10,'dictData.cdr_sip_code.500','500','cdr_sip_code',NULL,NULL,'1','supervisor',1706612145510,NULL,0,NULL),(83,1,'dictData.cdr_call_type.audio','audio','cdr_call_type',NULL,NULL,'1','supervisor',1706612401539,NULL,0,NULL),(84,2,'dictData.cdr_call_type.video','video','cdr_call_type',NULL,NULL,'1','supervisor',1706615174291,NULL,0,NULL),(85,1,'dictData.ue_auth_code.200','200','ue_auth_code',NULL,NULL,'1','supervisor',1706616391409,NULL,0,NULL),(86,1,'dictData.ue_auth_code.001','001','ue_auth_code',NULL,NULL,'1','supervisor',1706616413353,NULL,0,NULL),(87,2,'dictData.ue_auth_code.002','002','ue_auth_code',NULL,NULL,'1','supervisor',1706616433726,NULL,0,NULL),(88,3,'dictData.ue_auth_code.003','003','ue_auth_code',NULL,NULL,'1','supervisor',1706616454965,NULL,0,NULL),(89,4,'dictData.ue_auth_code.004','004','ue_auth_code',NULL,NULL,'1','supervisor',1706616471395,NULL,0,NULL),(90,5,'dictData.ue_auth_code.005','005','ue_auth_code',NULL,NULL,'1','supervisor',1706616492215,NULL,0,NULL),(91,6,'dictData.ue_auth_code.006','006','ue_auth_code',NULL,NULL,'1','supervisor',1706616510265,'supervisor',1706616531154,NULL),(92,7,'dictData.ue_auth_code.007','007','ue_auth_code',NULL,NULL,'1','supervisor',1706616527896,NULL,0,NULL),(93,1,'dictData.ue_event_type.auth','auth-result','ue_event_type',NULL,NULL,'1','supervisor',1706617140742,NULL,0,NULL),(94,2,'dictData.ue_event_type.detach','detach','ue_event_type',NULL,NULL,'1','supervisor',1706617173633,NULL,0,NULL),(95,3,'dictData.ue_event_type.state','cm-state','ue_event_type',NULL,NULL,'1','supervisor',1706617219238,NULL,0,NULL),(96,1,'dictData.ue_event_cm_state.connected','1','ue_event_cm_state','','','1','supervisor',1706620000000,'',0,''),(97,2,'dictData.ue_event_cm_state.idle','2','ue_event_cm_state','','','1','supervisor',1706620000000,'',0,''),(98,3,'dictData.ue_event_cm_state.inactive','3','ue_event_cm_state','','','1','supervisor',1706620000000,'',0,''),(99,4,'dictData.cdr_sip_code.404','404','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(100,6,'dictData.cdr_sip_code.487','487','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(101,12,'dictData.cdr_sip_code.503','503','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(102,13,'dictData.cdr_sip_code.504','504','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(103,15,'dictData.cdr_sip_code.603','603','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(104,16,'dictData.cdr_sip_code.606','606','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(105,17,'dictData.cdr_sip_code.202','202','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(106,3,'dictData.cdr_call_type.sms','sms','cdr_call_type','','','1','supervisor',1706620000000,'',0,''),(107,9,'dictData.cdr_sip_code.488','488','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(108,0,'dictData.cdr_sip_code.0','0','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(109,0,'dictData.ne_host_type.ssh','ssh','ne_host_type','','','1','supervisor',1706620000000,'',0,''),(110,1,'dictData.ne_host_type.telnet','telnet','ne_host_type','','','1','supervisor',1706620000000,'',0,''),(111,0,'dictData.ne_host_groupId.0','0','ne_host_groupId','','','1','supervisor',1706620000000,'',0,''),(112,1,'dictData.ne_host_groupId.1','1','ne_host_groupId','','','1','supervisor',1706620000000,'',0,''),(113,2,'dictData.ne_host_groupId.2','2','ne_host_groupId','','','1','supervisor',1706620000000,'',0,''),(114,0,'dictData.ne_host_authMode.0','0','ne_host_authMode','','','1','supervisor',1706620000000,'',0,''),(115,1,'dictData.ne_host_authMode.1','1','ne_host_authMode','','','1','supervisor',1706620000000,'',0,''),(116,0,'dictData.ne_host_cmd_groupId.0','0','ne_host_cmd_groupId','','','1','supervisor',1706620000000,'',0,''),(117,1,'dictData.ne_host_cmd_groupId.1','1','ne_host_cmd_groupId','','','1','supervisor',1706620000000,'',0,''),(118,0,'dictData.ne_info_status.0','0','ne_info_status','','processing','1','supervisor',1706620000000,'supervisor',1709642157849,''),(119,1,'dictData.ne_info_status.1','1','ne_info_status','','error','1','supervisor',1706620000000,'supervisor',1709642164831,''),(120,2,'dictData.ne_info_status.2','2','ne_info_status','','','1','supervisor',1706620000000,'',0,''),(121,3,'dictData.ne_info_status.3','3','ne_info_status','','warning','1','supervisor',1706620000000,'supervisor',1709642169871,''),(1000,1000,'i18n','中文','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1001,1001,'hello','你好','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1002,1002,'menu.system','系统','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1003,1003,'menu.monitor','监控','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1004,1004,'menu.tools','工具','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1005,1005,'menu.config','配置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1006,1006,'menu.ueUser','终端','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1007,1007,'menu.systemRemark','系统管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1008,1008,'menu.monitorRemark','系统监控目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1009,1009,'menu.toolsRemark','系统工具目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1010,1010,'menu.configRemark','OMC配置管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1011,1011,'menu.ueUserRemark','网元终端信息目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1012,1012,'menu.security.user','用户管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1013,1013,'menu.security.role','角色管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1014,1014,'menu.security.roleUser','分配角色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1015,1015,'menu.system.menu','菜单管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1016,1016,'menu.security.dept','部门管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1017,1017,'menu.security.post','岗位管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1018,1018,'menu.system.dictType','字典管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1019,1019,'menu.system.dictData','字典数据','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1020,1020,'menu.system.paramSet','参数设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1021,1021,'menu.system.systemLog','系统日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1022,1022,'menu.system.systemInfo','系统信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1023,1023,'menu.system.cacheInfo','缓存信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1024,1024,'menu.system.cache','缓存管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1025,1025,'menu.security.onlineUser','在线用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1026,1026,'menu.system.job','调度任务','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1027,1027,'menu.system.jobLog','调度日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1028,1028,'menu.tools.help','帮助文档','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1029,1029,'menu.log.operat','操作日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1030,1030,'menu.log.login','安全日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1031,1031,'menu.security.userRemark','用户管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1032,1032,'menu.security.roleRemark','角色管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1033,1033,'menu.security.roleUserRemark','分配角色内嵌隐藏菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1034,1034,'menu.system.menuRemark','菜单管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1035,1035,'menu.security.deptRemark','部门管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1036,1036,'menu.security.postRemark','岗位管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1037,1037,'menu.system.dictTypeRemark','字典管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1038,1038,'menu.system.dictDataRemark','字典数据内嵌隐藏菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1039,1039,'menu.system.paramSetRemark','参数设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1040,1040,'menu.system.systemLogRemark','系统日志目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1041,1041,'menu.system.systemInfoRemark','系统信息菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1042,1042,'menu.system.cacheInfoRemark','缓存信息菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1043,1043,'menu.system.cacheRemark','缓存列表菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1044,1044,'menu.security.onlineUserRemark','在线用户菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1045,1045,'menu.system.jobRemark','调度任务菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1046,1046,'menu.system.jobLogRemark','调度日志内嵌隐藏菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1047,1047,'menu.tools.helpRemark','帮助文档菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1048,1048,'menu.log.operatRemark','操作日志菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1049,1049,'menu.log.loginRemark','登录日志菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1050,1050,'menu.common.query','查询','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1051,1051,'menu.common.add','新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1052,1052,'menu.common.edit','修改','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1053,1053,'menu.common.delete','删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1054,1054,'menu.common.export','导出','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1055,1055,'menu.common.import','导入','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1056,1056,'menu.common.reset','重置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1057,1057,'menu.common.unlock','账户解锁','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1058,1058,'menu.forcedQuit.batch ','批量强退','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1059,1059,'menu.forcedQuit.single','单条强退','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1060,1060,'menu.ueUser.authUDM','UDM鉴权用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1061,1061,'menu.ueUser.subUDM','UDM签约用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1062,1062,'menu.ueUser.authUDMRemark','UDM鉴权用户菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1063,1063,'menu.ueUser.subUDMRemark','UDM签约用户菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1064,1064,'menu.config.neManage','网元管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1065,1065,'menu.config.configNE','参数配置Original','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1066,1066,'menu.config.neManageRemark','网元管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1067,1067,'menu.config.configNERemark','参数配置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1068,1068,'menu.config.backupManage','备份管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1069,1069,'menu.config.softwareManage','软件管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1070,1070,'menu.ueUser.onlineIMS','IMS在线用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1071,1071,'menu.ueUser.onlineUE','UE在线信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1072,1072,'menu.ueUser.base5G','基站信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1073,1073,'menu.trace','跟踪','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1074,1074,'menu.trace.task','跟踪任务','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1075,1075,'menu.trace.analysis','信令分析','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1076,1076,'menu.trace.pcap','信令抓包','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1077,1077,'menu.fault','监控','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1078,1078,'menu.config.backupManageRemark','备份管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1079,1079,'menu.config.softwareManageRemark','软件管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1080,1080,'menu.ueUser.onlineIMSRemark','IMS在线用户菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1081,1081,'menu.ueUser.onlineUERemark','UE在线信息菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1082,1082,'menu.ueUser.base5GRemark','5G基站信息菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1083,1083,'menu.traceRemark','跟踪管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1084,1084,'menu.trace.taskRemark','跟踪任务菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1085,1085,'menu.trace.analysisRemark','信令分析菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1086,1086,'menu.trace.pcapRemark','信令抓包菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1087,1087,'menu.faultRemark','故障管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1088,1088,'menu.fault.active','活动告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1089,1089,'menu.log','日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1090,1090,'menu.log.operatOld','操作日志(旧)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1091,1091,'menu.log.mml','MML日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1092,1092,'menu.log.alarm','告警日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1093,1093,'menu.log.securityOld','安全日志(旧)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1094,1094,'menu.log.forwarding','告警前转日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1095,1095,'menu.log.set','日志设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1096,1096,'menu.monitor.sessionUser','用户会话','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1097,1097,'menu.fault.history','历史告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1098,1098,'menu.fault.set','设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1099,1099,'menu.perf','性能','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1100,1100,'menu.fault.activemRemark','活动告警菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1101,1101,'menu.logRemark','日志管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1102,1102,'menu.log.operatOldRemark','操作日志旧layui菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1103,1103,'menu.log.mmlRemark','操作MML日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1104,1104,'menu.log.alarmRemark','告警日志菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1105,1105,'menu.log.securityOldRemark','安全日志旧layui菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1106,1106,'menu.log.forwardingRemark','告警前转日志菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1107,1107,'menu.log.setRemark','日志设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1108,1108,'menu.monitor.sessionUserRemark','用户会话旧layui菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1109,1109,'menu.fault.historyRemark','历史告警菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1110,1110,'menu.fault.setRemark','故障通用设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1111,1111,'menu.perfRemark','性能目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1112,1112,'menu.perf.task','任务管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1113,1113,'menu.perf.data','性能数据','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1114,1114,'menu.perf.report','性能报表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1115,1115,'menu.perf.threshold','性能门限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1116,1116,'menu.perf.kpi','黄金指标','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1117,1117,'menu.perf.customTarget','自定义指标','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1118,1118,'menu.perf.set','性能通用设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1119,1119,'menu.mml','MML','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1120,1120,'menu.mml.ne','网元操作','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1121,1121,'menu.mml.udm','UDM操作','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1122,1122,'menu.mml.set','MML设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1123,1123,'menu.mml.omc','OMC操作','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1124,1124,'menu.perf.taskRemark','任务管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1125,1125,'menu.perf.dataRemark','性能数据菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1126,1126,'menu.perf.reportRemark','性能报表菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1127,1127,'menu.perf.thresholdRemark','性能门限菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1128,1128,'menu.perf.kpiRemark','黄金指标菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1129,1129,'menu.perf.customTargetRemark','自定义指标菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1130,1130,'menu.perf.setRemark','性能通用设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1131,1131,'menu.mmlRemark','MML管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1132,1132,'menu.mml.neRemark','网元操作菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1133,1133,'menu.mml.udmRemark','网元UDM用户数据菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1134,1134,'menu.mml.setRemark','MML设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1135,1135,'menu.mml.omcRemark','OMC操作菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1136,1136,'menu.config.licenseManage','许可证管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1137,1137,'menu.security','安全','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1138,1138,'menu.system.systemSet','系统设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1139,1139,'menu.system.systemResource','系统资源','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1140,1140,'menu.config.configNEForm','参数配置Form','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1141,1141,'menu.config.configNETree','参数配置Tree','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1142,1142,'menu.config.configNETreeTable','参数配置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1143,1143,'menu.config.licenseManageRemark','许可证管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1144,1144,'menu.securityRemark','安全管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1145,1145,'menu.system.systemSetRemark','系统设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1146,1146,'menu.system.systemResourceRemark','系统资源 cpu io network菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1147,1147,'menu.config.configNEFormRemark','参数配置Form菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1148,1148,'menu.config.configNETreeRemark','参数配置Tree菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1149,1149,'menu.config.configNETreeTableRemark','参数配置TreeTable菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1150,1150,'menu.noData','没有可访问菜单数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1151,1151,'menu.errNameExists','操作菜单【{name}】失败,菜单名称已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1152,1152,'menu.errPathExists','操作菜单【{name}】失败,菜单路由地址已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1153,1153,'menu.errFramePath','操作菜单【{name}】失败,非内部地址请以http(s)://开头','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1154,1154,'menu.errParentStatus','上级菜单未启用!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1155,1155,'menu.errHasChildUse','操作菜单【{name}】失败,存在使用子菜单数:{num}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1156,1156,'menu.errHasRoleUse','操作菜单【{name}】失败,菜单已分配给角色数:{num}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1400,1400,'dictData.sex.un','未选择','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1401,1401,'dictData.sex.male','男','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1402,1402,'dictData.sex.female','女','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1403,1403,'dictData.show','显示','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1404,1404,'dictData.hide','隐藏','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1405,1405,'dictData.normal','正常','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1406,1406,'dictData.disable','停用','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1407,1407,'dictData.yes','是','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1408,1408,'dictData.no','否','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1409,1409,'dictData.success','成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1410,1410,'dictData.fail','失败','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1411,1411,'dictData.jobStatus.normal','正常','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1412,1412,'dictData.jobStatus.pause','暂停','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1413,1413,'dictData.jobGroup.Default','默认','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1414,1414,'dictData.jobGroup.System','系统','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1415,1415,'dictData.operType.other','其他','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1416,1416,'dictData.operType.add','新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1417,1417,'dictData.operType.edit','修改','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1418,1418,'dictData.operType.delete','删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1419,1419,'dictData.operType.auth','授权','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1420,1420,'dictData.operType.export','导出','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1421,1421,'dictData.operType.import','导入','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1422,1422,'dictData.operType.forced quit','强退','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1423,1423,'dictData.operType.clear','清空','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1424,1424,'dictData.trace.interface','接口跟踪','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1425,1425,'dictData.trace.device','设备跟踪','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1426,1426,'dictData.trace.user','用户跟踪','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1427,1427,'dictData.logType.download','下载','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1428,1428,'dictData.logType.activation','激活','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1429,1429,'dictData.logType.add','新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1430,1430,'dictData.logType.other','其他','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1431,1431,'dictData.logType.back','回退','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1432,1432,'dictData.logType.delete','删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1433,1433,'dictData.logType.distribute','分配','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1434,1434,'dictData.logType.export','导出','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1435,1435,'dictData.logType.query','查询','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1436,1436,'dictData.logType.setup','设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1437,1437,'dictData.logType.update','更新','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1438,1438,'dictData.logType.upload','上传','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1439,1439,'dictData.logType.view','查看','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1440,1440,'dictData.logType.login','登录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1441,1441,'dictData.logType.logout','登出','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1442,1442,'dictData.securityLogType.add','新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1443,1443,'dictData.securityLogType.update','更新','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1444,1444,'dictData.securityLogType.delete','删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1445,1445,'dictData.securityLogType.lock','锁定','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1446,1446,'dictData.securityLogType.unlock','解锁','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1447,1447,'dictData.securityLogType.reset','重置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1448,1448,'dictData.securityLogType.deactivate','停用','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1449,1449,'dictData.jobSaveLog.no','不记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1450,1450,'dictData.jobSaveLog.yes','记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1451,1451,'dictData.neVersionStatus.upload','已上传','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1452,1452,'dictData.neVersionStatus.inactive','未激活','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1453,1453,'dictData.neVersionStatus.active','已激活','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1454,1454,'dictData.alarmStatus.history','历史告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1455,1455,'dictData.alarmStatus.active','活动告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1456,1456,'dictData.export.code','数据代码','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1457,1457,'dictData.export.sort','数据排序','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1458,1458,'dictData.export.label','数据标签','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1459,1459,'dictData.export.value','数据键值','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1460,1460,'dictData.export.type','数据排序','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1461,1461,'dictData.export.status','数据状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1462,1462,'dictData.datascope.all','全部数据权限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1463,1463,'dictData.datascope.custom','自定数据权限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1464,1464,'dictData.datascope.dept','部门数据权限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1465,1465,'dictData.datascope.deptAndChid','部门及以下数据权限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1466,1466,'dictData.datascope.self','仅本人数据权限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1467,1467,'dictData.noData','没有可访问字典编码数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1468,1468,'dictData.errLabelExists','操作数据【{name}】失败,该字典类型下标签名已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1500,1500,'dictType.sys_user_sex','用户性别','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1501,1501,'dictType.sys_show_hide','菜单状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1502,1502,'dictType.sys_normal_disable','系统开关','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1503,1503,'dictType.sys_job_status','任务状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1504,1504,'dictType.sys_job_group','任务分组','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1505,1505,'dictType.sys_yes_no','系统是否','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1506,1506,'dictType.sys_oper_type','操作类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1507,1507,'dictType.sys_common_status','系统状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1508,1508,'dictType.trace_type','跟踪类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1509,1509,'dictType.operation_log_type','操作日志类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1510,1510,'dictType.alarm_status','告警日志类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1511,1511,'dictType.security_log_type','安全日志类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1512,1512,'dictType.ne_version_status','网元软件版本状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1513,1513,'dictType.i18n_en','多语言-英文','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1514,1514,'dictType.i18n_zh','多语言-中文','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1515,1515,'dictType.sys_user_sex_remark','用户性别列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1516,1516,'dictType.sys_show_hide_remark','菜单状态列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1517,1517,'dictType.sys_normal_disable_remark','系统开关列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1518,1518,'dictType.sys_job_status_remark','任务状态列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1519,1519,'dictType.sys_job_group_remark','任务分组列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1520,1520,'dictType.sys_yes_no_remark','系统是否列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1521,1521,'dictType.sys_oper_type_remark','操作类型列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1522,1522,'dictType.sys_common_status_remark','登录状态列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1523,1523,'dictType.trace_type_remark','跟踪类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1524,1524,'dictType.operation_log_type_remark','操作日志类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1525,1525,'dictType.alarm_status_remark','alarm_status','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1526,1526,'dictType.security_log_type_remark','安全日志类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1527,1527,'dictType.ne_version_status_remark','网元软件版本状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1528,1528,'dictType.i18n_en_remark','Internationalization - English','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1529,1529,'dictType.i18n_zh_remark','Internationalization - Chinese','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1530,1530,'dictType.export.id','字典编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1531,1531,'dictType.export.name','字典名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1532,1532,'dictType.export.type','字典类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1533,1533,'dictType.export.status','字典状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1534,1534,'dictType.sys_role_datascope','系统角色数据范围','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1535,1535,'dictType.sys_role_datascope_remark','系统角色数据范围映射','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1536,1536,'dictType.noData','没有可访问字典类型数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1537,1537,'dictType.errNameExists','操作字典【{name}】失败,字典名称已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1538,1538,'dictType.errTypeExists','操作字典【{name}】失败,字典类型已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1600,1600,'dept.root','系统维护部','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1601,1601,'dept.root.item1','运维一部','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1602,1602,'dept.noData','没有可访问部门数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1603,1603,'dept.errParentDelFlag','上级部门【{name}】已删除,不允许新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1604,1604,'dept.errParentStatus','上级部门【{name}】停用,不允许新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1605,1605,'dept.errNameExists','操作部门【{name}】失败,部门名称已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1606,1606,'dept.errParentID','操作部门【{name}】失败,上级部门不能是自己','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1607,1607,'dept.errHasChildUse','操作失败,该部门包含未停用的子部门数量:{num}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1608,1608,'dept.errHasUserUse','不允许删除,部门已分配给用户数:{num}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1630,1630,'config.sys.user.initPassword','用户管理-账号初始密码','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1631,1631,'config.sys.account.captchaEnabled','账号自助-验证码开关','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1632,1632,'config.sys.account.registerUser','账号自助-是否开启用户注册功能','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1633,1633,'config.sys.user.maxRetryCount','用户管理-密码最大错误次数','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1634,1634,'config.sys.user.lockTime','用户管理-密码锁定时间','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1635,1635,'config.monitor.sysResource.storeDays','监控-系统资源-数据保留时长','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1636,1636,'config.sys.logo.type','系统设置-LOGO类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1637,1637,'config.sys.logo.filePathIcon','系统设置-LOGO文件icon','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1638,1638,'config.sys.logo.filePathBrand','系统设置-LOGO文件brand','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1639,1639,'config.sys.loginBackground','系统设置-登录界面背景','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1640,1640,'config.sys.title','系统设置-系统名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1641,1641,'config.sys.copyright','系统设置-版权声明','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1642,1642,'config.sys.user.initPasswordRemark','导入用户初始化密码 123456','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1643,1643,'config.sys.account.captchaEnabledRemark','是否开启验证码功能(true开启,false关闭)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1644,1644,'config.sys.account.registerUserRemark','是否开启注册用户功能(true开启,false关闭)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1645,1645,'config.sys.user.maxRetryCountRemark','密码最大错误次数','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1646,1646,'config.sys.user.lockTimeRemark','密码锁定时间,单位分钟(默认10分钟)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1647,1647,'config.monitor.sysResource.storeDaysRemark','监控-系统资源-数据保留时长,单位天。根据当前日期,删除超过保留时长的日期数据信息。','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1648,1648,'config.sys.logo.typeRemark','全图:brand\r\n小图:icon','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1649,1649,'config.sys.logo.filePathIconRemark','文件支持网络地址图片和内部上传的文件路径','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1650,1650,'config.sys.logo.filePathBrandRemark','文件支持网络地址图片和内部上传的文件路径','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1651,1651,'config.sys.loginBackgroundRemark','文件支持网络地址图片和内部上传的文件路径,默认背景用#号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1652,1652,'config.sys.titleRemark','系统名称长度限制11位字符串','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1653,1653,'config.sys.copyrightRemark','底脚固定条,左侧放置版权声明','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1654,1654,'config..export.id','参数编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1655,1655,'config..export.name','参数名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1656,1656,'config..export.key','参数键名','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1657,1657,'config..export.value','参数键值','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1658,1658,'config..export.type','系统内置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1659,1659,'config..export.remark','参数说明','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1660,1660,'config.sys.titleValue','AGrandEMS','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1661,1661,'config.sys.copyrightValue','Copyright ©2023 千通科技','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1662,1662,'config.noData','没有可访问参数配置数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1663,1663,'config.errKey','无效 key','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1664,1664,'config.errValueEq','变更状态与旧值相等!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1665,1665,'config.errKeyExists','操作参数配置【{name}】失败,参数键名已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1666,1666,'config.errDelete','删除参数配置信息失败!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1667,1667,'config.errType','操作含有内置参数,禁止删除!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1700,1700,'job.monitor_sys_resource','监控-系统资源','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1701,1701,'job.monitor_sys_resource_remark','系统资源CPU/IO/Netword收集\r\ninterval单位分钟,平均分钟资源情况\r\n注:请根据cron表达式的时间单位分钟,传入参数interva值','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1702,1702,'job.delExpiredNeBackup','删除过期网元备份文件','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1703,1703,'job.delExpiredNeBackupRemark','删除过期网元etc备份文件, 传入参数表示保留{duration}天的备份文件, 默认60天','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1704,1704,'job.deleteExpiredAlarmRecord','删除过期历史告警记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1705,1705,'job.deleteExpiredAlarmRecordRemark','删除过期历史告警记录,传入参数表示保留{duration}天的历史告警记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1706,1706,'job.deleteExpiredKpiRecord','删除过期黄金指标记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1707,1707,'job.deleteExpiredKpiRecordRemark','黄金指标记录保留{duration}天','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1708,1708,'job.backupEtcFromNE','网元配置自动备份任务','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1709,1709,'job.backupEtcFromNERemark','自动备份网元etc目录下的配置文件','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1710,1710,'job.export.jobID','任务编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1711,1711,'job.export.jobName','任务名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1712,1712,'job.export.jobGroupName','任务组名','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1713,1713,'job.export.invokeTarget','调用目标','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1714,1714,'job.export.targetParams','传入参数','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1715,1715,'job.export.cronExpression','cron表达式','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1716,1716,'job.export.status','状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1717,1717,'job.export.remark','备注说明','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1718,1718,'job.export.jobLogID','任务日志编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1719,1719,'job.export.jobLogStatus','任务日志状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1720,1720,'job.export.jobLogTime','任务日志时间','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1721,1721,'job.noData','没有可访问调度任务数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1722,1722,'job.errTargetParams','操作调度任务【{name}】失败,任务传入参数json字符串不正确','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1723,1723,'job.errCronExpression','操作调度任务【{name}】失败,Cron表达式不正确','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1724,1724,'job.errJobExists','调度任务新增【{name}】失败,同任务组内有相同任务名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1725,1725,'job.statusEq','变更状态与旧值相等!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1750,1750,'role.admin','超级管理员','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1751,1751,'role.adminAssign','管理人员','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1752,1752,'role.operator','运维人员','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1753,1753,'role.monitor','监控人员','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1754,1754,'role.vistor','普通用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1755,1755,'role.adminRemark','超级管理员,无法修改删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1756,1756,'role.adminAssignRemark','管理人员 可以对设备进行任何操作','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1757,1757,'role.operatorRemark','运维人员 可以从设备读取数据,并对设备进行配置,但是不能对设备进行软件升级操作。','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1758,1758,'role.monitorRemark','监控人员 只能从设备读取数据,而不能对设备进行任何设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1759,1759,'role.vistorRemark','普通用户 只可看系统相关信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1760,1760,'role.export.id','角色编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1761,1761,'role.export.name','角色名称 ','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1762,1762,'role.export.key','角色键值','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1763,1763,'role.export.sort','角色顺序','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1764,1764,'role.export.dataScope','角色数据范围','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1765,1765,'role.export.status','角色状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1766,1766,'role.noData','没有可访问角色数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1767,1767,'role.statusEq','变更状态与旧值相等!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1768,1768,'role.errNameExists','操作角色【{name}】失败,角色名称已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1769,1769,'role.errKeyExists','操作角色【{name}】失败,角色键值已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1800,1800,'post.admin','系统','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1801,1801,'post.operator','管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1802,1802,'post.monitor','运维','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1803,1803,'post.visitor','监控','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1804,1804,'post.export.id','岗位编号 ','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1805,1805,'post.export.code','岗位编码','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1806,1806,'post.export.name','岗位名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1807,1807,'post.export.sort','岗位排序','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1808,1808,'post.export.status','岗位状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1809,1809,'post.noData','没有可访问岗位数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1810,1810,'post.errNameExists','操作岗位【{name}】失败,岗位名称已存在已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1811,1811,'post.errCodeExists','操作角色【{name}】失败,角色键值已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1830,1830,'user.export.id','用户编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1831,1831,'user.export.name','登录账号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1832,1832,'user.export.nick','用户昵称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1833,1833,'user.export.email','电子邮箱','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1834,1834,'user.export.phone','手机号码','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1835,1835,'user.export.sex','用户性别','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1836,1836,'user.export.status','用户状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1837,1837,'user.export.deptID','部门编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1838,1838,'user.export.deptName','部门名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1839,1839,'user.export.deptLeader','部门负责人','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1840,1840,'user.export.loginIP','用户登录IP','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1841,1841,'user.export.loginDate','用户登录时间','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1842,1842,'user.noData','没有可访问用户数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1843,1843,'user.statusEq','变更状态与旧值相等!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1844,1844,'user.errPasswdOld','修改密码失败,旧密码错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1845,1845,'user.errPasswdEqOld','新密码不能与旧密码相同','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1846,1846,'user.errPasswd','登录密码至少包含大小写字母、数字、特殊符号,且不少于6位','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1847,1847,'user.errEmailFormat','操作用户【{name}】失败,邮箱格式错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1848,1848,'user.errEmailExists','操作用户【{name}】失败,邮箱已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1849,1849,'user.errPhoneFormat','操作用户【{name}】失败,手机号码格式错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1850,1850,'user.errPhoneExists','操作用户【{name}】失败,手机号码已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1851,1851,'user.errNameExists','操作用户【{name}】失败,登录账号已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1852,1852,'user.import.mustItem','表格中必填列表项,{text}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1853,1853,'user.import.phoneExist','用户编号:{id} 手机号码 {phone} 已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1854,1854,'user.import.phoneFormat','用户编号:{id} 手机号码 {phone} 格式错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1855,1855,'user.import.emailExist','用户编号:{id} 用户邮箱:{email} 已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1856,1856,'user.import.emailFormat','用户编号:{id} 用户邮箱:{email} 格式错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1857,1857,'user.import.success','用户编号:{id} 登录名称:{name} 导入成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1858,1858,'user.import.fail','用户编号:{id} 登录名称:{name} 导入失败','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1859,1859,'user.import.successUpdate','用户编号:{id} 登录名称:{name} 更新成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1860,1860,'user.import.failUpdate','用户编号:{id} 登录名称:{name} 更新失败','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1861,1861,'user.import.failTip','很抱歉,导入失败!共 {num} 条数据格式不正确,错误如下:','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1862,1862,'user.import.successTip','恭喜您,数据已全部导入成功!共 {num} 条,数据如下:','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1900,1900,'app.common.err403','无权访问 {method} {requestURI}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1901,1901,'app.common.err401','无效身份授权','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1902,1902,'app.common.err400','参数错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1903,1903,'app.common.exportEmpty','导出数据记录为空','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1904,1904,'app.common.errOperateAdmin','不允许操作内置用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1905,1905,'app.common.errOperateRole','不允许操作内置角色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1906,1906,'app.common.deleteSuccess','删除成功:{num}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1907,1907,'app.common.loginSuccess','登录成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1908,1908,'app.common.logoutSuccess','注销成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1909,1909,'app.common.errUnlock','该用户未被锁定','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1910,1910,'app.common.noLoginUser','登录用户信息无效','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1911,1911,'app.common.rateLimitTip','访问过于频繁,请稍候再试','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1912,1912,'log.operate.export.id','操作编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1913,1913,'log.operate.export.title','模块名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1914,1914,'log.operate.export.businessType','业务类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1915,1915,'log.operate.export.method','操作方法','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1916,1916,'log.operate.export.requestMethod','请求方式 ','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1917,1917,'log.operate.export.operatorType','操作类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1918,1918,'log.operate.export.operName','操作人员','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1919,1919,'log.operate.export.deptName','操作人员部门名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1920,1920,'log.operate.export.url','请求链接地址','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1921,1921,'log.operate.export.ip','请求主机 ','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1922,1922,'log.operate.export.location','请求地址','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1923,1923,'log.operate.export.param','请求参数','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1924,1924,'log.operate.export.msg','操作信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1925,1925,'log.operate.export.status','操作状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1926,1926,'log.operate.export.costTime','消耗时间(毫秒)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1927,1927,'log.operate.export.operTime','操作时间','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1928,1928,'log.login.export.id','记录编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1929,1929,'log.login.export.userName','登录账号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1930,1930,'log.login.export.status','登录状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1931,1931,'log.login.export.ip','登录地址','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1932,1932,'log.login.export.location','登录地点','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1933,1933,'log.login.export.browser','浏览器','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1934,1934,'log.login.export.os','操作系统','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1935,1935,'log.login.export.msg','登录信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1936,1936,'log.login.export.time','登录时间','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1937,1937,'trace.tcpdump.noData','找不到 {type} {id} 对应网元信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1938,1938,'register.errUsername','账号不能以数字开头,可包含大写小写字母,数字,且不少于5位','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1939,1939,'register.errPasswd','登录密码至少包含大小写字母、数字、特殊符号,且不少于6位','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1940,1940,'register.errPasswdNotEq','用户确认输入密码不一致','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1941,1941,'register.success','注册成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1942,1942,'register.successMsg','{name} 注册成功 {id}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1943,1943,'log.operate.title.sysJobLog','调度任务日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1944,1944,'log.operate.title.sysJob','调度任务','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1945,1945,'log.operate.title.tcpdump','信令抓包','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1946,1946,'log.operate.title.sysConfig','参数配置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1947,1947,'log.operate.title.sysDept','部门','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1948,1948,'log.operate.title.sysDictData','字典数据','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1949,1949,'log.operate.title.sysDictType','字典类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1950,1950,'log.operate.title.sysMenu','菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1951,1951,'log.operate.title.sysPost','岗位','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1952,1952,'log.operate.title.sysProfile','个人信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1953,1953,'log.operate.title.sysProfileAvatar','个人头像','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1954,1954,'log.operate.title.sysRole','角色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1955,1955,'log.operate.title.sysUser','用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1956,1956,'log.operate.title.sysLogOper','操作日志记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1957,1957,'log.operate.title.sysLogLogin','登录日志记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1958,1958,'login.errNameOrPasswd','用户不存在或密码错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1959,1959,'login.errDelFlag','对不起,您的账号已被删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1960,1960,'login.errStatus','对不起,您的帐户已被禁用','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1961,1961,'login.errRetryPasswd','密码输入错误多次,帐户已被锁定','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1962,1962,'captcha.err','验证码错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1963,1963,'captcha.errValid','验证码已失效','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1964,1964,'app.common.noUaOsBrowser','未知 未知','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1965,1965,'app.common.noIPregion','内网','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1966,1966,'app.common.unknown','未知','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1967,1967,'app.common.noNEInfo','未找到匹配网元信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1968,1968,'ne.udm.errImportUserAuthFileFormat','请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, ki, algo, amf, opc','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1969,1969,'ne.udm.errExportType','导出文件类型支持CSV和txt','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1970,1970,'ne.udm.errImportUserSubFileFormat','请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1971,1971,'log.operate.title.udmAuth','UDM鉴权用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1972,1972,'log.operate.title.udmSub','UDM签约用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1973,1973,'dictType.active_alarm_type','活动告警类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1974,1974,'dictType.active_alarm_type_remark','活动告警类型列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1975,1975,'dictData.active_alarm_type.communication','通信告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1976,1976,'dictData.active_alarm_type.equipment','设备告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1977,1977,'dictData.active_alarm_type.processing','处理错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1978,1978,'dictData.active_alarm_type.environmental','环境告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1979,1979,'dictData.active_alarm_type.qualityOfService','服务质量','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1980,1980,'dictType.active_clear_type','告警清除类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1981,1981,'dictType.active_clear_type_remark','告警清除类型列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1982,1982,'dictData.active_clear_type.notCleared','告警未清除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1983,1983,'dictData.active_clear_type.hand','手动清除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1984,1984,'dictData.active_clear_type.auto','自动清除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1985,1985,'dictType.active_ack_state','告警确认类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1986,1986,'dictType.active_ack_state_remark','告警确认类型列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1987,1987,'dictData.active_ack_state.unconfirmed','未确认','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1988,1988,'dictData.active_ack_state.confirmed','已确认','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1989,1989,'dictType.active_alarm_severity','严重程度','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1990,1990,'dictType.active_alarm_severity_remark','严重程度列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1991,1991,'dictData.active_alarm_severity.critical','严重告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1992,1992,'dictData.active_alarm_severity.major','主要告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1993,1993,'dictData.active_alarm_severity.minor','次要告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1994,1994,'dictData.active_alarm_severity.warning','警告告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1995,1995,'dictData.active_alarm_severity.event','事件告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1996,1996,'config.sys.officialUrl','系统设置-官网链接','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1997,1997,'config.sys.helpDoc','系统设置-系统使用文档','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1998,1998,'config.sys.officialUrlRemark','默认无地址用#号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1999,1999,'config.sys.helpDocRemark','静态文件目录地址,使用{language}区分语言文件','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2000,2000,'log.operate.title.neAction','网元处理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2001,2001,'log.operate.title.helpDoc','系统使用文档','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2002,2002,'menu.ueUser.n3iwf','N3IWF在线用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2003,2003,'menu.ueUser.pcf','用户策略控制信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2004,2004,'menu.system.user.editRole','修改用户角色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2005,2005,'config.sys.i18nOpen','国际化切换','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2006,2006,'config.sys.i18nDefault','国际化默认语言','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2007,2007,'user.export.role','用户角色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2008,2008,'menu.system.setting.i18n','国际化切换','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2009,2009,'menu.system.setting.i18nRemark','国际化多语言的切换选择','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2010,2010,'dictType.index_status','首页状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2011,2011,'dictType.index_status_remark','首页的网元状态颜色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2012,2012,'dictType.index_status.normal','正常','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2013,2013,'dictType.index_status.abnormal','异常','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2014,2014,'menu.log.neFile','网元日志文件','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2015,2015,'job.deleteExpiredNeStateRecord','删除过期网元状态记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2016,2016,'job.deleteExpiredNeStateRecordRemark','定期删除过期的网元状态记录, 默认保留{duration}天','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2017,2017,'job.getStateFromNE','获取网元状态信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2018,2018,'job.getStateFromNERemark','获取所有网元状态信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2019,2019,'job.genNeStateAlarm','网元健康状态巡检','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2020,2020,'job.genNeStateAlarmRemark','网元健康状态巡检,异常时产生告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2021,2021,'menu.neUser.nssf','NSSF在线订阅数','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2022,2022,'menu.neUser.nssfAmf','NSSF可用的注册AMF','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2023,2023,'menu.monitor.topology','拓扑信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2024,2024,'menu.monitor.topologyBuild','拓扑图组编辑','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2025,2025,'log.operate.title.chartGraph','拓扑图组','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2026,2026,'menu.monitor.topologyArchitecture','网元拓扑组网','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2027,2027,'menu.alarm','告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2028,2028,'menu.topology','拓扑','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2029,2029,'config.sys.lockTime','系统设置-锁屏超时时长','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2030,2030,'config.sys.lockTimeRemark','无操作时锁屏超时时长,单位(秒)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2031,2031,'sys.account.captchaType','账号自助-验证码类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2032,2032,'sys.account.captchaTypeRemark','使用验证码类型(math数值计算,char字符验证)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2033,2033,'menu.dashboard','仪表盘','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2034,2034,'menu.dashboard.overview','总览','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2035,2035,'menu.dashboard.cdr','CDR','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2036,2036,'dictType.cdr_sip_code','CDR SIP响应代码类别类型','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2037,2037,'dictType.cdr_call_type','CDR 呼叫类型','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2038,2038,'dictType.ue_auth_code','UE 事件认证代码类型','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2039,2039,'dictType.ue_event_type','UE 事件类型','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2040,2040,'dictData.cdr_sip_code.200','正常挂机','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2041,2041,'dictData.cdr_sip_code.403','被禁止的','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2042,2042,'dictData.cdr_sip_code.408','请求超时','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2043,2043,'dictData.cdr_sip_code.500','服务器内部错误','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2044,2044,'dictData.cdr_call_type.audio','语音','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2045,2045,'dictData.cdr_call_type.video','视频','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2046,2046,'dictData.ue_auth_code.200','成功','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2047,2047,'dictData.ue_auth_code.001','网络失败','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2048,2048,'dictData.ue_auth_code.002','空口接口失败','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2049,2049,'dictData.ue_auth_code.003','MAC失败','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2050,2050,'dictData.ue_auth_code.004','同步失败','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2051,2051,'dictData.ue_auth_code.005','不接受非5G认证','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2052,2052,'dictData.ue_auth_code.006','响应失败','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2053,2053,'dictData.ue_auth_code.007','未知','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2054,2054,'dictData.ue_event_type.auth','认证','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2055,2055,'dictData.ue_event_type.detach','注销','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2056,2056,'dictData.ue_event_type.state','CM状态','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2057,2057,'dictType.ue_event_cm_state','UE 事件CM状态','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2058,2058,'dictData.ue_event_cm_state.connected','连接','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2059,2059,'dictData.ue_event_cm_state.idle','空闲','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2060,2060,'dictData.ue_event_cm_state.inactive','不活动','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2061,2061,'dictData.cdr_sip_code.404','未找到','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2062,2062,'dictData.cdr_sip_code.487','请求终止','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2063,2063,'dictData.cdr_sip_code.503','服务不可用','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2064,2064,'dictData.cdr_sip_code.504','服务器超时','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2065,2065,'dictData.cdr_sip_code.603','拒绝','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2066,2066,'dictData.cdr_sip_code.606','不可接受','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2067,2067,'cache.name.user','登录用户','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2068,2068,'cache.name.sys_config','参数管理','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2069,2069,'cache.name.sys_dict','字典管理','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2070,2070,'cache.name.captcha_codes','验证码','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2071,2071,'cache.name.repeat_submit','防重提交','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2072,2072,'cache.name.rate_limit','限流','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2073,2073,'cache.name.pwd_err_cnt','登录账户密码错误次数','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2074,2074,'cache.name.ne_info','网元信息管理','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2075,2075,'cache.name.ne_data','网元数据管理','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2076,2076,'dictData.cdr_call_type.sms','短信','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2077,2077,'dictData.cdr_sip_code.202','已接受','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2078,2078,'dictData.cdr_sip_code.488','这里不能接受','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2079,2079,'dictData.cdr_sip_code.0','其他','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2080,2080,'log.operate.title.ws','WS会话','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2081,2081,'log.operate.title.neHost','网元主机','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2082,2082,'neHost.noData','没有可访问主机信息数据!','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2083,2083,'neHost.errKeyExists','主机信息操作【{name}】失败,同组内名称已存在','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2084,2084,'neHost.errByHostInfo','连接主机失败,请检查连接参数后重试','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2085,2085,'dictType.ne_host_type','网元主机连接类型','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2086,2086,'dictType.ne_host_groupId','网元主机分组','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2087,2087,'dictType.ne_host_authMode','网元主机认证模式','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2088,2088,'dictData.ne_host_type.ssh','SSH','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2089,2089,'dictData.ne_host_type.telnet','Telnet','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2090,2090,'dictData.ne_host_groupId.0','其他','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2091,2091,'dictData.ne_host_groupId.1','网元','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2092,2092,'dictData.ne_host_groupId.2','系统','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2093,2093,'dictData.ne_host_authMode.0','密码认证','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2094,2094,'dictData.ne_host_authMode.1','私钥认证','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2095,2095,'menu.tools.terminal','网元主机终端','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2096,2096,'menu.config.neHost','网元主机','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2097,2097,'menu.config.neHostCommand','网元主机命令','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2098,2098,'log.operate.title.neHostCmd','网元主机命令','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2099,2099,'neHostCmd.noData','没有可访问主机命令数据!','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2100,2100,'neHostCmd.errKeyExists','主机命令操作【{name}】失败,同组内名称已存在','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2101,2101,'dictType.ne_host_cmd_groupId','网元主机命令分组','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2102,2102,'dictData.ne_host_cmd_groupId.0','默认','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2103,2103,'dictData.ne_host_cmd_groupId.1','快速命令','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2104,2104,'menu.config.neInfo','网元信息','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2105,2105,'log.operate.title.neInfo','网元信息','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2106,2106,'neInfo.noData','没有可访问网元信息数据!','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2107,2107,'neInfo.errKeyExists','网元信息操作【{key}】失败,同类型下标识已存在','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2108,2108,'log.operate.title.imsCDR','IMS-CDR会话','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2109,2109,'menu.dashboard.amfUE','UE','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2110,2110,'log.operate.title.amfUE','AMF-UE事件','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2111,2111,'dictData.ne_info_status.0','在线','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2112,2112,'dictData.ne_info_status.1','离线','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2113,2113,'dictData.ne_info_status.2','-','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2114,2114,'dictData.ne_info_status.3','待下发配置','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2115,2115,'dictType.ne_info_status','网元信息状态','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(3000,3000,'i18n','English','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3001,3001,'hello','Hello','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3002,3002,'menu.system','System','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3003,3003,'menu.monitor','Monitor','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3004,3004,'menu.tools','Tools','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3005,3005,'menu.config','Configuration','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3006,3006,'menu.ueUser','UE','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3007,3007,'menu.systemRemark','System Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3008,3008,'menu.monitorRemark','System Monitor Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3009,3009,'menu.toolsRemark','System Tools Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3010,3010,'menu.configRemark','OMC Configuration Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3011,3011,'menu.ueUserRemark','Network Element Terminal Information Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3012,3012,'menu.security.user','User Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3013,3013,'menu.security.role','Role Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3014,3014,'menu.security.roleUser','Assigning Roles','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3015,3015,'menu.system.menu','Menu Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3016,3016,'menu.security.dept','Department Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3017,3017,'menu.security.post','Position Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3018,3018,'menu.system.dictType','Dictionary Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3019,3019,'menu.system.dictData','Dictionary Data','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3020,3020,'menu.system.paramSet','Parameter Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3021,3021,'menu.system.systemLog','System Log','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3022,3022,'menu.system.systemInfo','System Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3023,3023,'menu.system.cacheInfo','Cache Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3024,3024,'menu.system.cache','Cache Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3025,3025,'menu.security.onlineUser','Online Users','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3026,3026,'menu.system.job','Scheduling Tasks','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3027,3027,'menu.system.jobLog','Scheduling Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3028,3028,'menu.tools.help','Help Documentation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3029,3029,'menu.log.operat','Operation logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3030,3030,'menu.log.login','Security logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3031,3031,'menu.security.userRemark','User Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3032,3032,'menu.security.roleRemark','Role Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3033,3033,'menu.security.roleUserRemark','Assign Roles Embedded Hidden Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3034,3034,'menu.system.menuRemark','Menu Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3035,3035,'menu.security.deptRemark','Department management menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3036,3036,'menu.security.postRemark','Job Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3037,3037,'menu.system.dictTypeRemark','Dictionary management menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3038,3038,'menu.system.dictDataRemark','Dictionary data embedded hidden menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3039,3039,'menu.system.paramSetRemark','Parameter setting menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3040,3040,'menu.system.systemLogRemark','System Log Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3041,3041,'menu.system.systemInfoRemark','System information menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3042,3042,'menu.system.cacheInfoRemark','Cache Information Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3043,3043,'menu.system.cacheRemark','Cache List Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3044,3044,'menu.security.onlineUserRemark','Online User Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3045,3045,'menu.system.jobRemark','Scheduling Tasks menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3046,3046,'menu.system.jobLogRemark','Scheduling Log Embedded Hidden Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3047,3047,'menu.tools.helpRemark','Help file menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3048,3048,'menu.log.operatRemark','Operation log menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3049,3049,'menu.log.loginRemark','Login log menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3050,3050,'menu.common.query','Inquiry','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3051,3051,'menu.common.add','Add','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3052,3052,'menu.common.edit','Modify','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3053,3053,'menu.common.delete','Delete','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3054,3054,'menu.common.export','Export','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3055,3055,'menu.common.import','Import','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3056,3056,'menu.common.reset','Reset','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3057,3057,'menu.common.unlock','Account Unlock','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3058,3058,'menu.forcedQuit.batch ','Batch Undo','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3059,3059,'menu.forcedQuit.single','Individual Forced Retirement','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3060,3060,'menu.ueUser.authUDM','UDM Authentication','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3061,3061,'menu.ueUser.subUDM','UDM Subscribers','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3062,3062,'menu.ueUser.authUDMRemark','UDM Authentication Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3063,3063,'menu.ueUser.subUDMRemark','UDM Subscriber Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3064,3064,'menu.config.neManage','NE Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3065,3065,'menu.config.configNE','Parameter Configuration Original','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3066,3066,'menu.config.neManageRemark','Network Element Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3067,3067,'menu.config.configNERemark','Parameter Configuration Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3068,3068,'menu.config.backupManage','Backup Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3069,3069,'menu.config.softwareManage','Software Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3070,3070,'menu.ueUser.onlineIMS','IMS Online Users','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3071,3071,'menu.ueUser.onlineUE','UE Online Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3072,3072,'menu.ueUser.base5G','Radio Information','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3073,3073,'menu.trace','Trace','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3074,3074,'menu.trace.task','Trace Tasks','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3075,3075,'menu.trace.analysis','Signaling Analysis','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3076,3076,'menu.trace.pcap','Signaling Capture','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3077,3077,'menu.fault','Monitor','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3078,3078,'menu.config.backupManageRemark','Backup Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3079,3079,'menu.config.softwareManageRemark','Software Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3080,3080,'menu.ueUser.onlineIMSRemark','IMS Online User Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3081,3081,'menu.ueUser.onlineUERemark','UE Online Information Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3082,3082,'menu.ueUser.base5GRemark','5G Base Station Information Menu','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3083,3083,'menu.traceRemark','Tracking Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3084,3084,'menu.trace.taskRemark','Tracking Task Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3085,3085,'menu.trace.analysisRemark','Signaling Analysis Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3086,3086,'menu.trace.pcapRemark','Signaling Capture Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3087,3087,'menu.faultRemark','Fault Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3088,3088,'menu.fault.active','Active Alarms','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3089,3089,'menu.log','Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3090,3090,'menu.log.operatOld','Operation Logs (old)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3091,3091,'menu.log.mml','MML Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3092,3092,'menu.log.alarm','Alarm Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3093,3093,'menu.log.securityOld','Security Logs (old)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3094,3094,'menu.log.forwarding','Alarm Forwarding Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3095,3095,'menu.log.set','Log Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3096,3096,'menu.monitor.sessionUser','User Sessions','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3097,3097,'menu.fault.history','Historical Alarms','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3098,3098,'menu.fault.set','Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3099,3099,'menu.perf','Performance','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3100,3100,'menu.fault.activemRemark','Active Alarm Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3101,3101,'menu.logRemark','Log Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3102,3102,'menu.log.operatOldRemark','Operation log old layui menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3103,3103,'menu.log.mmlRemark','Operation MML Log','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3104,3104,'menu.log.alarmRemark','Alarm Log Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3105,3105,'menu.log.securityOldRemark','Security Log Old Layui Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3106,3106,'menu.log.forwardingRemark','Alarm forward log menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3107,3107,'menu.log.setRemark','Log Settings menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3108,3108,'menu.monitor.sessionUserRemark','User Session Old Layui Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3109,3109,'menu.fault.historyRemark','Alarm history menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3110,3110,'menu.fault.setRemark','Fault General Setup Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3111,3111,'menu.perfRemark','Performance Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3112,3112,'menu.perf.task','Performance Tasks','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3113,3113,'menu.perf.data','Performance Data','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3114,3114,'menu.perf.report','Performance Reports','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3115,3115,'menu.perf.threshold','Performance Thresholds','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3116,3116,'menu.perf.kpi','Key Performance Indicators','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3117,3117,'menu.perf.customTarget','Custom Metrics','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3118,3118,'menu.perf.set','Performance General Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3119,3119,'menu.mml','MML','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3120,3120,'menu.mml.ne','NE Operation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3121,3121,'menu.mml.udm','UDM Operation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3122,3122,'menu.mml.set','MML Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3123,3123,'menu.mml.omc','OMC Operation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3124,3124,'menu.perf.taskRemark','Task Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3125,3125,'menu.perf.dataRemark','Performance Data Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3126,3126,'menu.perf.reportRemark','Performance Report Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3127,3127,'menu.perf.thresholdRemark','Performance Threshold Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3128,3128,'menu.perf.kpiRemark','Key Performance Indicator Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3129,3129,'menu.perf.customTargetRemark','Custom Metrics Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3130,3130,'menu.perf.setRemark','Performance General Settings Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3131,3131,'menu.mmlRemark','MML Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3132,3132,'menu.mml.neRemark','Network Element Operations Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3133,3133,'menu.mml.udmRemark','Network Element UDM User Data Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3134,3134,'menu.mml.setRemark','MML Setup Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3135,3135,'menu.mml.omcRemark','OMC Operation Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3136,3136,'menu.config.licenseManage','License Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3137,3137,'menu.security','Security','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3138,3138,'menu.system.systemSet','System Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3139,3139,'menu.system.systemResource','System Resources','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3140,3140,'menu.config.configNEForm','Parameter Configuration Form','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3141,3141,'menu.config.configNETree','Parameter Configuration Tree','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3142,3142,'menu.config.configNETreeTable','Parameter Configuration','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3143,3143,'menu.config.licenseManageRemark','License Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3144,3144,'menu.securityRemark','Security Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3145,3145,'menu.system.systemSetRemark','System Settings Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3146,3146,'menu.system.systemResourceRemark','System Resources cpu io network menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3147,3147,'menu.config.configNEFormRemark','Parameter Configuration Form Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3148,3148,'menu.config.configNETreeRemark','Parameter Configuration Tree Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3149,3149,'menu.config.configNETreeTableRemark','Configuring the TreeTable menu with parameters','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3150,3150,'menu.noData','There is no accessible menu data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3151,3151,'menu.errNameExists','Failed to operate menu [{name}], menu name already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3152,3152,'menu.errPathExists','Failed to operate menu [{name}], menu routing address already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3153,3153,'menu.errFramePath','Failed to manipulate menu [{name}], non-internal address should start with http(s)://','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3154,3154,'menu.errParentStatus','The parent menu is not enabled!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3155,3155,'menu.errHasChildUse','Operation menu [{name}] failed, number of submenus in use exists: {num}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3156,3156,'menu.errHasRoleUse','Operation menu [{name}] failed, number of roles the menu has been assigned to: {num}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3400,3400,'dictData.sex.un','Not selected','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3401,3401,'dictData.sex.male','Male','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3402,3402,'dictData.sex.female','Female','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3403,3403,'dictData.show','Show','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3404,3404,'dictData.hide','Hide','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3405,3405,'dictData.normal','Active','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3406,3406,'dictData.disable','Inactive','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3407,3407,'dictData.yes','Yes','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3408,3408,'dictData.no','No','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3409,3409,'dictData.success','Successful','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3410,3410,'dictData.fail','Failed','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3411,3411,'dictData.jobStatus.normal','Active','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3412,3412,'dictData.jobStatus.pause','Inactive','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3413,3413,'dictData.jobGroup.Default','Default','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3414,3414,'dictData.jobGroup.System','System','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3415,3415,'dictData.operType.other','Other','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3416,3416,'dictData.operType.add','New','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3417,3417,'dictData.operType.edit','Modify','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3418,3418,'dictData.operType.delete','Delete','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3419,3419,'dictData.operType.auth','Authorization','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3420,3420,'dictData.operType.export','Export','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3421,3421,'dictData.operType.import','Import','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3422,3422,'dictData.operType.forced quit','Forced Retirement','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3423,3423,'dictData.operType.clear','Clear','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3424,3424,'dictData.trace.interface','Interface Tracing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3425,3425,'dictData.trace.device','Device Tracing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3426,3426,'dictData.trace.user','User Tracing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3427,3427,'dictData.logType.download','Download','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3428,3428,'dictData.logType.activation','Activation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3429,3429,'dictData.logType.add','New','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3430,3430,'dictData.logType.other','Other','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3431,3431,'dictData.logType.back','Rollback','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3432,3432,'dictData.logType.delete','Delete','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3433,3433,'dictData.logType.distribute','Assign','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3434,3434,'dictData.logType.export','Export','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3435,3435,'dictData.logType.query','Query','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3436,3436,'dictData.logType.setup','Setup','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3437,3437,'dictData.logType.update','Update','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3438,3438,'dictData.logType.upload','Upload','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3439,3439,'dictData.logType.view','View','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3440,3440,'dictData.logType.login','Login','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3441,3441,'dictData.logType.logout','Logout','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3442,3442,'dictData.securityLogType.add','New','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3443,3443,'dictData.securityLogType.update','Update','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3444,3444,'dictData.securityLogType.delete','Delete','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3445,3445,'dictData.securityLogType.lock','Locked','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3446,3446,'dictData.securityLogType.unlock','Unlock','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3447,3447,'dictData.securityLogType.reset','Reset','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3448,3448,'dictData.securityLogType.deactivate','Deactivate','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3449,3449,'dictData.jobSaveLog.no','No Record','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3450,3450,'dictData.jobSaveLog.yes','Recorded','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3451,3451,'dictData.neVersionStatus.upload','Uploaded','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3452,3452,'dictData.neVersionStatus.inactive','Inactivated','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3453,3453,'dictData.neVersionStatus.active','Activated','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3454,3454,'dictData.alarmStatus.history','Historical Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3455,3455,'dictData.alarmStatus.active','Active Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3456,3456,'dictData.export.code','Data Codes','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3457,3457,'dictData.export.sort','Data Sorting','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3458,3458,'dictData.export.label','Data Labeling','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3459,3459,'dictData.export.value','Data Key','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3460,3460,'dictData.export.type','Data Sorting','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3461,3461,'dictData.export.status','Data Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3462,3462,'dictData.datascope.all','All data permissions','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3463,3463,'dictData.datascope.custom','Customized Data Rights','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3464,3464,'dictData.datascope.dept','Departmental Data Permissions','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3465,3465,'dictData.datascope.deptAndChid','Department and below','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3466,3466,'dictData.datascope.self','Personal data access only','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3467,3467,'dictData.noData','There is no accessible dictionary code data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3468,3468,'dictData.errLabelExists','Failed to manipulate data [{name}], tag name already exists under this dictionary type!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3500,3500,'dictType.sys_user_sex','User Gender','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3501,3501,'dictType.sys_show_hide','Menu Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3502,3502,'dictType.sys_normal_disable','System switches','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3503,3503,'dictType.sys_job_status','Task Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3504,3504,'dictType.sys_job_group','Task Grouping','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3505,3505,'dictType.sys_yes_no','System or not','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3506,3506,'dictType.sys_oper_type','Operation Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3507,3507,'dictType.sys_common_status','System Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3508,3508,'dictType.trace_type','Trace Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3509,3509,'dictType.operation_log_type','Operation Log Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3510,3510,'dictType.alarm_status','Alarm Log Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3511,3511,'dictType.security_log_type','Security Log Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3512,3512,'dictType.ne_version_status','Network element software version status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3513,3513,'dictType.i18n_en','Multi-language - English','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3514,3514,'dictType.i18n_zh','Multi-language - Chinese','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3515,3515,'dictType.sys_user_sex_remark','User gender list','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3516,3516,'dictType.sys_show_hide_remark','Menu Status List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3517,3517,'dictType.sys_normal_disable_remark','System switch list','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3518,3518,'dictType.sys_job_status_remark','Task Status List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3519,3519,'dictType.sys_job_group_remark','Task Grouping List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3520,3520,'dictType.sys_yes_no_remark','System whether list','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3521,3521,'dictType.sys_oper_type_remark','Operation type list','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3522,3522,'dictType.sys_common_status_remark','Login Status List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3523,3523,'dictType.trace_type_remark','Trace Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3524,3524,'dictType.operation_log_type_remark','Operation log type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3525,3525,'dictType.alarm_status_remark','alarm_status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3526,3526,'dictType.security_log_type_remark','Security Log Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3527,3527,'dictType.ne_version_status_remark','Network element software version status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3528,3528,'dictType.i18n_en_remark','Internationalization - English','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3529,3529,'dictType.i18n_zh_remark','Internationalization - Chinese','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3530,3530,'dictType.export.id','Dictionary Code','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3531,3531,'dictType.export.name','Dictionary Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3532,3532,'dictType.export.type','Dictionary Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3533,3533,'dictType.export.status','Dictionary Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3534,3534,'dictType.sys_role_datascope','System Role Data Range','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3535,3535,'dictType.sys_role_datascope_remark','System Role Data Range Mapping','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3536,3536,'dictType.noData','There is no accessible dictionary type data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3537,3537,'dictType.errNameExists','Failed to manipulate dictionary [{name}], dictionary name already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3538,3538,'dictType.errTypeExists','Failed to manipulate dictionary [{name}], dictionary type already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3600,3600,'dept.root','System Maintenance Department','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3601,3601,'dept.root.item1','Operation and Maintenance Department One','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3602,3602,'dept.noData','There is no accessible department data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3603,3603,'dept.errParentDelFlag','The parent department [{name}] has been deleted and is not allowed to be added.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3604,3604,'dept.errParentStatus','Parent department [{name}] is deactivated, additions are not allowed!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3605,3605,'dept.errNameExists','Manipulate department [{name}] failed, department name already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3606,3606,'dept.errParentID','Failed to operate department [{name}], the parent department cannot be itself.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3607,3607,'dept.errHasChildUse','Operation failed, the department contains undeactivated sub-departments number: {num}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3608,3608,'dept.errHasUserUse','Deletion is not allowed, number of users the department has been assigned to: {num}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3630,3630,'config.sys.user.initPassword','User Management-Account Initial Password','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3631,3631,'config.sys.account.captchaEnabled','Account self-help-Certification code switch','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3632,3632,'config.sys.account.registerUser','Account self-service-Whether to enable the user registration function','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3633,3633,'config.sys.user.maxRetryCount','User Management-Maximum number of password errors','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3634,3634,'config.sys.user.lockTime','User Management-Password Lock Time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3635,3635,'config.monitor.sysResource.storeDays','Monitor-System Resources-Data retention time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3636,3636,'config.sys.logo.type','System Settings-Logo Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3637,3637,'config.sys.logo.filePathIcon','System Settings-Logo File icon','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3638,3638,'config.sys.logo.filePathBrand','System Settings-Logo File Brand','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3639,3639,'config.sys.loginBackground','System Settings-Login Interface Background','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3640,3640,'config.sys.title','System Settings-System Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3641,3641,'config.sys.copyright','System Settings-Copyright Notice','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3642,3642,'config.sys.user.initPasswordRemark','Import user initialization password 123456','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3643,3643,'config.sys.account.captchaEnabledRemark','Whether to enable the verification code function (true on, false off)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3644,3644,'config.sys.account.registerUserRemark','Whether to enable the function of registered users (true on, false off)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3645,3645,'config.sys.user.maxRetryCountRemark','Maximum number of password errors','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3646,3646,'config.sys.user.lockTimeRemark','Password lock time in minutes (default 10 minutes)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3647,3647,'config.monitor.sysResource.storeDaysRemark','Monitor-System Resources-Data retention time, in days. According to the current date, delete the date data information that exceeds the retention time.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3648,3648,'config.sys.logo.typeRemark','Full image: brand\r\nSmall image: icon','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3649,3649,'config.sys.logo.filePathIconRemark','File support for web address images and file paths for internal uploads','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3650,3650,'config.sys.logo.filePathBrandRemark','File support for web address images and paths to internally uploaded files','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3651,3651,'config.sys.loginBackgroundRemark','The file supports web address images and internal upload file paths with a # in the default background','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3652,3652,'config.sys.titleRemark','System name length limit of 11-digit string','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3653,3653,'config.sys.copyrightRemark','Footer fixing strip with copyright notice on the left side','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3654,3654,'config..export.id','Parameter Code','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3655,3655,'config..export.name','Parameter Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3656,3656,'config..export.key','Parameter key name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3657,3657,'config..export.value','Parameter Key Value','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3658,3658,'config..export.type','System builtin','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3659,3659,'config..export.remark','Parameter Description','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3660,3660,'config.sys.titleValue','AGrandEMS','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3661,3661,'config.sys.copyrightValue','Copyright ©2023 AGrandTech','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3662,3662,'config.noData','No parameter configuration data is accessible!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3663,3663,'config.errKey','Invalid key','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3664,3664,'config.errValueEq','Change state is equal to the old value!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3665,3665,'config.errKeyExists','Failed to manipulate parameter configuration [{name}], parameter key name already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3666,3666,'config.errDelete','Deletion of parameter configuration information failed!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3667,3667,'config.errType','The operation contains built-in parameters and deletion is prohibited!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3700,3700,'job.monitor_sys_resource','Monitor-System Resources','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3701,3701,'job.monitor_sys_resource_remark','System Resource CPU/IO/Netword Collection\r\ninterval unit minutes, average minute resource situation\r\nNote: Please pass the value of the parameter interva according to the time unit minutes of the cron expression','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3702,3702,'job.delExpiredNeBackup','Delete expired NE etc backup file','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3703,3703,'job.delExpiredNeBackupRemark','Delete expired network element etc backup file, pass in the parameter to keep the backup file for {duration} days, default is 60 days.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3704,3704,'job.deleteExpiredAlarmRecord','Delete expired historical alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3705,3705,'job.deleteExpiredAlarmRecordRemark','Delete expired history alarm records, pass in the parameter to keep the history alarm records for {duration} days.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3706,3706,'job.deleteExpiredKpiRecord','Delete expired KPI records','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3707,3707,'job.deleteExpiredKpiRecordRemark','KPI record retention for {duration} days','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3708,3708,'job.backupEtcFromNE','Network Element Configuration Auto Backup Task','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3709,3709,'job.backupEtcFromNERemark','Automatically backs up the configuration files in the network element\'s etc directory.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3710,3710,'job.export.jobID','Task Code','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3711,3711,'job.export.jobName','Task name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3712,3712,'job.export.jobGroupName','Task Group Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3713,3713,'job.export.invokeTarget','Call target','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3714,3714,'job.export.targetParams','Incoming Parameters','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3715,3715,'job.export.cronExpression','cron expressions','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3716,3716,'job.export.status','Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3717,3717,'job.export.remark','Remarks Description','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3718,3718,'job.export.jobLogID','Task log number','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3719,3719,'job.export.jobLogStatus','Task log status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3720,3720,'job.export.jobLogTime','Task log time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3721,3721,'job.noData','There is no accessible scheduling task data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3722,3722,'job.errTargetParams','Failed to operate scheduling task [{name}] with incorrect task incoming parameter json string!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3723,3723,'job.errCronExpression','Scheduled task [{name}] failed with incorrect Cron expression!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3724,3724,'job.errJobExists','Failed to add a new task [{name}] to a scheduling task, same task name in the same task group','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3725,3725,'job.statusEq','The change state is equal to the old value!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3750,3750,'role.admin','Super Administrator','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3751,3751,'role.adminAssign','Managers','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3752,3752,'role.operator','Operators','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3753,3753,'role.monitor','Monitor','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3754,3754,'role.vistor','General Users','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3755,3755,'role.adminRemark','Super Administrator, cannot modify or delete','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3756,3756,'role.adminAssignRemark','Administrators can perform any operation on the device','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3757,3757,'role.operatorRemark','Operation and maintenance personnel can read data from the device and configure the device, but cannot perform software upgrade operations on the device.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3758,3758,'role.monitorRemark','Monitoring personnel Can only read data from the device, but cannot make any settings on the device','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3759,3759,'role.vistorRemark','Ordinary users can only see system-related information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3760,3760,'role.export.id','Role ID','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3761,3761,'role.export.name','Role Name ','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3762,3762,'role.export.key','Role Key','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3763,3763,'role.export.sort','Role Order','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3764,3764,'role.export.dataScope','Role Data Range','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3765,3765,'role.export.status','Role Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3766,3766,'role.noData','There is no accessible role data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3767,3767,'role.statusEq','The change status is equal to the old value!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3768,3768,'role.errNameExists','Manipulating role [{name}] failed, role name already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3769,3769,'role.errKeyExists','Failed to manipulate role [{name}], role key already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3800,3800,'post.admin','Systems','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3801,3801,'post.operator','Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3802,3802,'post.monitor','Operation & Maintenance','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3803,3803,'post.visitor','Monitoring','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3804,3804,'post.export.id','Post ID ','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3805,3805,'post.export.code','Position Code','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3806,3806,'post.export.name','Position Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3807,3807,'post.export.sort','Position Sort','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3808,3808,'post.export.status','Position Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3809,3809,'post.noData','There is no accessible post data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3810,3810,'post.errNameExists','Failed to manipulate post [{name}], post name already exists already exists','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3811,3811,'post.errCodeExists','Failed to manipulate role [{name}], role key already exists.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3830,3830,'user.export.id','User ID','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3831,3831,'user.export.name','Login Account','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3832,3832,'user.export.nick','Nickname','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3833,3833,'user.export.email','E-Mail','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3834,3834,'user.export.phone','Cell phone number','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3835,3835,'user.export.sex','Gender','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3836,3836,'user.export.status','User Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3837,3837,'user.export.deptID','Department number','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3838,3838,'user.export.deptName','Department Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3839,3839,'user.export.deptLeader','Department Head','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3840,3840,'user.export.loginIP','User Login IP','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3841,3841,'user.export.loginDate','User Login Time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3842,3842,'user.noData','No accessible user data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3843,3843,'user.statusEq','The change status is equal to the old value!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3844,3844,'user.errPasswdOld','Change password failed, old password is wrong','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3845,3845,'user.errPasswdEqOld','New password cannot be the same as the old one','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3846,3846,'user.errPasswd','Login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3847,3847,'user.errEmailFormat','Failed to operate user [{name}], mailbox format error','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3848,3848,'user.errEmailExists','Failed to operate user [{name}], mailbox already exists.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3849,3849,'user.errPhoneFormat','Failed to operate user [{name}], cell phone number format is wrong.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3850,3850,'user.errPhoneExists','Failed to operate user [{name}], cell phone number already exists.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3851,3851,'user.errNameExists','Failed to operate user [{name}], login account already exists.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3852,3852,'user.import.mustItem','Required list item in form, {text}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3853,3853,'user.import.phoneExist','User ID: {id} cell phone number {phone} Existing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3854,3854,'user.import.phoneFormat','User ID: {id} cell phone number {phone} Wrong format','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3855,3855,'user.import.emailExist','User ID: {id} User Email: {email} Existing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3856,3856,'user.import.emailFormat','User ID: {id} Email: {email} Wrong Format','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3857,3857,'user.import.success','User ID:{id} Login name:{name} Imported successfully!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3858,3858,'user.import.fail','User ID: {id} Login name: {name} Import failed','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3859,3859,'user.import.successUpdate','User ID: {id} Login name: {name} Update success','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3860,3860,'user.import.failUpdate','User ID: {id} Login Name: {name} Update Failed','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3861,3861,'user.import.failTip','Sorry, the import failed! A total of {num} entries were not formatted correctly, the error is below:','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3862,3862,'user.import.successTip','Congratulations, the data has been imported successfully! There are {num} entries with the following data:','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3900,3900,'app.common.err403','Unauthorized access {method} {requestURI}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3901,3901,'app.common.err401','Invalid authorization','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3902,3902,'app.common.err400','Parameter error','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3903,3903,'app.common.exportEmpty','Export data record is empty','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3904,3904,'app.common.errOperateAdmin','Built-in users are not allowed to operate','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3905,3905,'app.common.errOperateRole','Built-in roles are not allowed to be operated','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3906,3906,'app.common.deleteSuccess','Deleted successfully: {num}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3907,3907,'app.common.loginSuccess','Login Success','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3908,3908,'app.common.logoutSuccess','Logout Successful','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3909,3909,'app.common.errUnlock','The user is not locked','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3910,3910,'app.common.noLoginUser','Invalid login user information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3911,3911,'app.common.rateLimitTip','Access too often, please try again later','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3912,3912,'log.operate.export.id','Operation Number','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3913,3913,'log.operate.export.title','Module Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3914,3914,'log.operate.export.businessType','Operation Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3915,3915,'log.operate.export.method','Operation Method','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3916,3916,'log.operate.export.requestMethod','Request Method ','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3917,3917,'log.operate.export.operatorType','Operation Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3918,3918,'log.operate.export.operName','Operator','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3919,3919,'log.operate.export.deptName','Operator\'s department name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3920,3920,'log.operate.export.url','Request Link Address','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3921,3921,'log.operate.export.ip','Requesting Host ','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3922,3922,'log.operate.export.location','Request Address','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3923,3923,'log.operate.export.param','Request Parameters','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3924,3924,'log.operate.export.msg','Operation Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3925,3925,'log.operate.export.status','Operation status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3926,3926,'log.operate.export.costTime','Consumption time (ms)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3927,3927,'log.operate.export.operTime','Operation time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3928,3928,'log.login.export.id','Record number','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3929,3929,'log.login.export.userName','Login Account','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3930,3930,'log.login.export.status','Login Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3931,3931,'log.login.export.ip','Login Address','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3932,3932,'log.login.export.location','Login Location','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3933,3933,'log.login.export.browser','Browser','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3934,3934,'log.login.export.os','Operating System','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3935,3935,'log.login.export.msg','Login Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3936,3936,'log.login.export.time','Login Time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3937,3937,'trace.tcpdump.noData','Can\'t find {type} {id} information of the corresponding network element.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3938,3938,'register.errUsername','The account number cannot start with a number, but can contain upper and lower case letters, numbers, and not less than 5 digits.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3939,3939,'register.errPasswd','The password must contain at least 6 upper and lower case letters, numbers, and special symbols.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3940,3940,'register.errPasswdNotEq','User confirms password inconsistency','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3941,3941,'register.success','Successful registration','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3942,3942,'register.successMsg','{name} Register Successful {id}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3943,3943,'log.operate.title.sysJobLog','Scheduling Task Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3944,3944,'log.operate.title.sysJob','Scheduling Tasks','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3945,3945,'log.operate.title.tcpdump','Signaling Capture','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3946,3946,'log.operate.title.sysConfig','Parameter Configuration','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3947,3947,'log.operate.title.sysDept','Sector','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3948,3948,'log.operate.title.sysDictData','Dictionary Data','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3949,3949,'log.operate.title.sysDictType','Dictionary type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3950,3950,'log.operate.title.sysMenu','Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3951,3951,'log.operate.title.sysPost','Positions','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3952,3952,'log.operate.title.sysProfile','Personal Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3953,3953,'log.operate.title.sysProfileAvatar','Personal avatar','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3954,3954,'log.operate.title.sysRole','Roles','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3955,3955,'log.operate.title.sysUser','User','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3956,3956,'log.operate.title.sysLogOper','Operation Logging','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3957,3957,'log.operate.title.sysLogLogin','Operation Logging','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3958,3958,'login.errNameOrPasswd','User does not exist or password is wrong','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3959,3959,'login.errDelFlag','Sorry, your account has been deleted','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3960,3960,'login.errStatus','Sorry, your account has been disabled','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3961,3961,'login.errRetryPasswd','Password was entered incorrectly several times, account has been locked','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3962,3962,'captcha.err','Captcha Error','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3963,3963,'captcha.errValid','Captcha is invalid','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3964,3964,'app.common.noUaOsBrowser','Unknown Unknown','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3965,3965,'app.common.noIPregion','Intranet','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3966,3966,'app.common.unknown','Unknown','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3967,3967,'app.common.noNEInfo','No matching network element information found','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3968,3968,'ne.udm.errImportUserAuthFileFormat','Please upload a file in the format of. csv or. txt. English comma separated txt format: imsi, ki, algo, amf, opc','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3969,3969,'ne.udm.errExportType','Export file types support CSV and txt','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3970,3970,'ne.udm.errImportUserSubFileFormat','Please upload files in .csv or .txt format. English comma-separated txt format: imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3971,3971,'log.operate.title.udmAuth','UDM Authentication User','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3972,3972,'log.operate.title.udmSub','UDM Subscribers','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3973,3973,'dictType.active_alarm_type','Event Alarm Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3974,3974,'dictType.active_alarm_type_remark','List of Active Alarm Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3975,3975,'dictData.active_alarm_type.communication','Communication Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3976,3976,'dictData.active_alarm_type.equipment','Equipment Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3977,3977,'dictData.active_alarm_type.processing','Processing Failure Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3978,3978,'dictData.active_alarm_type.environmental','Environmental Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3979,3979,'dictData.active_alarm_type.qualityOfService','Quality of Service Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3980,3980,'dictType.active_clear_type','Alarm Clearing Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3981,3981,'dictType.active_clear_type_remark','List of Alarm Clearing Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3982,3982,'dictData.active_clear_type.notCleared','Not cleared','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3983,3983,'dictData.active_clear_type.hand','Manually cleared','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3984,3984,'dictData.active_clear_type.auto','Automatically cleared','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3985,3985,'dictType.active_ack_state','Alarm Acknowledgement Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3986,3986,'dictType.active_ack_state_remark','Alarm Acknowledgement Type List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3987,3987,'dictData.active_ack_state.unconfirmed','Not Confirm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3988,3988,'dictData.active_ack_state.confirmed','Confirm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3989,3989,'dictType.active_alarm_severity','Severity','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3990,3990,'dictType.active_alarm_severity_remark','Severity List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3991,3991,'dictData.active_alarm_severity.critical','Critical','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3992,3992,'dictData.active_alarm_severity.major','Major','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3993,3993,'dictData.active_alarm_severity.minor','Minor','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3994,3994,'dictData.active_alarm_severity.warning','Warning','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3995,3995,'dictData.active_alarm_severity.event','Event','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3996,3996,'config.sys.officialUrl','System Settings - Official Website Links','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3997,3997,'config.sys.helpDoc','System Settings-System Documentation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3998,3998,'config.sys.officialUrlRemark','Default no address with # sign','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3999,3999,'config.sys.helpDocRemark','Static file directory address, use {language} to distinguish language files','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4000,4000,'log.operate.title.neAction','Network Element Processing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4001,4001,'log.operate.title.helpDoc','System Usage Documentation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4002,4002,'menu.ueUser.n3iwf','N3IWF Online User','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4003,4003,'menu.ueUser.pcf','User PCC Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4004,4004,'menu.system.user.editRole','Modifying user roles','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4005,4005,'config.sys.i18nOpen','Internationalization Switching','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4006,4006,'config.sys.i18nDefault','Internationalization Default Language','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4007,4007,'user.export.role','UserRole','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4008,4008,'menu.system.setting.i18n','Internationalization Switch','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4009,4009,'menu.system.setting.i18nRemark','Internationalized multilingual switching options','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4010,4010,'dictType.index_status','Home Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4011,4011,'dictType.index_status_remark','Network element status colors on the home page','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4012,4012,'dictType.index_status.normal','Normal','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4013,4013,'dictType.index_status.abnormal','Abnormal','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4014,4014,'menu.log.neFile','NE Log File','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4015,4015,'job.deleteExpiredNeStateRecord','Delete Expired NE State Record','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4016,4016,'job.deleteExpiredNeStateRecordRemark','Delete expired NE state records regularly and keep them for {duration} days by default.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4017,4017,'job.getStateFromNE','Get state from NEs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4018,4018,'job.getStateFromNERemark','Get state information from all NEs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4019,4019,'job.genNeStateAlarm','Network Element Health Check','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4020,4020,'job.genNeStateAlarmRemark','Health status inspection of network elements, generating alarms in case of abnormalities.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4021,4021,'menu.neUser.nssf','NSSF Subscription Info','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4022,4022,'menu.neUser.nssfAmf','NSSF Available AMFs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4023,4023,'menu.monitor.topology','Topology Info','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4024,4024,'menu.monitor.topologyBuild','Topological Graph Build','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4025,4025,'log.operate.title.chartGraph','Topological Graph','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,1,NULL),(4026,4026,'menu.monitor.topologyArchitecture','NE System Topology','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4027,4027,'menu.alarm','Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4028,4028,'menu.topology','Topology','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4029,4029,'config.sys.lockTime','System Settings - Screen Lock Timeout Duration','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4030,4030,'config.sys.lockTimeRemark','Screen lock timeout duration when idle, in seconds.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4031,4031,'sys.account.captchaType','Account Self Service - Captcha Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4032,4032,'sys.account.captchaTypeRemark','Using CAPTCHA types (math numeric calculation, char character validation)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4033,4033,'menu.dashboard','Dashboard','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4034,4034,'menu.dashboard.overview','Overview','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4035,4035,'menu.dashboard.cdr','CDR','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4036,4036,'dictType.cdr_sip_code','CDR SIP Response Code Category Type','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4037,4037,'dictType.cdr_call_type','CDR Call Type','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4038,4038,'dictType.ue_auth_code','UE Event Authentication Code Type','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4039,4039,'dictType.ue_event_type','UE Event Type','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4040,4040,'dictData.cdr_sip_code.200','Normal Cleaning','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4041,4041,'dictData.cdr_sip_code.403','Banned','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4042,4042,'dictData.cdr_sip_code.408','Request Timeout','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4043,4043,'dictData.cdr_sip_code.500','Internal Server Error','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4044,4044,'dictData.cdr_call_type.audio','Voice','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4045,4045,'dictData.cdr_call_type.video','Video','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4046,4046,'dictData.ue_auth_code.200','Success','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4047,4047,'dictData.ue_auth_code.001','Network Failure','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4048,4048,'dictData.ue_auth_code.002','Air Interface Failure','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4049,4049,'dictData.ue_auth_code.003','MAC Failure','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4050,4050,'dictData.ue_auth_code.004','Synchronization failure','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4051,4051,'dictData.ue_auth_code.005','Non-5G Authentication Not Accepted','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4052,4052,'dictData.ue_auth_code.006','Response Failure','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4053,4053,'dictData.ue_auth_code.007','Unknown','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4054,4054,'dictData.ue_event_type.auth','Authentication','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4055,4055,'dictData.ue_event_type.detach','Detach','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4056,4056,'dictData.ue_event_type.state','CM Status','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4057,4057,'dictType.ue_event_cm_state','UE Event CM Status','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4058,4058,'dictData.ue_event_cm_state.connected','Connected','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4059,4059,'dictData.ue_event_cm_state.idle','Idle','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4060,4060,'dictData.ue_event_cm_state.inactive','Inactive','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4061,4061,'dictData.cdr_sip_code.404','Not Found','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4062,4062,'dictData.cdr_sip_code.487','Request Terminated','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4063,4063,'dictData.cdr_sip_code.503','Service Unavailable','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4064,4064,'dictData.cdr_sip_code.504','Server Time Out','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4065,4065,'dictData.cdr_sip_code.603','Decline','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4066,4066,'dictData.cdr_sip_code.606','Not Acceptable','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4067,4067,'cache.name.user','Login User','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4068,4068,'cache.name.sys_config','Parameters Management','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4069,4069,'cache.name.sys_dict','Dictionary Management','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4070,4070,'cache.name.captcha_codes','Captcha','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4071,4071,'cache.name.repeat_submit','Resubmit','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4072,4072,'cache.name.rate_limit','Limit Traffic','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4073,4073,'cache.name.pwd_err_cnt','Number of Password Errors','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4074,4074,'cache.name.ne_info','NE Info Management','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4075,4075,'cache.name.ne_data','NE Data Management','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4076,4076,'dictData.cdr_call_type.sms','SMS','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4077,4077,'dictData.cdr_sip_code.202','Accepted','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4078,4078,'dictData.cdr_sip_code.488','Not Aceptable Here','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4079,4079,'dictData.cdr_sip_code.0','Other','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4080,4080,'log.operate.title.ws','WS Sessions','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4081,4081,'log.operate.title.neHost','NE Host','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4082,4082,'neHost.noData','There is no accessible host information data!','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4083,4083,'neHost.errKeyExists','Host information operation [{name}] failed, name already exists in the same group','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4084,4084,'neHost.errByHostInfo','Failed to connect to the host, please check the connection parameters and try again','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4085,4085,'dictType.ne_host_type','Network element host connection type','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4086,4086,'dictType.ne_host_groupId','Network element host grouping','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4087,4087,'dictType.ne_host_authMode','Network element host authentication mode','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4088,4088,'dictData.ne_host_type.ssh','SSH','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4089,4089,'dictData.ne_host_type.telnet','Telnet','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4090,4090,'dictData.ne_host_groupId.0','Other','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4091,4091,'dictData.ne_host_groupId.1','Network Elements','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4092,4092,'dictData.ne_host_groupId.2','System','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4093,4093,'dictData.ne_host_authMode.0','Password Authentication','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4094,4094,'dictData.ne_host_authMode.1','Private key authentication','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4095,4095,'menu.tools.terminal','NE Host Terminal','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4096,4096,'menu.config.neHost','NE Host','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4097,4097,'menu.config.neHostCommand','NE Host CMD','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4098,4098,'log.operate.title.neHostCmd','Network element host commands','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4099,4099,'neHostCmd.noData','No accessible host command data!','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4100,4100,'neHostCmd.errKeyExists','Host command operation [{name}] failed, name already exists in the same group','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4101,4101,'dictType.ne_host_cmd_groupId','Network element host command grouping','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4102,4102,'dictData.ne_host_cmd_groupId.0','Default','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4103,4103,'dictData.ne_host_cmd_groupId.1','Quick Commands','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4104,4104,'menu.config.neInfo','NE Info','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4105,4105,'log.operate.title.neInfo','NE Info','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4106,4106,'neInfo.noData','There is no accessible network element information data!','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4107,4107,'neInfo.errKeyExists','NE info operation [{key}] failed, identifier already exists under the same type','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4108,4108,'log.operate.title.imsCDR','IMS-CDR session','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4109,4109,'menu.dashboard.amfUE','UE','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4110,4110,'log.operate.title.amfUE','AMF-UE event','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4111,4111,'dictData.ne_info_status.0','Online','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4112,4112,'dictData.ne_info_status.1','Offline','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4113,4113,'dictData.ne_info_status.2','-','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4114,4114,'dictData.ne_info_status.3','Configuration to be issued','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4115,4115,'dictType.ne_info_status','NE Info State','i18n_en','','','1','supervisor',1705550000000,'',0,''); +INSERT INTO `sys_dict_data` VALUES (1,1,'dictData.sex.un','0','sys_user_sex',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(2,2,'dictData.sex.male','1','sys_user_sex',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(3,3,'dictData.sex.female','2','sys_user_sex',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(4,1,'dictData.show','1','sys_show_hide',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(5,2,'dictData.hide','0','sys_show_hide',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(6,1,'dictData.normal','1','sys_normal_disable',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(7,2,'dictData.disable','0','sys_normal_disable',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(8,1,'dictData.yes','Y','sys_yes_no',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(9,2,'dictData.no','N','sys_yes_no',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(10,1,'dictData.success','1','sys_common_status',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(11,2,'dictData.fail','0','sys_common_status',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(12,1,'dictData.jobStatus.normal','1','sys_job_status',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(13,2,'dictData.jobStatus.pause','0','sys_job_status',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(14,1,'dictData.jobGroup.Default','DEFAULT','sys_job_group',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(15,2,'dictData.jobGroup.System','SYSTEM','sys_job_group',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(16,1,'dictData.operType.other','0','sys_oper_type',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(17,2,'dictData.operType.add','1','sys_oper_type',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(18,3,'dictData.operType.edit','2','sys_oper_type',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(19,4,'dictData.operType.delete','3','sys_oper_type',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(20,5,'dictData.operType.auth','4','sys_oper_type',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(21,6,'dictData.operType.export','5','sys_oper_type',NULL,'warning','1','supervisor',1699350000000,NULL,0,NULL),(22,7,'dictData.operType.import','6','sys_oper_type',NULL,'warning','1','supervisor',1699350000000,NULL,0,NULL),(23,8,'dictData.operType.forced quit','7','sys_oper_type',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(24,9,'dictData.operType.clear','8','sys_oper_type',NULL,'error','1','supervisor',1699350000000,NULL,0,NULL),(25,1,'dictData.trace.interface','Interface','trace_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(26,2,'dictData.trace.device','Device','trace_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(27,3,'dictData.trace.user','UE','trace_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(28,1,'dictData.logType.download','DOWNLOAD','operation_log_type',NULL,'pink','1','supervisor',1699350000000,NULL,0,NULL),(29,2,'dictData.logType.activation','Activation','operation_log_type',NULL,'blue ','1','supervisor',1699350000000,NULL,0,NULL),(30,3,'dictData.logType.add','ADD','operation_log_type',NULL,'cyan','1','supervisor',1699350000000,NULL,0,NULL),(31,4,'dictData.logType.other','AUTO','operation_log_type',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(32,5,'dictData.logType.back','BACK','operation_log_type',NULL,'blue ','1','supervisor',1699350000000,NULL,0,NULL),(33,6,'dictData.logType.delete','DELETE','operation_log_type',NULL,'red','1','supervisor',1699350000000,NULL,0,NULL),(34,7,'dictData.logType.distribute','Distribute','operation_log_type',NULL,'yellow','1','supervisor',1699350000000,NULL,0,NULL),(35,8,'dictData.logType.export','EXPORT','operation_log_type',NULL,'green','1','supervisor',1699350000000,NULL,0,NULL),(36,9,'dictData.logType.query','SELECT','operation_log_type',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(37,10,'dictData.logType.setup','SET','operation_log_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(38,11,'dictData.logType.update','UPDATE','operation_log_type',NULL,'magenta','1','supervisor',1699350000000,NULL,0,NULL),(39,12,'dictData.logType.upload','UPLOAD','operation_log_type',NULL,'yellow','1','supervisor',1699350000000,NULL,0,NULL),(40,13,'dictData.logType.view','View','operation_log_type',NULL,'purple','1','supervisor',1699350000000,NULL,0,NULL),(41,14,'dictData.logType.login','0','security_log_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(42,15,'dictData.logType.logout','1','security_log_type',NULL,'cyan','1','supervisor',1699350000000,NULL,0,NULL),(43,1,'dictData.securityLogType.add','2','security_log_type',NULL,'green','1','supervisor',1699350000000,NULL,0,NULL),(44,2,'dictData.securityLogType.update','3','security_log_type',NULL,'lime','1','supervisor',1699350000000,NULL,0,NULL),(45,3,'dictData.securityLogType.delete','4','security_log_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(46,4,'dictData.securityLogType.lock','5','security_log_type',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(47,5,'dictData.securityLogType.unlock','6','security_log_type',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(48,6,'dictData.securityLogType.reset','7','security_log_type',NULL,'cyan','1','supervisor',1699350000000,NULL,0,NULL),(49,7,'dictData.securityLogType.deactivate','8','security_log_type',NULL,'blue ','1','supervisor',1699350000000,NULL,0,NULL),(50,8,'dictData.jobSaveLog.no','0','sys_job_save_log',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(51,9,'dictData.jobSaveLog.yes','1','sys_job_save_log',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(52,1,'dictData.neVersionStatus.upload','Uploaded','ne_version_status',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(53,2,'dictData.neVersionStatus.inactive','Inactive','ne_version_status',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(54,3,'dictData.neVersionStatus.active','Active','ne_version_status',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(55,1,'dictData.alarmStatus.history','0','alarm_status',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(56,2,'dictData.alarmStatus.active','1','alarm_status',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(57,1,'dictData.datascope.all','1','sys_role_datascope',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(58,2,'dictData.datascope.custom','2','sys_role_datascope',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(59,3,'dictData.datascope.dept','3','sys_role_datascope',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(60,4,'dictData.datascope.deptAndChid','4','sys_role_datascope',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(61,5,'dictData.datascope.self','5','sys_role_datascope',NULL,NULL,'1','supervisor',1699350000000,NULL,0,NULL),(62,1,'dictData.active_alarm_type.communication','CommunicationAlarm','active_alarm_type',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(63,2,'dictData.active_alarm_type.equipment','EquipmentAlarm','active_alarm_type',NULL,'cyan','1','supervisor',1699350000000,NULL,0,NULL),(64,3,'dictData.active_alarm_type.processing','ProcessingFailure','active_alarm_type',NULL,'blue ','1','supervisor',1699350000000,NULL,0,NULL),(65,4,'dictData.active_alarm_type.environmental','EnvironmentalAlarm','active_alarm_type',NULL,'yellow','1','supervisor',1699350000000,NULL,0,NULL),(66,5,'dictData.active_alarm_type.qualityOfService','QualityOfServiceAlarm','active_alarm_type',NULL,'purple','1','supervisor',1699350000000,NULL,0,NULL),(67,0,'dictData.active_clear_type.notCleared','0','active_clear_type',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(68,1,'dictData.active_clear_type.auto','1','active_clear_type',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(69,2,'dictData.active_clear_type.hand','2','active_clear_type',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(70,0,'dictData.active_ack_state.unconfirmed','0','active_ack_state',NULL,'processing','1','supervisor',1699350000000,NULL,0,NULL),(71,1,'dictData.active_ack_state.confirmed','1','active_ack_state',NULL,'success','1','supervisor',1699350000000,NULL,0,NULL),(72,1,'dictData.active_alarm_severity.critical','Critical','active_alarm_severity',NULL,'gold','1','supervisor',1699350000000,NULL,0,NULL),(73,2,'dictData.active_alarm_severity.major','Major','active_alarm_severity',NULL,'cyan','1','supervisor',1699350000000,NULL,0,NULL),(74,3,'dictData.active_alarm_severity.minor','Minor','active_alarm_severity',NULL,'blue ','1','supervisor',1699350000000,NULL,0,NULL),(75,4,'dictData.active_alarm_severity.warning','Warning','active_alarm_severity',NULL,'yellow','1','supervisor',1699350000000,NULL,0,NULL),(76,5,'dictData.active_alarm_severity.event','Event','active_alarm_severity',NULL,'purple','1','supervisor',1699350000000,NULL,0,NULL),(77,1,'dictType.index_status.normal','normal','index_status','#91cc75',NULL,'1','supervisor',1702019464083,'supervisor',1702021768318,NULL),(78,2,'dictType.index_status.abnormal','abnormal','index_status','#ee6666',NULL,'1','supervisor',1702019496965,'supervisor',1702021757053,NULL),(79,1,'dictData.cdr_sip_code.200','200','cdr_sip_code',NULL,NULL,'1','supervisor',1706611926184,'supervisor',1706611931945,NULL),(80,3,'dictData.cdr_sip_code.403','403','cdr_sip_code',NULL,NULL,'1','supervisor',1706612097209,NULL,0,NULL),(81,8,'dictData.cdr_sip_code.408','408','cdr_sip_code',NULL,NULL,'1','supervisor',1706612130088,NULL,0,NULL),(82,10,'dictData.cdr_sip_code.500','500','cdr_sip_code',NULL,NULL,'1','supervisor',1706612145510,NULL,0,NULL),(83,1,'dictData.cdr_call_type.audio','audio','cdr_call_type',NULL,NULL,'1','supervisor',1706612401539,NULL,0,NULL),(84,2,'dictData.cdr_call_type.video','video','cdr_call_type',NULL,NULL,'1','supervisor',1706615174291,NULL,0,NULL),(85,1,'dictData.ue_auth_code.200','200','ue_auth_code',NULL,NULL,'1','supervisor',1706616391409,NULL,0,NULL),(86,1,'dictData.ue_auth_code.001','001','ue_auth_code',NULL,NULL,'1','supervisor',1706616413353,NULL,0,NULL),(87,2,'dictData.ue_auth_code.002','002','ue_auth_code',NULL,NULL,'1','supervisor',1706616433726,NULL,0,NULL),(88,3,'dictData.ue_auth_code.003','003','ue_auth_code',NULL,NULL,'1','supervisor',1706616454965,NULL,0,NULL),(89,4,'dictData.ue_auth_code.004','004','ue_auth_code',NULL,NULL,'1','supervisor',1706616471395,NULL,0,NULL),(90,5,'dictData.ue_auth_code.005','005','ue_auth_code',NULL,NULL,'1','supervisor',1706616492215,NULL,0,NULL),(91,6,'dictData.ue_auth_code.006','006','ue_auth_code',NULL,NULL,'1','supervisor',1706616510265,'supervisor',1706616531154,NULL),(92,7,'dictData.ue_auth_code.007','007','ue_auth_code',NULL,NULL,'1','supervisor',1706616527896,NULL,0,NULL),(93,1,'dictData.ue_event_type.auth','auth-result','ue_event_type',NULL,NULL,'1','supervisor',1706617140742,NULL,0,NULL),(94,2,'dictData.ue_event_type.detach','detach','ue_event_type',NULL,NULL,'1','supervisor',1706617173633,NULL,0,NULL),(95,3,'dictData.ue_event_type.state','cm-state','ue_event_type',NULL,NULL,'1','supervisor',1706617219238,NULL,0,NULL),(96,1,'dictData.ue_event_cm_state.connected','1','ue_event_cm_state','','','1','supervisor',1706620000000,'',0,''),(97,2,'dictData.ue_event_cm_state.idle','2','ue_event_cm_state','','','1','supervisor',1706620000000,'',0,''),(98,3,'dictData.ue_event_cm_state.inactive','3','ue_event_cm_state','','','1','supervisor',1706620000000,'',0,''),(99,4,'dictData.cdr_sip_code.404','404','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(100,6,'dictData.cdr_sip_code.487','487','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(101,12,'dictData.cdr_sip_code.503','503','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(102,13,'dictData.cdr_sip_code.504','504','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(103,15,'dictData.cdr_sip_code.603','603','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(104,16,'dictData.cdr_sip_code.606','606','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(105,17,'dictData.cdr_sip_code.202','202','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(106,3,'dictData.cdr_call_type.sms','sms','cdr_call_type','','','1','supervisor',1706620000000,'',0,''),(107,9,'dictData.cdr_sip_code.488','488','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(108,0,'dictData.cdr_sip_code.0','0','cdr_sip_code','','','1','supervisor',1706610000000,'',0,''),(109,0,'dictData.ne_host_type.ssh','ssh','ne_host_type','','','1','supervisor',1706620000000,'',0,''),(110,1,'dictData.ne_host_type.telnet','telnet','ne_host_type','','','1','supervisor',1706620000000,'',0,''),(111,0,'dictData.ne_host_groupId.0','0','ne_host_groupId','','','1','supervisor',1706620000000,'',0,''),(112,1,'dictData.ne_host_groupId.1','1','ne_host_groupId','','','1','supervisor',1706620000000,'',0,''),(113,2,'dictData.ne_host_groupId.2','2','ne_host_groupId','','','1','supervisor',1706620000000,'',0,''),(114,0,'dictData.ne_host_authMode.0','0','ne_host_authMode','','','1','supervisor',1706620000000,'',0,''),(115,1,'dictData.ne_host_authMode.1','1','ne_host_authMode','','','1','supervisor',1706620000000,'',0,''),(116,0,'dictData.ne_host_cmd_groupId.0','0','ne_host_cmd_groupId','','','1','supervisor',1706620000000,'',0,''),(117,1,'dictData.ne_host_cmd_groupId.1','1','ne_host_cmd_groupId','','','1','supervisor',1706620000000,'',0,''),(118,0,'dictData.ne_info_status.0','0','ne_info_status','','processing','1','supervisor',1706620000000,'supervisor',1709642157849,''),(119,1,'dictData.ne_info_status.1','1','ne_info_status','','error','1','supervisor',1706620000000,'supervisor',1709642164831,''),(120,2,'dictData.ne_info_status.2','2','ne_info_status','','','1','supervisor',1706620000000,'',0,''),(121,3,'dictData.ne_info_status.3','3','ne_info_status','','warning','1','supervisor',1706620000000,'supervisor',1709642169871,''),(1000,1000,'i18n','中文','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1001,1001,'hello','你好','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1002,1002,'menu.system','系统','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1003,1003,'menu.monitor','监控','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1004,1004,'menu.tools','工具','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1005,1005,'menu.config','配置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1006,1006,'menu.ueUser','终端','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1007,1007,'menu.systemRemark','系统管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1008,1008,'menu.monitorRemark','系统监控目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1009,1009,'menu.toolsRemark','系统工具目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1010,1010,'menu.configRemark','OMC配置管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1011,1011,'menu.ueUserRemark','网元终端信息目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1012,1012,'menu.security.user','用户管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1013,1013,'menu.security.role','角色管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1014,1014,'menu.security.roleUser','分配角色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1015,1015,'menu.system.menu','菜单管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1016,1016,'menu.security.dept','部门管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1017,1017,'menu.security.post','岗位管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1018,1018,'menu.system.dictType','字典管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1019,1019,'menu.system.dictData','字典数据','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1020,1020,'menu.system.paramSet','参数设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1021,1021,'menu.system.systemLog','系统日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1022,1022,'menu.system.systemInfo','系统信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1023,1023,'menu.system.cacheInfo','缓存信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1024,1024,'menu.system.cache','缓存管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1025,1025,'menu.security.onlineUser','在线用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1026,1026,'menu.system.job','调度任务','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1027,1027,'menu.system.jobLog','调度日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1028,1028,'menu.tools.help','帮助文档','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1029,1029,'menu.log.operat','操作日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1030,1030,'menu.log.login','安全日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1031,1031,'menu.security.userRemark','用户管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1032,1032,'menu.security.roleRemark','角色管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1033,1033,'menu.security.roleUserRemark','分配角色内嵌隐藏菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1034,1034,'menu.system.menuRemark','菜单管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1035,1035,'menu.security.deptRemark','部门管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1036,1036,'menu.security.postRemark','岗位管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1037,1037,'menu.system.dictTypeRemark','字典管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1038,1038,'menu.system.dictDataRemark','字典数据内嵌隐藏菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1039,1039,'menu.system.paramSetRemark','参数设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1040,1040,'menu.system.systemLogRemark','系统日志目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1041,1041,'menu.system.systemInfoRemark','系统信息菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1042,1042,'menu.system.cacheInfoRemark','缓存信息菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1043,1043,'menu.system.cacheRemark','缓存列表菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1044,1044,'menu.security.onlineUserRemark','在线用户菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1045,1045,'menu.system.jobRemark','调度任务菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1046,1046,'menu.system.jobLogRemark','调度日志内嵌隐藏菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1047,1047,'menu.tools.helpRemark','帮助文档菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1048,1048,'menu.log.operatRemark','操作日志菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1049,1049,'menu.log.loginRemark','登录日志菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1050,1050,'menu.common.query','查询','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1051,1051,'menu.common.add','新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1052,1052,'menu.common.edit','修改','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1053,1053,'menu.common.delete','删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1054,1054,'menu.common.export','导出','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1055,1055,'menu.common.import','导入','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1056,1056,'menu.common.reset','重置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1057,1057,'menu.common.unlock','账户解锁','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1058,1058,'menu.forcedQuit.batch ','批量强退','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1059,1059,'menu.forcedQuit.single','单条强退','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1060,1060,'menu.ueUser.authUDM','UDM鉴权用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1061,1061,'menu.ueUser.subUDM','UDM签约用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1062,1062,'menu.ueUser.authUDMRemark','UDM鉴权用户菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1063,1063,'menu.ueUser.subUDMRemark','UDM签约用户菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1064,1064,'menu.config.neManage','网元管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1065,1065,'menu.config.configNE','参数配置Original','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1066,1066,'menu.config.neManageRemark','网元管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1067,1067,'menu.config.configNERemark','参数配置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1068,1068,'menu.config.backupManage','备份管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1069,1069,'menu.config.softwareManage','软件管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1070,1070,'menu.ueUser.onlineIMS','IMS在线用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1071,1071,'menu.ueUser.onlineUE','UE在线信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1072,1072,'menu.ueUser.base5G','基站信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1073,1073,'menu.trace','跟踪','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1074,1074,'menu.trace.task','跟踪任务','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1075,1075,'menu.trace.analysis','信令分析','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1076,1076,'menu.trace.pcap','信令抓包','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1077,1077,'menu.fault','监控','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1078,1078,'menu.config.backupManageRemark','备份管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1079,1079,'menu.config.softwareManageRemark','软件管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1080,1080,'menu.ueUser.onlineIMSRemark','IMS在线用户菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1081,1081,'menu.ueUser.onlineUERemark','UE在线信息菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1082,1082,'menu.ueUser.base5GRemark','5G基站信息菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1083,1083,'menu.traceRemark','跟踪管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1084,1084,'menu.trace.taskRemark','跟踪任务菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1085,1085,'menu.trace.analysisRemark','信令分析菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1086,1086,'menu.trace.pcapRemark','信令抓包菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1087,1087,'menu.faultRemark','故障管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1088,1088,'menu.fault.active','活动告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1089,1089,'menu.log','日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1090,1090,'menu.log.operatOld','操作日志(旧)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1091,1091,'menu.log.mml','MML日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1092,1092,'menu.log.alarm','告警日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1093,1093,'menu.log.securityOld','安全日志(旧)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1094,1094,'menu.log.forwarding','告警前转日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1095,1095,'menu.log.set','日志设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1096,1096,'menu.monitor.sessionUser','用户会话','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1097,1097,'menu.fault.history','历史告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1098,1098,'menu.fault.set','设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1099,1099,'menu.perf','性能','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1100,1100,'menu.fault.activemRemark','活动告警菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1101,1101,'menu.logRemark','日志管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1102,1102,'menu.log.operatOldRemark','操作日志旧layui菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1103,1103,'menu.log.mmlRemark','操作MML日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1104,1104,'menu.log.alarmRemark','告警日志菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1105,1105,'menu.log.securityOldRemark','安全日志旧layui菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1106,1106,'menu.log.forwardingRemark','告警前转日志菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1107,1107,'menu.log.setRemark','日志设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1108,1108,'menu.monitor.sessionUserRemark','用户会话旧layui菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1109,1109,'menu.fault.historyRemark','历史告警菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1110,1110,'menu.fault.setRemark','故障通用设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1111,1111,'menu.perfRemark','性能目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1112,1112,'menu.perf.task','任务管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1113,1113,'menu.perf.data','性能数据','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1114,1114,'menu.perf.report','性能报表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1115,1115,'menu.perf.threshold','性能门限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1116,1116,'menu.perf.kpi','黄金指标','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1117,1117,'menu.perf.customTarget','自定义指标','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1118,1118,'menu.perf.set','性能通用设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1119,1119,'menu.mml','MML','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1120,1120,'menu.mml.ne','网元操作','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1121,1121,'menu.mml.udm','UDM操作','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1122,1122,'menu.mml.set','MML设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1123,1123,'menu.mml.omc','OMC操作','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1124,1124,'menu.perf.taskRemark','任务管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1125,1125,'menu.perf.dataRemark','性能数据菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1126,1126,'menu.perf.reportRemark','性能报表菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1127,1127,'menu.perf.thresholdRemark','性能门限菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1128,1128,'menu.perf.kpiRemark','黄金指标菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1129,1129,'menu.perf.customTargetRemark','自定义指标菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1130,1130,'menu.perf.setRemark','性能通用设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1131,1131,'menu.mmlRemark','MML管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1132,1132,'menu.mml.neRemark','网元操作菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1133,1133,'menu.mml.udmRemark','网元UDM用户数据菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1134,1134,'menu.mml.setRemark','MML设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1135,1135,'menu.mml.omcRemark','OMC操作菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1136,1136,'menu.config.licenseManage','许可证管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1137,1137,'menu.security','安全','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1138,1138,'menu.system.systemSet','系统设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1139,1139,'menu.system.systemResource','系统资源','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1140,1140,'menu.config.configNEForm','参数配置Form','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1141,1141,'menu.config.configNETree','参数配置Tree','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1142,1142,'menu.config.configNETreeTable','参数配置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1143,1143,'menu.config.licenseManageRemark','许可证管理菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1144,1144,'menu.securityRemark','安全管理目录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1145,1145,'menu.system.systemSetRemark','系统设置菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1146,1146,'menu.system.systemResourceRemark','系统资源 cpu io network菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1147,1147,'menu.config.configNEFormRemark','参数配置Form菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1148,1148,'menu.config.configNETreeRemark','参数配置Tree菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1149,1149,'menu.config.configNETreeTableRemark','参数配置TreeTable菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1150,1150,'menu.noData','没有可访问菜单数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1151,1151,'menu.errNameExists','操作菜单【{name}】失败,菜单名称已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1152,1152,'menu.errPathExists','操作菜单【{name}】失败,菜单路由地址已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1153,1153,'menu.errFramePath','操作菜单【{name}】失败,非内部地址请以http(s)://开头','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1154,1154,'menu.errParentStatus','上级菜单未启用!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1155,1155,'menu.errHasChildUse','操作菜单【{name}】失败,存在使用子菜单数:{num}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1156,1156,'menu.errHasRoleUse','操作菜单【{name}】失败,菜单已分配给角色数:{num}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1400,1400,'dictData.sex.un','未选择','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1401,1401,'dictData.sex.male','男','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1402,1402,'dictData.sex.female','女','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1403,1403,'dictData.show','显示','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1404,1404,'dictData.hide','隐藏','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1405,1405,'dictData.normal','正常','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1406,1406,'dictData.disable','停用','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1407,1407,'dictData.yes','是','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1408,1408,'dictData.no','否','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1409,1409,'dictData.success','成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1410,1410,'dictData.fail','失败','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1411,1411,'dictData.jobStatus.normal','正常','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1412,1412,'dictData.jobStatus.pause','暂停','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1413,1413,'dictData.jobGroup.Default','默认','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1414,1414,'dictData.jobGroup.System','系统','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1415,1415,'dictData.operType.other','其他','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1416,1416,'dictData.operType.add','新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1417,1417,'dictData.operType.edit','修改','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1418,1418,'dictData.operType.delete','删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1419,1419,'dictData.operType.auth','授权','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1420,1420,'dictData.operType.export','导出','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1421,1421,'dictData.operType.import','导入','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1422,1422,'dictData.operType.forced quit','强退','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1423,1423,'dictData.operType.clear','清空','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1424,1424,'dictData.trace.interface','接口跟踪','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1425,1425,'dictData.trace.device','设备跟踪','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1426,1426,'dictData.trace.user','用户跟踪','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1427,1427,'dictData.logType.download','下载','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1428,1428,'dictData.logType.activation','激活','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1429,1429,'dictData.logType.add','新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1430,1430,'dictData.logType.other','其他','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1431,1431,'dictData.logType.back','回退','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1432,1432,'dictData.logType.delete','删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1433,1433,'dictData.logType.distribute','分配','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1434,1434,'dictData.logType.export','导出','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1435,1435,'dictData.logType.query','查询','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1436,1436,'dictData.logType.setup','设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1437,1437,'dictData.logType.update','更新','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1438,1438,'dictData.logType.upload','上传','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1439,1439,'dictData.logType.view','查看','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1440,1440,'dictData.logType.login','登录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1441,1441,'dictData.logType.logout','登出','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1442,1442,'dictData.securityLogType.add','新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1443,1443,'dictData.securityLogType.update','更新','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1444,1444,'dictData.securityLogType.delete','删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1445,1445,'dictData.securityLogType.lock','锁定','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1446,1446,'dictData.securityLogType.unlock','解锁','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1447,1447,'dictData.securityLogType.reset','重置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1448,1448,'dictData.securityLogType.deactivate','停用','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1449,1449,'dictData.jobSaveLog.no','不记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1450,1450,'dictData.jobSaveLog.yes','记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1451,1451,'dictData.neVersionStatus.upload','已上传','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1452,1452,'dictData.neVersionStatus.inactive','未激活','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1453,1453,'dictData.neVersionStatus.active','已激活','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1454,1454,'dictData.alarmStatus.history','历史告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1455,1455,'dictData.alarmStatus.active','活动告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1456,1456,'dictData.export.code','数据代码','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1457,1457,'dictData.export.sort','数据排序','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1458,1458,'dictData.export.label','数据标签','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1459,1459,'dictData.export.value','数据键值','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1460,1460,'dictData.export.type','数据排序','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1461,1461,'dictData.export.status','数据状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1462,1462,'dictData.datascope.all','全部数据权限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1463,1463,'dictData.datascope.custom','自定数据权限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1464,1464,'dictData.datascope.dept','部门数据权限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1465,1465,'dictData.datascope.deptAndChid','部门及以下数据权限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1466,1466,'dictData.datascope.self','仅本人数据权限','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1467,1467,'dictData.noData','没有可访问字典编码数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1468,1468,'dictData.errLabelExists','操作数据【{name}】失败,该字典类型下标签名已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1500,1500,'dictType.sys_user_sex','用户性别','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1501,1501,'dictType.sys_show_hide','菜单状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1502,1502,'dictType.sys_normal_disable','系统开关','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1503,1503,'dictType.sys_job_status','任务状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1504,1504,'dictType.sys_job_group','任务分组','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1505,1505,'dictType.sys_yes_no','系统是否','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1506,1506,'dictType.sys_oper_type','操作类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1507,1507,'dictType.sys_common_status','系统状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1508,1508,'dictType.trace_type','跟踪类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1509,1509,'dictType.operation_log_type','操作日志类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1510,1510,'dictType.alarm_status','告警日志类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1511,1511,'dictType.security_log_type','安全日志类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1512,1512,'dictType.ne_version_status','网元软件版本状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1513,1513,'dictType.i18n_en','多语言-英文','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1514,1514,'dictType.i18n_zh','多语言-中文','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1515,1515,'dictType.sys_user_sex_remark','用户性别列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1516,1516,'dictType.sys_show_hide_remark','菜单状态列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1517,1517,'dictType.sys_normal_disable_remark','系统开关列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1518,1518,'dictType.sys_job_status_remark','任务状态列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1519,1519,'dictType.sys_job_group_remark','任务分组列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1520,1520,'dictType.sys_yes_no_remark','系统是否列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1521,1521,'dictType.sys_oper_type_remark','操作类型列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1522,1522,'dictType.sys_common_status_remark','登录状态列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1523,1523,'dictType.trace_type_remark','跟踪类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1524,1524,'dictType.operation_log_type_remark','操作日志类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1525,1525,'dictType.alarm_status_remark','alarm_status','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1526,1526,'dictType.security_log_type_remark','安全日志类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1527,1527,'dictType.ne_version_status_remark','网元软件版本状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1528,1528,'dictType.i18n_en_remark','Internationalization - English','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1529,1529,'dictType.i18n_zh_remark','Internationalization - Chinese','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1530,1530,'dictType.export.id','字典编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1531,1531,'dictType.export.name','字典名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1532,1532,'dictType.export.type','字典类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1533,1533,'dictType.export.status','字典状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1534,1534,'dictType.sys_role_datascope','系统角色数据范围','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1535,1535,'dictType.sys_role_datascope_remark','系统角色数据范围映射','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1536,1536,'dictType.noData','没有可访问字典类型数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1537,1537,'dictType.errNameExists','操作字典【{name}】失败,字典名称已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1538,1538,'dictType.errTypeExists','操作字典【{name}】失败,字典类型已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1600,1600,'dept.root','系统维护部','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1601,1601,'dept.root.item1','运维一部','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1602,1602,'dept.noData','没有可访问部门数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1603,1603,'dept.errParentDelFlag','上级部门【{name}】已删除,不允许新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1604,1604,'dept.errParentStatus','上级部门【{name}】停用,不允许新增','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1605,1605,'dept.errNameExists','操作部门【{name}】失败,部门名称已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1606,1606,'dept.errParentID','操作部门【{name}】失败,上级部门不能是自己','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1607,1607,'dept.errHasChildUse','操作失败,该部门包含未停用的子部门数量:{num}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1608,1608,'dept.errHasUserUse','不允许删除,部门已分配给用户数:{num}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1630,1630,'config.sys.user.initPassword','用户管理-账号初始密码','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1631,1631,'config.sys.account.captchaEnabled','账号自助-验证码开关','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1632,1632,'config.sys.account.registerUser','账号自助-是否开启用户注册功能','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1633,1633,'config.sys.user.maxRetryCount','用户管理-密码最大错误次数','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1634,1634,'config.sys.user.lockTime','用户管理-密码锁定时间','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1635,1635,'config.monitor.sysResource.storeDays','监控-系统资源-数据保留时长','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1636,1636,'config.sys.logo.type','系统设置-LOGO类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1637,1637,'config.sys.logo.filePathIcon','系统设置-LOGO文件icon','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1638,1638,'config.sys.logo.filePathBrand','系统设置-LOGO文件brand','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1639,1639,'config.sys.loginBackground','系统设置-登录界面背景','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1640,1640,'config.sys.title','系统设置-系统名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1641,1641,'config.sys.copyright','系统设置-版权声明','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1642,1642,'config.sys.user.initPasswordRemark','导入用户初始化密码 123456','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1643,1643,'config.sys.account.captchaEnabledRemark','是否开启验证码功能(true开启,false关闭)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1644,1644,'config.sys.account.registerUserRemark','是否开启注册用户功能(true开启,false关闭)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1645,1645,'config.sys.user.maxRetryCountRemark','密码最大错误次数','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1646,1646,'config.sys.user.lockTimeRemark','密码锁定时间,单位分钟(默认10分钟)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1647,1647,'config.monitor.sysResource.storeDaysRemark','监控-系统资源-数据保留时长,单位天。根据当前日期,删除超过保留时长的日期数据信息。','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1648,1648,'config.sys.logo.typeRemark','全图:brand\r\n小图:icon','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1649,1649,'config.sys.logo.filePathIconRemark','文件支持网络地址图片和内部上传的文件路径','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1650,1650,'config.sys.logo.filePathBrandRemark','文件支持网络地址图片和内部上传的文件路径','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1651,1651,'config.sys.loginBackgroundRemark','文件支持网络地址图片和内部上传的文件路径,默认背景用#号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1652,1652,'config.sys.titleRemark','系统名称长度限制11位字符串','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1653,1653,'config.sys.copyrightRemark','底脚固定条,左侧放置版权声明','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1654,1654,'config..export.id','参数编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1655,1655,'config..export.name','参数名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1656,1656,'config..export.key','参数键名','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1657,1657,'config..export.value','参数键值','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1658,1658,'config..export.type','系统内置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1659,1659,'config..export.remark','参数说明','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1660,1660,'config.sys.titleValue','AGrandEMS','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1661,1661,'config.sys.copyrightValue','Copyright ©2023 千通科技','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1662,1662,'config.noData','没有可访问参数配置数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1663,1663,'config.errKey','无效 key','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1664,1664,'config.errValueEq','变更状态与旧值相等!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1665,1665,'config.errKeyExists','操作参数配置【{name}】失败,参数键名已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1666,1666,'config.errDelete','删除参数配置信息失败!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1667,1667,'config.errType','操作含有内置参数,禁止删除!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1700,1700,'job.monitor_sys_resource','监控-系统资源','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1701,1701,'job.monitor_sys_resource_remark','系统资源CPU/IO/Netword收集\r\ninterval单位分钟,平均分钟资源情况\r\n注:请根据cron表达式的时间单位分钟,传入参数interva值','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1702,1702,'job.delExpiredNeBackup','删除过期网元备份文件','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1703,1703,'job.delExpiredNeBackupRemark','删除过期网元etc备份文件, 传入参数表示保留{duration}天的备份文件, 默认60天','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1704,1704,'job.deleteExpiredAlarmRecord','删除过期历史告警记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1705,1705,'job.deleteExpiredAlarmRecordRemark','删除过期历史告警记录,传入参数表示保留{duration}天的历史告警记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1706,1706,'job.deleteExpiredKpiRecord','删除过期黄金指标记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1707,1707,'job.deleteExpiredKpiRecordRemark','黄金指标记录保留{duration}天','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1708,1708,'job.backupEtcFromNE','网元配置自动备份任务','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1709,1709,'job.backupEtcFromNERemark','自动备份网元etc目录下的配置文件','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1710,1710,'job.export.jobID','任务编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1711,1711,'job.export.jobName','任务名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1712,1712,'job.export.jobGroupName','任务组名','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1713,1713,'job.export.invokeTarget','调用目标','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1714,1714,'job.export.targetParams','传入参数','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1715,1715,'job.export.cronExpression','cron表达式','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1716,1716,'job.export.status','状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1717,1717,'job.export.remark','备注说明','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1718,1718,'job.export.jobLogID','任务日志编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1719,1719,'job.export.jobLogStatus','任务日志状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1720,1720,'job.export.jobLogTime','任务日志时间','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1721,1721,'job.noData','没有可访问调度任务数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1722,1722,'job.errTargetParams','操作调度任务【{name}】失败,任务传入参数json字符串不正确','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1723,1723,'job.errCronExpression','操作调度任务【{name}】失败,Cron表达式不正确','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1724,1724,'job.errJobExists','调度任务新增【{name}】失败,同任务组内有相同任务名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1725,1725,'job.statusEq','变更状态与旧值相等!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1750,1750,'role.admin','超级管理员','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1751,1751,'role.adminAssign','管理人员','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1752,1752,'role.operator','运维人员','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1753,1753,'role.monitor','监控人员','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1754,1754,'role.vistor','普通用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1755,1755,'role.adminRemark','超级管理员,无法修改删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1756,1756,'role.adminAssignRemark','管理人员 可以对设备进行任何操作','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1757,1757,'role.operatorRemark','运维人员 可以从设备读取数据,并对设备进行配置,但是不能对设备进行软件升级操作。','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1758,1758,'role.monitorRemark','监控人员 只能从设备读取数据,而不能对设备进行任何设置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1759,1759,'role.vistorRemark','普通用户 只可看系统相关信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1760,1760,'role.export.id','角色编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1761,1761,'role.export.name','角色名称 ','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1762,1762,'role.export.key','角色键值','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1763,1763,'role.export.sort','角色顺序','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1764,1764,'role.export.dataScope','角色数据范围','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1765,1765,'role.export.status','角色状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1766,1766,'role.noData','没有可访问角色数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1767,1767,'role.statusEq','变更状态与旧值相等!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1768,1768,'role.errNameExists','操作角色【{name}】失败,角色名称已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1769,1769,'role.errKeyExists','操作角色【{name}】失败,角色键值已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1800,1800,'post.admin','系统','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1801,1801,'post.operator','管理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1802,1802,'post.monitor','运维','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1803,1803,'post.visitor','监控','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1804,1804,'post.export.id','岗位编号 ','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1805,1805,'post.export.code','岗位编码','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1806,1806,'post.export.name','岗位名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1807,1807,'post.export.sort','岗位排序','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1808,1808,'post.export.status','岗位状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1809,1809,'post.noData','没有可访问岗位数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1810,1810,'post.errNameExists','操作岗位【{name}】失败,岗位名称已存在已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1811,1811,'post.errCodeExists','操作角色【{name}】失败,角色键值已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1830,1830,'user.export.id','用户编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1831,1831,'user.export.name','登录账号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1832,1832,'user.export.nick','用户昵称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1833,1833,'user.export.email','电子邮箱','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1834,1834,'user.export.phone','手机号码','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1835,1835,'user.export.sex','用户性别','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1836,1836,'user.export.status','用户状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1837,1837,'user.export.deptID','部门编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1838,1838,'user.export.deptName','部门名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1839,1839,'user.export.deptLeader','部门负责人','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1840,1840,'user.export.loginIP','用户登录IP','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1841,1841,'user.export.loginDate','用户登录时间','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1842,1842,'user.noData','没有可访问用户数据!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1843,1843,'user.statusEq','变更状态与旧值相等!','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1844,1844,'user.errPasswdOld','修改密码失败,旧密码错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1845,1845,'user.errPasswdEqOld','新密码不能与旧密码相同','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1846,1846,'user.errPasswd','登录密码至少包含大小写字母、数字、特殊符号,且不少于6位','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1847,1847,'user.errEmailFormat','操作用户【{name}】失败,邮箱格式错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1848,1848,'user.errEmailExists','操作用户【{name}】失败,邮箱已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1849,1849,'user.errPhoneFormat','操作用户【{name}】失败,手机号码格式错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1850,1850,'user.errPhoneExists','操作用户【{name}】失败,手机号码已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1851,1851,'user.errNameExists','操作用户【{name}】失败,登录账号已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1852,1852,'user.import.mustItem','表格中必填列表项,{text}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1853,1853,'user.import.phoneExist','用户编号:{id} 手机号码 {phone} 已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1854,1854,'user.import.phoneFormat','用户编号:{id} 手机号码 {phone} 格式错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1855,1855,'user.import.emailExist','用户编号:{id} 用户邮箱:{email} 已存在','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1856,1856,'user.import.emailFormat','用户编号:{id} 用户邮箱:{email} 格式错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1857,1857,'user.import.success','用户编号:{id} 登录名称:{name} 导入成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1858,1858,'user.import.fail','用户编号:{id} 登录名称:{name} 导入失败','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1859,1859,'user.import.successUpdate','用户编号:{id} 登录名称:{name} 更新成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1860,1860,'user.import.failUpdate','用户编号:{id} 登录名称:{name} 更新失败','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1861,1861,'user.import.failTip','很抱歉,导入失败!共 {num} 条数据格式不正确,错误如下:','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1862,1862,'user.import.successTip','恭喜您,数据已全部导入成功!共 {num} 条,数据如下:','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1900,1900,'app.common.err403','无权访问 {method} {requestURI}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1901,1901,'app.common.err401','无效身份授权','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1902,1902,'app.common.err400','参数错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1903,1903,'app.common.exportEmpty','导出数据记录为空','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1904,1904,'app.common.errOperateAdmin','不允许操作内置用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1905,1905,'app.common.errOperateRole','不允许操作内置角色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1906,1906,'app.common.deleteSuccess','删除成功:{num}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1907,1907,'app.common.loginSuccess','登录成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1908,1908,'app.common.logoutSuccess','注销成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1909,1909,'app.common.errUnlock','该用户未被锁定','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1910,1910,'app.common.noLoginUser','登录用户信息无效','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1911,1911,'app.common.rateLimitTip','访问过于频繁,请稍候再试','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1912,1912,'log.operate.export.id','操作编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1913,1913,'log.operate.export.title','模块名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1914,1914,'log.operate.export.businessType','业务类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1915,1915,'log.operate.export.method','操作方法','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1916,1916,'log.operate.export.requestMethod','请求方式 ','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1917,1917,'log.operate.export.operatorType','操作类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1918,1918,'log.operate.export.operName','操作人员','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1919,1919,'log.operate.export.deptName','操作人员部门名称','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1920,1920,'log.operate.export.url','请求链接地址','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1921,1921,'log.operate.export.ip','请求主机 ','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1922,1922,'log.operate.export.location','请求地址','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1923,1923,'log.operate.export.param','请求参数','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1924,1924,'log.operate.export.msg','操作信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1925,1925,'log.operate.export.status','操作状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1926,1926,'log.operate.export.costTime','消耗时间(毫秒)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1927,1927,'log.operate.export.operTime','操作时间','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1928,1928,'log.login.export.id','记录编号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1929,1929,'log.login.export.userName','登录账号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1930,1930,'log.login.export.status','登录状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1931,1931,'log.login.export.ip','登录地址','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1932,1932,'log.login.export.location','登录地点','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1933,1933,'log.login.export.browser','浏览器','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1934,1934,'log.login.export.os','操作系统','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1935,1935,'log.login.export.msg','登录信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1936,1936,'log.login.export.time','登录时间','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1937,1937,'trace.tcpdump.noData','找不到 {type} {id} 对应网元信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1938,1938,'register.errUsername','账号不能以数字开头,可包含大写小写字母,数字,且不少于5位','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1939,1939,'register.errPasswd','登录密码至少包含大小写字母、数字、特殊符号,且不少于6位','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1940,1940,'register.errPasswdNotEq','用户确认输入密码不一致','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1941,1941,'register.success','注册成功','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1942,1942,'register.successMsg','{name} 注册成功 {id}','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1943,1943,'log.operate.title.sysJobLog','调度任务日志','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1944,1944,'log.operate.title.sysJob','调度任务','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1945,1945,'log.operate.title.tcpdump','信令抓包','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1946,1946,'log.operate.title.sysConfig','参数配置','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1947,1947,'log.operate.title.sysDept','部门','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1948,1948,'log.operate.title.sysDictData','字典数据','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1949,1949,'log.operate.title.sysDictType','字典类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1950,1950,'log.operate.title.sysMenu','菜单','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1951,1951,'log.operate.title.sysPost','岗位','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1952,1952,'log.operate.title.sysProfile','个人信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1953,1953,'log.operate.title.sysProfileAvatar','个人头像','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1954,1954,'log.operate.title.sysRole','角色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1955,1955,'log.operate.title.sysUser','用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1956,1956,'log.operate.title.sysLogOper','操作日志记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1957,1957,'log.operate.title.sysLogLogin','登录日志记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1958,1958,'login.errNameOrPasswd','用户不存在或密码错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1959,1959,'login.errDelFlag','对不起,您的账号已被删除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1960,1960,'login.errStatus','对不起,您的帐户已被禁用','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1961,1961,'login.errRetryPasswd','密码输入错误多次,帐户已被锁定','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1962,1962,'captcha.err','验证码错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1963,1963,'captcha.errValid','验证码已失效','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1964,1964,'app.common.noUaOsBrowser','未知 未知','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1965,1965,'app.common.noIPregion','内网','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1966,1966,'app.common.unknown','未知','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1967,1967,'app.common.noNEInfo','未找到匹配网元信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1968,1968,'ne.udm.errImportUserAuthFileFormat','请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, ki, algo, amf, opc','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1969,1969,'ne.udm.errExportType','导出文件类型支持CSV和txt','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1970,1970,'ne.udm.errImportUserSubFileFormat','请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1971,1971,'log.operate.title.udmAuth','UDM鉴权用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1972,1972,'log.operate.title.udmSub','UDM签约用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1973,1973,'dictType.active_alarm_type','活动告警类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1974,1974,'dictType.active_alarm_type_remark','活动告警类型列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1975,1975,'dictData.active_alarm_type.communication','通信告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1976,1976,'dictData.active_alarm_type.equipment','设备告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1977,1977,'dictData.active_alarm_type.processing','处理错误','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1978,1978,'dictData.active_alarm_type.environmental','环境告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1979,1979,'dictData.active_alarm_type.qualityOfService','服务质量','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1980,1980,'dictType.active_clear_type','告警清除类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1981,1981,'dictType.active_clear_type_remark','告警清除类型列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1982,1982,'dictData.active_clear_type.notCleared','告警未清除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1983,1983,'dictData.active_clear_type.hand','手动清除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1984,1984,'dictData.active_clear_type.auto','自动清除','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1985,1985,'dictType.active_ack_state','告警确认类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1986,1986,'dictType.active_ack_state_remark','告警确认类型列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1987,1987,'dictData.active_ack_state.unconfirmed','未确认','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1988,1988,'dictData.active_ack_state.confirmed','已确认','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1989,1989,'dictType.active_alarm_severity','严重程度','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1990,1990,'dictType.active_alarm_severity_remark','严重程度列表','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1991,1991,'dictData.active_alarm_severity.critical','严重告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1992,1992,'dictData.active_alarm_severity.major','主要告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1993,1993,'dictData.active_alarm_severity.minor','次要告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1994,1994,'dictData.active_alarm_severity.warning','警告告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1995,1995,'dictData.active_alarm_severity.event','事件告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1996,1996,'config.sys.officialUrl','系统设置-官网链接','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1997,1997,'config.sys.helpDoc','系统设置-系统使用文档','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1998,1998,'config.sys.officialUrlRemark','默认无地址用#号','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(1999,1999,'config.sys.helpDocRemark','静态文件目录地址,使用{language}区分语言文件','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2000,2000,'log.operate.title.neAction','网元处理','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2001,2001,'log.operate.title.helpDoc','系统使用文档','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2002,2002,'menu.ueUser.n3iwf','N3IWF在线用户','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2003,2003,'menu.ueUser.pcf','用户策略控制信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2004,2004,'menu.system.user.editRole','修改用户角色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2005,2005,'config.sys.i18nOpen','国际化切换','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2006,2006,'config.sys.i18nDefault','国际化默认语言','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2007,2007,'user.export.role','用户角色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2008,2008,'menu.system.setting.i18n','国际化切换','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2009,2009,'menu.system.setting.i18nRemark','国际化多语言的切换选择','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2010,2010,'dictType.index_status','首页状态','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2011,2011,'dictType.index_status_remark','首页的网元状态颜色','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2012,2012,'dictType.index_status.normal','正常','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2013,2013,'dictType.index_status.abnormal','异常','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2014,2014,'menu.log.neFile','网元日志文件','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2015,2015,'job.deleteExpiredNeStateRecord','删除过期网元状态记录','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2016,2016,'job.deleteExpiredNeStateRecordRemark','定期删除过期的网元状态记录, 默认保留{duration}天','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2017,2017,'job.getStateFromNE','获取网元状态信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2018,2018,'job.getStateFromNERemark','获取所有网元状态信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2019,2019,'job.genNeStateAlarm','网元健康状态巡检','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2020,2020,'job.genNeStateAlarmRemark','网元健康状态巡检,异常时产生告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2021,2021,'menu.neUser.nssf','NSSF在线订阅数','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2022,2022,'menu.neUser.nssfAmf','NSSF可用的注册AMF','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2023,2023,'menu.monitor.topology','拓扑信息','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2024,2024,'menu.monitor.topologyBuild','拓扑图组编辑','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2025,2025,'log.operate.title.chartGraph','拓扑图组','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2026,2026,'menu.monitor.topologyArchitecture','网元拓扑组网','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2027,2027,'menu.alarm','告警','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2028,2028,'menu.topology','拓扑','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2029,2029,'config.sys.lockTime','系统设置-锁屏超时时长','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2030,2030,'config.sys.lockTimeRemark','无操作时锁屏超时时长,单位(秒)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2031,2031,'sys.account.captchaType','账号自助-验证码类型','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2032,2032,'sys.account.captchaTypeRemark','使用验证码类型(math数值计算,char字符验证)','i18n_zh',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(2033,2033,'menu.dashboard','仪表盘','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2034,2034,'menu.dashboard.overview','总览','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2035,2035,'menu.dashboard.cdr','IMS 话单','i18n_zh','','','1','supervisor',1705550000000,NULL,0,''),(2036,2036,'dictType.cdr_sip_code','CDR SIP响应代码类别类型','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2037,2037,'dictType.cdr_call_type','CDR 呼叫类型','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2038,2038,'dictType.ue_auth_code','UE 事件认证代码类型','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2039,2039,'dictType.ue_event_type','UE 事件类型','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2040,2040,'dictData.cdr_sip_code.200','正常挂机','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2041,2041,'dictData.cdr_sip_code.403','被禁止的','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2042,2042,'dictData.cdr_sip_code.408','请求超时','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2043,2043,'dictData.cdr_sip_code.500','服务器内部错误','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2044,2044,'dictData.cdr_call_type.audio','语音','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2045,2045,'dictData.cdr_call_type.video','视频','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2046,2046,'dictData.ue_auth_code.200','成功','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2047,2047,'dictData.ue_auth_code.001','网络失败','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2048,2048,'dictData.ue_auth_code.002','空口接口失败','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2049,2049,'dictData.ue_auth_code.003','MAC失败','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2050,2050,'dictData.ue_auth_code.004','同步失败','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2051,2051,'dictData.ue_auth_code.005','不接受非5G认证','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2052,2052,'dictData.ue_auth_code.006','响应失败','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2053,2053,'dictData.ue_auth_code.007','未知','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2054,2054,'dictData.ue_event_type.auth','认证','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2055,2055,'dictData.ue_event_type.detach','注销','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2056,2056,'dictData.ue_event_type.state','CM状态','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2057,2057,'dictType.ue_event_cm_state','UE 事件CM状态','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2058,2058,'dictData.ue_event_cm_state.connected','连接','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2059,2059,'dictData.ue_event_cm_state.idle','空闲','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2060,2060,'dictData.ue_event_cm_state.inactive','不活动','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2061,2061,'dictData.cdr_sip_code.404','未找到','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2062,2062,'dictData.cdr_sip_code.487','请求终止','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2063,2063,'dictData.cdr_sip_code.503','服务不可用','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2064,2064,'dictData.cdr_sip_code.504','服务器超时','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2065,2065,'dictData.cdr_sip_code.603','拒绝','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2066,2066,'dictData.cdr_sip_code.606','不可接受','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2067,2067,'cache.name.user','登录用户','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2068,2068,'cache.name.sys_config','参数管理','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2069,2069,'cache.name.sys_dict','字典管理','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2070,2070,'cache.name.captcha_codes','验证码','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2071,2071,'cache.name.repeat_submit','防重提交','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2072,2072,'cache.name.rate_limit','限流','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2073,2073,'cache.name.pwd_err_cnt','登录账户密码错误次数','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2074,2074,'cache.name.ne_info','网元信息管理','i18n_zh',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(2075,2075,'cache.name.ne_data','网元数据管理','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2076,2076,'dictData.cdr_call_type.sms','短信','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2077,2077,'dictData.cdr_sip_code.202','已接受','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2078,2078,'dictData.cdr_sip_code.488','这里不能接受','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2079,2079,'dictData.cdr_sip_code.0','其他','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2080,2080,'log.operate.title.ws','WS会话','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2081,2081,'log.operate.title.neHost','网元主机','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2082,2082,'neHost.noData','没有可访问主机信息数据!','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2083,2083,'neHost.errKeyExists','主机信息操作【{name}】失败,同组内名称已存在','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2084,2084,'neHost.errByHostInfo','连接主机失败,请检查连接参数后重试','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2085,2085,'dictType.ne_host_type','网元主机连接类型','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2086,2086,'dictType.ne_host_groupId','网元主机分组','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2087,2087,'dictType.ne_host_authMode','网元主机认证模式','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2088,2088,'dictData.ne_host_type.ssh','SSH','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2089,2089,'dictData.ne_host_type.telnet','Telnet','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2090,2090,'dictData.ne_host_groupId.0','其他','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2091,2091,'dictData.ne_host_groupId.1','网元','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2092,2092,'dictData.ne_host_groupId.2','系统','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2093,2093,'dictData.ne_host_authMode.0','密码认证','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2094,2094,'dictData.ne_host_authMode.1','私钥认证','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2095,2095,'menu.tools.terminal','网元主机终端','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2096,2096,'menu.config.neHost','网元主机','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2097,2097,'menu.config.neHostCommand','网元主机命令','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2098,2098,'log.operate.title.neHostCmd','网元主机命令','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2099,2099,'neHostCmd.noData','没有可访问主机命令数据!','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2100,2100,'neHostCmd.errKeyExists','主机命令操作【{name}】失败,同组内名称已存在','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2101,2101,'dictType.ne_host_cmd_groupId','网元主机命令分组','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2102,2102,'dictData.ne_host_cmd_groupId.0','默认','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2103,2103,'dictData.ne_host_cmd_groupId.1','快速命令','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2104,2104,'menu.config.neInfo','网元信息','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2105,2105,'log.operate.title.neInfo','网元信息','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2106,2106,'neInfo.noData','没有可访问网元信息数据!','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2107,2107,'neInfo.errKeyExists','网元信息操作【{key}】失败,同类型下标识已存在','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2108,2108,'log.operate.title.imsCDR','IMS-CDR会话','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2109,2109,'menu.dashboard.amfUE','用户活动','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2110,2110,'log.operate.title.amfUE','AMF-UE事件','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2111,2111,'dictData.ne_info_status.0','在线','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2112,2112,'dictData.ne_info_status.1','离线','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2113,2113,'dictData.ne_info_status.2','-','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2114,2114,'dictData.ne_info_status.3','待下发配置','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(2115,2115,'dictType.ne_info_status','网元信息状态','i18n_zh','','','1','supervisor',1705550000000,'',0,''),(3000,3000,'i18n','English','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3001,3001,'hello','Hello','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3002,3002,'menu.system','System','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3003,3003,'menu.monitor','Monitor','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3004,3004,'menu.tools','Tools','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3005,3005,'menu.config','Configuration','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3006,3006,'menu.ueUser','UE','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3007,3007,'menu.systemRemark','System Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3008,3008,'menu.monitorRemark','System Monitor Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3009,3009,'menu.toolsRemark','System Tools Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3010,3010,'menu.configRemark','OMC Configuration Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3011,3011,'menu.ueUserRemark','Network Element Terminal Information Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3012,3012,'menu.security.user','User Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3013,3013,'menu.security.role','Role Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3014,3014,'menu.security.roleUser','Assigning Roles','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3015,3015,'menu.system.menu','Menu Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3016,3016,'menu.security.dept','Department Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3017,3017,'menu.security.post','Position Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3018,3018,'menu.system.dictType','Dictionary Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3019,3019,'menu.system.dictData','Dictionary Data','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3020,3020,'menu.system.paramSet','Parameter Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3021,3021,'menu.system.systemLog','System Log','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3022,3022,'menu.system.systemInfo','System Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3023,3023,'menu.system.cacheInfo','Cache Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3024,3024,'menu.system.cache','Cache Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3025,3025,'menu.security.onlineUser','Online Users','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3026,3026,'menu.system.job','Scheduling Tasks','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3027,3027,'menu.system.jobLog','Scheduling Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3028,3028,'menu.tools.help','Help Documentation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3029,3029,'menu.log.operat','Operation logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3030,3030,'menu.log.login','Security logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3031,3031,'menu.security.userRemark','User Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3032,3032,'menu.security.roleRemark','Role Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3033,3033,'menu.security.roleUserRemark','Assign Roles Embedded Hidden Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3034,3034,'menu.system.menuRemark','Menu Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3035,3035,'menu.security.deptRemark','Department management menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3036,3036,'menu.security.postRemark','Job Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3037,3037,'menu.system.dictTypeRemark','Dictionary management menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3038,3038,'menu.system.dictDataRemark','Dictionary data embedded hidden menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3039,3039,'menu.system.paramSetRemark','Parameter setting menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3040,3040,'menu.system.systemLogRemark','System Log Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3041,3041,'menu.system.systemInfoRemark','System information menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3042,3042,'menu.system.cacheInfoRemark','Cache Information Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3043,3043,'menu.system.cacheRemark','Cache List Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3044,3044,'menu.security.onlineUserRemark','Online User Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3045,3045,'menu.system.jobRemark','Scheduling Tasks menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3046,3046,'menu.system.jobLogRemark','Scheduling Log Embedded Hidden Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3047,3047,'menu.tools.helpRemark','Help file menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3048,3048,'menu.log.operatRemark','Operation log menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3049,3049,'menu.log.loginRemark','Login log menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3050,3050,'menu.common.query','Inquiry','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3051,3051,'menu.common.add','Add','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3052,3052,'menu.common.edit','Modify','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3053,3053,'menu.common.delete','Delete','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3054,3054,'menu.common.export','Export','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3055,3055,'menu.common.import','Import','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3056,3056,'menu.common.reset','Reset','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3057,3057,'menu.common.unlock','Account Unlock','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3058,3058,'menu.forcedQuit.batch ','Batch Undo','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3059,3059,'menu.forcedQuit.single','Individual Forced Retirement','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3060,3060,'menu.ueUser.authUDM','UDM Authentication','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3061,3061,'menu.ueUser.subUDM','UDM Subscribers','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3062,3062,'menu.ueUser.authUDMRemark','UDM Authentication Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3063,3063,'menu.ueUser.subUDMRemark','UDM Subscriber Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3064,3064,'menu.config.neManage','NE Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3065,3065,'menu.config.configNE','Parameter Configuration Original','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3066,3066,'menu.config.neManageRemark','Network Element Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3067,3067,'menu.config.configNERemark','Parameter Configuration Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3068,3068,'menu.config.backupManage','Backup Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3069,3069,'menu.config.softwareManage','Software Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3070,3070,'menu.ueUser.onlineIMS','IMS Online Users','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3071,3071,'menu.ueUser.onlineUE','UE Online Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3072,3072,'menu.ueUser.base5G','Radio Information','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3073,3073,'menu.trace','Trace','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3074,3074,'menu.trace.task','Trace Tasks','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3075,3075,'menu.trace.analysis','Signaling Analysis','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3076,3076,'menu.trace.pcap','Signaling Capture','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3077,3077,'menu.fault','Monitor','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3078,3078,'menu.config.backupManageRemark','Backup Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3079,3079,'menu.config.softwareManageRemark','Software Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3080,3080,'menu.ueUser.onlineIMSRemark','IMS Online User Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3081,3081,'menu.ueUser.onlineUERemark','UE Online Information Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3082,3082,'menu.ueUser.base5GRemark','5G Base Station Information Menu','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3083,3083,'menu.traceRemark','Tracking Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3084,3084,'menu.trace.taskRemark','Tracking Task Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3085,3085,'menu.trace.analysisRemark','Signaling Analysis Menu','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3086,3086,'menu.trace.pcapRemark','Signaling Capture Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3087,3087,'menu.faultRemark','Fault Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3088,3088,'menu.fault.active','Active Alarms','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3089,3089,'menu.log','Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3090,3090,'menu.log.operatOld','Operation Logs (old)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3091,3091,'menu.log.mml','MML Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3092,3092,'menu.log.alarm','Alarm Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3093,3093,'menu.log.securityOld','Security Logs (old)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3094,3094,'menu.log.forwarding','Alarm Forwarding Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3095,3095,'menu.log.set','Log Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3096,3096,'menu.monitor.sessionUser','User Sessions','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3097,3097,'menu.fault.history','Historical Alarms','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3098,3098,'menu.fault.set','Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3099,3099,'menu.perf','Performance','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3100,3100,'menu.fault.activemRemark','Active Alarm Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3101,3101,'menu.logRemark','Log Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3102,3102,'menu.log.operatOldRemark','Operation log old layui menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3103,3103,'menu.log.mmlRemark','Operation MML Log','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3104,3104,'menu.log.alarmRemark','Alarm Log Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3105,3105,'menu.log.securityOldRemark','Security Log Old Layui Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3106,3106,'menu.log.forwardingRemark','Alarm forward log menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3107,3107,'menu.log.setRemark','Log Settings menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3108,3108,'menu.monitor.sessionUserRemark','User Session Old Layui Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3109,3109,'menu.fault.historyRemark','Alarm history menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3110,3110,'menu.fault.setRemark','Fault General Setup Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3111,3111,'menu.perfRemark','Performance Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3112,3112,'menu.perf.task','Performance Tasks','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3113,3113,'menu.perf.data','Performance Data','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3114,3114,'menu.perf.report','Performance Reports','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3115,3115,'menu.perf.threshold','Performance Thresholds','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3116,3116,'menu.perf.kpi','Key Performance Indicators','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3117,3117,'menu.perf.customTarget','Custom Metrics','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3118,3118,'menu.perf.set','Performance General Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3119,3119,'menu.mml','MML','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3120,3120,'menu.mml.ne','NE Operation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3121,3121,'menu.mml.udm','UDM Operation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3122,3122,'menu.mml.set','MML Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3123,3123,'menu.mml.omc','OMC Operation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3124,3124,'menu.perf.taskRemark','Task Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3125,3125,'menu.perf.dataRemark','Performance Data Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3126,3126,'menu.perf.reportRemark','Performance Report Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3127,3127,'menu.perf.thresholdRemark','Performance Threshold Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3128,3128,'menu.perf.kpiRemark','Key Performance Indicator Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3129,3129,'menu.perf.customTargetRemark','Custom Metrics Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3130,3130,'menu.perf.setRemark','Performance General Settings Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3131,3131,'menu.mmlRemark','MML Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3132,3132,'menu.mml.neRemark','Network Element Operations Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3133,3133,'menu.mml.udmRemark','Network Element UDM User Data Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3134,3134,'menu.mml.setRemark','MML Setup Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3135,3135,'menu.mml.omcRemark','OMC Operation Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3136,3136,'menu.config.licenseManage','License Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3137,3137,'menu.security','Security','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3138,3138,'menu.system.systemSet','System Settings','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3139,3139,'menu.system.systemResource','System Resources','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3140,3140,'menu.config.configNEForm','Parameter Configuration Form','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3141,3141,'menu.config.configNETree','Parameter Configuration Tree','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3142,3142,'menu.config.configNETreeTable','Parameter Configuration','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3143,3143,'menu.config.licenseManageRemark','License Management Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3144,3144,'menu.securityRemark','Security Management Catalog','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3145,3145,'menu.system.systemSetRemark','System Settings Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3146,3146,'menu.system.systemResourceRemark','System Resources cpu io network menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3147,3147,'menu.config.configNEFormRemark','Parameter Configuration Form Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3148,3148,'menu.config.configNETreeRemark','Parameter Configuration Tree Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3149,3149,'menu.config.configNETreeTableRemark','Configuring the TreeTable menu with parameters','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3150,3150,'menu.noData','There is no accessible menu data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3151,3151,'menu.errNameExists','Failed to operate menu [{name}], menu name already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3152,3152,'menu.errPathExists','Failed to operate menu [{name}], menu routing address already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3153,3153,'menu.errFramePath','Failed to manipulate menu [{name}], non-internal address should start with http(s)://','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3154,3154,'menu.errParentStatus','The parent menu is not enabled!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3155,3155,'menu.errHasChildUse','Operation menu [{name}] failed, number of submenus in use exists: {num}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3156,3156,'menu.errHasRoleUse','Operation menu [{name}] failed, number of roles the menu has been assigned to: {num}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3400,3400,'dictData.sex.un','Not selected','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3401,3401,'dictData.sex.male','Male','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3402,3402,'dictData.sex.female','Female','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3403,3403,'dictData.show','Show','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3404,3404,'dictData.hide','Hide','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3405,3405,'dictData.normal','Active','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3406,3406,'dictData.disable','Inactive','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3407,3407,'dictData.yes','Yes','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3408,3408,'dictData.no','No','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3409,3409,'dictData.success','Successful','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3410,3410,'dictData.fail','Failed','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3411,3411,'dictData.jobStatus.normal','Active','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3412,3412,'dictData.jobStatus.pause','Inactive','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3413,3413,'dictData.jobGroup.Default','Default','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3414,3414,'dictData.jobGroup.System','System','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3415,3415,'dictData.operType.other','Other','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3416,3416,'dictData.operType.add','New','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3417,3417,'dictData.operType.edit','Modify','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3418,3418,'dictData.operType.delete','Delete','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3419,3419,'dictData.operType.auth','Authorization','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3420,3420,'dictData.operType.export','Export','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3421,3421,'dictData.operType.import','Import','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3422,3422,'dictData.operType.forced quit','Forced Retirement','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3423,3423,'dictData.operType.clear','Clear','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3424,3424,'dictData.trace.interface','Interface Tracing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3425,3425,'dictData.trace.device','Device Tracing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3426,3426,'dictData.trace.user','User Tracing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3427,3427,'dictData.logType.download','Download','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3428,3428,'dictData.logType.activation','Activation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3429,3429,'dictData.logType.add','New','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3430,3430,'dictData.logType.other','Other','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3431,3431,'dictData.logType.back','Rollback','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3432,3432,'dictData.logType.delete','Delete','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3433,3433,'dictData.logType.distribute','Assign','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3434,3434,'dictData.logType.export','Export','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3435,3435,'dictData.logType.query','Query','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3436,3436,'dictData.logType.setup','Setup','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3437,3437,'dictData.logType.update','Update','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3438,3438,'dictData.logType.upload','Upload','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3439,3439,'dictData.logType.view','View','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3440,3440,'dictData.logType.login','Login','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3441,3441,'dictData.logType.logout','Logout','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3442,3442,'dictData.securityLogType.add','New','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3443,3443,'dictData.securityLogType.update','Update','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3444,3444,'dictData.securityLogType.delete','Delete','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3445,3445,'dictData.securityLogType.lock','Locked','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3446,3446,'dictData.securityLogType.unlock','Unlock','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3447,3447,'dictData.securityLogType.reset','Reset','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3448,3448,'dictData.securityLogType.deactivate','Deactivate','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3449,3449,'dictData.jobSaveLog.no','No Record','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3450,3450,'dictData.jobSaveLog.yes','Recorded','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3451,3451,'dictData.neVersionStatus.upload','Uploaded','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3452,3452,'dictData.neVersionStatus.inactive','Inactivated','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3453,3453,'dictData.neVersionStatus.active','Activated','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3454,3454,'dictData.alarmStatus.history','Historical Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3455,3455,'dictData.alarmStatus.active','Active Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3456,3456,'dictData.export.code','Data Codes','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3457,3457,'dictData.export.sort','Data Sorting','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3458,3458,'dictData.export.label','Data Labeling','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3459,3459,'dictData.export.value','Data Key','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3460,3460,'dictData.export.type','Data Sorting','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3461,3461,'dictData.export.status','Data Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3462,3462,'dictData.datascope.all','All data permissions','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3463,3463,'dictData.datascope.custom','Customized Data Rights','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3464,3464,'dictData.datascope.dept','Departmental Data Permissions','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3465,3465,'dictData.datascope.deptAndChid','Department and below','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3466,3466,'dictData.datascope.self','Personal data access only','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3467,3467,'dictData.noData','There is no accessible dictionary code data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3468,3468,'dictData.errLabelExists','Failed to manipulate data [{name}], tag name already exists under this dictionary type!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3500,3500,'dictType.sys_user_sex','User Gender','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3501,3501,'dictType.sys_show_hide','Menu Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3502,3502,'dictType.sys_normal_disable','System switches','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3503,3503,'dictType.sys_job_status','Task Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3504,3504,'dictType.sys_job_group','Task Grouping','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3505,3505,'dictType.sys_yes_no','System or not','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3506,3506,'dictType.sys_oper_type','Operation Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3507,3507,'dictType.sys_common_status','System Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3508,3508,'dictType.trace_type','Trace Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3509,3509,'dictType.operation_log_type','Operation Log Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3510,3510,'dictType.alarm_status','Alarm Log Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3511,3511,'dictType.security_log_type','Security Log Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3512,3512,'dictType.ne_version_status','Network element software version status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3513,3513,'dictType.i18n_en','Multi-language - English','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3514,3514,'dictType.i18n_zh','Multi-language - Chinese','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3515,3515,'dictType.sys_user_sex_remark','User gender list','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3516,3516,'dictType.sys_show_hide_remark','Menu Status List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3517,3517,'dictType.sys_normal_disable_remark','System switch list','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3518,3518,'dictType.sys_job_status_remark','Task Status List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3519,3519,'dictType.sys_job_group_remark','Task Grouping List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3520,3520,'dictType.sys_yes_no_remark','System whether list','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3521,3521,'dictType.sys_oper_type_remark','Operation type list','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3522,3522,'dictType.sys_common_status_remark','Login Status List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3523,3523,'dictType.trace_type_remark','Trace Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3524,3524,'dictType.operation_log_type_remark','Operation log type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3525,3525,'dictType.alarm_status_remark','alarm_status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3526,3526,'dictType.security_log_type_remark','Security Log Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3527,3527,'dictType.ne_version_status_remark','Network element software version status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3528,3528,'dictType.i18n_en_remark','Internationalization - English','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3529,3529,'dictType.i18n_zh_remark','Internationalization - Chinese','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3530,3530,'dictType.export.id','Dictionary Code','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3531,3531,'dictType.export.name','Dictionary Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3532,3532,'dictType.export.type','Dictionary Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3533,3533,'dictType.export.status','Dictionary Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3534,3534,'dictType.sys_role_datascope','System Role Data Range','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3535,3535,'dictType.sys_role_datascope_remark','System Role Data Range Mapping','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3536,3536,'dictType.noData','There is no accessible dictionary type data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3537,3537,'dictType.errNameExists','Failed to manipulate dictionary [{name}], dictionary name already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3538,3538,'dictType.errTypeExists','Failed to manipulate dictionary [{name}], dictionary type already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3600,3600,'dept.root','System Maintenance Department','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3601,3601,'dept.root.item1','Operation and Maintenance Department One','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3602,3602,'dept.noData','There is no accessible department data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3603,3603,'dept.errParentDelFlag','The parent department [{name}] has been deleted and is not allowed to be added.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3604,3604,'dept.errParentStatus','Parent department [{name}] is deactivated, additions are not allowed!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3605,3605,'dept.errNameExists','Manipulate department [{name}] failed, department name already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3606,3606,'dept.errParentID','Failed to operate department [{name}], the parent department cannot be itself.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3607,3607,'dept.errHasChildUse','Operation failed, the department contains undeactivated sub-departments number: {num}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3608,3608,'dept.errHasUserUse','Deletion is not allowed, number of users the department has been assigned to: {num}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3630,3630,'config.sys.user.initPassword','User Management-Account Initial Password','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3631,3631,'config.sys.account.captchaEnabled','Account self-help-Certification code switch','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3632,3632,'config.sys.account.registerUser','Account self-service-Whether to enable the user registration function','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3633,3633,'config.sys.user.maxRetryCount','User Management-Maximum number of password errors','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3634,3634,'config.sys.user.lockTime','User Management-Password Lock Time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3635,3635,'config.monitor.sysResource.storeDays','Monitor-System Resources-Data retention time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3636,3636,'config.sys.logo.type','System Settings-Logo Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3637,3637,'config.sys.logo.filePathIcon','System Settings-Logo File icon','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3638,3638,'config.sys.logo.filePathBrand','System Settings-Logo File Brand','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3639,3639,'config.sys.loginBackground','System Settings-Login Interface Background','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3640,3640,'config.sys.title','System Settings-System Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3641,3641,'config.sys.copyright','System Settings-Copyright Notice','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3642,3642,'config.sys.user.initPasswordRemark','Import user initialization password 123456','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3643,3643,'config.sys.account.captchaEnabledRemark','Whether to enable the verification code function (true on, false off)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3644,3644,'config.sys.account.registerUserRemark','Whether to enable the function of registered users (true on, false off)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3645,3645,'config.sys.user.maxRetryCountRemark','Maximum number of password errors','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3646,3646,'config.sys.user.lockTimeRemark','Password lock time in minutes (default 10 minutes)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3647,3647,'config.monitor.sysResource.storeDaysRemark','Monitor-System Resources-Data retention time, in days. According to the current date, delete the date data information that exceeds the retention time.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3648,3648,'config.sys.logo.typeRemark','Full image: brand\r\nSmall image: icon','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3649,3649,'config.sys.logo.filePathIconRemark','File support for web address images and file paths for internal uploads','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3650,3650,'config.sys.logo.filePathBrandRemark','File support for web address images and paths to internally uploaded files','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3651,3651,'config.sys.loginBackgroundRemark','The file supports web address images and internal upload file paths with a # in the default background','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3652,3652,'config.sys.titleRemark','System name length limit of 11-digit string','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3653,3653,'config.sys.copyrightRemark','Footer fixing strip with copyright notice on the left side','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3654,3654,'config..export.id','Parameter Code','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3655,3655,'config..export.name','Parameter Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3656,3656,'config..export.key','Parameter key name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3657,3657,'config..export.value','Parameter Key Value','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3658,3658,'config..export.type','System builtin','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3659,3659,'config..export.remark','Parameter Description','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3660,3660,'config.sys.titleValue','AGrandEMS','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3661,3661,'config.sys.copyrightValue','Copyright ©2023 AGrandTech','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3662,3662,'config.noData','No parameter configuration data is accessible!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3663,3663,'config.errKey','Invalid key','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3664,3664,'config.errValueEq','Change state is equal to the old value!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3665,3665,'config.errKeyExists','Failed to manipulate parameter configuration [{name}], parameter key name already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3666,3666,'config.errDelete','Deletion of parameter configuration information failed!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3667,3667,'config.errType','The operation contains built-in parameters and deletion is prohibited!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3700,3700,'job.monitor_sys_resource','Monitor-System Resources','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3701,3701,'job.monitor_sys_resource_remark','System Resource CPU/IO/Netword Collection\r\ninterval unit minutes, average minute resource situation\r\nNote: Please pass the value of the parameter interva according to the time unit minutes of the cron expression','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3702,3702,'job.delExpiredNeBackup','Delete expired NE etc backup file','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3703,3703,'job.delExpiredNeBackupRemark','Delete expired network element etc backup file, pass in the parameter to keep the backup file for {duration} days, default is 60 days.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3704,3704,'job.deleteExpiredAlarmRecord','Delete expired historical alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3705,3705,'job.deleteExpiredAlarmRecordRemark','Delete expired history alarm records, pass in the parameter to keep the history alarm records for {duration} days.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3706,3706,'job.deleteExpiredKpiRecord','Delete expired KPI records','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3707,3707,'job.deleteExpiredKpiRecordRemark','KPI record retention for {duration} days','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3708,3708,'job.backupEtcFromNE','Network Element Configuration Auto Backup Task','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3709,3709,'job.backupEtcFromNERemark','Automatically backs up the configuration files in the network element\'s etc directory.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3710,3710,'job.export.jobID','Task Code','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3711,3711,'job.export.jobName','Task name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3712,3712,'job.export.jobGroupName','Task Group Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3713,3713,'job.export.invokeTarget','Call target','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3714,3714,'job.export.targetParams','Incoming Parameters','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3715,3715,'job.export.cronExpression','cron expressions','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3716,3716,'job.export.status','Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3717,3717,'job.export.remark','Remarks Description','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3718,3718,'job.export.jobLogID','Task log number','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3719,3719,'job.export.jobLogStatus','Task log status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3720,3720,'job.export.jobLogTime','Task log time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3721,3721,'job.noData','There is no accessible scheduling task data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3722,3722,'job.errTargetParams','Failed to operate scheduling task [{name}] with incorrect task incoming parameter json string!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3723,3723,'job.errCronExpression','Scheduled task [{name}] failed with incorrect Cron expression!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3724,3724,'job.errJobExists','Failed to add a new task [{name}] to a scheduling task, same task name in the same task group','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3725,3725,'job.statusEq','The change state is equal to the old value!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3750,3750,'role.admin','Super Administrator','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3751,3751,'role.adminAssign','Managers','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3752,3752,'role.operator','Operators','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3753,3753,'role.monitor','Monitor','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3754,3754,'role.vistor','General Users','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3755,3755,'role.adminRemark','Super Administrator, cannot modify or delete','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3756,3756,'role.adminAssignRemark','Administrators can perform any operation on the device','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3757,3757,'role.operatorRemark','Operation and maintenance personnel can read data from the device and configure the device, but cannot perform software upgrade operations on the device.','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3758,3758,'role.monitorRemark','Monitoring personnel Can only read data from the device, but cannot make any settings on the device','i18n_en','','','1','supervisor',1700000000000,NULL,0,''),(3759,3759,'role.vistorRemark','Ordinary users can only see system-related information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3760,3760,'role.export.id','Role ID','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3761,3761,'role.export.name','Role Name ','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3762,3762,'role.export.key','Role Key','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3763,3763,'role.export.sort','Role Order','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3764,3764,'role.export.dataScope','Role Data Range','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3765,3765,'role.export.status','Role Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3766,3766,'role.noData','There is no accessible role data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3767,3767,'role.statusEq','The change status is equal to the old value!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3768,3768,'role.errNameExists','Manipulating role [{name}] failed, role name already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3769,3769,'role.errKeyExists','Failed to manipulate role [{name}], role key already exists!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3800,3800,'post.admin','Systems','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3801,3801,'post.operator','Management','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3802,3802,'post.monitor','Operation & Maintenance','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3803,3803,'post.visitor','Monitoring','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3804,3804,'post.export.id','Post ID ','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3805,3805,'post.export.code','Position Code','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3806,3806,'post.export.name','Position Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3807,3807,'post.export.sort','Position Sort','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3808,3808,'post.export.status','Position Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3809,3809,'post.noData','There is no accessible post data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3810,3810,'post.errNameExists','Failed to manipulate post [{name}], post name already exists already exists','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3811,3811,'post.errCodeExists','Failed to manipulate role [{name}], role key already exists.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3830,3830,'user.export.id','User ID','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3831,3831,'user.export.name','Login Account','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3832,3832,'user.export.nick','Nickname','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3833,3833,'user.export.email','E-Mail','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3834,3834,'user.export.phone','Cell phone number','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3835,3835,'user.export.sex','Gender','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3836,3836,'user.export.status','User Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3837,3837,'user.export.deptID','Department number','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3838,3838,'user.export.deptName','Department Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3839,3839,'user.export.deptLeader','Department Head','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3840,3840,'user.export.loginIP','User Login IP','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3841,3841,'user.export.loginDate','User Login Time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3842,3842,'user.noData','No accessible user data!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3843,3843,'user.statusEq','The change status is equal to the old value!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3844,3844,'user.errPasswdOld','Change password failed, old password is wrong','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3845,3845,'user.errPasswdEqOld','New password cannot be the same as the old one','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3846,3846,'user.errPasswd','Login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3847,3847,'user.errEmailFormat','Failed to operate user [{name}], mailbox format error','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3848,3848,'user.errEmailExists','Failed to operate user [{name}], mailbox already exists.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3849,3849,'user.errPhoneFormat','Failed to operate user [{name}], cell phone number format is wrong.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3850,3850,'user.errPhoneExists','Failed to operate user [{name}], cell phone number already exists.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3851,3851,'user.errNameExists','Failed to operate user [{name}], login account already exists.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3852,3852,'user.import.mustItem','Required list item in form, {text}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3853,3853,'user.import.phoneExist','User ID: {id} cell phone number {phone} Existing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3854,3854,'user.import.phoneFormat','User ID: {id} cell phone number {phone} Wrong format','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3855,3855,'user.import.emailExist','User ID: {id} User Email: {email} Existing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3856,3856,'user.import.emailFormat','User ID: {id} Email: {email} Wrong Format','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3857,3857,'user.import.success','User ID:{id} Login name:{name} Imported successfully!','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3858,3858,'user.import.fail','User ID: {id} Login name: {name} Import failed','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3859,3859,'user.import.successUpdate','User ID: {id} Login name: {name} Update success','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3860,3860,'user.import.failUpdate','User ID: {id} Login Name: {name} Update Failed','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3861,3861,'user.import.failTip','Sorry, the import failed! A total of {num} entries were not formatted correctly, the error is below:','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3862,3862,'user.import.successTip','Congratulations, the data has been imported successfully! There are {num} entries with the following data:','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3900,3900,'app.common.err403','Unauthorized access {method} {requestURI}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3901,3901,'app.common.err401','Invalid authorization','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3902,3902,'app.common.err400','Parameter error','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3903,3903,'app.common.exportEmpty','Export data record is empty','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3904,3904,'app.common.errOperateAdmin','Built-in users are not allowed to operate','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3905,3905,'app.common.errOperateRole','Built-in roles are not allowed to be operated','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3906,3906,'app.common.deleteSuccess','Deleted successfully: {num}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3907,3907,'app.common.loginSuccess','Login Success','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3908,3908,'app.common.logoutSuccess','Logout Successful','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3909,3909,'app.common.errUnlock','The user is not locked','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3910,3910,'app.common.noLoginUser','Invalid login user information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3911,3911,'app.common.rateLimitTip','Access too often, please try again later','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3912,3912,'log.operate.export.id','Operation Number','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3913,3913,'log.operate.export.title','Module Name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3914,3914,'log.operate.export.businessType','Operation Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3915,3915,'log.operate.export.method','Operation Method','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3916,3916,'log.operate.export.requestMethod','Request Method ','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3917,3917,'log.operate.export.operatorType','Operation Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3918,3918,'log.operate.export.operName','Operator','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3919,3919,'log.operate.export.deptName','Operator\'s department name','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3920,3920,'log.operate.export.url','Request Link Address','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3921,3921,'log.operate.export.ip','Requesting Host ','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3922,3922,'log.operate.export.location','Request Address','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3923,3923,'log.operate.export.param','Request Parameters','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3924,3924,'log.operate.export.msg','Operation Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3925,3925,'log.operate.export.status','Operation status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3926,3926,'log.operate.export.costTime','Consumption time (ms)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3927,3927,'log.operate.export.operTime','Operation time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3928,3928,'log.login.export.id','Record number','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3929,3929,'log.login.export.userName','Login Account','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3930,3930,'log.login.export.status','Login Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3931,3931,'log.login.export.ip','Login Address','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3932,3932,'log.login.export.location','Login Location','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3933,3933,'log.login.export.browser','Browser','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3934,3934,'log.login.export.os','Operating System','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3935,3935,'log.login.export.msg','Login Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3936,3936,'log.login.export.time','Login Time','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3937,3937,'trace.tcpdump.noData','Can\'t find {type} {id} information of the corresponding network element.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3938,3938,'register.errUsername','The account number cannot start with a number, but can contain upper and lower case letters, numbers, and not less than 5 digits.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3939,3939,'register.errPasswd','The password must contain at least 6 upper and lower case letters, numbers, and special symbols.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3940,3940,'register.errPasswdNotEq','User confirms password inconsistency','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3941,3941,'register.success','Successful registration','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3942,3942,'register.successMsg','{name} Register Successful {id}','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3943,3943,'log.operate.title.sysJobLog','Scheduling Task Logs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3944,3944,'log.operate.title.sysJob','Scheduling Tasks','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3945,3945,'log.operate.title.tcpdump','Signaling Capture','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3946,3946,'log.operate.title.sysConfig','Parameter Configuration','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3947,3947,'log.operate.title.sysDept','Sector','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3948,3948,'log.operate.title.sysDictData','Dictionary Data','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3949,3949,'log.operate.title.sysDictType','Dictionary type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3950,3950,'log.operate.title.sysMenu','Menu','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3951,3951,'log.operate.title.sysPost','Positions','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3952,3952,'log.operate.title.sysProfile','Personal Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3953,3953,'log.operate.title.sysProfileAvatar','Personal avatar','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3954,3954,'log.operate.title.sysRole','Roles','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3955,3955,'log.operate.title.sysUser','User','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3956,3956,'log.operate.title.sysLogOper','Operation Logging','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3957,3957,'log.operate.title.sysLogLogin','Operation Logging','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3958,3958,'login.errNameOrPasswd','User does not exist or password is wrong','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3959,3959,'login.errDelFlag','Sorry, your account has been deleted','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3960,3960,'login.errStatus','Sorry, your account has been disabled','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3961,3961,'login.errRetryPasswd','Password was entered incorrectly several times, account has been locked','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3962,3962,'captcha.err','Captcha Error','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3963,3963,'captcha.errValid','Captcha is invalid','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3964,3964,'app.common.noUaOsBrowser','Unknown Unknown','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3965,3965,'app.common.noIPregion','Intranet','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3966,3966,'app.common.unknown','Unknown','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3967,3967,'app.common.noNEInfo','No matching network element information found','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3968,3968,'ne.udm.errImportUserAuthFileFormat','Please upload a file in the format of. csv or. txt. English comma separated txt format: imsi, ki, algo, amf, opc','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3969,3969,'ne.udm.errExportType','Export file types support CSV and txt','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3970,3970,'ne.udm.errImportUserSubFileFormat','Please upload files in .csv or .txt format. English comma-separated txt format: imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3971,3971,'log.operate.title.udmAuth','UDM Authentication User','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3972,3972,'log.operate.title.udmSub','UDM Subscribers','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3973,3973,'dictType.active_alarm_type','Event Alarm Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3974,3974,'dictType.active_alarm_type_remark','List of Active Alarm Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3975,3975,'dictData.active_alarm_type.communication','Communication Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3976,3976,'dictData.active_alarm_type.equipment','Equipment Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3977,3977,'dictData.active_alarm_type.processing','Processing Failure Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3978,3978,'dictData.active_alarm_type.environmental','Environmental Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3979,3979,'dictData.active_alarm_type.qualityOfService','Quality of Service Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3980,3980,'dictType.active_clear_type','Alarm Clearing Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3981,3981,'dictType.active_clear_type_remark','List of Alarm Clearing Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3982,3982,'dictData.active_clear_type.notCleared','Not cleared','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3983,3983,'dictData.active_clear_type.hand','Manually cleared','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3984,3984,'dictData.active_clear_type.auto','Automatically cleared','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3985,3985,'dictType.active_ack_state','Alarm Acknowledgement Types','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3986,3986,'dictType.active_ack_state_remark','Alarm Acknowledgement Type List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3987,3987,'dictData.active_ack_state.unconfirmed','Not Confirm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3988,3988,'dictData.active_ack_state.confirmed','Confirm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3989,3989,'dictType.active_alarm_severity','Severity','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3990,3990,'dictType.active_alarm_severity_remark','Severity List','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3991,3991,'dictData.active_alarm_severity.critical','Critical','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3992,3992,'dictData.active_alarm_severity.major','Major','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3993,3993,'dictData.active_alarm_severity.minor','Minor','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3994,3994,'dictData.active_alarm_severity.warning','Warning','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3995,3995,'dictData.active_alarm_severity.event','Event','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3996,3996,'config.sys.officialUrl','System Settings - Official Website Links','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3997,3997,'config.sys.helpDoc','System Settings-System Documentation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3998,3998,'config.sys.officialUrlRemark','Default no address with # sign','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(3999,3999,'config.sys.helpDocRemark','Static file directory address, use {language} to distinguish language files','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4000,4000,'log.operate.title.neAction','Network Element Processing','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4001,4001,'log.operate.title.helpDoc','System Usage Documentation','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4002,4002,'menu.ueUser.n3iwf','N3IWF Online User','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4003,4003,'menu.ueUser.pcf','User PCC Information','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4004,4004,'menu.system.user.editRole','Modifying user roles','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4005,4005,'config.sys.i18nOpen','Internationalization Switching','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4006,4006,'config.sys.i18nDefault','Internationalization Default Language','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4007,4007,'user.export.role','UserRole','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4008,4008,'menu.system.setting.i18n','Internationalization Switch','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4009,4009,'menu.system.setting.i18nRemark','Internationalized multilingual switching options','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4010,4010,'dictType.index_status','Home Status','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4011,4011,'dictType.index_status_remark','Network element status colors on the home page','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4012,4012,'dictType.index_status.normal','Normal','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4013,4013,'dictType.index_status.abnormal','Abnormal','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4014,4014,'menu.log.neFile','NE Log File','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4015,4015,'job.deleteExpiredNeStateRecord','Delete Expired NE State Record','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4016,4016,'job.deleteExpiredNeStateRecordRemark','Delete expired NE state records regularly and keep them for {duration} days by default.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4017,4017,'job.getStateFromNE','Get state from NEs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4018,4018,'job.getStateFromNERemark','Get state information from all NEs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4019,4019,'job.genNeStateAlarm','Network Element Health Check','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4020,4020,'job.genNeStateAlarmRemark','Health status inspection of network elements, generating alarms in case of abnormalities.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4021,4021,'menu.neUser.nssf','NSSF Subscription Info','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4022,4022,'menu.neUser.nssfAmf','NSSF Available AMFs','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4023,4023,'menu.monitor.topology','Topology Info','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4024,4024,'menu.monitor.topologyBuild','Topological Graph Build','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4025,4025,'log.operate.title.chartGraph','Topological Graph','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,1,NULL),(4026,4026,'menu.monitor.topologyArchitecture','NE System Topology','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4027,4027,'menu.alarm','Alarm','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4028,4028,'menu.topology','Topology','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4029,4029,'config.sys.lockTime','System Settings - Screen Lock Timeout Duration','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4030,4030,'config.sys.lockTimeRemark','Screen lock timeout duration when idle, in seconds.','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4031,4031,'sys.account.captchaType','Account Self Service - Captcha Type','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4032,4032,'sys.account.captchaTypeRemark','Using CAPTCHA types (math numeric calculation, char character validation)','i18n_en',NULL,NULL,'1','supervisor',1700000000000,NULL,0,NULL),(4033,4033,'menu.dashboard','Dashboard','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4034,4034,'menu.dashboard.overview','Overview','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4035,4035,'menu.dashboard.cdr','IMS CDR','i18n_en','','','1','supervisor',1705550000000,NULL,0,''),(4036,4036,'dictType.cdr_sip_code','CDR SIP Response Code Category Type','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4037,4037,'dictType.cdr_call_type','CDR Call Type','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4038,4038,'dictType.ue_auth_code','UE Event Authentication Code Type','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4039,4039,'dictType.ue_event_type','UE Event Type','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4040,4040,'dictData.cdr_sip_code.200','Normal Cleaning','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4041,4041,'dictData.cdr_sip_code.403','Banned','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4042,4042,'dictData.cdr_sip_code.408','Request Timeout','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4043,4043,'dictData.cdr_sip_code.500','Internal Server Error','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4044,4044,'dictData.cdr_call_type.audio','Voice','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4045,4045,'dictData.cdr_call_type.video','Video','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4046,4046,'dictData.ue_auth_code.200','Success','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4047,4047,'dictData.ue_auth_code.001','Network Failure','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4048,4048,'dictData.ue_auth_code.002','Air Interface Failure','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4049,4049,'dictData.ue_auth_code.003','MAC Failure','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4050,4050,'dictData.ue_auth_code.004','Synchronization failure','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4051,4051,'dictData.ue_auth_code.005','Non-5G Authentication Not Accepted','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4052,4052,'dictData.ue_auth_code.006','Response Failure','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4053,4053,'dictData.ue_auth_code.007','Unknown','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4054,4054,'dictData.ue_event_type.auth','Authentication','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4055,4055,'dictData.ue_event_type.detach','Detach','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4056,4056,'dictData.ue_event_type.state','CM Status','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4057,4057,'dictType.ue_event_cm_state','UE Event CM Status','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4058,4058,'dictData.ue_event_cm_state.connected','Connected','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4059,4059,'dictData.ue_event_cm_state.idle','Idle','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4060,4060,'dictData.ue_event_cm_state.inactive','Inactive','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4061,4061,'dictData.cdr_sip_code.404','Not Found','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4062,4062,'dictData.cdr_sip_code.487','Request Terminated','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4063,4063,'dictData.cdr_sip_code.503','Service Unavailable','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4064,4064,'dictData.cdr_sip_code.504','Server Time Out','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4065,4065,'dictData.cdr_sip_code.603','Decline','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4066,4066,'dictData.cdr_sip_code.606','Not Acceptable','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4067,4067,'cache.name.user','Login User','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4068,4068,'cache.name.sys_config','Parameters Management','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4069,4069,'cache.name.sys_dict','Dictionary Management','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4070,4070,'cache.name.captcha_codes','Captcha','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4071,4071,'cache.name.repeat_submit','Resubmit','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4072,4072,'cache.name.rate_limit','Limit Traffic','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4073,4073,'cache.name.pwd_err_cnt','Number of Password Errors','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4074,4074,'cache.name.ne_info','NE Info Management','i18n_en',NULL,NULL,'1','supervisor',1705550000000,NULL,0,NULL),(4075,4075,'cache.name.ne_data','NE Data Management','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4076,4076,'dictData.cdr_call_type.sms','SMS','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4077,4077,'dictData.cdr_sip_code.202','Accepted','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4078,4078,'dictData.cdr_sip_code.488','Not Aceptable Here','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4079,4079,'dictData.cdr_sip_code.0','Other','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4080,4080,'log.operate.title.ws','WS Sessions','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4081,4081,'log.operate.title.neHost','NE Host','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4082,4082,'neHost.noData','There is no accessible host information data!','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4083,4083,'neHost.errKeyExists','Host information operation [{name}] failed, name already exists in the same group','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4084,4084,'neHost.errByHostInfo','Failed to connect to the host, please check the connection parameters and try again','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4085,4085,'dictType.ne_host_type','Network element host connection type','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4086,4086,'dictType.ne_host_groupId','Network element host grouping','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4087,4087,'dictType.ne_host_authMode','Network element host authentication mode','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4088,4088,'dictData.ne_host_type.ssh','SSH','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4089,4089,'dictData.ne_host_type.telnet','Telnet','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4090,4090,'dictData.ne_host_groupId.0','Other','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4091,4091,'dictData.ne_host_groupId.1','Network Elements','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4092,4092,'dictData.ne_host_groupId.2','System','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4093,4093,'dictData.ne_host_authMode.0','Password Authentication','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4094,4094,'dictData.ne_host_authMode.1','Private key authentication','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4095,4095,'menu.tools.terminal','NE Host Terminal','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4096,4096,'menu.config.neHost','NE Host','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4097,4097,'menu.config.neHostCommand','NE Host CMD','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4098,4098,'log.operate.title.neHostCmd','Network element host commands','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4099,4099,'neHostCmd.noData','No accessible host command data!','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4100,4100,'neHostCmd.errKeyExists','Host command operation [{name}] failed, name already exists in the same group','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4101,4101,'dictType.ne_host_cmd_groupId','Network element host command grouping','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4102,4102,'dictData.ne_host_cmd_groupId.0','Default','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4103,4103,'dictData.ne_host_cmd_groupId.1','Quick Commands','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4104,4104,'menu.config.neInfo','NE Info','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4105,4105,'log.operate.title.neInfo','NE Info','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4106,4106,'neInfo.noData','There is no accessible network element information data!','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4107,4107,'neInfo.errKeyExists','NE info operation [{key}] failed, identifier already exists under the same type','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4108,4108,'log.operate.title.imsCDR','IMS-CDR session','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4109,4109,'menu.dashboard.amfUE','UE Event','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4110,4110,'log.operate.title.amfUE','AMF-UE event','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4111,4111,'dictData.ne_info_status.0','Online','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4112,4112,'dictData.ne_info_status.1','Offline','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4113,4113,'dictData.ne_info_status.2','-','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4114,4114,'dictData.ne_info_status.3','Configuration to be issued','i18n_en','','','1','supervisor',1705550000000,'',0,''),(4115,4115,'dictType.ne_info_status','NE Info State','i18n_en','','','1','supervisor',1705550000000,'',0,''); /*!40000 ALTER TABLE `sys_dict_data` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -59,4 +59,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-03-06 17:27:01 +-- Dump completed on 2024-04-12 21:19:20 diff --git a/database/install/sys_dict_type.sql b/database/install/sys_dict_type.sql index 2bf6a788..3059a67f 100644 --- a/database/install/sys_dict_type.sql +++ b/database/install/sys_dict_type.sql @@ -56,4 +56,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-03-06 17:27:01 +-- Dump completed on 2024-04-12 21:19:20 diff --git a/database/install/sys_menu.sql b/database/install/sys_menu.sql index afe5794e..9d685308 100644 --- a/database/install/sys_menu.sql +++ b/database/install/sys_menu.sql @@ -42,7 +42,7 @@ CREATE TABLE `sys_menu` ( `update_time` bigint(20) DEFAULT 0 COMMENT '更新时间', `remark` varchar(500) DEFAULT '' COMMENT '备注', PRIMARY KEY (`menu_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2139 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='菜单权限表'; +) ENGINE=InnoDB AUTO_INCREMENT=2142 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='菜单权限表'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -51,7 +51,7 @@ CREATE TABLE `sys_menu` ( LOCK TABLES `sys_menu` WRITE; /*!40000 ALTER TABLE `sys_menu` DISABLE KEYS */; -INSERT INTO `sys_menu` VALUES (1,'menu.system',0,16,'system',NULL,'1','1','D','1','1',NULL,'icon-xiangmu','supervisor',1700000000000,NULL,0,'menu.systemRemark'),(2,'menu.monitor',0,2,'monitor',NULL,'1','1','D','0','0',NULL,'icon-wenjian','supervisor',1700000000000,NULL,0,'menu.monitorRemark'),(3,'menu.tools',0,15,'tool',NULL,'1','1','D','1','1',NULL,'icon-wenjian','supervisor',1700000000000,NULL,0,'menu.toolsRemark'),(4,'menu.config',0,3,'configManage',NULL,'1','0','D','1','1',NULL,'icon-huizhiguize','supervisor',1700000000000,NULL,0,'menu.configRemark'),(5,'menu.ueUser',0,7,'neUser',NULL,'1','0','D','1','1',NULL,'icon-wocanyu','supervisor',1700000000000,NULL,0,'menu.ueUserRemark'),(6,'故障管理',0,50,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',1690000000000,'故障管理'),(7,'配置管理',0,550,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'配置管理'),(8,'性能管理',0,551,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'性能管理'),(9,'操作维护',0,552,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'操作维护'),(10,'跟踪管理',0,553,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',1690000000000,'跟踪管理'),(11,'日志管理',0,554,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'日志管理'),(12,'安全管理',0,555,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'安全管理'),(13,'北向管理',0,556,'page',NULL,'1','0','D','0','0','page','fa fa-home','admin',1690000000000,'admin',1690000000000,'北向管理'),(14,'系统管理',0,557,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'系统管理'),(15,'拓扑管理',0,558,'page',NULL,'1','0','D','0','0','page','fa fa-home','admin',1690000000000,'admin',0,'拓扑管理'),(100,'menu.security.user',2113,1,'user','system/user/index','1','1','M','1','1','system:user:list','icon-wocanyu','supervisor',1700000000000,NULL,0,'menu.security.userRemark'),(101,'menu.security.role',2113,3,'role','system/role/index','1','1','M','1','1','system:role:list','icon-anzhuo','supervisor',1700000000000,NULL,0,'menu.security.roleRemark'),(102,'menu.security.roleUser',2113,3,'role/inline/auth-user/:roleId','system/role/auth-user','1','1','M','0','1','system:role:auth','#','supervisor',1700000000000,NULL,0,'menu.security.roleUserRemark'),(103,'menu.system.menu',1,4,'menu','system/menu/index','1','1','M','1','1','system:menu:list','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.system.menuRemark'),(104,'menu.security.dept',2113,5,'dept','system/dept/index','1','1','M','1','1','system:dept:list','icon-yuzhanghao1','supervisor',1700000000000,NULL,0,'menu.security.deptRemark'),(105,'menu.security.post',2113,6,'post','system/post/index','1','1','M','1','1','system:post:list','icon-gonggaodayi','supervisor',1700000000000,NULL,0,'menu.security.postRemark'),(106,'menu.system.dictType',1,7,'dict','system/dict/index','1','1','M','1','1','system:dict:list','icon-tubiaoku','supervisor',1700000000000,NULL,0,'menu.system.dictTypeRemark'),(107,'menu.system.dictData',1,8,'dict/inline/data/:dictId','system/dict/data','1','1','M','0','1','system:dict:data','#','supervisor',1700000000000,NULL,0,'menu.system.dictDataRemark'),(108,'menu.system.paramSet',1,9,'config','system/config/index','1','1','M','1','1','system:config:list','icon-gongnengjieshao','supervisor',1700000000000,NULL,0,'menu.system.paramSetRemark'),(111,'menu.system.systemLog',1,11,'log',NULL,'1','1','D','0','0',NULL,'#','supervisor',1700000000000,NULL,0,'menu.system.systemLogRemark'),(112,'menu.system.systemInfo',1,3,'system-info','monitor/system/info','1','1','M','1','1','monitor:system:info','icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.system.systemInfoRemark'),(113,'menu.system.cacheInfo',1,2,'cache-info','monitor/cache/info','1','1','M','1','1','monitor:cache:info','icon-gongnengjieshao','supervisor',1700000000000,NULL,0,'menu.system.cacheInfoRemark'),(114,'menu.system.cache',1,3,'cache','monitor/cache/index','1','1','M','1','1','monitor:cache:list','icon-tubiaoku','supervisor',1700000000000,NULL,0,'menu.system.cacheRemark'),(115,'menu.security.onlineUser',2113,2,'online','monitor/online/index','1','1','M','1','1','monitor:online:list','icon-xiangmuchengyuan','supervisor',1700000000000,NULL,0,'menu.security.onlineUserRemark'),(116,'menu.system.job',1,1,'job','monitor/job/index','1','1','M','1','1','monitor:job:list','icon-lishi','supervisor',1700000000000,NULL,0,'menu.system.jobRemark'),(117,'menu.system.jobLog',1,2,'/system/job/inline/log/:jobId','monitor/job/log','1','1','M','0','1','monitor:job:log','#','supervisor',1700000000000,NULL,0,'menu.system.jobLogRemark'),(118,'menu.tools.help',3,1,'help','tool/help/index','1','1','M','1','1','tool:help:list','#','supervisor',1700000000000,'supervisor',1708480983482,'menu.tools.helpRemark'),(500,'menu.log.operat',2089,1,'operate','system/log/operate/index','1','1','M','1','1','system:log:operate:list','icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.log.operatRemark'),(501,'menu.log.login',2089,2,'login','system/log/login/index','1','1','M','1','1','system:log:login:list','icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.log.loginRemark'),(1000,'menu.common.query',100,1,NULL,NULL,'1','1','B','1','1','system:user:query','#','supervisor',1700000000000,NULL,0,NULL),(1001,'menu.common.add',100,2,NULL,NULL,'1','1','B','1','1','system:user:add','#','supervisor',1700000000000,NULL,0,NULL),(1002,'menu.common.edit',100,3,NULL,NULL,'1','1','B','1','1','system:user:edit','#','supervisor',1700000000000,NULL,0,NULL),(1003,'menu.common.delete',100,4,NULL,NULL,'1','1','B','1','1','system:user:remove','#','supervisor',1700000000000,NULL,0,NULL),(1004,'menu.common.export',100,5,NULL,NULL,'1','1','B','1','1','system:user:export','#','supervisor',1700000000000,NULL,0,NULL),(1005,'menu.common.import',100,6,NULL,NULL,'1','1','B','1','1','system:user:import','#','supervisor',1700000000000,NULL,0,NULL),(1006,'menu.common.reset',100,7,NULL,NULL,'1','1','B','1','1','system:user:resetPwd','#','supervisor',1700000000000,NULL,0,NULL),(1007,'menu.common.query',101,1,NULL,NULL,'1','1','B','1','1','system:role:query','#','supervisor',1700000000000,NULL,0,NULL),(1008,'menu.common.add',101,2,NULL,NULL,'1','1','B','1','1','system:role:add','#','supervisor',1700000000000,NULL,0,NULL),(1009,'menu.common.edit',101,3,NULL,NULL,'1','1','B','1','1','system:role:edit','#','supervisor',1700000000000,NULL,0,NULL),(1010,'menu.common.delete',101,4,NULL,NULL,'1','1','B','1','1','system:role:remove','#','supervisor',1700000000000,NULL,0,NULL),(1011,'menu.common.export',101,5,NULL,NULL,'1','1','B','1','1','system:role:export','#','supervisor',1700000000000,NULL,0,NULL),(1012,'menu.common.query',103,1,NULL,NULL,'1','1','B','1','1','system:menu:query','#','supervisor',1700000000000,NULL,0,NULL),(1013,'menu.common.add',103,2,NULL,NULL,'1','1','B','1','1','system:menu:add','#','supervisor',1700000000000,NULL,0,NULL),(1014,'menu.common.edit',103,3,NULL,NULL,'1','1','B','1','1','system:menu:edit','#','supervisor',1700000000000,NULL,0,NULL),(1015,'menu.common.delete',103,4,NULL,NULL,'1','1','B','1','1','system:menu:remove','#','supervisor',1700000000000,NULL,0,NULL),(1016,'menu.common.query',104,1,NULL,NULL,'1','1','B','1','1','system:dept:query','#','supervisor',1700000000000,NULL,0,NULL),(1017,'menu.common.add',104,2,NULL,NULL,'1','1','B','1','1','system:dept:add','#','supervisor',1700000000000,NULL,0,NULL),(1018,'menu.common.edit',104,3,NULL,NULL,'1','1','B','1','1','system:dept:edit','#','supervisor',1700000000000,NULL,0,NULL),(1019,'menu.common.delete',104,4,NULL,NULL,'1','1','B','1','1','system:dept:remove','#','supervisor',1700000000000,NULL,0,NULL),(1020,'menu.common.query',105,1,NULL,NULL,'1','1','B','1','1','system:post:query','#','supervisor',1700000000000,NULL,0,NULL),(1021,'menu.common.add',105,2,NULL,NULL,'1','1','B','1','1','system:post:add','#','supervisor',1700000000000,NULL,0,NULL),(1022,'menu.common.edit',105,3,NULL,NULL,'1','1','B','1','1','system:post:edit','#','supervisor',1700000000000,NULL,0,NULL),(1023,'menu.common.delete',105,4,NULL,NULL,'1','1','B','1','1','system:post:remove','#','supervisor',1700000000000,NULL,0,NULL),(1024,'menu.common.export',105,5,NULL,NULL,'1','1','B','1','1','system:post:export','#','supervisor',1700000000000,NULL,0,NULL),(1025,'menu.common.query',106,1,'#',NULL,'1','1','B','1','1','system:dict:query','#','supervisor',1700000000000,NULL,0,NULL),(1026,'menu.common.add',106,2,'#',NULL,'1','1','B','1','1','system:dict:add','#','supervisor',1700000000000,NULL,0,NULL),(1027,'menu.common.edit',106,3,'#',NULL,'1','1','B','1','1','system:dict:edit','#','supervisor',1700000000000,NULL,0,NULL),(1028,'menu.common.delete',106,4,'#',NULL,'1','1','B','1','1','system:dict:remove','#','supervisor',1700000000000,NULL,0,NULL),(1029,'menu.common.export',106,5,'#',NULL,'1','1','B','1','1','system:dict:export','#','supervisor',1700000000000,NULL,0,NULL),(1030,'menu.common.query',108,1,'#',NULL,'1','1','B','1','1','system:config:query','#','supervisor',1700000000000,NULL,0,NULL),(1031,'menu.common.add',108,2,'#',NULL,'1','1','B','1','1','system:config:add','#','supervisor',1700000000000,NULL,0,NULL),(1032,'menu.common.edit',108,3,'#',NULL,'1','1','B','1','1','system:config:edit','#','supervisor',1700000000000,NULL,0,NULL),(1033,'menu.common.delete',108,4,'#',NULL,'1','1','B','1','1','system:config:remove','#','supervisor',1700000000000,NULL,0,NULL),(1034,'menu.common.export',108,5,'#',NULL,'1','1','B','1','1','system:config:export','#','supervisor',1700000000000,NULL,0,NULL),(1039,'menu.common.query',500,1,'#',NULL,'1','1','B','1','1','system:log:operate:query','#','supervisor',1700000000000,NULL,0,NULL),(1040,'menu.common.delete',500,2,'#',NULL,'1','1','B','1','1','system:log:operate:remove','#','supervisor',1700000000000,NULL,0,NULL),(1041,'menu.common.export',500,3,'#',NULL,'1','1','B','1','1','system:log:operate:export','#','supervisor',1700000000000,NULL,0,NULL),(1042,'menu.common.query',501,1,'#',NULL,'1','1','B','1','1','system:log:login:query','#','supervisor',1700000000000,NULL,0,NULL),(1043,'menu.common.delete',501,2,'#',NULL,'1','1','B','1','1','system:log:login:remove','#','supervisor',1700000000000,NULL,0,NULL),(1044,'menu.common.export',501,3,'#',NULL,'1','1','B','1','1','system:log:login:export','#','supervisor',1700000000000,NULL,0,NULL),(1045,'menu.common.unlock',501,4,'#',NULL,'1','1','B','1','1','system:log:login:unlock','#','supervisor',1700000000000,NULL,0,NULL),(1046,'menu.common.query',114,1,'#',NULL,'1','1','B','1','1','monitor:cache:query','#','supervisor',1700000000000,NULL,0,NULL),(1047,'menu.common.delete',114,2,'#',NULL,'1','1','B','1','1','monitor:cache:remove','#','supervisor',1700000000000,NULL,0,NULL),(1048,'menu.common.query',115,1,'#',NULL,'1','1','B','1','1','monitor:online:query','#','supervisor',1700000000000,NULL,0,NULL),(1049,'menu.forcedQuit.batch ',115,2,'#',NULL,'1','1','B','1','1','monitor:online:batchLogout','#','supervisor',1700000000000,NULL,0,NULL),(1050,'menu.forcedQuit.single',115,3,'#',NULL,'1','1','B','1','1','monitor:online:forceLogout','#','supervisor',1700000000000,NULL,0,NULL),(1051,'menu.common.query',116,1,'#',NULL,'1','1','B','1','1','monitor:job:query','#','supervisor',1700000000000,NULL,0,NULL),(1052,'menu.common.add',116,2,'#',NULL,'1','1','B','1','1','monitor:job:add','#','supervisor',1700000000000,NULL,0,NULL),(1053,'menu.common.edit',116,3,'#',NULL,'1','1','B','1','1','monitor:job:edit','#','supervisor',1700000000000,NULL,0,NULL),(1054,'menu.common.delete',116,4,'#',NULL,'1','1','B','1','1','monitor:job:remove','#','supervisor',1700000000000,NULL,0,NULL),(1055,'menu.common.edit',116,5,'#',NULL,'1','1','B','1','1','monitor:job:changeStatus','#','supervisor',1700000000000,NULL,0,NULL),(1056,'menu.common.export',116,6,'#',NULL,'1','1','B','1','1','monitor:job:export','#','supervisor',1700000000000,NULL,0,NULL),(2009,'menu.ueUser.authUDM',5,1,'auth','neUser/auth/index','1','1','M','1','1','neUser:auth:index','icon-xiangmuchengyuan','supervisor',1700000000000,NULL,0,'menu.ueUser.authUDMRemark'),(2010,'menu.ueUser.subUDM',5,2,'sub','neUser/sub/index','1','1','M','1','1','neUser:sub:index','icon-xiangmuchengyuan','supervisor',1700000000000,NULL,0,'menu.ueUser.subUDMRemark'),(2011,'活动告警',6,1,NULL,'page/alarm/alarmListDown.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,'活动告警'),(2012,'历史告警',6,2,NULL,'page/alarm/AlarmListHistory.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'历史告警'),(2013,'故障通用设置',6,3,NULL,'page/alarm/alarmInfoConfig.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'故障通用设置'),(2014,'定时同步设置',6,4,NULL,'page/alarm/synchronous.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'定时同步设置'),(2015,'健康状态检查',6,5,NULL,'page/alarm/healthCheck.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'健康状态检查'),(2016,'告警前转',6,6,NULL,'page/alarm/alarmForwarding.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'告警前转'),(2017,'网元管理',7,1,NULL,'page/nfManage/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'网元管理'),(2018,'参数配置',7,2,NULL,'page/configParam/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'参数配置'),(2019,'软件管理',7,3,NULL,'page/softwareManage/softwareManage.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'软件管理'),(2020,'备份管理',7,5,NULL,'page/softwareManage/backupManage.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'备份管理'),(2021,'配置参数设置',7,6,NULL,'page/configParam/configParamSet.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'配置参数设置'),(2022,'任务管理',8,1,NULL,'page/task/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'任务管理'),(2023,'性能数据',8,2,NULL,'page/repair/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'性能数据'),(2024,'性能报表',8,3,NULL,'page/task/perfReport.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'性能报表'),(2025,'性能门限',8,4,NULL,'page/task/threshold.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'性能门限'),(2026,'黄金指标',8,5,NULL,'page/gold/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'黄金指标'),(2027,'性能通用设置',8,7,NULL,'page/task/perfReportSet.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',0,'性能通用设置'),(2028,'自定义指标',8,8,NULL,'page/indicators/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'自定义指标'),(2029,'对象模板',8,8,NULL,'page/objectTemplate/list.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'对象模板'),(2030,'自定义测量数据',8,9,NULL,'page/indicators/measuringData.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'自定义测量数据'),(2031,'拓扑视图',15,1,NULL,'page/topology/topologyList.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',0,'拓扑视图'),(2032,'系统维护',14,1,NULL,'page/systemManage/systemOperation.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'系统维护'),(2033,'稳定性事件列表',14,2,NULL,'page/systemManage/stabilityEvents.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'稳定性事件列表'),(2034,'稳定性统计报告',14,3,NULL,'page/systemManage/stabilityReports.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'稳定性统计报告'),(2035,'系统备份',14,4,NULL,'page/systemManage/systemBackup.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'系统备份'),(2036,'系统可扩展',14,5,NULL,'page/systemManage/systemExtended.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'\"系统可扩展'),(2037,'证书管理',14,6,NULL,'page/systemManage/certificateManage.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'证书管理'),(2038,'北向操作日志',13,0,NULL,'page/log/nbiOperLogList.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',0,'北向操作日志'),(2039,'北向告警日志',13,2,NULL,'page/log/nbiAlarmLog.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',1690000000000,'北向告警日志'),(2040,'北向通用设置',13,3,NULL,'page/log/nbiSet.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',0,'北向通用设置'),(2041,'用户管理',12,1,NULL,'page/user/list.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'用户管理'),(2042,'在线状态',12,2,NULL,'page/user/online.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'在线状态'),(2043,'用户组管理',12,2,NULL,'page/group/list.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',1690000000000,'用户组管理'),(2044,'安全策略',12,3,NULL,'page/user/securityPolicy.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',1690000000000,'安全策略'),(2045,'操作日志',11,1,NULL,'page/log/operLogList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'操作日志'),(2046,'mml操作日志',11,2,NULL,'page/log/mmlOperLogList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'mml操作日志'),(2047,'告警日志',11,3,NULL,'page/log/alarmLogList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'告警日志'),(2048,'安全日志',11,4,NULL,'page/log/securityLogList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'安全日志'),(2049,'告警前转日志',11,7,NULL,'page/log/forwardingLog.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'告警前转日志'),(2050,'日志通用管理',11,8,NULL,'page/log/logSet.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'日志通用管理'),(2051,'系统日志',11,9,NULL,'page/log/systemLog.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'系统日志'),(2052,'跟踪任务',10,1,NULL,'page/trace/taskList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',1690000000000,'跟踪任务'),(2053,'信令分析',10,2,NULL,'page/trace/traceShow.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',1690000000000,'信令分析'),(2054,'核心网池',9,0,NULL,'page/mml/poolList.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',1690000000000,'核心网池'),(2055,'操作维护MML',9,1,NULL,'page/mml/omcList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'操作维护MML'),(2056,'网元操作MML',9,3,NULL,'page/mml/list.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'网元操作MML'),(2057,'用户数据MML',9,4,NULL,'page/mml/udmList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'用户数据MML'),(2058,'操作维护设置',9,5,NULL,'page/mml/mmlSet.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'操作维护设置'),(2059,'角色管理',12,6,NULL,'page/role/list.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'角色管理'),(2060,'菜单管理',12,7,NULL,'page/menu/list.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'菜单管理'),(2065,'数据库URL查询',0,10011,NULL,NULL,'1','1','B','0','0','page','#','admin',1690000000000,'admin',0,'数据库查询操作'),(2066,'数据库URL新增',0,10012,NULL,NULL,'1','1','B','0','0','page','#','admin',1690000000000,'admin',0,'数据库URL新增'),(2067,'数据库URL更新',0,10013,NULL,NULL,'1','1','B','0','0','page','#','admin',1690000000000,'admin',0,'数据库URL更新'),(2068,'数据库URL删除',0,10014,NULL,NULL,'1','1','B','0','0','page','#','admin',1690000000000,'admin',0,'数据库URL删除'),(2069,'用户信息',0,559,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',1690000000000,NULL),(2070,'UDM鉴权用户',2069,1,NULL,'page/nfUserInfo/authList.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,NULL),(2071,'5G基站信息',2069,4,NULL,'page/nfUserInfo/5gBase.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,NULL),(2072,'IMS在线用户',2069,3,NULL,'page/baseInfo/imsOnline.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,NULL),(2073,'UDM签约用户',2069,2,NULL,'page/nfUserInfo/subsList.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,NULL),(2074,'UE在线信息',2069,4,NULL,'page/baseInfo/ueInfoList.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,NULL),(2075,'menu.config.neManage',4,1,'neManage','configManage/neManage/index','1','0','M','1','1','configManage:neManage:index','icon-biaoqing','supervisor',1700000000000,NULL,0,'menu.config.neManageRemark'),(2076,'menu.config.configNE',4,2,'configParam','configManage/configParam/index','1','0','M','1','1','configManage:configParam:index','icon-piliang','supervisor',1700000000000,NULL,0,'menu.config.configNERemark'),(2077,'信令抓包',10,3,NULL,'page/trace/pcap.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'tcpdump抓包pcap文件'),(2078,'menu.config.backupManage',4,3,'backupManage','configManage/backupManage/index','1','0','M','1','1','configManage:backupManage:index','icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.config.backupManageRemark'),(2079,'menu.config.softwareManage',4,4,'softwareManage','configManage/softwareManage/index','1','0','M','1','1','configManage:softwareManage:index','icon-huidingbu','supervisor',1700000000000,NULL,0,'menu.config.softwareManageRemark'),(2080,'menu.ueUser.onlineIMS',5,4,'ims','neUser/ims/index','1','0','M','1','1','neUser:ims:index','icon-xiangmuchengyuan','supervisor',1700000000000,NULL,0,'menu.ueUser.onlineIMSRemark'),(2081,'menu.ueUser.onlineUE',5,6,'ue','neUser/ue/index','1','0','M','1','1','neUser:ue:index','icon-xiangmuchengyuan','supervisor',1700000000000,NULL,0,'menu.ueUser.onlineUERemark'),(2082,'menu.ueUser.base5G',5,7,'base5G','neUser/base5G/index','1','0','M','1','1','neUser:base5G:index','icon-paixu','supervisor',1700000000000,NULL,0,'menu.ueUser.base5GRemark'),(2083,'menu.trace',2087,30,'traceManage',NULL,'1','0','D','1','1',NULL,'icon-paixu','supervisor',1700000000000,NULL,0,'menu.traceRemark'),(2084,'menu.trace.task',2083,1,'task','traceManage/task/index','1','0','M','1','1','traceManage:task:index','icon-chexiao','supervisor',1700000000000,NULL,0,'menu.trace.taskRemark'),(2085,'menu.trace.analysis',2083,2,'analysis','traceManage/analysis/index','1','0','M','1','1','traceManage:analysis:index','icon-gongnengjieshao','supervisor',1700000000000,NULL,0,'menu.trace.analysisRemark'),(2086,'menu.trace.pcap',2083,3,'pcap','traceManage/pcap/index','1','1','M','1','1','traceManage:pcap:index','icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.trace.pcapRemark'),(2087,'menu.fault',0,2,'faultManage',NULL,'1','0','D','1','1',NULL,'icon-jinggao','supervisor',1700000000000,NULL,0,'menu.faultRemark'),(2088,'menu.fault.active',2129,1,'active-alarm','faultManage/active-alarm/index','1','1','M','1','1','faultManage:active-alarm:index','icon-wenjian','supervisor',1700000000000,NULL,0,'menu.fault.activemRemark'),(2089,'menu.log',0,9,'logManage',NULL,'1','0','D','1','1',NULL,'icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.logRemark'),(2090,'menu.log.operatOld',2089,1,'operation','logManage/operation/index','1','0','M','0','0','logManage:operation:index','icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.log.operatOldRemark'),(2091,'menu.log.mml',2089,2,'mml','logManage/mml/index','1','1','M','1','1','logManage:mml:index','icon-wocanyu','supervisor',1700000000000,NULL,0,'menu.log.mmlRemark'),(2092,'menu.log.alarm',2089,3,'alarm-log','logManage/alarm/index','1','0','M','1','1','logManage:alarm:index','icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.log.alarmRemark'),(2093,'menu.log.securityOld',2089,6,'security-log','logManage/security/index','1','0','M','0','0','logManage/security/index','icon-gongnengjieshao','supervisor',1700000000000,NULL,0,'menu.log.securityOldRemark'),(2094,'menu.log.forwarding',2089,7,'forwarding','logManage/forwarding/index','1','0','M','1','1','logManage:forwarding:index','icon-huizhiguize','supervisor',1700000000000,NULL,0,'menu.log.forwardingRemark'),(2095,'menu.log.set',2089,15,'logSet','logManage/logSet/index','1','0','M','1','1','logManage:logSet:index','icon-you','supervisor',1700000000000,NULL,0,'menu.log.setRemark'),(2096,'menu.monitor.sessionUser',2,10,'session','monitor/session/index','1','0','M','0','0','monitor:session:index','icon-gerenzhanghu','supervisor',1700000000000,NULL,0,'menu.monitor.sessionUserRemark'),(2097,'menu.fault.history',2129,2,'history-alarm','faultManage/history-alarm/index','1','1','M','1','1','faultManage/history-alarm/index','icon-huizhiguize','supervisor',1700000000000,NULL,0,'menu.fault.historyRemark'),(2098,'menu.fault.set',2129,100,'fault-setting','faultManage/fault-setting/index','1','0','M','1','1','faultManage/fault-setting/index','icon-gonggaodayi','supervisor',1700000000000,NULL,0,'menu.fault.setRemark'),(2099,'menu.perf',0,5,'perfManage',NULL,'1','0','D','1','1',NULL,'icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.perfRemark'),(2100,'menu.perf.task',2099,1,'taskManage','perfManage/taskManage/index','1','1','M','1','1','perfManage:taskManage:index','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.perf.taskRemark'),(2101,'menu.perf.data',2099,2,'perfData','perfManage/perfData/index','1','1','M','1','1','perfManage:perfData:index','icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.perf.dataRemark'),(2102,'menu.perf.report',2099,3,'perfReport','perfManage/perfReport/index','1','0','M','0','0','perfManage:perfReport:index','icon-gonggaodayi','supervisor',1700000000000,NULL,0,'menu.perf.reportRemark'),(2103,'menu.perf.threshold',2099,4,'perfThreshold','perfManage/perfThreshold/index','1','0','M','1','1','perfManage:perfThreshold:index','icon-zhuanrang','supervisor',1700000000000,NULL,0,'menu.perf.thresholdRemark'),(2104,'menu.perf.kpi',2099,5,'goldTarget','perfManage/goldTarget/index','1','1','M','1','1','perfManage:goldTarget:index','icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.perf.kpiRemark'),(2105,'menu.perf.customTarget',2099,6,'customTarget','perfManage/customTarget/index','1','1','M','0','0','perfManage:customTarget:index','icon-fanhui1','supervisor',1700000000000,NULL,0,'menu.perf.customTargetRemark'),(2106,'menu.perf.set',2099,7,'perfSet','perfManage/perfSet/index','1','0','M','0','0','perfManage:perfSet:index','icon-gonggao','supervisor',1700000000000,NULL,0,'menu.perf.setRemark'),(2107,'menu.mml',0,8,'mmlManage',NULL,'1','0','D','1','1',NULL,'icon-zhizuoliucheng','supervisor',1700000000000,NULL,0,'menu.mmlRemark'),(2108,'menu.mml.ne',2107,1,'neOperate','mmlManage/neOperate/index','1','1','M','1','1','mmlManage:neOperate:index','icon-huizhiguize','supervisor',1700000000000,NULL,0,'menu.mml.neRemark'),(2109,'menu.mml.udm',2107,2,'udmOperate','mmlManage/udmOperate/index','1','1','M','1','1','mmlManage:udmOperate:index','icon-gonggaodayi','supervisor',1700000000000,NULL,0,'menu.mml.udmRemark'),(2110,'menu.mml.set',2107,4,'mmlSet','mmlManage/mmlSet/index','1','0','M','1','1','mmlManage:mmlSet:index','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.mml.setRemark'),(2111,'menu.mml.omc',2107,3,'omcOperate','mmlManage/omcOperate/index','1','1','M','1','1','mmlManage:omcOperate:index','icon-huizhiguize','supervisor',1700000000000,NULL,0,'menu.mml.omcRemark'),(2112,'menu.config.licenseManage',4,5,'license','configManage/license/index','1','1','M','1','1','configManage/license/index','icon-shang','supervisor',1700000000000,NULL,0,'menu.config.licenseManageRemark'),(2113,'menu.security',0,14,'security',NULL,'1','0','D','1','1',NULL,'icon-suofang','supervisor',1700000000000,NULL,0,'menu.securityRemark'),(2114,'menu.system.systemSet',1,12,'setting','system/setting/index','1','1','M','1','1','system:setting:index','icon-piliang','supervisor',1700000000000,NULL,0,'menu.system.systemSetRemark'),(2115,'menu.system.systemResource',1,13,'monitor','monitor/monitor/index','1','1','M','1','1','monitor:monitor:info','icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.system.systemResourceRemark'),(2116,'menu.config.configNEForm',4,2,'configParamForm','configManage/configParamForm/index','1','0','M','1','1','configManage:configParam:index','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.config.configNEFormRemark'),(2117,'menu.config.configNETree',4,2,'configParamTree','configManage/configParamTree/index','1','0','M','1','1','configManage:configParam:index','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.config.configNETreeRemark'),(2118,'menu.config.configNETreeTable',4,2,'configNETreeTable','configManage/configParamTreeTable/index','1','1','M','1','1','configManage:configParam:index','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.config.configNETreeTableRemark'),(2119,'menu.ueUser.n3iwf',5,8,'n3iwf','neUser/n3iwf/index','1','0','M','0','1','neUser:n3iwf:index','icon-paixu','supervisor',1700000000000,NULL,0,NULL),(2120,'menu.ueUser.pcf',5,9,'pcf','neUser/pcf/index','1','0','M','1','1','neUser:pcf:index','icon-paixu','supervisor',1700000000000,NULL,0,NULL),(2121,'menu.system.user.editRole',100,8,NULL,NULL,'1','1','B','1','1','system:user:editRole','#','supervisor',1700000000000,NULL,0,NULL),(2122,'menu.system.setting.i18n',2114,1,NULL,NULL,'1','1','B','1','1','system:setting:i18n','#','supervisor',1700000000000,'supervisor',1700000000000,'menu.system.setting.i18nRemark'),(2123,'menu.log.neFile',2089,9,'neFile','logManage/neFile/index','1','0','M','1','1','logManage:neFile:index','icon-tubiaohuizhi','supervisor',1700000000000,NULL,0,NULL),(2124,'menu.neUser.nssf',5,10,'nssf','neUser/nssf/index','1','0','M','0','1','neUser:nssf:index','icon-daimayingyong','supervisor',1700000000000,'supervisor',1700000000000,NULL),(2125,'menu.neUser.nssfAmf',5,11,'nssfAmf','neUser/nssfAmf/index','1','0','M','0','1','neUser:nssfAmf:index','icon-paixu','supervisor',1700000000000,NULL,0,NULL),(2126,'menu.monitor.topology',2130,10,'topology','monitor/topology/index','1','0','M','1','1','monitor:topology:index','icon-fangda','supervisor',1700000000000,NULL,0,NULL),(2127,'menu.monitor.topologyBuild',2130,30,'topologyBuild','monitor/topologyBuild/index','1','0','M','1','1','monitor:topologyBuild:index','icon-fangda','supervisor',1700000000000,'supervisor',1700000000000,NULL),(2128,'menu.monitor.topologyArchitecture',2130,20,'topologyArchitecture','monitor/topologyArchitecture/index','1','0','M','1','1','monitor:topologyArchitecture:index','icon-soutubiao','supervisor',1700000000000,'supervisor',1700000000000,NULL),(2129,'menu.alarm',2087,10,'alarm',NULL,'1','0','D','1','1',NULL,'icon-jinggao','supervisor',1704800000000,'supervisor',1704847028995,NULL),(2130,'menu.topology',2087,20,'topology',NULL,'1','0','D','1','1',NULL,'icon-anzhuo','supervisor',1704800000000,'supervisor',1704847055540,NULL),(2131,'menu.dashboard',2087,0,'dashboard',NULL,'1','0','D','1','1',NULL,'icon-soutubiao','supervisor',1705550000000,'supervisor',1705550000000,NULL),(2132,'menu.dashboard.overview',2131,1,'overview','dashboard/overview/index','1','0','M','1','1','dashboard:overview:index','icon-paixu','supervisor',1705550000000,NULL,0,NULL),(2133,'menu.dashboard.cdr',2131,3,'imsCDR','dashboard/imsCDR/index','1','0','M','1','1','dashboard:cdr:index','icon-paixu','supervisor',1705550000000,'',0,''),(2134,'menu.tools.terminal',3,3,'terminal','tool/terminal/index','1','1','M','1','1','tool:terminal:index','icon-pcduan','supervisor',1708481172778,'',0,''),(2135,'menu.config.neHost',4,15,'neHost','ne/neHost/index','1','1','M','1','1','ne:neHost:list','icon-fuzhidaima','supervisor',1708583596871,'',0,''),(2136,'menu.config.neHostCommand',4,18,'neHostCommand','ne/neHostCommand/index','1','0','M','1','1','ne:neHostCommand:list','icon-fuzhidaima','supervisor',1708583596871,'',0,''),(2137,'menu.config.neInfo',4,14,'neInfo','ne/neInfo/index','1','0','M','1','1','ne:neInfo:list','icon-fuzhidaima','supervisor',1708583596871,'',0,''),(2138,'menu.dashboard.amfUE',2131,6,'amfUE','dashboard/amfUE/index','1','0','M','1','1','dashboard:amfUE:index','icon-paixu','supervisor',1705550000000,'',0,''); +INSERT INTO `sys_menu` VALUES (1,'menu.system',0,16,'system',NULL,'1','1','D','1','1',NULL,'icon-xiangmu','supervisor',1700000000000,NULL,0,'menu.systemRemark'),(2,'menu.monitor',0,2,'monitor',NULL,'1','1','D','0','0',NULL,'icon-wenjian','supervisor',1700000000000,NULL,0,'menu.monitorRemark'),(3,'menu.tools',0,15,'tool',NULL,'1','1','D','1','1',NULL,'icon-wenjian','supervisor',1700000000000,NULL,0,'menu.toolsRemark'),(4,'menu.config',0,3,'configManage',NULL,'1','0','D','1','1',NULL,'icon-huizhiguize','supervisor',1700000000000,NULL,0,'menu.configRemark'),(5,'menu.ueUser',0,7,'neUser',NULL,'1','0','D','1','1',NULL,'icon-wocanyu','supervisor',1700000000000,NULL,0,'menu.ueUserRemark'),(6,'故障管理',0,50,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',1690000000000,'故障管理'),(7,'配置管理',0,550,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'配置管理'),(8,'性能管理',0,551,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'性能管理'),(9,'操作维护',0,552,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'操作维护'),(10,'跟踪管理',0,553,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',1690000000000,'跟踪管理'),(11,'日志管理',0,554,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'日志管理'),(12,'安全管理',0,555,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'安全管理'),(13,'北向管理',0,556,'page',NULL,'1','0','D','0','0','page','fa fa-home','admin',1690000000000,'admin',1690000000000,'北向管理'),(14,'系统管理',0,557,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',0,'系统管理'),(15,'拓扑管理',0,558,'page',NULL,'1','0','D','0','0','page','fa fa-home','admin',1690000000000,'admin',0,'拓扑管理'),(100,'menu.security.user',2113,1,'user','system/user/index','1','1','M','1','1','system:user:list','icon-wocanyu','supervisor',1700000000000,NULL,0,'menu.security.userRemark'),(101,'menu.security.role',2113,3,'role','system/role/index','1','1','M','1','1','system:role:list','icon-anzhuo','supervisor',1700000000000,NULL,0,'menu.security.roleRemark'),(102,'menu.security.roleUser',2113,3,'role/inline/auth-user/:roleId','system/role/auth-user','1','1','M','0','1','system:role:auth','#','supervisor',1700000000000,NULL,0,'menu.security.roleUserRemark'),(103,'menu.system.menu',1,4,'menu','system/menu/index','1','1','M','1','1','system:menu:list','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.system.menuRemark'),(104,'menu.security.dept',2113,5,'dept','system/dept/index','1','1','M','1','1','system:dept:list','icon-yuzhanghao1','supervisor',1700000000000,NULL,0,'menu.security.deptRemark'),(105,'menu.security.post',2113,6,'post','system/post/index','1','1','M','1','1','system:post:list','icon-gonggaodayi','supervisor',1700000000000,NULL,0,'menu.security.postRemark'),(106,'menu.system.dictType',1,7,'dict','system/dict/index','1','1','M','1','1','system:dict:list','icon-tubiaoku','supervisor',1700000000000,NULL,0,'menu.system.dictTypeRemark'),(107,'menu.system.dictData',1,8,'dict/inline/data/:dictId','system/dict/data','1','1','M','0','1','system:dict:data','#','supervisor',1700000000000,NULL,0,'menu.system.dictDataRemark'),(108,'menu.system.paramSet',1,9,'config','system/config/index','1','1','M','1','1','system:config:list','icon-gongnengjieshao','supervisor',1700000000000,NULL,0,'menu.system.paramSetRemark'),(111,'menu.system.systemLog',1,11,'log',NULL,'1','1','D','0','0',NULL,'#','supervisor',1700000000000,NULL,0,'menu.system.systemLogRemark'),(112,'menu.system.systemInfo',1,3,'system-info','monitor/system/info','1','1','M','1','1','monitor:system:info','icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.system.systemInfoRemark'),(113,'menu.system.cacheInfo',1,2,'cache-info','monitor/cache/info','1','1','M','1','1','monitor:cache:info','icon-gongnengjieshao','supervisor',1700000000000,NULL,0,'menu.system.cacheInfoRemark'),(114,'menu.system.cache',1,3,'cache','monitor/cache/index','1','1','M','1','1','monitor:cache:list','icon-tubiaoku','supervisor',1700000000000,NULL,0,'menu.system.cacheRemark'),(115,'menu.security.onlineUser',2113,2,'online','monitor/online/index','1','1','M','1','1','monitor:online:list','icon-xiangmuchengyuan','supervisor',1700000000000,NULL,0,'menu.security.onlineUserRemark'),(116,'menu.system.job',1,1,'job','monitor/job/index','1','1','M','1','1','monitor:job:list','icon-lishi','supervisor',1700000000000,NULL,0,'menu.system.jobRemark'),(117,'menu.system.jobLog',1,2,'/system/job/inline/log/:jobId','monitor/job/log','1','1','M','0','1','monitor:job:log','#','supervisor',1700000000000,NULL,0,'menu.system.jobLogRemark'),(118,'menu.tools.help',3,1,'help','tool/help/index','1','1','M','1','1','tool:help:list','#','supervisor',1700000000000,'supervisor',1708480983482,'menu.tools.helpRemark'),(500,'menu.log.operat',2089,1,'operate','system/log/operate/index','1','1','M','1','1','system:log:operate:list','icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.log.operatRemark'),(501,'menu.log.login',2089,2,'login','system/log/login/index','1','1','M','1','1','system:log:login:list','icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.log.loginRemark'),(1000,'menu.common.query',100,1,NULL,NULL,'1','1','B','1','1','system:user:query','#','supervisor',1700000000000,NULL,0,NULL),(1001,'menu.common.add',100,2,NULL,NULL,'1','1','B','1','1','system:user:add','#','supervisor',1700000000000,NULL,0,NULL),(1002,'menu.common.edit',100,3,NULL,NULL,'1','1','B','1','1','system:user:edit','#','supervisor',1700000000000,NULL,0,NULL),(1003,'menu.common.delete',100,4,NULL,NULL,'1','1','B','1','1','system:user:remove','#','supervisor',1700000000000,NULL,0,NULL),(1004,'menu.common.export',100,5,NULL,NULL,'1','1','B','1','1','system:user:export','#','supervisor',1700000000000,NULL,0,NULL),(1005,'menu.common.import',100,6,NULL,NULL,'1','1','B','1','1','system:user:import','#','supervisor',1700000000000,NULL,0,NULL),(1006,'menu.common.reset',100,7,NULL,NULL,'1','1','B','1','1','system:user:resetPwd','#','supervisor',1700000000000,NULL,0,NULL),(1007,'menu.common.query',101,1,NULL,NULL,'1','1','B','1','1','system:role:query','#','supervisor',1700000000000,NULL,0,NULL),(1008,'menu.common.add',101,2,NULL,NULL,'1','1','B','1','1','system:role:add','#','supervisor',1700000000000,NULL,0,NULL),(1009,'menu.common.edit',101,3,NULL,NULL,'1','1','B','1','1','system:role:edit','#','supervisor',1700000000000,NULL,0,NULL),(1010,'menu.common.delete',101,4,NULL,NULL,'1','1','B','1','1','system:role:remove','#','supervisor',1700000000000,NULL,0,NULL),(1011,'menu.common.export',101,5,NULL,NULL,'1','1','B','1','1','system:role:export','#','supervisor',1700000000000,NULL,0,NULL),(1012,'menu.common.query',103,1,NULL,NULL,'1','1','B','1','1','system:menu:query','#','supervisor',1700000000000,NULL,0,NULL),(1013,'menu.common.add',103,2,NULL,NULL,'1','1','B','1','1','system:menu:add','#','supervisor',1700000000000,NULL,0,NULL),(1014,'menu.common.edit',103,3,NULL,NULL,'1','1','B','1','1','system:menu:edit','#','supervisor',1700000000000,NULL,0,NULL),(1015,'menu.common.delete',103,4,NULL,NULL,'1','1','B','1','1','system:menu:remove','#','supervisor',1700000000000,NULL,0,NULL),(1016,'menu.common.query',104,1,NULL,NULL,'1','1','B','1','1','system:dept:query','#','supervisor',1700000000000,NULL,0,NULL),(1017,'menu.common.add',104,2,NULL,NULL,'1','1','B','1','1','system:dept:add','#','supervisor',1700000000000,NULL,0,NULL),(1018,'menu.common.edit',104,3,NULL,NULL,'1','1','B','1','1','system:dept:edit','#','supervisor',1700000000000,NULL,0,NULL),(1019,'menu.common.delete',104,4,NULL,NULL,'1','1','B','1','1','system:dept:remove','#','supervisor',1700000000000,NULL,0,NULL),(1020,'menu.common.query',105,1,NULL,NULL,'1','1','B','1','1','system:post:query','#','supervisor',1700000000000,NULL,0,NULL),(1021,'menu.common.add',105,2,NULL,NULL,'1','1','B','1','1','system:post:add','#','supervisor',1700000000000,NULL,0,NULL),(1022,'menu.common.edit',105,3,NULL,NULL,'1','1','B','1','1','system:post:edit','#','supervisor',1700000000000,NULL,0,NULL),(1023,'menu.common.delete',105,4,NULL,NULL,'1','1','B','1','1','system:post:remove','#','supervisor',1700000000000,NULL,0,NULL),(1024,'menu.common.export',105,5,NULL,NULL,'1','1','B','1','1','system:post:export','#','supervisor',1700000000000,NULL,0,NULL),(1025,'menu.common.query',106,1,'#',NULL,'1','1','B','1','1','system:dict:query','#','supervisor',1700000000000,NULL,0,NULL),(1026,'menu.common.add',106,2,'#',NULL,'1','1','B','1','1','system:dict:add','#','supervisor',1700000000000,NULL,0,NULL),(1027,'menu.common.edit',106,3,'#',NULL,'1','1','B','1','1','system:dict:edit','#','supervisor',1700000000000,NULL,0,NULL),(1028,'menu.common.delete',106,4,'#',NULL,'1','1','B','1','1','system:dict:remove','#','supervisor',1700000000000,NULL,0,NULL),(1029,'menu.common.export',106,5,'#',NULL,'1','1','B','1','1','system:dict:export','#','supervisor',1700000000000,NULL,0,NULL),(1030,'menu.common.query',108,1,'#',NULL,'1','1','B','1','1','system:config:query','#','supervisor',1700000000000,NULL,0,NULL),(1031,'menu.common.add',108,2,'#',NULL,'1','1','B','1','1','system:config:add','#','supervisor',1700000000000,NULL,0,NULL),(1032,'menu.common.edit',108,3,'#',NULL,'1','1','B','1','1','system:config:edit','#','supervisor',1700000000000,NULL,0,NULL),(1033,'menu.common.delete',108,4,'#',NULL,'1','1','B','1','1','system:config:remove','#','supervisor',1700000000000,NULL,0,NULL),(1034,'menu.common.export',108,5,'#',NULL,'1','1','B','1','1','system:config:export','#','supervisor',1700000000000,NULL,0,NULL),(1039,'menu.common.query',500,1,'#',NULL,'1','1','B','1','1','system:log:operate:query','#','supervisor',1700000000000,NULL,0,NULL),(1040,'menu.common.delete',500,2,'#',NULL,'1','1','B','1','1','system:log:operate:remove','#','supervisor',1700000000000,NULL,0,NULL),(1041,'menu.common.export',500,3,'#',NULL,'1','1','B','1','1','system:log:operate:export','#','supervisor',1700000000000,NULL,0,NULL),(1042,'menu.common.query',501,1,'#',NULL,'1','1','B','1','1','system:log:login:query','#','supervisor',1700000000000,NULL,0,NULL),(1043,'menu.common.delete',501,2,'#',NULL,'1','1','B','1','1','system:log:login:remove','#','supervisor',1700000000000,NULL,0,NULL),(1044,'menu.common.export',501,3,'#',NULL,'1','1','B','1','1','system:log:login:export','#','supervisor',1700000000000,NULL,0,NULL),(1045,'menu.common.unlock',501,4,'#',NULL,'1','1','B','1','1','system:log:login:unlock','#','supervisor',1700000000000,NULL,0,NULL),(1046,'menu.common.query',114,1,'#',NULL,'1','1','B','1','1','monitor:cache:query','#','supervisor',1700000000000,NULL,0,NULL),(1047,'menu.common.delete',114,2,'#',NULL,'1','1','B','1','1','monitor:cache:remove','#','supervisor',1700000000000,NULL,0,NULL),(1048,'menu.common.query',115,1,'#',NULL,'1','1','B','1','1','monitor:online:query','#','supervisor',1700000000000,NULL,0,NULL),(1049,'menu.forcedQuit.batch ',115,2,'#',NULL,'1','1','B','1','1','monitor:online:batchLogout','#','supervisor',1700000000000,NULL,0,NULL),(1050,'menu.forcedQuit.single',115,3,'#',NULL,'1','1','B','1','1','monitor:online:forceLogout','#','supervisor',1700000000000,NULL,0,NULL),(1051,'menu.common.query',116,1,'#',NULL,'1','1','B','1','1','monitor:job:query','#','supervisor',1700000000000,NULL,0,NULL),(1052,'menu.common.add',116,2,'#',NULL,'1','1','B','1','1','monitor:job:add','#','supervisor',1700000000000,NULL,0,NULL),(1053,'menu.common.edit',116,3,'#',NULL,'1','1','B','1','1','monitor:job:edit','#','supervisor',1700000000000,NULL,0,NULL),(1054,'menu.common.delete',116,4,'#',NULL,'1','1','B','1','1','monitor:job:remove','#','supervisor',1700000000000,NULL,0,NULL),(1055,'menu.common.edit',116,5,'#',NULL,'1','1','B','1','1','monitor:job:changeStatus','#','supervisor',1700000000000,NULL,0,NULL),(1056,'menu.common.export',116,6,'#',NULL,'1','1','B','1','1','monitor:job:export','#','supervisor',1700000000000,NULL,0,NULL),(2009,'menu.ueUser.authUDM',5,1,'auth','neUser/auth/index','1','1','M','1','1','neUser:auth:index','icon-xiangmuchengyuan','supervisor',1700000000000,NULL,0,'menu.ueUser.authUDMRemark'),(2010,'menu.ueUser.subUDM',5,2,'sub','neUser/sub/index','1','1','M','1','1','neUser:sub:index','icon-xiangmuchengyuan','supervisor',1700000000000,NULL,0,'menu.ueUser.subUDMRemark'),(2011,'活动告警',6,1,NULL,'page/alarm/alarmListDown.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,'活动告警'),(2012,'历史告警',6,2,NULL,'page/alarm/AlarmListHistory.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'历史告警'),(2013,'故障通用设置',6,3,NULL,'page/alarm/alarmInfoConfig.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'故障通用设置'),(2014,'定时同步设置',6,4,NULL,'page/alarm/synchronous.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'定时同步设置'),(2015,'健康状态检查',6,5,NULL,'page/alarm/healthCheck.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'健康状态检查'),(2016,'告警前转',6,6,NULL,'page/alarm/alarmForwarding.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'告警前转'),(2017,'网元管理',7,1,NULL,'page/nfManage/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'网元管理'),(2018,'参数配置',7,2,NULL,'page/configParam/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'参数配置'),(2019,'软件管理',7,3,NULL,'page/softwareManage/softwareManage.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'软件管理'),(2020,'备份管理',7,5,NULL,'page/softwareManage/backupManage.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'备份管理'),(2021,'配置参数设置',7,6,NULL,'page/configParam/configParamSet.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'配置参数设置'),(2022,'任务管理',8,1,NULL,'page/task/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'任务管理'),(2023,'性能数据',8,2,NULL,'page/repair/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'性能数据'),(2024,'性能报表',8,3,NULL,'page/task/perfReport.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'性能报表'),(2025,'性能门限',8,4,NULL,'page/task/threshold.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'性能门限'),(2026,'黄金指标',8,5,NULL,'page/gold/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'黄金指标'),(2027,'性能通用设置',8,7,NULL,'page/task/perfReportSet.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',0,'性能通用设置'),(2028,'自定义指标',8,8,NULL,'page/indicators/list.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'自定义指标'),(2029,'对象模板',8,8,NULL,'page/objectTemplate/list.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'对象模板'),(2030,'自定义测量数据',8,9,NULL,'page/indicators/measuringData.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'自定义测量数据'),(2031,'拓扑视图',15,1,NULL,'page/topology/topologyList.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',0,'拓扑视图'),(2032,'系统维护',14,1,NULL,'page/systemManage/systemOperation.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'系统维护'),(2033,'稳定性事件列表',14,2,NULL,'page/systemManage/stabilityEvents.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'稳定性事件列表'),(2034,'稳定性统计报告',14,3,NULL,'page/systemManage/stabilityReports.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'稳定性统计报告'),(2035,'系统备份',14,4,NULL,'page/systemManage/systemBackup.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'系统备份'),(2036,'系统可扩展',14,5,NULL,'page/systemManage/systemExtended.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'\"系统可扩展'),(2037,'证书管理',14,6,NULL,'page/systemManage/certificateManage.html','1','0','M','1','0','page','#','admin',1690000000000,'admin',1690000000000,'证书管理'),(2038,'北向操作日志',13,0,NULL,'page/log/nbiOperLogList.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',0,'北向操作日志'),(2039,'北向告警日志',13,2,NULL,'page/log/nbiAlarmLog.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',1690000000000,'北向告警日志'),(2040,'北向通用设置',13,3,NULL,'page/log/nbiSet.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',0,'北向通用设置'),(2041,'用户管理',12,1,NULL,'page/user/list.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'用户管理'),(2042,'在线状态',12,2,NULL,'page/user/online.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'在线状态'),(2043,'用户组管理',12,2,NULL,'page/group/list.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',1690000000000,'用户组管理'),(2044,'安全策略',12,3,NULL,'page/user/securityPolicy.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',1690000000000,'安全策略'),(2045,'操作日志',11,1,NULL,'page/log/operLogList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'操作日志'),(2046,'mml操作日志',11,2,NULL,'page/log/mmlOperLogList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'mml操作日志'),(2047,'告警日志',11,3,NULL,'page/log/alarmLogList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'告警日志'),(2048,'安全日志',11,4,NULL,'page/log/securityLogList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'安全日志'),(2049,'告警前转日志',11,7,NULL,'page/log/forwardingLog.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'告警前转日志'),(2050,'日志通用管理',11,8,NULL,'page/log/logSet.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'日志通用管理'),(2051,'系统日志',11,9,NULL,'page/log/systemLog.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'系统日志'),(2052,'跟踪任务',10,1,NULL,'page/trace/taskList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',1690000000000,'跟踪任务'),(2053,'信令分析',10,2,NULL,'page/trace/traceShow.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',1690000000000,'信令分析'),(2054,'核心网池',9,0,NULL,'page/mml/poolList.html','1','0','M','0','0','page','#','admin',1690000000000,'admin',1690000000000,'核心网池'),(2055,'操作维护MML',9,1,NULL,'page/mml/omcList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'操作维护MML'),(2056,'网元操作MML',9,3,NULL,'page/mml/list.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'网元操作MML'),(2057,'用户数据MML',9,4,NULL,'page/mml/udmList.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'用户数据MML'),(2058,'操作维护设置',9,5,NULL,'page/mml/mmlSet.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'操作维护设置'),(2059,'角色管理',12,6,NULL,'page/role/list.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'角色管理'),(2060,'菜单管理',12,7,NULL,'page/menu/list.html','1','0','M','0','1','page','#','admin',1690000000000,'admin',0,'菜单管理'),(2065,'数据库URL查询',0,10011,NULL,NULL,'1','1','B','0','0','page','#','admin',1690000000000,'admin',0,'数据库查询操作'),(2066,'数据库URL新增',0,10012,NULL,NULL,'1','1','B','0','0','page','#','admin',1690000000000,'admin',0,'数据库URL新增'),(2067,'数据库URL更新',0,10013,NULL,NULL,'1','1','B','0','0','page','#','admin',1690000000000,'admin',0,'数据库URL更新'),(2068,'数据库URL删除',0,10014,NULL,NULL,'1','1','B','0','0','page','#','admin',1690000000000,'admin',0,'数据库URL删除'),(2069,'用户信息',0,559,'page',NULL,'1','0','D','0','1','page','fa fa-home','admin',1690000000000,'admin',1690000000000,NULL),(2070,'UDM鉴权用户',2069,1,NULL,'page/nfUserInfo/authList.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,NULL),(2071,'5G基站信息',2069,4,NULL,'page/nfUserInfo/5gBase.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,NULL),(2072,'IMS在线用户',2069,3,NULL,'page/baseInfo/imsOnline.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,NULL),(2073,'UDM签约用户',2069,2,NULL,'page/nfUserInfo/subsList.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,NULL),(2074,'UE在线信息',2069,4,NULL,'page/baseInfo/ueInfoList.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',1690000000000,NULL),(2075,'menu.config.neManage',4,1,'neManage','configManage/neManage/index','1','0','M','1','1','configManage:neManage:index','icon-biaoqing','supervisor',1700000000000,NULL,0,'menu.config.neManageRemark'),(2076,'menu.config.configNE',4,2,'configParam','configManage/configParam/index','1','0','M','1','1','configManage:configParam:index','icon-piliang','supervisor',1700000000000,NULL,0,'menu.config.configNERemark'),(2077,'信令抓包',10,3,NULL,'page/trace/pcap.html','1','0','M','1','1','page','#','admin',1690000000000,'admin',0,'tcpdump抓包pcap文件'),(2078,'menu.config.backupManage',4,3,'backupManage','configManage/backupManage/index','1','0','M','1','1','configManage:backupManage:index','icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.config.backupManageRemark'),(2079,'menu.config.softwareManage',4,4,'softwareManage','configManage/softwareManage/index','1','0','M','1','1','configManage:softwareManage:index','icon-huidingbu','supervisor',1700000000000,NULL,0,'menu.config.softwareManageRemark'),(2080,'menu.ueUser.onlineIMS',5,4,'ims','neUser/ims/index','1','0','M','1','1','neUser:ims:index','icon-xiangmuchengyuan','supervisor',1700000000000,NULL,0,'menu.ueUser.onlineIMSRemark'),(2081,'menu.ueUser.onlineUE',5,6,'ue','neUser/ue/index','1','0','M','1','1','neUser:ue:index','icon-xiangmuchengyuan','supervisor',1700000000000,NULL,0,'menu.ueUser.onlineUERemark'),(2082,'menu.ueUser.base5G',5,7,'base5G','neUser/base5G/index','1','0','M','1','1','neUser:base5G:index','icon-paixu','supervisor',1700000000000,NULL,0,'menu.ueUser.base5GRemark'),(2083,'menu.trace',2087,30,'traceManage',NULL,'1','0','D','1','1',NULL,'icon-paixu','supervisor',1700000000000,NULL,0,'menu.traceRemark'),(2084,'menu.trace.task',2083,1,'task','traceManage/task/index','1','0','M','1','1','traceManage:task:index','icon-chexiao','supervisor',1700000000000,'admin',1712807894783,'menu.trace.taskRemark'),(2085,'menu.trace.analysis',2083,2,'analysis','traceManage/analysis/index','1','0','M','1','1','traceManage:analysis:index','icon-gongnengjieshao','supervisor',1700000000000,'supervisor',1712922262009,'menu.trace.analysisRemark'),(2086,'menu.trace.pcap',2083,3,'pcap','traceManage/pcap/index','1','1','M','1','1','traceManage:pcap:index','icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.trace.pcapRemark'),(2087,'menu.fault',0,2,'faultManage',NULL,'1','0','D','1','1',NULL,'icon-jinggao','supervisor',1700000000000,NULL,0,'menu.faultRemark'),(2088,'menu.fault.active',2129,1,'active-alarm','faultManage/active-alarm/index','1','1','M','1','1','faultManage:active-alarm:index','icon-wenjian','supervisor',1700000000000,NULL,0,'menu.fault.activemRemark'),(2089,'menu.log',0,9,'logManage',NULL,'1','0','D','1','1',NULL,'icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.logRemark'),(2090,'menu.log.operatOld',2089,1,'operation','logManage/operation/index','1','0','M','0','0','logManage:operation:index','icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.log.operatOldRemark'),(2091,'menu.log.mml',2089,2,'mml','logManage/mml/index','1','1','M','1','1','logManage:mml:index','icon-wocanyu','supervisor',1700000000000,NULL,0,'menu.log.mmlRemark'),(2092,'menu.log.alarm',2089,3,'alarm-log','logManage/alarm/index','1','0','M','1','1','logManage:alarm:index','icon-fuzhidaima','supervisor',1700000000000,NULL,0,'menu.log.alarmRemark'),(2093,'menu.log.securityOld',2089,6,'security-log','logManage/security/index','1','0','M','0','0','logManage/security/index','icon-gongnengjieshao','supervisor',1700000000000,NULL,0,'menu.log.securityOldRemark'),(2094,'menu.log.forwarding',2089,7,'forwarding','logManage/forwarding/index','1','0','M','1','1','logManage:forwarding:index','icon-huizhiguize','supervisor',1700000000000,NULL,0,'menu.log.forwardingRemark'),(2095,'menu.log.set',2089,15,'logSet','logManage/logSet/index','1','0','M','1','1','logManage:logSet:index','icon-you','supervisor',1700000000000,NULL,0,'menu.log.setRemark'),(2096,'menu.monitor.sessionUser',2,10,'session','monitor/session/index','1','0','M','0','0','monitor:session:index','icon-gerenzhanghu','supervisor',1700000000000,NULL,0,'menu.monitor.sessionUserRemark'),(2097,'menu.fault.history',2129,2,'history-alarm','faultManage/history-alarm/index','1','1','M','1','1','faultManage/history-alarm/index','icon-huizhiguize','supervisor',1700000000000,NULL,0,'menu.fault.historyRemark'),(2098,'menu.fault.set',2129,100,'fault-setting','faultManage/fault-setting/index','1','0','M','1','1','faultManage/fault-setting/index','icon-gonggaodayi','supervisor',1700000000000,NULL,0,'menu.fault.setRemark'),(2099,'menu.perf',0,5,'perfManage',NULL,'1','0','D','1','1',NULL,'icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.perfRemark'),(2100,'menu.perf.task',2099,1,'taskManage','perfManage/taskManage/index','1','1','M','1','1','perfManage:taskManage:index','icon-wofaqi','supervisor',1700000000000,'admin',1712807912947,'menu.perf.taskRemark'),(2101,'menu.perf.data',2099,2,'perfData','perfManage/perfData/index','1','1','M','1','1','perfManage:perfData:index','icon-soutubiao','supervisor',1700000000000,'admin',1712807920148,'menu.perf.dataRemark'),(2102,'menu.perf.report',2099,3,'perfReport','perfManage/perfReport/index','1','0','M','0','0','perfManage:perfReport:index','icon-gonggaodayi','supervisor',1700000000000,NULL,0,'menu.perf.reportRemark'),(2103,'menu.perf.threshold',2099,4,'perfThreshold','perfManage/perfThreshold/index','1','0','M','1','1','perfManage:perfThreshold:index','icon-zhuanrang','supervisor',1700000000000,'admin',1712807935215,'menu.perf.thresholdRemark'),(2104,'menu.perf.kpi',2099,5,'goldTarget','perfManage/goldTarget/index','1','1','M','1','1','perfManage:goldTarget:index','icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.perf.kpiRemark'),(2105,'menu.perf.customTarget',2099,6,'customTarget','perfManage/customTarget/index','1','1','M','0','0','perfManage:customTarget:index','icon-fanhui1','supervisor',1700000000000,'admin',1712807948673,'menu.perf.customTargetRemark'),(2106,'menu.perf.set',2099,7,'perfSet','perfManage/perfSet/index','1','0','M','0','0','perfManage:perfSet:index','icon-gonggao','supervisor',1700000000000,NULL,0,'menu.perf.setRemark'),(2107,'menu.mml',0,8,'mmlManage',NULL,'1','0','D','1','1',NULL,'icon-zhizuoliucheng','supervisor',1700000000000,NULL,0,'menu.mmlRemark'),(2108,'menu.mml.ne',2107,1,'neOperate','mmlManage/neOperate/index','1','1','M','1','1','mmlManage:neOperate:index','icon-huizhiguize','supervisor',1700000000000,NULL,0,'menu.mml.neRemark'),(2109,'menu.mml.udm',2107,2,'udmOperate','mmlManage/udmOperate/index','1','1','M','1','1','mmlManage:udmOperate:index','icon-gonggaodayi','supervisor',1700000000000,NULL,0,'menu.mml.udmRemark'),(2110,'menu.mml.set',2107,4,'mmlSet','mmlManage/mmlSet/index','1','0','M','1','1','mmlManage:mmlSet:index','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.mml.setRemark'),(2111,'menu.mml.omc',2107,3,'omcOperate','mmlManage/omcOperate/index','1','1','M','1','1','mmlManage:omcOperate:index','icon-huizhiguize','supervisor',1700000000000,NULL,0,'menu.mml.omcRemark'),(2112,'menu.config.licenseManage',4,5,'license','configManage/license/index','1','1','M','1','1','configManage/license/index','icon-shang','supervisor',1700000000000,NULL,0,'menu.config.licenseManageRemark'),(2113,'menu.security',0,14,'security',NULL,'1','0','D','1','1',NULL,'icon-suofang','supervisor',1700000000000,NULL,0,'menu.securityRemark'),(2114,'menu.system.systemSet',1,12,'setting','system/setting/index','1','1','M','1','1','system:setting:index','icon-piliang','supervisor',1700000000000,NULL,0,'menu.system.systemSetRemark'),(2115,'menu.system.systemResource',1,13,'monitor','monitor/monitor/index','1','1','M','1','1','monitor:monitor:info','icon-soutubiao','supervisor',1700000000000,NULL,0,'menu.system.systemResourceRemark'),(2116,'menu.config.configNEForm',4,2,'configParamForm','configManage/configParamForm/index','1','0','M','1','1','configManage:configParam:index','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.config.configNEFormRemark'),(2117,'menu.config.configNETree',4,2,'configParamTree','configManage/configParamTree/index','1','0','M','1','1','configManage:configParam:index','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.config.configNETreeRemark'),(2118,'menu.config.configNETreeTable',4,2,'configNETreeTable','configManage/configParamTreeTable/index','1','1','M','1','1','configManage:configParam:index','icon-wofaqi','supervisor',1700000000000,NULL,0,'menu.config.configNETreeTableRemark'),(2119,'menu.ueUser.n3iwf',5,8,'n3iwf','neUser/n3iwf/index','1','0','M','0','1','neUser:n3iwf:index','icon-paixu','supervisor',1700000000000,NULL,0,NULL),(2120,'menu.ueUser.pcf',5,9,'pcf','neUser/pcf/index','1','0','M','1','1','neUser:pcf:index','icon-paixu','supervisor',1700000000000,NULL,0,NULL),(2121,'menu.system.user.editRole',100,8,NULL,NULL,'1','1','B','1','1','system:user:editRole','#','supervisor',1700000000000,NULL,0,NULL),(2122,'menu.system.setting.i18n',2114,1,NULL,NULL,'1','1','B','1','1','system:setting:i18n','#','supervisor',1700000000000,'supervisor',1700000000000,'menu.system.setting.i18nRemark'),(2123,'menu.log.neFile',2089,9,'neFile','logManage/neFile/index','1','0','M','1','1','logManage:neFile:index','icon-tubiaohuizhi','supervisor',1700000000000,NULL,0,NULL),(2124,'menu.neUser.nssf',5,10,'nssf','neUser/nssf/index','1','0','M','0','1','neUser:nssf:index','icon-daimayingyong','supervisor',1700000000000,'supervisor',1700000000000,NULL),(2125,'menu.neUser.nssfAmf',5,11,'nssfAmf','neUser/nssfAmf/index','1','0','M','0','1','neUser:nssfAmf:index','icon-paixu','supervisor',1700000000000,NULL,0,NULL),(2126,'menu.monitor.topology',2130,10,'topology','monitor/topology/index','1','0','M','1','1','monitor:topology:index','icon-fangda','supervisor',1700000000000,NULL,0,NULL),(2127,'menu.monitor.topologyBuild',2130,30,'topologyBuild','monitor/topologyBuild/index','1','0','M','1','1','monitor:topologyBuild:index','icon-fangda','supervisor',1700000000000,'supervisor',1700000000000,NULL),(2128,'menu.monitor.topologyArchitecture',2130,20,'topologyArchitecture','monitor/topologyArchitecture/index','1','0','M','1','1','monitor:topologyArchitecture:index','icon-soutubiao','supervisor',1700000000000,'supervisor',1700000000000,NULL),(2129,'menu.alarm',2087,10,'alarm',NULL,'1','0','D','1','1',NULL,'icon-jinggao','supervisor',1704800000000,'supervisor',1704847028995,NULL),(2130,'menu.topology',2087,20,'topology',NULL,'1','0','D','1','1',NULL,'icon-anzhuo','supervisor',1704800000000,'supervisor',1704847055540,NULL),(2131,'menu.dashboard',2087,0,'dashboard',NULL,'1','0','D','1','1',NULL,'icon-soutubiao','supervisor',1705550000000,'supervisor',1705550000000,NULL),(2132,'menu.dashboard.overview',2131,1,'overview','dashboard/overview/index','1','0','M','1','1','dashboard:overview:index','icon-paixu','supervisor',1705550000000,NULL,0,NULL),(2133,'menu.dashboard.cdr',2140,40,'imsCDR','dashboard/imsCDR/index','1','0','M','1','1','dashboard:cdr:index','icon-paixu','supervisor',1705550000000,'supervisor',1712923191297,''),(2134,'menu.tools.terminal',3,3,'terminal','tool/terminal/index','1','1','M','1','1','tool:terminal:index','icon-pcduan','supervisor',1708481172778,'',0,''),(2135,'menu.config.neHost',4,15,'neHost','ne/neHost/index','1','1','M','1','1','ne:neHost:list','icon-fuzhidaima','supervisor',1708583596871,'',0,''),(2136,'menu.config.neHostCommand',4,18,'neHostCommand','ne/neHostCommand/index','1','0','M','1','1','ne:neHostCommand:list','icon-fuzhidaima','supervisor',1708583596871,'',0,''),(2137,'menu.config.neInfo',4,14,'neInfo','ne/neInfo/index','1','0','M','1','1','ne:neInfo:list','icon-fuzhidaima','supervisor',1708583596871,'',0,''),(2138,'menu.dashboard.amfUE',2141,1,'amfUE','dashboard/amfUE/index','1','0','M','1','1','dashboard:amfUE:index','icon-paixu','supervisor',1705550000000,'supervisor',1712923111968,''),(2139,'menu.logs.log',2089,0,'log','','1','0','D','0','1','','icon-wenjian','supervisor',1711352535855,'supervisor',1712751078161,''),(2140,'menu.monitor.cdr',2087,40,'cdr','','1','0','D','1','1','','icon-tubiaoku','supervisor',1711352709786,'supervisor',1712923725638,''),(2141,'menu.monitor.event',2087,50,'event','','1','0','D','1','1','','icon-gengduo','supervisor',1711352768797,'supervisor',1712751125648,''); /*!40000 ALTER TABLE `sys_menu` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -64,4 +64,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-03-06 17:27:01 +-- Dump completed on 2024-04-12 21:19:20 diff --git a/database/install/sys_role_menu.sql b/database/install/sys_role_menu.sql index 91fabe04..13e52801 100644 --- a/database/install/sys_role_menu.sql +++ b/database/install/sys_role_menu.sql @@ -35,7 +35,7 @@ CREATE TABLE `sys_role_menu` ( LOCK TABLES `sys_role_menu` WRITE; /*!40000 ALTER TABLE `sys_role_menu` DISABLE KEYS */; -INSERT INTO `sys_role_menu` VALUES (2,1),(2,4),(2,5),(2,100),(2,101),(2,102),(2,103),(2,104),(2,105),(2,106),(2,107),(2,108),(2,111),(2,112),(2,113),(2,115),(2,116),(2,117),(2,500),(2,501),(2,1000),(2,1001),(2,1002),(2,1003),(2,1004),(2,1005),(2,1006),(2,1007),(2,1008),(2,1009),(2,1010),(2,1011),(2,1012),(2,1013),(2,1014),(2,1015),(2,1016),(2,1017),(2,1018),(2,1019),(2,1020),(2,1021),(2,1022),(2,1023),(2,1024),(2,1025),(2,1026),(2,1027),(2,1028),(2,1029),(2,1030),(2,1031),(2,1032),(2,1033),(2,1034),(2,1039),(2,1040),(2,1041),(2,1042),(2,1043),(2,1044),(2,1045),(2,1048),(2,1049),(2,1050),(2,1051),(2,1052),(2,1053),(2,1054),(2,1055),(2,1056),(2,2009),(2,2010),(2,2075),(2,2078),(2,2079),(2,2080),(2,2081),(2,2082),(2,2083),(2,2084),(2,2085),(2,2086),(2,2087),(2,2088),(2,2089),(2,2091),(2,2092),(2,2094),(2,2097),(2,2098),(2,2099),(2,2100),(2,2101),(2,2102),(2,2103),(2,2104),(2,2105),(2,2106),(2,2107),(2,2108),(2,2109),(2,2111),(2,2112),(2,2113),(2,2114),(2,2118),(2,2119),(2,2120),(2,2121),(2,2122),(2,2123),(2,2124),(2,2125),(2,2126),(2,2128),(2,2129),(2,2130),(2,2131),(2,2132),(3,1),(3,4),(3,5),(3,108),(3,112),(3,115),(3,500),(3,501),(3,1030),(3,1031),(3,1032),(3,1034),(3,1039),(3,1042),(3,1048),(3,2009),(3,2010),(3,2075),(3,2078),(3,2080),(3,2081),(3,2082),(3,2083),(3,2084),(3,2085),(3,2086),(3,2087),(3,2088),(3,2089),(3,2091),(3,2092),(3,2094),(3,2097),(3,2098),(3,2099),(3,2100),(3,2101),(3,2102),(3,2103),(3,2104),(3,2105),(3,2106),(3,2107),(3,2108),(3,2109),(3,2111),(3,2112),(3,2113),(3,2118),(3,2119),(3,2120),(3,2123),(3,2124),(3,2125),(3,2126),(3,2127),(3,2128),(3,2129),(3,2130),(3,2131),(3,2132),(4,1),(4,5),(4,112),(4,115),(4,500),(4,501),(4,1039),(4,1041),(4,1042),(4,1044),(4,1048),(4,2080),(4,2081),(4,2082),(4,2083),(4,2084),(4,2085),(4,2086),(4,2087),(4,2088),(4,2089),(4,2091),(4,2092),(4,2094),(4,2097),(4,2098),(4,2099),(4,2101),(4,2104),(4,2113),(4,2119),(4,2120),(4,2124),(4,2125),(4,2126),(4,2127),(4,2128),(4,2129),(4,2130),(4,2131),(4,2132),(5,1),(5,5),(5,112),(5,2080),(5,2081),(5,2082),(5,2087),(5,2131),(5,2132),(100,1),(100,100),(100,1000); +INSERT INTO `sys_role_menu` VALUES (2,1),(2,4),(2,5),(2,100),(2,101),(2,102),(2,103),(2,104),(2,105),(2,108),(2,111),(2,112),(2,115),(2,116),(2,117),(2,500),(2,501),(2,1000),(2,1001),(2,1002),(2,1003),(2,1004),(2,1005),(2,1006),(2,1007),(2,1008),(2,1009),(2,1010),(2,1011),(2,1012),(2,1013),(2,1014),(2,1015),(2,1016),(2,1017),(2,1018),(2,1019),(2,1020),(2,1021),(2,1022),(2,1023),(2,1024),(2,1030),(2,1031),(2,1032),(2,1033),(2,1034),(2,1039),(2,1040),(2,1041),(2,1042),(2,1043),(2,1044),(2,1045),(2,1048),(2,1049),(2,1050),(2,1051),(2,1052),(2,1053),(2,1054),(2,1055),(2,1056),(2,2009),(2,2010),(2,2075),(2,2078),(2,2079),(2,2080),(2,2081),(2,2082),(2,2083),(2,2084),(2,2085),(2,2086),(2,2087),(2,2088),(2,2089),(2,2091),(2,2092),(2,2094),(2,2097),(2,2098),(2,2099),(2,2100),(2,2101),(2,2102),(2,2103),(2,2104),(2,2105),(2,2106),(2,2107),(2,2108),(2,2109),(2,2111),(2,2112),(2,2113),(2,2114),(2,2118),(2,2119),(2,2120),(2,2121),(2,2122),(2,2123),(2,2124),(2,2125),(2,2126),(2,2128),(2,2129),(2,2130),(2,2131),(2,2132),(2,2133),(2,2138),(2,2140),(2,2141),(3,1),(3,4),(3,5),(3,108),(3,112),(3,115),(3,500),(3,501),(3,1030),(3,1031),(3,1032),(3,1034),(3,1039),(3,1042),(3,1048),(3,2009),(3,2010),(3,2075),(3,2078),(3,2080),(3,2081),(3,2082),(3,2083),(3,2084),(3,2085),(3,2086),(3,2087),(3,2088),(3,2089),(3,2091),(3,2092),(3,2094),(3,2097),(3,2098),(3,2099),(3,2100),(3,2101),(3,2102),(3,2103),(3,2104),(3,2105),(3,2106),(3,2107),(3,2108),(3,2109),(3,2111),(3,2112),(3,2113),(3,2118),(3,2119),(3,2120),(3,2123),(3,2124),(3,2125),(3,2126),(3,2127),(3,2128),(3,2129),(3,2130),(3,2131),(3,2132),(3,2133),(3,2138),(3,2140),(3,2141),(4,1),(4,5),(4,112),(4,115),(4,500),(4,501),(4,1039),(4,1041),(4,1042),(4,1044),(4,1048),(4,2080),(4,2081),(4,2082),(4,2083),(4,2084),(4,2085),(4,2086),(4,2087),(4,2088),(4,2089),(4,2091),(4,2092),(4,2094),(4,2097),(4,2098),(4,2099),(4,2101),(4,2104),(4,2113),(4,2119),(4,2120),(4,2124),(4,2125),(4,2126),(4,2127),(4,2128),(4,2129),(4,2130),(4,2131),(4,2132),(4,2133),(4,2138),(4,2140),(4,2141),(5,1),(5,5),(5,112),(5,2080),(5,2081),(5,2082),(5,2087),(5,2131),(5,2132),(100,1),(100,100),(100,1000); /*!40000 ALTER TABLE `sys_role_menu` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -48,4 +48,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-03-06 17:27:00 +-- Dump completed on 2024-04-12 21:19:19 diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index a1d51cfc..e62e1a73 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -17,637 +17,639 @@ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -INSERT IGNORE INTO `sys_dict_data` VALUES (1000, 1000, 'i18n', '中文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1001, 1001, 'hello', '你好', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1002, 1002, 'menu.system', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1003, 1003, 'menu.monitor', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1004, 1004, 'menu.tools', '工具', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1005, 1005, 'menu.config', '配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1006, 1006, 'menu.ueUser', '终端', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1007, 1007, 'menu.systemRemark', '系统管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1008, 1008, 'menu.monitorRemark', '系统监控目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1009, 1009, 'menu.toolsRemark', '系统工具目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1010, 1010, 'menu.configRemark', 'OMC配置管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1011, 1011, 'menu.ueUserRemark', '网元终端信息目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1012, 1012, 'menu.security.user', '用户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1013, 1013, 'menu.security.role', '角色管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1014, 1014, 'menu.security.roleUser', '分配角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1015, 1015, 'menu.system.menu', '菜单管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1016, 1016, 'menu.security.dept', '部门管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1017, 1017, 'menu.security.post', '岗位管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1018, 1018, 'menu.system.dictType', '字典管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1019, 1019, 'menu.system.dictData', '字典数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1020, 1020, 'menu.system.paramSet', '参数设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1021, 1021, 'menu.system.systemLog', '系统日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1022, 1022, 'menu.system.systemInfo', '系统信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1023, 1023, 'menu.system.cacheInfo', '缓存信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1024, 1024, 'menu.system.cache', '缓存管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1025, 1025, 'menu.security.onlineUser', '在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1026, 1026, 'menu.system.job', '调度任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1027, 1027, 'menu.system.jobLog', '调度日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1028, 1028, 'menu.tools.help', '帮助文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1029, 1029, 'menu.log.operat', '操作日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1030, 1030, 'menu.log.login', '安全日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1031, 1031, 'menu.security.userRemark', '用户管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1032, 1032, 'menu.security.roleRemark', '角色管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1033, 1033, 'menu.security.roleUserRemark', '分配角色内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1034, 1034, 'menu.system.menuRemark', '菜单管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1035, 1035, 'menu.security.deptRemark', '部门管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1036, 1036, 'menu.security.postRemark', '岗位管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1037, 1037, 'menu.system.dictTypeRemark', '字典管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1038, 1038, 'menu.system.dictDataRemark', '字典数据内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1039, 1039, 'menu.system.paramSetRemark', '参数设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1040, 1040, 'menu.system.systemLogRemark', '系统日志目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1041, 1041, 'menu.system.systemInfoRemark', '系统信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1042, 1042, 'menu.system.cacheInfoRemark', '缓存信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1043, 1043, 'menu.system.cacheRemark', '缓存列表菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1044, 1044, 'menu.security.onlineUserRemark', '在线用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1045, 1045, 'menu.system.jobRemark', '调度任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1046, 1046, 'menu.system.jobLogRemark', '调度日志内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1047, 1047, 'menu.tools.helpRemark', '帮助文档菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1048, 1048, 'menu.log.operatRemark', '操作日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1049, 1049, 'menu.log.loginRemark', '登录日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1050, 1050, 'menu.common.query', '查询', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1051, 1051, 'menu.common.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1052, 1052, 'menu.common.edit', '修改', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1053, 1053, 'menu.common.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1054, 1054, 'menu.common.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1055, 1055, 'menu.common.import', '导入', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1056, 1056, 'menu.common.reset', '重置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1057, 1057, 'menu.common.unlock', '账户解锁', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1058, 1058, 'menu.forcedQuit.batch ', '批量强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1059, 1059, 'menu.forcedQuit.single', '单条强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1060, 1060, 'menu.ueUser.authUDM', 'UDM鉴权用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1061, 1061, 'menu.ueUser.subUDM', 'UDM签约用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1062, 1062, 'menu.ueUser.authUDMRemark', 'UDM鉴权用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1063, 1063, 'menu.ueUser.subUDMRemark', 'UDM签约用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1064, 1064, 'menu.config.neManage', '网元管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1065, 1065, 'menu.config.configNE', '参数配置Original', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1066, 1066, 'menu.config.neManageRemark', '网元管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1067, 1067, 'menu.config.configNERemark', '参数配置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1068, 1068, 'menu.config.backupManage', '备份管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1069, 1069, 'menu.config.softwareManage', '软件管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1070, 1070, 'menu.ueUser.onlineIMS', 'IMS在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1071, 1071, 'menu.ueUser.onlineUE', 'UE在线信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1072, 1072, 'menu.ueUser.base5G', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1073, 1073, 'menu.trace', '跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '信令分析', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1076, 1076, 'menu.trace.pcap', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1077, 1077, 'menu.fault', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1078, 1078, 'menu.config.backupManageRemark', '备份管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1079, 1079, 'menu.config.softwareManageRemark', '软件管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1080, 1080, 'menu.ueUser.onlineIMSRemark', 'IMS在线用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1081, 1081, 'menu.ueUser.onlineUERemark', 'UE在线信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1082, 1082, 'menu.ueUser.base5GRemark', '5G基站信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1083, 1083, 'menu.traceRemark', '跟踪管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1084, 1084, 'menu.trace.taskRemark', '跟踪任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1086, 1086, 'menu.trace.pcapRemark', '信令抓包菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1087, 1087, 'menu.faultRemark', '故障管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1088, 1088, 'menu.fault.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1089, 1089, 'menu.log', '日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1090, 1090, 'menu.log.operatOld', '操作日志(旧)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1091, 1091, 'menu.log.mml', 'MML日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1092, 1092, 'menu.log.alarm', '告警日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1093, 1093, 'menu.log.securityOld', '安全日志(旧)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1094, 1094, 'menu.log.forwarding', '告警前转日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1095, 1095, 'menu.log.set', '日志设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1096, 1096, 'menu.monitor.sessionUser', '用户会话', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1097, 1097, 'menu.fault.history', '历史告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1098, 1098, 'menu.fault.set', '设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1099, 1099, 'menu.perf', '性能', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1100, 1100, 'menu.fault.activemRemark', '活动告警菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1101, 1101, 'menu.logRemark', '日志管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1102, 1102, 'menu.log.operatOldRemark', '操作日志旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1103, 1103, 'menu.log.mmlRemark', '操作MML日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1104, 1104, 'menu.log.alarmRemark', '告警日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1105, 1105, 'menu.log.securityOldRemark', '安全日志旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1106, 1106, 'menu.log.forwardingRemark', '告警前转日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1107, 1107, 'menu.log.setRemark', '日志设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1108, 1108, 'menu.monitor.sessionUserRemark', '用户会话旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1109, 1109, 'menu.fault.historyRemark', '历史告警菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1110, 1110, 'menu.fault.setRemark', '故障通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1111, 1111, 'menu.perfRemark', '性能目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1112, 1112, 'menu.perf.task', '任务管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1113, 1113, 'menu.perf.data', '性能数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1114, 1114, 'menu.perf.report', '性能报表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1115, 1115, 'menu.perf.threshold', '性能门限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1116, 1116, 'menu.perf.kpi', '黄金指标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1117, 1117, 'menu.perf.customTarget', '自定义指标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1118, 1118, 'menu.perf.set', '性能通用设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1119, 1119, 'menu.mml', 'MML', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1120, 1120, 'menu.mml.ne', '网元操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1121, 1121, 'menu.mml.udm', 'UDM操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1122, 1122, 'menu.mml.set', 'MML设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1123, 1123, 'menu.mml.omc', 'OMC操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1124, 1124, 'menu.perf.taskRemark', '任务管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1125, 1125, 'menu.perf.dataRemark', '性能数据菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1126, 1126, 'menu.perf.reportRemark', '性能报表菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1127, 1127, 'menu.perf.thresholdRemark', '性能门限菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1128, 1128, 'menu.perf.kpiRemark', '黄金指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1129, 1129, 'menu.perf.customTargetRemark', '自定义指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1130, 1130, 'menu.perf.setRemark', '性能通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1131, 1131, 'menu.mmlRemark', 'MML管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1132, 1132, 'menu.mml.neRemark', '网元操作菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1133, 1133, 'menu.mml.udmRemark', '网元UDM用户数据菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1134, 1134, 'menu.mml.setRemark', 'MML设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1135, 1135, 'menu.mml.omcRemark', 'OMC操作菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1136, 1136, 'menu.config.licenseManage', '许可证管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1137, 1137, 'menu.security', '安全', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1138, 1138, 'menu.system.systemSet', '系统设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1139, 1139, 'menu.system.systemResource', '系统资源', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1140, 1140, 'menu.config.configNEForm', '参数配置Form', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1141, 1141, 'menu.config.configNETree', '参数配置Tree', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1142, 1142, 'menu.config.configNETreeTable', '参数配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1143, 1143, 'menu.config.licenseManageRemark', '许可证管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1144, 1144, 'menu.securityRemark', '安全管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1145, 1145, 'menu.system.systemSetRemark', '系统设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1146, 1146, 'menu.system.systemResourceRemark', '系统资源 cpu io network菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1147, 1147, 'menu.config.configNEFormRemark', '参数配置Form菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1148, 1148, 'menu.config.configNETreeRemark', '参数配置Tree菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1149, 1149, 'menu.config.configNETreeTableRemark', '参数配置TreeTable菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1150, 1150, 'menu.noData', '没有可访问菜单数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1151, 1151, 'menu.errNameExists', '操作菜单【{name}】失败,菜单名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1152, 1152, 'menu.errPathExists', '操作菜单【{name}】失败,菜单路由地址已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1153, 1153, 'menu.errFramePath', '操作菜单【{name}】失败,非内部地址请以http(s)://开头', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1154, 1154, 'menu.errParentStatus', '上级菜单未启用!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1155, 1155, 'menu.errHasChildUse', '操作菜单【{name}】失败,存在使用子菜单数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1156, 1156, 'menu.errHasRoleUse', '操作菜单【{name}】失败,菜单已分配给角色数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1400, 1400, 'dictData.sex.un', '未选择', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1401, 1401, 'dictData.sex.male', '男', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1402, 1402, 'dictData.sex.female', '女', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1403, 1403, 'dictData.show', '显示', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1404, 1404, 'dictData.hide', '隐藏', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1405, 1405, 'dictData.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1406, 1406, 'dictData.disable', '停用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1407, 1407, 'dictData.yes', '是', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1408, 1408, 'dictData.no', '否', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1409, 1409, 'dictData.success', '成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1410, 1410, 'dictData.fail', '失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1411, 1411, 'dictData.jobStatus.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1412, 1412, 'dictData.jobStatus.pause', '暂停', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1413, 1413, 'dictData.jobGroup.Default', '默认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1414, 1414, 'dictData.jobGroup.System', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1415, 1415, 'dictData.operType.other', '其他', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1416, 1416, 'dictData.operType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1417, 1417, 'dictData.operType.edit', '修改', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1418, 1418, 'dictData.operType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1419, 1419, 'dictData.operType.auth', '授权', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1420, 1420, 'dictData.operType.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1421, 1421, 'dictData.operType.import', '导入', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1422, 1422, 'dictData.operType.forced quit', '强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1423, 1423, 'dictData.operType.clear', '清空', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1424, 1424, 'dictData.trace.interface', '接口跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1425, 1425, 'dictData.trace.device', '设备跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1426, 1426, 'dictData.trace.user', '用户跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1427, 1427, 'dictData.logType.download', '下载', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1428, 1428, 'dictData.logType.activation', '激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1429, 1429, 'dictData.logType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1430, 1430, 'dictData.logType.other', '其他', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1431, 1431, 'dictData.logType.back', '回退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1432, 1432, 'dictData.logType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1433, 1433, 'dictData.logType.distribute', '分配', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1434, 1434, 'dictData.logType.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1435, 1435, 'dictData.logType.query', '查询', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1436, 1436, 'dictData.logType.setup', '设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1437, 1437, 'dictData.logType.update', '更新', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1438, 1438, 'dictData.logType.upload', '上传', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1439, 1439, 'dictData.logType.view', '查看', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1440, 1440, 'dictData.logType.login', '登录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1441, 1441, 'dictData.logType.logout', '登出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1442, 1442, 'dictData.securityLogType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1443, 1443, 'dictData.securityLogType.update', '更新', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1444, 1444, 'dictData.securityLogType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1445, 1445, 'dictData.securityLogType.lock', '锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1446, 1446, 'dictData.securityLogType.unlock', '解锁', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1447, 1447, 'dictData.securityLogType.reset', '重置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1448, 1448, 'dictData.securityLogType.deactivate', '停用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1449, 1449, 'dictData.jobSaveLog.no', '不记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1450, 1450, 'dictData.jobSaveLog.yes', '记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1451, 1451, 'dictData.neVersionStatus.upload', '已上传', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1452, 1452, 'dictData.neVersionStatus.inactive', '未激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1453, 1453, 'dictData.neVersionStatus.active', '已激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1454, 1454, 'dictData.alarmStatus.history', '历史告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1455, 1455, 'dictData.alarmStatus.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1456, 1456, 'dictData.export.code', '数据代码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1457, 1457, 'dictData.export.sort', '数据排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1458, 1458, 'dictData.export.label', '数据标签', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1459, 1459, 'dictData.export.value', '数据键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1460, 1460, 'dictData.export.type', '数据排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1461, 1461, 'dictData.export.status', '数据状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1462, 1462, 'dictData.datascope.all', '全部数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1463, 1463, 'dictData.datascope.custom', '自定数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1464, 1464, 'dictData.datascope.dept', '部门数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1465, 1465, 'dictData.datascope.deptAndChid', '部门及以下数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1466, 1466, 'dictData.datascope.self', '仅本人数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1467, 1467, 'dictData.noData', '没有可访问字典编码数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1468, 1468, 'dictData.errLabelExists', '操作数据【{name}】失败,该字典类型下标签名已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1500, 1500, 'dictType.sys_user_sex', '用户性别', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1501, 1501, 'dictType.sys_show_hide', '菜单状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1502, 1502, 'dictType.sys_normal_disable', '系统开关', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1503, 1503, 'dictType.sys_job_status', '任务状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1504, 1504, 'dictType.sys_job_group', '任务分组', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1505, 1505, 'dictType.sys_yes_no', '系统是否', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1506, 1506, 'dictType.sys_oper_type', '操作类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1507, 1507, 'dictType.sys_common_status', '系统状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1508, 1508, 'dictType.trace_type', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1509, 1509, 'dictType.operation_log_type', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1510, 1510, 'dictType.alarm_status', '告警日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1511, 1511, 'dictType.security_log_type', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1512, 1512, 'dictType.ne_version_status', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1513, 1513, 'dictType.i18n_en', '多语言-英文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1514, 1514, 'dictType.i18n_zh', '多语言-中文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1515, 1515, 'dictType.sys_user_sex_remark', '用户性别列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1516, 1516, 'dictType.sys_show_hide_remark', '菜单状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1517, 1517, 'dictType.sys_normal_disable_remark', '系统开关列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1518, 1518, 'dictType.sys_job_status_remark', '任务状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1519, 1519, 'dictType.sys_job_group_remark', '任务分组列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1520, 1520, 'dictType.sys_yes_no_remark', '系统是否列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1521, 1521, 'dictType.sys_oper_type_remark', '操作类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1522, 1522, 'dictType.sys_common_status_remark', '登录状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1523, 1523, 'dictType.trace_type_remark', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1524, 1524, 'dictType.operation_log_type_remark', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1525, 1525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1526, 1526, 'dictType.security_log_type_remark', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1527, 1527, 'dictType.ne_version_status_remark', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1528, 1528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1529, 1529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1530, 1530, 'dictType.export.id', '字典编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1531, 1531, 'dictType.export.name', '字典名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1532, 1532, 'dictType.export.type', '字典类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1533, 1533, 'dictType.export.status', '字典状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1534, 1534, 'dictType.sys_role_datascope', '系统角色数据范围', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1535, 1535, 'dictType.sys_role_datascope_remark', '系统角色数据范围映射', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1536, 1536, 'dictType.noData', '没有可访问字典类型数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1537, 1537, 'dictType.errNameExists', '操作字典【{name}】失败,字典名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1538, 1538, 'dictType.errTypeExists', '操作字典【{name}】失败,字典类型已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1600, 1600, 'dept.root', '系统维护部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1601, 1601, 'dept.root.item1', '运维一部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1602, 1602, 'dept.noData', '没有可访问部门数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1603, 1603, 'dept.errParentDelFlag', '上级部门【{name}】已删除,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1604, 1604, 'dept.errParentStatus', '上级部门【{name}】停用,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1605, 1605, 'dept.errNameExists', '操作部门【{name}】失败,部门名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1606, 1606, 'dept.errParentID', '操作部门【{name}】失败,上级部门不能是自己', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1607, 1607, 'dept.errHasChildUse', '操作失败,该部门包含未停用的子部门数量:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1608, 1608, 'dept.errHasUserUse', '不允许删除,部门已分配给用户数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1630, 1630, 'config.sys.user.initPassword', '用户管理-账号初始密码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1631, 1631, 'config.sys.account.captchaEnabled', '账号自助-验证码开关', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1632, 1632, 'config.sys.account.registerUser', '账号自助-是否开启用户注册功能', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1633, 1633, 'config.sys.user.maxRetryCount', '用户管理-密码最大错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1634, 1634, 'config.sys.user.lockTime', '用户管理-密码锁定时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1635, 1635, 'config.monitor.sysResource.storeDays', '监控-系统资源-数据保留时长', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1636, 1636, 'config.sys.logo.type', '系统设置-LOGO类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1637, 1637, 'config.sys.logo.filePathIcon', '系统设置-LOGO文件icon', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1638, 1638, 'config.sys.logo.filePathBrand', '系统设置-LOGO文件brand', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1639, 1639, 'config.sys.loginBackground', '系统设置-登录界面背景', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1640, 1640, 'config.sys.title', '系统设置-系统名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1641, 1641, 'config.sys.copyright', '系统设置-版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1642, 1642, 'config.sys.user.initPasswordRemark', '导入用户初始化密码 123456', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1643, 1643, 'config.sys.account.captchaEnabledRemark', '是否开启验证码功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1644, 1644, 'config.sys.account.registerUserRemark', '是否开启注册用户功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1645, 1645, 'config.sys.user.maxRetryCountRemark', '密码最大错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1646, 1646, 'config.sys.user.lockTimeRemark', '密码锁定时间,单位分钟(默认10分钟)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1647, 1647, 'config.monitor.sysResource.storeDaysRemark', '监控-系统资源-数据保留时长,单位天。根据当前日期,删除超过保留时长的日期数据信息。', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1648, 1648, 'config.sys.logo.typeRemark', '全图:brand\r\n小图:icon', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1649, 1649, 'config.sys.logo.filePathIconRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1650, 1650, 'config.sys.logo.filePathBrandRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1651, 1651, 'config.sys.loginBackgroundRemark', '文件支持网络地址图片和内部上传的文件路径,默认背景用#号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1652, 1652, 'config.sys.titleRemark', '系统名称长度限制11位字符串', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1653, 1653, 'config.sys.copyrightRemark', '底脚固定条,左侧放置版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1654, 1654, 'config..export.id', '参数编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1655, 1655, 'config..export.name', '参数名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1656, 1656, 'config..export.key', '参数键名', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1657, 1657, 'config..export.value', '参数键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1658, 1658, 'config..export.type', '系统内置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1659, 1659, 'config..export.remark', '参数说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1660, 1660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1661, 1661, 'config.sys.copyrightValue', 'Copyright ©2023 千通科技', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1662, 1662, 'config.noData', '没有可访问参数配置数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1663, 1663, 'config.errKey', '无效 key', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1664, 1664, 'config.errValueEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1665, 1665, 'config.errKeyExists', '操作参数配置【{name}】失败,参数键名已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1666, 1666, 'config.errDelete', '删除参数配置信息失败!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1667, 1667, 'config.errType', '操作含有内置参数,禁止删除!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1700, 1700, 'job.monitor_sys_resource', '监控-系统资源', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1701, 1701, 'job.monitor_sys_resource_remark', '系统资源CPU/IO/Netword收集\r\ninterval单位分钟,平均分钟资源情况\r\n注:请根据cron表达式的时间单位分钟,传入参数interva值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1702, 1702, 'job.delExpiredNeBackup', '删除过期网元备份文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1703, 1703, 'job.delExpiredNeBackupRemark', '删除过期网元etc备份文件, 传入参数表示保留{duration}天的备份文件, 默认60天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1704, 1704, 'job.deleteExpiredAlarmRecord', '删除过期历史告警记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1705, 1705, 'job.deleteExpiredAlarmRecordRemark', '删除过期历史告警记录,传入参数表示保留{duration}天的历史告警记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1706, 1706, 'job.deleteExpiredKpiRecord', '删除过期黄金指标记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1707, 1707, 'job.deleteExpiredKpiRecordRemark', '黄金指标记录保留{duration}天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1708, 1708, 'job.backupEtcFromNE', '网元配置自动备份任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1709, 1709, 'job.backupEtcFromNERemark', '自动备份网元etc目录下的配置文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1710, 1710, 'job.export.jobID', '任务编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1711, 1711, 'job.export.jobName', '任务名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1712, 1712, 'job.export.jobGroupName', '任务组名', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1713, 1713, 'job.export.invokeTarget', '调用目标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1714, 1714, 'job.export.targetParams', '传入参数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1715, 1715, 'job.export.cronExpression', 'cron表达式', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1716, 1716, 'job.export.status', '状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1717, 1717, 'job.export.remark', '备注说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1718, 1718, 'job.export.jobLogID', '任务日志编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1719, 1719, 'job.export.jobLogStatus', '任务日志状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1720, 1720, 'job.export.jobLogTime', '任务日志时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1721, 1721, 'job.noData', '没有可访问调度任务数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1722, 1722, 'job.errTargetParams', '操作调度任务【{name}】失败,任务传入参数json字符串不正确', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1723, 1723, 'job.errCronExpression', '操作调度任务【{name}】失败,Cron表达式不正确', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1724, 1724, 'job.errJobExists', '调度任务新增【{name}】失败,同任务组内有相同任务名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1725, 1725, 'job.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1750, 1750, 'role.admin', '超级管理员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1751, 1751, 'role.adminAssign', '管理人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1752, 1752, 'role.operator', '运维人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1753, 1753, 'role.monitor', '监控人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1754, 1754, 'role.vistor', '普通用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1755, 1755, 'role.adminRemark', '超级管理员,无法修改删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1756, 1756, 'role.adminAssignRemark', '管理人员 可以对设备进行任何操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1757, 1757, 'role.operatorRemark', '运维人员 可以从设备读取数据,并对设备进行配置,但是不能对设备进行软件升级操作。', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1758, 1758, 'role.monitorRemark', '监控人员 只能从设备读取数据,而不能对设备进行任何设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1759, 1759, 'role.vistorRemark', '普通用户 只可看系统相关信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1760, 1760, 'role.export.id', '角色编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1761, 1761, 'role.export.name', '角色名称 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1762, 1762, 'role.export.key', '角色键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1763, 1763, 'role.export.sort', '角色顺序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1764, 1764, 'role.export.dataScope', '角色数据范围', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1765, 1765, 'role.export.status', '角色状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1766, 1766, 'role.noData', '没有可访问角色数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1767, 1767, 'role.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1768, 1768, 'role.errNameExists', '操作角色【{name}】失败,角色名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1769, 1769, 'role.errKeyExists', '操作角色【{name}】失败,角色键值已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1800, 1800, 'post.admin', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1801, 1801, 'post.operator', '管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1802, 1802, 'post.monitor', '运维', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1803, 1803, 'post.visitor', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1804, 1804, 'post.export.id', '岗位编号 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1805, 1805, 'post.export.code', '岗位编码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1806, 1806, 'post.export.name', '岗位名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1807, 1807, 'post.export.sort', '岗位排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1808, 1808, 'post.export.status', '岗位状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1809, 1809, 'post.noData', '没有可访问岗位数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1810, 1810, 'post.errNameExists', '操作岗位【{name}】失败,岗位名称已存在已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1811, 1811, 'post.errCodeExists', '操作角色【{name}】失败,角色键值已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1830, 1830, 'user.export.id', '用户编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1831, 1831, 'user.export.name', '登录账号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1832, 1832, 'user.export.nick', '用户昵称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1833, 1833, 'user.export.email', '电子邮箱', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1834, 1834, 'user.export.phone', '手机号码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1835, 1835, 'user.export.sex', '用户性别', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1836, 1836, 'user.export.status', '用户状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1837, 1837, 'user.export.deptID', '部门编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1838, 1838, 'user.export.deptName', '部门名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1839, 1839, 'user.export.deptLeader', '部门负责人', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1840, 1840, 'user.export.loginIP', '用户登录IP', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1841, 1841, 'user.export.loginDate', '用户登录时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1842, 1842, 'user.noData', '没有可访问用户数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1843, 1843, 'user.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1844, 1844, 'user.errPasswdOld', '修改密码失败,旧密码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1845, 1845, 'user.errPasswdEqOld', '新密码不能与旧密码相同', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1846, 1846, 'user.errPasswd', '登录密码至少包含大小写字母、数字、特殊符号,且不少于6位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1847, 1847, 'user.errEmailFormat', '操作用户【{name}】失败,邮箱格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1848, 1848, 'user.errEmailExists', '操作用户【{name}】失败,邮箱已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1849, 1849, 'user.errPhoneFormat', '操作用户【{name}】失败,手机号码格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1850, 1850, 'user.errPhoneExists', '操作用户【{name}】失败,手机号码已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1851, 1851, 'user.errNameExists', '操作用户【{name}】失败,登录账号已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1852, 1852, 'user.import.mustItem', '表格中必填列表项,{text}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1853, 1853, 'user.import.phoneExist', '用户编号:{id} 手机号码 {phone} 已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1854, 1854, 'user.import.phoneFormat', '用户编号:{id} 手机号码 {phone} 格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1855, 1855, 'user.import.emailExist', '用户编号:{id} 用户邮箱:{email} 已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1856, 1856, 'user.import.emailFormat', '用户编号:{id} 用户邮箱:{email} 格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1857, 1857, 'user.import.success', '用户编号:{id} 登录名称:{name} 导入成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1858, 1858, 'user.import.fail', '用户编号:{id} 登录名称:{name} 导入失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1859, 1859, 'user.import.successUpdate', '用户编号:{id} 登录名称:{name} 更新成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1860, 1860, 'user.import.failUpdate', '用户编号:{id} 登录名称:{name} 更新失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1861, 1861, 'user.import.failTip', '很抱歉,导入失败!共 {num} 条数据格式不正确,错误如下:', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1862, 1862, 'user.import.successTip', '恭喜您,数据已全部导入成功!共 {num} 条,数据如下:', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1900, 1900, 'app.common.err403', '无权访问 {method} {requestURI}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1901, 1901, 'app.common.err401', '无效身份授权', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1902, 1902, 'app.common.err400', '参数错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1903, 1903, 'app.common.exportEmpty', '导出数据记录为空', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1904, 1904, 'app.common.errOperateAdmin', '不允许操作内置用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1905, 1905, 'app.common.errOperateRole', '不允许操作内置角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1906, 1906, 'app.common.deleteSuccess', '删除成功:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1907, 1907, 'app.common.loginSuccess', '登录成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1908, 1908, 'app.common.logoutSuccess', '注销成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1909, 1909, 'app.common.errUnlock', '该用户未被锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1910, 1910, 'app.common.noLoginUser', '登录用户信息无效', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1911, 1911, 'app.common.rateLimitTip', '访问过于频繁,请稍候再试', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1912, 1912, 'log.operate.export.id', '操作编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1913, 1913, 'log.operate.export.title', '模块名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1914, 1914, 'log.operate.export.businessType', '业务类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1915, 1915, 'log.operate.export.method', '操作方法', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1916, 1916, 'log.operate.export.requestMethod', '请求方式 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1917, 1917, 'log.operate.export.operatorType', '操作类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1918, 1918, 'log.operate.export.operName', '操作人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1919, 1919, 'log.operate.export.deptName', '操作人员部门名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1920, 1920, 'log.operate.export.url', '请求链接地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1921, 1921, 'log.operate.export.ip', '请求主机 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1922, 1922, 'log.operate.export.location', '请求地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1923, 1923, 'log.operate.export.param', '请求参数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1924, 1924, 'log.operate.export.msg', '操作信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1925, 1925, 'log.operate.export.status', '操作状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1926, 1926, 'log.operate.export.costTime', '消耗时间(毫秒)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1927, 1927, 'log.operate.export.operTime', '操作时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1928, 1928, 'log.login.export.id', '记录编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1929, 1929, 'log.login.export.userName', '登录账号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1930, 1930, 'log.login.export.status', '登录状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1931, 1931, 'log.login.export.ip', '登录地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1932, 1932, 'log.login.export.location', '登录地点', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1933, 1933, 'log.login.export.browser', '浏览器', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1934, 1934, 'log.login.export.os', '操作系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1935, 1935, 'log.login.export.msg', '登录信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1936, 1936, 'log.login.export.time', '登录时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1937, 1937, 'trace.tcpdump.noData', '找不到 {type} {id} 对应网元信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1938, 1938, 'register.errUsername', '账号不能以数字开头,可包含大写小写字母,数字,且不少于5位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1939, 1939, 'register.errPasswd', '登录密码至少包含大小写字母、数字、特殊符号,且不少于6位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1940, 1940, 'register.errPasswdNotEq', '用户确认输入密码不一致', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1941, 1941, 'register.success', '注册成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1942, 1942, 'register.successMsg', '{name} 注册成功 {id}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1943, 1943, 'log.operate.title.sysJobLog', '调度任务日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1944, 1944, 'log.operate.title.sysJob', '调度任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1945, 1945, 'log.operate.title.tcpdump', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1946, 1946, 'log.operate.title.sysConfig', '参数配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1947, 1947, 'log.operate.title.sysDept', '部门', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1948, 1948, 'log.operate.title.sysDictData', '字典数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1949, 1949, 'log.operate.title.sysDictType', '字典类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1950, 1950, 'log.operate.title.sysMenu', '菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1951, 1951, 'log.operate.title.sysPost', '岗位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1952, 1952, 'log.operate.title.sysProfile', '个人信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1953, 1953, 'log.operate.title.sysProfileAvatar', '个人头像', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1954, 1954, 'log.operate.title.sysRole', '角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1955, 1955, 'log.operate.title.sysUser', '用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1956, 1956, 'log.operate.title.sysLogOper', '操作日志记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1957, 1957, 'log.operate.title.sysLogLogin', '登录日志记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1958, 1958, 'login.errNameOrPasswd', '用户不存在或密码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1959, 1959, 'login.errDelFlag', '对不起,您的账号已被删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1960, 1960, 'login.errStatus', '对不起,您的帐户已被禁用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1961, 1961, 'login.errRetryPasswd', '密码输入错误多次,帐户已被锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1962, 1962, 'captcha.err', '验证码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1963, 1963, 'captcha.errValid', '验证码已失效', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1964, 1964, 'app.common.noUaOsBrowser', '未知 未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1965, 1965, 'app.common.noIPregion', '内网', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1966, 1966, 'app.common.unknown', '未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1967, 1967, 'app.common.noNEInfo', '未找到匹配网元信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1968, 1968, 'ne.udm.errImportUserAuthFileFormat', '请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, ki, algo, amf, opc', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1969, 1969, 'ne.udm.errExportType', '导出文件类型支持CSV和txt', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1970, 1970, 'ne.udm.errImportUserSubFileFormat', '请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1971, 1971, 'log.operate.title.udmAuth', 'UDM鉴权用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1972, 1972, 'log.operate.title.udmSub', 'UDM签约用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1973, 1973, 'dictType.active_alarm_type', '活动告警类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1974, 1974, 'dictType.active_alarm_type_remark', '活动告警类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1975, 1975, 'dictData.active_alarm_type.communication', '通信告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1976, 1976, 'dictData.active_alarm_type.equipment', '设备告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1977, 1977, 'dictData.active_alarm_type.processing', '处理错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1978, 1978, 'dictData.active_alarm_type.environmental', '环境告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1979, 1979, 'dictData.active_alarm_type.qualityOfService', '服务质量', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1980, 1980, 'dictType.active_clear_type', '告警清除类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1981, 1981, 'dictType.active_clear_type_remark', '告警清除类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1982, 1982, 'dictData.active_clear_type.notCleared', '告警未清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1983, 1983, 'dictData.active_clear_type.hand', '手动清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1984, 1984, 'dictData.active_clear_type.auto', '自动清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1985, 1985, 'dictType.active_ack_state', '告警确认类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1986, 1986, 'dictType.active_ack_state_remark', '告警确认类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1987, 1987, 'dictData.active_ack_state.unconfirmed', '未确认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1988, 1988, 'dictData.active_ack_state.confirmed', '已确认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1989, 1989, 'dictType.active_alarm_severity', '严重程度', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1990, 1990, 'dictType.active_alarm_severity_remark', '严重程度列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1991, 1991, 'dictData.active_alarm_severity.critical', '严重告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1992, 1992, 'dictData.active_alarm_severity.major', '主要告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1993, 1993, 'dictData.active_alarm_severity.minor', '次要告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1994, 1994, 'dictData.active_alarm_severity.warning', '警告告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1995, 1995, 'dictData.active_alarm_severity.event', '事件告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1996, 1996, 'config.sys.officialUrl', '系统设置-官网链接', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1997, 1997, 'config.sys.helpDoc', '系统设置-系统使用文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1998, 1998, 'config.sys.officialUrlRemark', '默认无地址用#号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1999, 1999, 'config.sys.helpDocRemark', '静态文件目录地址,使用{language}区分语言文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2000, 2000, 'log.operate.title.neAction', '网元处理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2001, 2001, 'log.operate.title.helpDoc', '系统使用文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2002, 2002, 'menu.ueUser.n3iwf', 'N3IWF在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2003, 2003, 'menu.ueUser.pcf', '用户策略控制信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2004, 2004, 'menu.system.user.editRole', '修改用户角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2005, 2005, 'config.sys.i18nOpen', '国际化切换', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2006, 2006, 'config.sys.i18nDefault', '国际化默认语言', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2007, 2007, 'user.export.role', '用户角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2008, 2008, 'menu.system.setting.i18n', '国际化切换', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2009, 2009, 'menu.system.setting.i18nRemark', '国际化多语言的切换选择', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2010, 2010, 'dictType.index_status', '首页状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2011, 2011, 'dictType.index_status_remark', '首页的网元状态颜色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2012, 2012, 'dictType.index_status.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2013, 2013, 'dictType.index_status.abnormal', '异常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2014, 2014, 'menu.log.neFile', '网元日志文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2015, 2015, 'job.deleteExpiredNeStateRecord', '删除过期网元状态记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2016, 2016, 'job.deleteExpiredNeStateRecordRemark', '定期删除过期的网元状态记录, 默认保留{duration}天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2017, 2017, 'job.getStateFromNE', '获取网元状态信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2018, 2018, 'job.getStateFromNERemark', '获取所有网元状态信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2019, 2019, 'job.genNeStateAlarm', '网元健康状态巡检', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2020, 2020, 'job.genNeStateAlarmRemark', '网元健康状态巡检,异常时产生告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2021, 2021, 'menu.neUser.nssf', 'NSSF在线订阅数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2022, 2022, 'menu.neUser.nssfAmf', 'NSSF可用的注册AMF', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2023, 2023, 'menu.monitor.topology', '拓扑信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2024, 2024, 'menu.monitor.topologyBuild', '拓扑图组编辑', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2025, 2025, 'log.operate.title.chartGraph', '拓扑图组', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2026, 2026, 'menu.monitor.topologyArchitecture', '网元拓扑组网', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2027, 2027, 'menu.alarm', '告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2028, 2028, 'menu.topology', '拓扑', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2029, 2029, 'config.sys.lockTime', '系统设置-锁屏超时时长', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2030, 2030, 'config.sys.lockTimeRemark', '无操作时锁屏超时时长,单位(秒)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2031, 2031, 'sys.account.captchaType', '账号自助-验证码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2032, 2032, 'sys.account.captchaTypeRemark', '使用验证码类型(math数值计算,char字符验证)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2033, 2033, 'menu.dashboard', '仪表盘', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2034, 2034, 'menu.dashboard.overview', '总览', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2035, 2035, 'menu.dashboard.cdr', 'CDR', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2036, 2036, 'dictType.cdr_sip_code', 'CDR SIP响应代码类别类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2037, 2037, 'dictType.cdr_call_type', 'CDR 呼叫类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2038, 2038, 'dictType.ue_auth_code', 'UE 事件认证代码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2039, 2039, 'dictType.ue_event_type', 'UE 事件类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2040, 2040, 'dictData.cdr_sip_code.200', '正常挂机', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2041, 2041, 'dictData.cdr_sip_code.403', '被禁止的', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2042, 2042, 'dictData.cdr_sip_code.408', '请求超时', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2043, 2043, 'dictData.cdr_sip_code.500', '服务器内部错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2044, 2044, 'dictData.cdr_call_type.audio', '语音', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2045, 2045, 'dictData.cdr_call_type.video', '视频', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2046, 2046, 'dictData.ue_auth_code.200', '成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2047, 2047, 'dictData.ue_auth_code.001', '网络失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2048, 2048, 'dictData.ue_auth_code.002', '空口接口失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2049, 2049, 'dictData.ue_auth_code.003', 'MAC失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2050, 2050, 'dictData.ue_auth_code.004', '同步失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2051, 2051, 'dictData.ue_auth_code.005', '不接受非5G认证', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2052, 2052, 'dictData.ue_auth_code.006', '响应失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2053, 2053, 'dictData.ue_auth_code.007', '未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2054, 2054, 'dictData.ue_event_type.auth', '认证', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2055, 2055, 'dictData.ue_event_type.detach', '注销', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2056, 2056, 'dictData.ue_event_type.state', 'CM状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2057, 2057, 'dictType.ue_event_cm_state', 'UE 事件CM状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2058, 2058, 'dictData.ue_event_cm_state.connected', '连接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2059, 2059, 'dictData.ue_event_cm_state.idle', '空闲', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2060, 2060, 'dictData.ue_event_cm_state.inactive', '不活动', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2061, 2061, 'dictData.cdr_sip_code.404', '未找到', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2062, 2062, 'dictData.cdr_sip_code.487', '请求终止', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2063, 2063, 'dictData.cdr_sip_code.503', '服务不可用', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2064, 2064, 'dictData.cdr_sip_code.504', '服务器超时', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2065, 2065, 'dictData.cdr_sip_code.603', '拒绝', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2066, 2066, 'dictData.cdr_sip_code.606', '不可接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2067, 2067, 'cache.name.user', '登录用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2068, 2068, 'cache.name.sys_config', '参数管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2069, 2069, 'cache.name.sys_dict', '字典管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2070, 2070, 'cache.name.captcha_codes', '验证码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2071, 2071, 'cache.name.repeat_submit', '防重提交', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2072, 2072, 'cache.name.rate_limit', '限流', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2073, 2073, 'cache.name.pwd_err_cnt', '登录账户密码错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2074, 2074, 'cache.name.ne_info', '网元信息管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2075, 2075, 'cache.name.ne_data', '网元数据管理', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2076, 2076, 'dictData.cdr_call_type.sms', '短信', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2077, 2077, 'dictData.cdr_sip_code.202', '已接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2078, 2078, 'dictData.cdr_sip_code.488', '这里不能接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2079, 2079, 'dictData.cdr_sip_code.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2080, 2080, 'log.operate.title.ws', 'WS会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2081, 2081, 'log.operate.title.neHost', '网元主机', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2082, 2082, 'neHost.noData', '没有可访问主机信息数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2083, 2083, 'neHost.errKeyExists', '主机信息操作【{name}】失败,同组内名称已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2084, 2084, 'neHost.errByHostInfo', '连接主机失败,请检查连接参数后重试', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2085, 2085, 'dictType.ne_host_type', '网元主机连接类型', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2086, 2086, 'dictType.ne_host_groupId', '网元主机分组', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2087, 2087, 'dictType.ne_host_authMode', '网元主机认证模式', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2088, 2088, 'dictData.ne_host_type.ssh', 'SSH', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2089, 2089, 'dictData.ne_host_type.telnet', 'Telnet', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2090, 2090, 'dictData.ne_host_groupId.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2091, 2091, 'dictData.ne_host_groupId.1', '网元', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2092, 2092, 'dictData.ne_host_groupId.2', '系统', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2093, 2093, 'dictData.ne_host_authMode.0', '密码认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2094, 2094, 'dictData.ne_host_authMode.1', '私钥认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2095, 2095, 'menu.tools.terminal', '网元主机终端', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2096, 2096, 'menu.config.neHost', '网元主机', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2097, 2097, 'menu.config.neHostCommand', '网元主机命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2098, 2098, 'log.operate.title.neHostCmd', '网元主机命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2099, 2099, 'neHostCmd.noData', '没有可访问主机命令数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2100, 2100, 'neHostCmd.errKeyExists', '主机命令操作【{name}】失败,同组内名称已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2101, 2101, 'dictType.ne_host_cmd_groupId', '网元主机命令分组', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2102, 2102, 'dictData.ne_host_cmd_groupId.0', '默认', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2103, 2103, 'dictData.ne_host_cmd_groupId.1', '快速命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2104, 2104, 'menu.config.neInfo', '网元信息', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2105, 2105, 'log.operate.title.neInfo', '网元信息', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2106, 2106, 'neInfo.noData', '没有可访问网元信息数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2107, 2107, 'neInfo.errKeyExists', '网元信息操作【{key}】失败,同类型下标识已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2108, 2108, 'log.operate.title.imsCDR', 'IMS-CDR会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2109, 2109, 'menu.dashboard.amfUE', 'UE', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2110, 2110, 'log.operate.title.amfUE', 'AMF-UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '等待同步', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2115, 2115, 'dictType.ne_info_status', '网元信息状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2116, 2116, 'menu.tools.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2117, 2117, 'log.operate.title.neConfig', '网元参数配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2118, 2118, 'menu.config.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2119, 2119, 'log.operate.title.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2120, 2120, 'menu.config.neSoftware', '网元软件包', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2121, 2121, 'log.operate.title.neSoftware', '网元软件包', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2122, 2122, 'log.operate.title.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2123, 2123, 'menu.config.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2124, 2124, 'dictType.ne_license_status', '网元授权状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2125, 2125, 'ne_license_status.0', '无效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2126, 2126, 'ne_license_status.1', '有效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2127, 2127, 'menu.dashboard.mocn', 'MOCN', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2128, 2128, 'dictData.ne_host_authMode.2', '免密认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (1000, 1000, 'i18n', '中文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1001, 1001, 'hello', '你好', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1002, 1002, 'menu.system', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1003, 1003, 'menu.monitor', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1004, 1004, 'menu.tools', '工具', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1005, 1005, 'menu.config', '配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1006, 1006, 'menu.ueUser', '终端', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1007, 1007, 'menu.systemRemark', '系统管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1008, 1008, 'menu.monitorRemark', '系统监控目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1009, 1009, 'menu.toolsRemark', '系统工具目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1010, 1010, 'menu.configRemark', 'OMC配置管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1011, 1011, 'menu.ueUserRemark', '网元终端信息目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1012, 1012, 'menu.security.user', '用户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1013, 1013, 'menu.security.role', '角色管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1014, 1014, 'menu.security.roleUser', '分配角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1015, 1015, 'menu.system.menu', '菜单管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1016, 1016, 'menu.security.dept', '部门管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1017, 1017, 'menu.security.post', '岗位管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1018, 1018, 'menu.system.dictType', '字典管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1019, 1019, 'menu.system.dictData', '字典数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1020, 1020, 'menu.system.paramSet', '参数设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1021, 1021, 'menu.system.systemLog', '系统日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1022, 1022, 'menu.system.systemInfo', '系统信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1023, 1023, 'menu.system.cacheInfo', '缓存信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1024, 1024, 'menu.system.cache', '缓存管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1025, 1025, 'menu.security.onlineUser', '在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1026, 1026, 'menu.system.job', '调度任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1027, 1027, 'menu.system.jobLog', '调度日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1028, 1028, 'menu.tools.help', '帮助文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1029, 1029, 'menu.log.operat', '操作日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1030, 1030, 'menu.log.login', '安全日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1031, 1031, 'menu.security.userRemark', '用户管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1032, 1032, 'menu.security.roleRemark', '角色管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1033, 1033, 'menu.security.roleUserRemark', '分配角色内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1034, 1034, 'menu.system.menuRemark', '菜单管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1035, 1035, 'menu.security.deptRemark', '部门管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1036, 1036, 'menu.security.postRemark', '岗位管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1037, 1037, 'menu.system.dictTypeRemark', '字典管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1038, 1038, 'menu.system.dictDataRemark', '字典数据内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1039, 1039, 'menu.system.paramSetRemark', '参数设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1040, 1040, 'menu.system.systemLogRemark', '系统日志目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1041, 1041, 'menu.system.systemInfoRemark', '系统信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1042, 1042, 'menu.system.cacheInfoRemark', '缓存信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1043, 1043, 'menu.system.cacheRemark', '缓存列表菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1044, 1044, 'menu.security.onlineUserRemark', '在线用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1045, 1045, 'menu.system.jobRemark', '调度任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1046, 1046, 'menu.system.jobLogRemark', '调度日志内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1047, 1047, 'menu.tools.helpRemark', '帮助文档菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1048, 1048, 'menu.log.operatRemark', '操作日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1049, 1049, 'menu.log.loginRemark', '登录日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1050, 1050, 'menu.common.query', '查询', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1051, 1051, 'menu.common.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1052, 1052, 'menu.common.edit', '修改', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1053, 1053, 'menu.common.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1054, 1054, 'menu.common.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1055, 1055, 'menu.common.import', '导入', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1056, 1056, 'menu.common.reset', '重置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1057, 1057, 'menu.common.unlock', '账户解锁', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1058, 1058, 'menu.forcedQuit.batch ', '批量强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1059, 1059, 'menu.forcedQuit.single', '单条强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1060, 1060, 'menu.ueUser.authUDM', 'UDM鉴权用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1061, 1061, 'menu.ueUser.subUDM', 'UDM签约用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1062, 1062, 'menu.ueUser.authUDMRemark', 'UDM鉴权用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1063, 1063, 'menu.ueUser.subUDMRemark', 'UDM签约用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1064, 1064, 'menu.config.neManage', '网元管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1065, 1065, 'menu.config.configNE', '参数配置Original', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1066, 1066, 'menu.config.neManageRemark', '网元管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1067, 1067, 'menu.config.configNERemark', '参数配置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1068, 1068, 'menu.config.backupManage', '备份管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1069, 1069, 'menu.config.softwareManage', '软件管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1070, 1070, 'menu.ueUser.onlineIMS', 'IMS在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1071, 1071, 'menu.ueUser.onlineUE', 'UE在线信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1072, 1072, 'menu.ueUser.base5G', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1073, 1073, 'menu.trace', '跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '信令分析', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1076, 1076, 'menu.trace.pcap', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1077, 1077, 'menu.fault', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1078, 1078, 'menu.config.backupManageRemark', '备份管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1079, 1079, 'menu.config.softwareManageRemark', '软件管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1080, 1080, 'menu.ueUser.onlineIMSRemark', 'IMS在线用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1081, 1081, 'menu.ueUser.onlineUERemark', 'UE在线信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1082, 1082, 'menu.ueUser.base5GRemark', '5G基站信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1083, 1083, 'menu.traceRemark', '跟踪管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1084, 1084, 'menu.trace.taskRemark', '跟踪任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1086, 1086, 'menu.trace.pcapRemark', '信令抓包菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1087, 1087, 'menu.faultRemark', '故障管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1088, 1088, 'menu.fault.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1089, 1089, 'menu.log', '日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1090, 1090, 'menu.log.operatOld', '操作日志(旧)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1091, 1091, 'menu.log.mml', 'MML日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1092, 1092, 'menu.log.alarm', '告警日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1093, 1093, 'menu.log.securityOld', '安全日志(旧)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1094, 1094, 'menu.log.forwarding', '告警前转日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1095, 1095, 'menu.log.set', '日志设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1096, 1096, 'menu.monitor.sessionUser', '用户会话', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1097, 1097, 'menu.fault.history', '历史告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1098, 1098, 'menu.fault.set', '设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1099, 1099, 'menu.perf', '性能', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1100, 1100, 'menu.fault.activemRemark', '活动告警菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1101, 1101, 'menu.logRemark', '日志管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1102, 1102, 'menu.log.operatOldRemark', '操作日志旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1103, 1103, 'menu.log.mmlRemark', '操作MML日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1104, 1104, 'menu.log.alarmRemark', '告警日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1105, 1105, 'menu.log.securityOldRemark', '安全日志旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1106, 1106, 'menu.log.forwardingRemark', '告警前转日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1107, 1107, 'menu.log.setRemark', '日志设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1108, 1108, 'menu.monitor.sessionUserRemark', '用户会话旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1109, 1109, 'menu.fault.historyRemark', '历史告警菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1110, 1110, 'menu.fault.setRemark', '故障通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1111, 1111, 'menu.perfRemark', '性能目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1112, 1112, 'menu.perf.task', '任务管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1113, 1113, 'menu.perf.data', '性能数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1114, 1114, 'menu.perf.report', '性能报表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1115, 1115, 'menu.perf.threshold', '性能门限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1116, 1116, 'menu.perf.kpi', '黄金指标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1117, 1117, 'menu.perf.customTarget', '自定义指标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1118, 1118, 'menu.perf.set', '性能通用设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1119, 1119, 'menu.mml', 'MML', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1120, 1120, 'menu.mml.ne', '网元操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1121, 1121, 'menu.mml.udm', 'UDM操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1122, 1122, 'menu.mml.set', 'MML设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1123, 1123, 'menu.mml.omc', 'OMC操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1124, 1124, 'menu.perf.taskRemark', '任务管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1125, 1125, 'menu.perf.dataRemark', '性能数据菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1126, 1126, 'menu.perf.reportRemark', '性能报表菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1127, 1127, 'menu.perf.thresholdRemark', '性能门限菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1128, 1128, 'menu.perf.kpiRemark', '黄金指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1129, 1129, 'menu.perf.customTargetRemark', '自定义指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1130, 1130, 'menu.perf.setRemark', '性能通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1131, 1131, 'menu.mmlRemark', 'MML管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1132, 1132, 'menu.mml.neRemark', '网元操作菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1133, 1133, 'menu.mml.udmRemark', '网元UDM用户数据菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1134, 1134, 'menu.mml.setRemark', 'MML设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1135, 1135, 'menu.mml.omcRemark', 'OMC操作菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1136, 1136, 'menu.config.licenseManage', '许可证管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1137, 1137, 'menu.security', '安全', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1138, 1138, 'menu.system.systemSet', '系统设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1139, 1139, 'menu.system.systemResource', '系统资源', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1140, 1140, 'menu.config.configNEForm', '参数配置Form', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1141, 1141, 'menu.config.configNETree', '参数配置Tree', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1142, 1142, 'menu.config.configNETreeTable', '参数配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1143, 1143, 'menu.config.licenseManageRemark', '许可证管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1144, 1144, 'menu.securityRemark', '安全管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1145, 1145, 'menu.system.systemSetRemark', '系统设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1146, 1146, 'menu.system.systemResourceRemark', '系统资源 cpu io network菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1147, 1147, 'menu.config.configNEFormRemark', '参数配置Form菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1148, 1148, 'menu.config.configNETreeRemark', '参数配置Tree菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1149, 1149, 'menu.config.configNETreeTableRemark', '参数配置TreeTable菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1150, 1150, 'menu.noData', '没有可访问菜单数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1151, 1151, 'menu.errNameExists', '操作菜单【{name}】失败,菜单名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1152, 1152, 'menu.errPathExists', '操作菜单【{name}】失败,菜单路由地址已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1153, 1153, 'menu.errFramePath', '操作菜单【{name}】失败,非内部地址请以http(s)://开头', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1154, 1154, 'menu.errParentStatus', '上级菜单未启用!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1155, 1155, 'menu.errHasChildUse', '操作菜单【{name}】失败,存在使用子菜单数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1156, 1156, 'menu.errHasRoleUse', '操作菜单【{name}】失败,菜单已分配给角色数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1400, 1400, 'dictData.sex.un', '未选择', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1401, 1401, 'dictData.sex.male', '男', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1402, 1402, 'dictData.sex.female', '女', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1403, 1403, 'dictData.show', '显示', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1404, 1404, 'dictData.hide', '隐藏', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1405, 1405, 'dictData.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1406, 1406, 'dictData.disable', '停用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1407, 1407, 'dictData.yes', '是', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1408, 1408, 'dictData.no', '否', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1409, 1409, 'dictData.success', '成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1410, 1410, 'dictData.fail', '失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1411, 1411, 'dictData.jobStatus.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1412, 1412, 'dictData.jobStatus.pause', '暂停', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1413, 1413, 'dictData.jobGroup.Default', '默认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1414, 1414, 'dictData.jobGroup.System', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1415, 1415, 'dictData.operType.other', '其他', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1416, 1416, 'dictData.operType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1417, 1417, 'dictData.operType.edit', '修改', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1418, 1418, 'dictData.operType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1419, 1419, 'dictData.operType.auth', '授权', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1420, 1420, 'dictData.operType.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1421, 1421, 'dictData.operType.import', '导入', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1422, 1422, 'dictData.operType.forced quit', '强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1423, 1423, 'dictData.operType.clear', '清空', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1424, 1424, 'dictData.trace.interface', '接口跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1425, 1425, 'dictData.trace.device', '设备跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1426, 1426, 'dictData.trace.user', '用户跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1427, 1427, 'dictData.logType.download', '下载', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1428, 1428, 'dictData.logType.activation', '激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1429, 1429, 'dictData.logType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1430, 1430, 'dictData.logType.other', '其他', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1431, 1431, 'dictData.logType.back', '回退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1432, 1432, 'dictData.logType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1433, 1433, 'dictData.logType.distribute', '分配', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1434, 1434, 'dictData.logType.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1435, 1435, 'dictData.logType.query', '查询', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1436, 1436, 'dictData.logType.setup', '设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1437, 1437, 'dictData.logType.update', '更新', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1438, 1438, 'dictData.logType.upload', '上传', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1439, 1439, 'dictData.logType.view', '查看', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1440, 1440, 'dictData.logType.login', '登录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1441, 1441, 'dictData.logType.logout', '登出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1442, 1442, 'dictData.securityLogType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1443, 1443, 'dictData.securityLogType.update', '更新', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1444, 1444, 'dictData.securityLogType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1445, 1445, 'dictData.securityLogType.lock', '锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1446, 1446, 'dictData.securityLogType.unlock', '解锁', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1447, 1447, 'dictData.securityLogType.reset', '重置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1448, 1448, 'dictData.securityLogType.deactivate', '停用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1449, 1449, 'dictData.jobSaveLog.no', '不记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1450, 1450, 'dictData.jobSaveLog.yes', '记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1451, 1451, 'dictData.neVersionStatus.upload', '已上传', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1452, 1452, 'dictData.neVersionStatus.inactive', '未激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1453, 1453, 'dictData.neVersionStatus.active', '已激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1454, 1454, 'dictData.alarmStatus.history', '历史告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1455, 1455, 'dictData.alarmStatus.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1456, 1456, 'dictData.export.code', '数据代码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1457, 1457, 'dictData.export.sort', '数据排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1458, 1458, 'dictData.export.label', '数据标签', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1459, 1459, 'dictData.export.value', '数据键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1460, 1460, 'dictData.export.type', '数据排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1461, 1461, 'dictData.export.status', '数据状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1462, 1462, 'dictData.datascope.all', '全部数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1463, 1463, 'dictData.datascope.custom', '自定数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1464, 1464, 'dictData.datascope.dept', '部门数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1465, 1465, 'dictData.datascope.deptAndChid', '部门及以下数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1466, 1466, 'dictData.datascope.self', '仅本人数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1467, 1467, 'dictData.noData', '没有可访问字典编码数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1468, 1468, 'dictData.errLabelExists', '操作数据【{name}】失败,该字典类型下标签名已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1500, 1500, 'dictType.sys_user_sex', '用户性别', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1501, 1501, 'dictType.sys_show_hide', '菜单状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1502, 1502, 'dictType.sys_normal_disable', '系统开关', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1503, 1503, 'dictType.sys_job_status', '任务状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1504, 1504, 'dictType.sys_job_group', '任务分组', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1505, 1505, 'dictType.sys_yes_no', '系统是否', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1506, 1506, 'dictType.sys_oper_type', '操作类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1507, 1507, 'dictType.sys_common_status', '系统状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1508, 1508, 'dictType.trace_type', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1509, 1509, 'dictType.operation_log_type', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1510, 1510, 'dictType.alarm_status', '告警日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1511, 1511, 'dictType.security_log_type', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1512, 1512, 'dictType.ne_version_status', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1513, 1513, 'dictType.i18n_en', '多语言-英文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1514, 1514, 'dictType.i18n_zh', '多语言-中文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1515, 1515, 'dictType.sys_user_sex_remark', '用户性别列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1516, 1516, 'dictType.sys_show_hide_remark', '菜单状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1517, 1517, 'dictType.sys_normal_disable_remark', '系统开关列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1518, 1518, 'dictType.sys_job_status_remark', '任务状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1519, 1519, 'dictType.sys_job_group_remark', '任务分组列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1520, 1520, 'dictType.sys_yes_no_remark', '系统是否列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1521, 1521, 'dictType.sys_oper_type_remark', '操作类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1522, 1522, 'dictType.sys_common_status_remark', '登录状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1523, 1523, 'dictType.trace_type_remark', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1524, 1524, 'dictType.operation_log_type_remark', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1525, 1525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1526, 1526, 'dictType.security_log_type_remark', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1527, 1527, 'dictType.ne_version_status_remark', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1528, 1528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1529, 1529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1530, 1530, 'dictType.export.id', '字典编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1531, 1531, 'dictType.export.name', '字典名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1532, 1532, 'dictType.export.type', '字典类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1533, 1533, 'dictType.export.status', '字典状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1534, 1534, 'dictType.sys_role_datascope', '系统角色数据范围', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1535, 1535, 'dictType.sys_role_datascope_remark', '系统角色数据范围映射', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1536, 1536, 'dictType.noData', '没有可访问字典类型数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1537, 1537, 'dictType.errNameExists', '操作字典【{name}】失败,字典名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1538, 1538, 'dictType.errTypeExists', '操作字典【{name}】失败,字典类型已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1600, 1600, 'dept.root', '系统维护部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1601, 1601, 'dept.root.item1', '运维一部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1602, 1602, 'dept.noData', '没有可访问部门数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1603, 1603, 'dept.errParentDelFlag', '上级部门【{name}】已删除,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1604, 1604, 'dept.errParentStatus', '上级部门【{name}】停用,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1605, 1605, 'dept.errNameExists', '操作部门【{name}】失败,部门名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1606, 1606, 'dept.errParentID', '操作部门【{name}】失败,上级部门不能是自己', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1607, 1607, 'dept.errHasChildUse', '操作失败,该部门包含未停用的子部门数量:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1608, 1608, 'dept.errHasUserUse', '不允许删除,部门已分配给用户数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1630, 1630, 'config.sys.user.initPassword', '用户管理-账号初始密码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1631, 1631, 'config.sys.account.captchaEnabled', '账号自助-验证码开关', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1632, 1632, 'config.sys.account.registerUser', '账号自助-是否开启用户注册功能', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1633, 1633, 'config.sys.user.maxRetryCount', '用户管理-密码最大错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1634, 1634, 'config.sys.user.lockTime', '用户管理-密码锁定时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1635, 1635, 'config.monitor.sysResource.storeDays', '监控-系统资源-数据保留时长', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1636, 1636, 'config.sys.logo.type', '系统设置-LOGO类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1637, 1637, 'config.sys.logo.filePathIcon', '系统设置-LOGO文件icon', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1638, 1638, 'config.sys.logo.filePathBrand', '系统设置-LOGO文件brand', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1639, 1639, 'config.sys.loginBackground', '系统设置-登录界面背景', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1640, 1640, 'config.sys.title', '系统设置-系统名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1641, 1641, 'config.sys.copyright', '系统设置-版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1642, 1642, 'config.sys.user.initPasswordRemark', '导入用户初始化密码 123456', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1643, 1643, 'config.sys.account.captchaEnabledRemark', '是否开启验证码功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1644, 1644, 'config.sys.account.registerUserRemark', '是否开启注册用户功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1645, 1645, 'config.sys.user.maxRetryCountRemark', '密码最大错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1646, 1646, 'config.sys.user.lockTimeRemark', '密码锁定时间,单位分钟(默认10分钟)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1647, 1647, 'config.monitor.sysResource.storeDaysRemark', '监控-系统资源-数据保留时长,单位天。根据当前日期,删除超过保留时长的日期数据信息。', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1648, 1648, 'config.sys.logo.typeRemark', '全图:brand\r\n小图:icon', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1649, 1649, 'config.sys.logo.filePathIconRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1650, 1650, 'config.sys.logo.filePathBrandRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1651, 1651, 'config.sys.loginBackgroundRemark', '文件支持网络地址图片和内部上传的文件路径,默认背景用#号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1652, 1652, 'config.sys.titleRemark', '系统名称长度限制11位字符串', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1653, 1653, 'config.sys.copyrightRemark', '底脚固定条,左侧放置版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1654, 1654, 'config..export.id', '参数编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1655, 1655, 'config..export.name', '参数名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1656, 1656, 'config..export.key', '参数键名', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1657, 1657, 'config..export.value', '参数键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1658, 1658, 'config..export.type', '系统内置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1659, 1659, 'config..export.remark', '参数说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1660, 1660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1661, 1661, 'config.sys.copyrightValue', 'Copyright ©2023 千通科技', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1662, 1662, 'config.noData', '没有可访问参数配置数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1663, 1663, 'config.errKey', '无效 key', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1664, 1664, 'config.errValueEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1665, 1665, 'config.errKeyExists', '操作参数配置【{name}】失败,参数键名已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1666, 1666, 'config.errDelete', '删除参数配置信息失败!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1667, 1667, 'config.errType', '操作含有内置参数,禁止删除!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1700, 1700, 'job.monitor_sys_resource', '监控-系统资源', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1701, 1701, 'job.monitor_sys_resource_remark', '系统资源CPU/IO/Netword收集\r\ninterval单位分钟,平均分钟资源情况\r\n注:请根据cron表达式的时间单位分钟,传入参数interva值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1702, 1702, 'job.delExpiredNeBackup', '删除过期网元备份文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1703, 1703, 'job.delExpiredNeBackupRemark', '删除过期网元etc备份文件, 传入参数表示保留{duration}天的备份文件, 默认60天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1704, 1704, 'job.deleteExpiredAlarmRecord', '删除过期历史告警记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1705, 1705, 'job.deleteExpiredAlarmRecordRemark', '删除过期历史告警记录,传入参数表示保留{duration}天的历史告警记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1706, 1706, 'job.deleteExpiredKpiRecord', '删除过期黄金指标记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1707, 1707, 'job.deleteExpiredKpiRecordRemark', '黄金指标记录保留{duration}天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1708, 1708, 'job.backupEtcFromNE', '网元配置自动备份任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1709, 1709, 'job.backupEtcFromNERemark', '自动备份网元etc目录下的配置文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1710, 1710, 'job.export.jobID', '任务编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1711, 1711, 'job.export.jobName', '任务名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1712, 1712, 'job.export.jobGroupName', '任务组名', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1713, 1713, 'job.export.invokeTarget', '调用目标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1714, 1714, 'job.export.targetParams', '传入参数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1715, 1715, 'job.export.cronExpression', 'cron表达式', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1716, 1716, 'job.export.status', '状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1717, 1717, 'job.export.remark', '备注说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1718, 1718, 'job.export.jobLogID', '任务日志编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1719, 1719, 'job.export.jobLogStatus', '任务日志状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1720, 1720, 'job.export.jobLogTime', '任务日志时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1721, 1721, 'job.noData', '没有可访问调度任务数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1722, 1722, 'job.errTargetParams', '操作调度任务【{name}】失败,任务传入参数json字符串不正确', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1723, 1723, 'job.errCronExpression', '操作调度任务【{name}】失败,Cron表达式不正确', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1724, 1724, 'job.errJobExists', '调度任务新增【{name}】失败,同任务组内有相同任务名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1725, 1725, 'job.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1750, 1750, 'role.admin', '超级管理员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1751, 1751, 'role.adminAssign', '管理人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1752, 1752, 'role.operator', '运维人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1753, 1753, 'role.monitor', '监控人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1754, 1754, 'role.vistor', '普通用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1755, 1755, 'role.adminRemark', '超级管理员,无法修改删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1756, 1756, 'role.adminAssignRemark', '管理人员 可以对设备进行任何操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1757, 1757, 'role.operatorRemark', '运维人员 可以从设备读取数据,并对设备进行配置,但是不能对设备进行软件升级操作。', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1758, 1758, 'role.monitorRemark', '监控人员 只能从设备读取数据,而不能对设备进行任何设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1759, 1759, 'role.vistorRemark', '普通用户 只可看系统相关信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1760, 1760, 'role.export.id', '角色编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1761, 1761, 'role.export.name', '角色名称 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1762, 1762, 'role.export.key', '角色键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1763, 1763, 'role.export.sort', '角色顺序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1764, 1764, 'role.export.dataScope', '角色数据范围', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1765, 1765, 'role.export.status', '角色状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1766, 1766, 'role.noData', '没有可访问角色数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1767, 1767, 'role.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1768, 1768, 'role.errNameExists', '操作角色【{name}】失败,角色名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1769, 1769, 'role.errKeyExists', '操作角色【{name}】失败,角色键值已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1800, 1800, 'post.admin', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1801, 1801, 'post.operator', '管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1802, 1802, 'post.monitor', '运维', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1803, 1803, 'post.visitor', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1804, 1804, 'post.export.id', '岗位编号 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1805, 1805, 'post.export.code', '岗位编码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1806, 1806, 'post.export.name', '岗位名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1807, 1807, 'post.export.sort', '岗位排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1808, 1808, 'post.export.status', '岗位状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1809, 1809, 'post.noData', '没有可访问岗位数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1810, 1810, 'post.errNameExists', '操作岗位【{name}】失败,岗位名称已存在已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1811, 1811, 'post.errCodeExists', '操作角色【{name}】失败,角色键值已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1830, 1830, 'user.export.id', '用户编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1831, 1831, 'user.export.name', '登录账号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1832, 1832, 'user.export.nick', '用户昵称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1833, 1833, 'user.export.email', '电子邮箱', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1834, 1834, 'user.export.phone', '手机号码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1835, 1835, 'user.export.sex', '用户性别', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1836, 1836, 'user.export.status', '用户状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1837, 1837, 'user.export.deptID', '部门编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1838, 1838, 'user.export.deptName', '部门名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1839, 1839, 'user.export.deptLeader', '部门负责人', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1840, 1840, 'user.export.loginIP', '用户登录IP', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1841, 1841, 'user.export.loginDate', '用户登录时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1842, 1842, 'user.noData', '没有可访问用户数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1843, 1843, 'user.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1844, 1844, 'user.errPasswdOld', '修改密码失败,旧密码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1845, 1845, 'user.errPasswdEqOld', '新密码不能与旧密码相同', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1846, 1846, 'user.errPasswd', '登录密码至少包含大小写字母、数字、特殊符号,且不少于6位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1847, 1847, 'user.errEmailFormat', '操作用户【{name}】失败,邮箱格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1848, 1848, 'user.errEmailExists', '操作用户【{name}】失败,邮箱已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1849, 1849, 'user.errPhoneFormat', '操作用户【{name}】失败,手机号码格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1850, 1850, 'user.errPhoneExists', '操作用户【{name}】失败,手机号码已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1851, 1851, 'user.errNameExists', '操作用户【{name}】失败,登录账号已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1852, 1852, 'user.import.mustItem', '表格中必填列表项,{text}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1853, 1853, 'user.import.phoneExist', '用户编号:{id} 手机号码 {phone} 已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1854, 1854, 'user.import.phoneFormat', '用户编号:{id} 手机号码 {phone} 格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1855, 1855, 'user.import.emailExist', '用户编号:{id} 用户邮箱:{email} 已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1856, 1856, 'user.import.emailFormat', '用户编号:{id} 用户邮箱:{email} 格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1857, 1857, 'user.import.success', '用户编号:{id} 登录名称:{name} 导入成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1858, 1858, 'user.import.fail', '用户编号:{id} 登录名称:{name} 导入失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1859, 1859, 'user.import.successUpdate', '用户编号:{id} 登录名称:{name} 更新成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1860, 1860, 'user.import.failUpdate', '用户编号:{id} 登录名称:{name} 更新失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1861, 1861, 'user.import.failTip', '很抱歉,导入失败!共 {num} 条数据格式不正确,错误如下:', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1862, 1862, 'user.import.successTip', '恭喜您,数据已全部导入成功!共 {num} 条,数据如下:', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1900, 1900, 'app.common.err403', '无权访问 {method} {requestURI}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1901, 1901, 'app.common.err401', '无效身份授权', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1902, 1902, 'app.common.err400', '参数错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1903, 1903, 'app.common.exportEmpty', '导出数据记录为空', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1904, 1904, 'app.common.errOperateAdmin', '不允许操作内置用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1905, 1905, 'app.common.errOperateRole', '不允许操作内置角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1906, 1906, 'app.common.deleteSuccess', '删除成功:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1907, 1907, 'app.common.loginSuccess', '登录成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1908, 1908, 'app.common.logoutSuccess', '注销成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1909, 1909, 'app.common.errUnlock', '该用户未被锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1910, 1910, 'app.common.noLoginUser', '登录用户信息无效', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1911, 1911, 'app.common.rateLimitTip', '访问过于频繁,请稍候再试', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1912, 1912, 'log.operate.export.id', '操作编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1913, 1913, 'log.operate.export.title', '模块名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1914, 1914, 'log.operate.export.businessType', '业务类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1915, 1915, 'log.operate.export.method', '操作方法', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1916, 1916, 'log.operate.export.requestMethod', '请求方式 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1917, 1917, 'log.operate.export.operatorType', '操作类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1918, 1918, 'log.operate.export.operName', '操作人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1919, 1919, 'log.operate.export.deptName', '操作人员部门名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1920, 1920, 'log.operate.export.url', '请求链接地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1921, 1921, 'log.operate.export.ip', '请求主机 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1922, 1922, 'log.operate.export.location', '请求地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1923, 1923, 'log.operate.export.param', '请求参数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1924, 1924, 'log.operate.export.msg', '操作信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1925, 1925, 'log.operate.export.status', '操作状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1926, 1926, 'log.operate.export.costTime', '消耗时间(毫秒)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1927, 1927, 'log.operate.export.operTime', '操作时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1928, 1928, 'log.login.export.id', '记录编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1929, 1929, 'log.login.export.userName', '登录账号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1930, 1930, 'log.login.export.status', '登录状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1931, 1931, 'log.login.export.ip', '登录地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1932, 1932, 'log.login.export.location', '登录地点', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1933, 1933, 'log.login.export.browser', '浏览器', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1934, 1934, 'log.login.export.os', '操作系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1935, 1935, 'log.login.export.msg', '登录信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1936, 1936, 'log.login.export.time', '登录时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1937, 1937, 'trace.tcpdump.noData', '找不到 {type} {id} 对应网元信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1938, 1938, 'register.errUsername', '账号不能以数字开头,可包含大写小写字母,数字,且不少于5位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1939, 1939, 'register.errPasswd', '登录密码至少包含大小写字母、数字、特殊符号,且不少于6位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1940, 1940, 'register.errPasswdNotEq', '用户确认输入密码不一致', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1941, 1941, 'register.success', '注册成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1942, 1942, 'register.successMsg', '{name} 注册成功 {id}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1943, 1943, 'log.operate.title.sysJobLog', '调度任务日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1944, 1944, 'log.operate.title.sysJob', '调度任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1945, 1945, 'log.operate.title.tcpdump', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1946, 1946, 'log.operate.title.sysConfig', '参数配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1947, 1947, 'log.operate.title.sysDept', '部门', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1948, 1948, 'log.operate.title.sysDictData', '字典数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1949, 1949, 'log.operate.title.sysDictType', '字典类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1950, 1950, 'log.operate.title.sysMenu', '菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1951, 1951, 'log.operate.title.sysPost', '岗位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1952, 1952, 'log.operate.title.sysProfile', '个人信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1953, 1953, 'log.operate.title.sysProfileAvatar', '个人头像', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1954, 1954, 'log.operate.title.sysRole', '角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1955, 1955, 'log.operate.title.sysUser', '用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1956, 1956, 'log.operate.title.sysLogOper', '操作日志记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1957, 1957, 'log.operate.title.sysLogLogin', '登录日志记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1958, 1958, 'login.errNameOrPasswd', '用户不存在或密码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1959, 1959, 'login.errDelFlag', '对不起,您的账号已被删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1960, 1960, 'login.errStatus', '对不起,您的帐户已被禁用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1961, 1961, 'login.errRetryPasswd', '密码输入错误多次,帐户已被锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1962, 1962, 'captcha.err', '验证码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1963, 1963, 'captcha.errValid', '验证码已失效', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1964, 1964, 'app.common.noUaOsBrowser', '未知 未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1965, 1965, 'app.common.noIPregion', '内网', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1966, 1966, 'app.common.unknown', '未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1967, 1967, 'app.common.noNEInfo', '未找到匹配网元信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1968, 1968, 'ne.udm.errImportUserAuthFileFormat', '请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, ki, algo, amf, opc', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1969, 1969, 'ne.udm.errExportType', '导出文件类型支持CSV和txt', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1970, 1970, 'ne.udm.errImportUserSubFileFormat', '请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1971, 1971, 'log.operate.title.udmAuth', 'UDM鉴权用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1972, 1972, 'log.operate.title.udmSub', 'UDM签约用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1973, 1973, 'dictType.active_alarm_type', '活动告警类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1974, 1974, 'dictType.active_alarm_type_remark', '活动告警类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1975, 1975, 'dictData.active_alarm_type.communication', '通信告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1976, 1976, 'dictData.active_alarm_type.equipment', '设备告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1977, 1977, 'dictData.active_alarm_type.processing', '处理错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1978, 1978, 'dictData.active_alarm_type.environmental', '环境告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1979, 1979, 'dictData.active_alarm_type.qualityOfService', '服务质量', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1980, 1980, 'dictType.active_clear_type', '告警清除类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1981, 1981, 'dictType.active_clear_type_remark', '告警清除类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1982, 1982, 'dictData.active_clear_type.notCleared', '告警未清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1983, 1983, 'dictData.active_clear_type.hand', '手动清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1984, 1984, 'dictData.active_clear_type.auto', '自动清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1985, 1985, 'dictType.active_ack_state', '告警确认类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1986, 1986, 'dictType.active_ack_state_remark', '告警确认类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1987, 1987, 'dictData.active_ack_state.unconfirmed', '未确认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1988, 1988, 'dictData.active_ack_state.confirmed', '已确认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1989, 1989, 'dictType.active_alarm_severity', '严重程度', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1990, 1990, 'dictType.active_alarm_severity_remark', '严重程度列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1991, 1991, 'dictData.active_alarm_severity.critical', '严重告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1992, 1992, 'dictData.active_alarm_severity.major', '主要告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1993, 1993, 'dictData.active_alarm_severity.minor', '次要告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1994, 1994, 'dictData.active_alarm_severity.warning', '警告告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1995, 1995, 'dictData.active_alarm_severity.event', '事件告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1996, 1996, 'config.sys.officialUrl', '系统设置-官网链接', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1997, 1997, 'config.sys.helpDoc', '系统设置-系统使用文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1998, 1998, 'config.sys.officialUrlRemark', '默认无地址用#号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1999, 1999, 'config.sys.helpDocRemark', '静态文件目录地址,使用{language}区分语言文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2000, 2000, 'log.operate.title.neAction', '网元处理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2001, 2001, 'log.operate.title.helpDoc', '系统使用文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2002, 2002, 'menu.ueUser.n3iwf', 'N3IWF在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2003, 2003, 'menu.ueUser.pcf', '用户策略控制信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2004, 2004, 'menu.system.user.editRole', '修改用户角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2005, 2005, 'config.sys.i18nOpen', '国际化切换', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2006, 2006, 'config.sys.i18nDefault', '国际化默认语言', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2007, 2007, 'user.export.role', '用户角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2008, 2008, 'menu.system.setting.i18n', '国际化切换', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2009, 2009, 'menu.system.setting.i18nRemark', '国际化多语言的切换选择', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2010, 2010, 'dictType.index_status', '首页状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2011, 2011, 'dictType.index_status_remark', '首页的网元状态颜色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2012, 2012, 'dictType.index_status.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2013, 2013, 'dictType.index_status.abnormal', '异常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2014, 2014, 'menu.log.neFile', '网元日志文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2015, 2015, 'job.deleteExpiredNeStateRecord', '删除过期网元状态记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2016, 2016, 'job.deleteExpiredNeStateRecordRemark', '定期删除过期的网元状态记录, 默认保留{duration}天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2017, 2017, 'job.getStateFromNE', '获取网元状态信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2018, 2018, 'job.getStateFromNERemark', '获取所有网元状态信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2019, 2019, 'job.genNeStateAlarm', '网元健康状态巡检', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2020, 2020, 'job.genNeStateAlarmRemark', '网元健康状态巡检,异常时产生告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2021, 2021, 'menu.neUser.nssf', 'NSSF在线订阅数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2022, 2022, 'menu.neUser.nssfAmf', 'NSSF可用的注册AMF', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2023, 2023, 'menu.monitor.topology', '拓扑信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2024, 2024, 'menu.monitor.topologyBuild', '拓扑图组编辑', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2025, 2025, 'log.operate.title.chartGraph', '拓扑图组', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2026, 2026, 'menu.monitor.topologyArchitecture', '网元拓扑组网', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2027, 2027, 'menu.alarm', '告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2028, 2028, 'menu.topology', '拓扑', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2029, 2029, 'config.sys.lockTime', '系统设置-锁屏超时时长', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2030, 2030, 'config.sys.lockTimeRemark', '无操作时锁屏超时时长,单位(秒)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2031, 2031, 'sys.account.captchaType', '账号自助-验证码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2032, 2032, 'sys.account.captchaTypeRemark', '使用验证码类型(math数值计算,char字符验证)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2033, 2033, 'menu.dashboard', '仪表盘', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2034, 2034, 'menu.dashboard.overview', '总览', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2035, 2035, 'menu.dashboard.cdr', 'IMS 话单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2036, 2036, 'dictType.cdr_sip_code', 'CDR SIP响应代码类别类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2037, 2037, 'dictType.cdr_call_type', 'CDR 呼叫类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2038, 2038, 'dictType.ue_auth_code', 'UE 事件认证代码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2039, 2039, 'dictType.ue_event_type', 'UE 事件类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2040, 2040, 'dictData.cdr_sip_code.200', '正常挂机', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2041, 2041, 'dictData.cdr_sip_code.403', '被禁止的', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2042, 2042, 'dictData.cdr_sip_code.408', '请求超时', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2043, 2043, 'dictData.cdr_sip_code.500', '服务器内部错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2044, 2044, 'dictData.cdr_call_type.audio', '语音', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2045, 2045, 'dictData.cdr_call_type.video', '视频', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2046, 2046, 'dictData.ue_auth_code.200', '成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2047, 2047, 'dictData.ue_auth_code.001', '网络失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2048, 2048, 'dictData.ue_auth_code.002', '空口接口失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2049, 2049, 'dictData.ue_auth_code.003', 'MAC失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2050, 2050, 'dictData.ue_auth_code.004', '同步失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2051, 2051, 'dictData.ue_auth_code.005', '不接受非5G认证', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2052, 2052, 'dictData.ue_auth_code.006', '响应失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2053, 2053, 'dictData.ue_auth_code.007', '未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2054, 2054, 'dictData.ue_event_type.auth', '认证', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2055, 2055, 'dictData.ue_event_type.detach', '注销', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2056, 2056, 'dictData.ue_event_type.state', 'CM状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2057, 2057, 'dictType.ue_event_cm_state', 'UE 事件CM状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2058, 2058, 'dictData.ue_event_cm_state.connected', '连接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2059, 2059, 'dictData.ue_event_cm_state.idle', '空闲', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2060, 2060, 'dictData.ue_event_cm_state.inactive', '不活动', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2061, 2061, 'dictData.cdr_sip_code.404', '未找到', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2062, 2062, 'dictData.cdr_sip_code.487', '请求终止', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2063, 2063, 'dictData.cdr_sip_code.503', '服务不可用', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2064, 2064, 'dictData.cdr_sip_code.504', '服务器超时', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2065, 2065, 'dictData.cdr_sip_code.603', '拒绝', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2066, 2066, 'dictData.cdr_sip_code.606', '不可接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2067, 2067, 'cache.name.user', '登录用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2068, 2068, 'cache.name.sys_config', '参数管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2069, 2069, 'cache.name.sys_dict', '字典管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2070, 2070, 'cache.name.captcha_codes', '验证码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2071, 2071, 'cache.name.repeat_submit', '防重提交', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2072, 2072, 'cache.name.rate_limit', '限流', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2073, 2073, 'cache.name.pwd_err_cnt', '登录账户密码错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2074, 2074, 'cache.name.ne_info', '网元信息管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2075, 2075, 'cache.name.ne_data', '网元数据管理', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2076, 2076, 'dictData.cdr_call_type.sms', '短信', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2077, 2077, 'dictData.cdr_sip_code.202', '已接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2078, 2078, 'dictData.cdr_sip_code.488', '这里不能接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2079, 2079, 'dictData.cdr_sip_code.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2080, 2080, 'log.operate.title.ws', 'WS会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2081, 2081, 'log.operate.title.neHost', '网元主机', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2082, 2082, 'neHost.noData', '没有可访问主机信息数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2083, 2083, 'neHost.errKeyExists', '主机信息操作【{name}】失败,同组内名称已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2084, 2084, 'neHost.errByHostInfo', '连接主机失败,请检查连接参数后重试', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2085, 2085, 'dictType.ne_host_type', '网元主机连接类型', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2086, 2086, 'dictType.ne_host_groupId', '网元主机分组', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2087, 2087, 'dictType.ne_host_authMode', '网元主机认证模式', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2088, 2088, 'dictData.ne_host_type.ssh', 'SSH', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2089, 2089, 'dictData.ne_host_type.telnet', 'Telnet', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2090, 2090, 'dictData.ne_host_groupId.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2091, 2091, 'dictData.ne_host_groupId.1', '网元', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2092, 2092, 'dictData.ne_host_groupId.2', '系统', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2093, 2093, 'dictData.ne_host_authMode.0', '密码认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2094, 2094, 'dictData.ne_host_authMode.1', '私钥认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2095, 2095, 'menu.tools.terminal', '网元主机终端', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2096, 2096, 'menu.config.neHost', '网元主机', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2097, 2097, 'menu.config.neHostCommand', '网元主机命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2098, 2098, 'log.operate.title.neHostCmd', '网元主机命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2099, 2099, 'neHostCmd.noData', '没有可访问主机命令数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2100, 2100, 'neHostCmd.errKeyExists', '主机命令操作【{name}】失败,同组内名称已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2101, 2101, 'dictType.ne_host_cmd_groupId', '网元主机命令分组', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2102, 2102, 'dictData.ne_host_cmd_groupId.0', '默认', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2103, 2103, 'dictData.ne_host_cmd_groupId.1', '快速命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2104, 2104, 'menu.config.neInfo', '网元信息', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2105, 2105, 'log.operate.title.neInfo', '网元信息', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2106, 2106, 'neInfo.noData', '没有可访问网元信息数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2107, 2107, 'neInfo.errKeyExists', '网元信息操作【{key}】失败,同类型下标识已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2108, 2108, 'log.operate.title.imsCDR', 'IMS-CDR会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2109, 2109, 'menu.dashboard.amfUE', '用户事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2110, 2110, 'log.operate.title.amfUE', 'AMF-UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '同步配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2115, 2115, 'dictType.ne_info_status', '网元信息状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2116, 2116, 'menu.tools.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2117, 2117, 'log.operate.title.neConfig', '网元参数配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2118, 2118, 'menu.config.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2119, 2119, 'log.operate.title.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2120, 2120, 'menu.config.neSoftware', '网元软件包', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2121, 2121, 'log.operate.title.neSoftware', '网元软件包', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2122, 2122, 'log.operate.title.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2123, 2123, 'menu.config.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2124, 2124, 'dictType.ne_license_status', '网元授权状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2125, 2125, 'ne_license_status.0', '无效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2126, 2126, 'ne_license_status.1', '有效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2127, 2127, 'menu.dashboard.mocn', 'MOCN', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2128, 2128, 'menu.monitor.cdr', '话单', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2129, 2129, 'menu.monitor.event', '事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2130, 2130, 'dictData.ne_host_authMode.2', '免密认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index c4cc1117..9fc92cad 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -17,637 +17,639 @@ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -INSERT IGNORE INTO `sys_dict_data` VALUES (3000, 3000, 'i18n', 'English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3001, 3001, 'hello', 'Hello', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3002, 3002, 'menu.system', 'System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3003, 3003, 'menu.monitor', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3004, 3004, 'menu.tools', 'Tools', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3005, 3005, 'menu.config', 'Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3006, 3006, 'menu.ueUser', 'UE', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3007, 3007, 'menu.systemRemark', 'System Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3008, 3008, 'menu.monitorRemark', 'System Monitor Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3009, 3009, 'menu.toolsRemark', 'System Tools Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3010, 3010, 'menu.configRemark', 'OMC Configuration Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3011, 3011, 'menu.ueUserRemark', 'Network Element Terminal Information Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3012, 3012, 'menu.security.user', 'User Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3013, 3013, 'menu.security.role', 'Role Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3014, 3014, 'menu.security.roleUser', 'Assigning Roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3015, 3015, 'menu.system.menu', 'Menu Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3016, 3016, 'menu.security.dept', 'Department Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3017, 3017, 'menu.security.post', 'Position Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3018, 3018, 'menu.system.dictType', 'Dictionary Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3019, 3019, 'menu.system.dictData', 'Dictionary Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3020, 3020, 'menu.system.paramSet', 'Parameter Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3021, 3021, 'menu.system.systemLog', 'System Log', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3022, 3022, 'menu.system.systemInfo', 'System Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3023, 3023, 'menu.system.cacheInfo', 'Cache Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3024, 3024, 'menu.system.cache', 'Cache Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3025, 3025, 'menu.security.onlineUser', 'Online Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3026, 3026, 'menu.system.job', 'Scheduling Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3027, 3027, 'menu.system.jobLog', 'Scheduling Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3028, 3028, 'menu.tools.help', 'Help Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3029, 3029, 'menu.log.operat', 'Operation logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3030, 3030, 'menu.log.login', 'Security logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3031, 3031, 'menu.security.userRemark', 'User Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3032, 3032, 'menu.security.roleRemark', 'Role Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3033, 3033, 'menu.security.roleUserRemark', 'Assign Roles Embedded Hidden Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3034, 3034, 'menu.system.menuRemark', 'Menu Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3035, 3035, 'menu.security.deptRemark', 'Department management menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3036, 3036, 'menu.security.postRemark', 'Job Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3037, 3037, 'menu.system.dictTypeRemark', 'Dictionary management menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3038, 3038, 'menu.system.dictDataRemark', 'Dictionary data embedded hidden menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3039, 3039, 'menu.system.paramSetRemark', 'Parameter setting menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3040, 3040, 'menu.system.systemLogRemark', 'System Log Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3041, 3041, 'menu.system.systemInfoRemark', 'System information menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3042, 3042, 'menu.system.cacheInfoRemark', 'Cache Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3043, 3043, 'menu.system.cacheRemark', 'Cache List Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3044, 3044, 'menu.security.onlineUserRemark', 'Online User Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3045, 3045, 'menu.system.jobRemark', 'Scheduling Tasks menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3046, 3046, 'menu.system.jobLogRemark', 'Scheduling Log Embedded Hidden Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3047, 3047, 'menu.tools.helpRemark', 'Help file menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3048, 3048, 'menu.log.operatRemark', 'Operation log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3049, 3049, 'menu.log.loginRemark', 'Login log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3050, 3050, 'menu.common.query', 'Inquiry', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3051, 3051, 'menu.common.add', 'Add', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3052, 3052, 'menu.common.edit', 'Modify', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3053, 3053, 'menu.common.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3054, 3054, 'menu.common.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3055, 3055, 'menu.common.import', 'Import', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3056, 3056, 'menu.common.reset', 'Reset', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3057, 3057, 'menu.common.unlock', 'Account Unlock', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3058, 3058, 'menu.forcedQuit.batch ', 'Batch Undo', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3059, 3059, 'menu.forcedQuit.single', 'Individual Forced Retirement', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3060, 3060, 'menu.ueUser.authUDM', 'UDM Authentication', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3061, 3061, 'menu.ueUser.subUDM', 'UDM Subscribers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3062, 3062, 'menu.ueUser.authUDMRemark', 'UDM Authentication Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3063, 3063, 'menu.ueUser.subUDMRemark', 'UDM Subscriber Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3064, 3064, 'menu.config.neManage', 'NE Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3065, 3065, 'menu.config.configNE', 'Parameter Configuration Original', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3066, 3066, 'menu.config.neManageRemark', 'Network Element Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3067, 3067, 'menu.config.configNERemark', 'Parameter Configuration Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3068, 3068, 'menu.config.backupManage', 'Backup Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3069, 3069, 'menu.config.softwareManage', 'Software Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3070, 3070, 'menu.ueUser.onlineIMS', 'IMS Online Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3071, 3071, 'menu.ueUser.onlineUE', 'UE Online Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3072, 3072, 'menu.ueUser.base5G', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3073, 3073, 'menu.trace', 'Trace', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'Trace Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'Signaling Analysis', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3076, 3076, 'menu.trace.pcap', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3077, 3077, 'menu.fault', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3078, 3078, 'menu.config.backupManageRemark', 'Backup Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3079, 3079, 'menu.config.softwareManageRemark', 'Software Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3080, 3080, 'menu.ueUser.onlineIMSRemark', 'IMS Online User Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3081, 3081, 'menu.ueUser.onlineUERemark', 'UE Online Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3082, 3082, 'menu.ueUser.base5GRemark', '5G Base Station Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3083, 3083, 'menu.traceRemark', 'Tracking Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3084, 3084, 'menu.trace.taskRemark', 'Tracking Task Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3086, 3086, 'menu.trace.pcapRemark', 'Signaling Capture Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3087, 3087, 'menu.faultRemark', 'Fault Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3088, 3088, 'menu.fault.active', 'Active Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3089, 3089, 'menu.log', 'Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3090, 3090, 'menu.log.operatOld', 'Operation Logs (old)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3091, 3091, 'menu.log.mml', 'MML Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3092, 3092, 'menu.log.alarm', 'Alarm Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3093, 3093, 'menu.log.securityOld', 'Security Logs (old)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3094, 3094, 'menu.log.forwarding', 'Alarm Forwarding Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3095, 3095, 'menu.log.set', 'Log Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3096, 3096, 'menu.monitor.sessionUser', 'User Sessions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3097, 3097, 'menu.fault.history', 'Historical Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3098, 3098, 'menu.fault.set', 'Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3099, 3099, 'menu.perf', 'Performance', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3100, 3100, 'menu.fault.activemRemark', 'Active Alarm Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3101, 3101, 'menu.logRemark', 'Log Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3102, 3102, 'menu.log.operatOldRemark', 'Operation log old layui menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3103, 3103, 'menu.log.mmlRemark', 'Operation MML Log', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3104, 3104, 'menu.log.alarmRemark', 'Alarm Log Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3105, 3105, 'menu.log.securityOldRemark', 'Security Log Old Layui Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3106, 3106, 'menu.log.forwardingRemark', 'Alarm forward log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3107, 3107, 'menu.log.setRemark', 'Log Settings menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3108, 3108, 'menu.monitor.sessionUserRemark', 'User Session Old Layui Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3109, 3109, 'menu.fault.historyRemark', 'Alarm history menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3110, 3110, 'menu.fault.setRemark', 'Fault General Setup Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3111, 3111, 'menu.perfRemark', 'Performance Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3112, 3112, 'menu.perf.task', 'Performance Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3113, 3113, 'menu.perf.data', 'Performance Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3114, 3114, 'menu.perf.report', 'Performance Reports', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3115, 3115, 'menu.perf.threshold', 'Performance Thresholds', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3116, 3116, 'menu.perf.kpi', 'Key Performance Indicators', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3117, 3117, 'menu.perf.customTarget', 'Custom Metrics', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3118, 3118, 'menu.perf.set', 'Performance General Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3119, 3119, 'menu.mml', 'MML', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3120, 3120, 'menu.mml.ne', 'NE Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3121, 3121, 'menu.mml.udm', 'UDM Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3122, 3122, 'menu.mml.set', 'MML Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3123, 3123, 'menu.mml.omc', 'OMC Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3124, 3124, 'menu.perf.taskRemark', 'Task Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3125, 3125, 'menu.perf.dataRemark', 'Performance Data Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3126, 3126, 'menu.perf.reportRemark', 'Performance Report Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3127, 3127, 'menu.perf.thresholdRemark', 'Performance Threshold Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3128, 3128, 'menu.perf.kpiRemark', 'Key Performance Indicator Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3129, 3129, 'menu.perf.customTargetRemark', 'Custom Metrics Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3130, 3130, 'menu.perf.setRemark', 'Performance General Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3131, 3131, 'menu.mmlRemark', 'MML Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3132, 3132, 'menu.mml.neRemark', 'Network Element Operations Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3133, 3133, 'menu.mml.udmRemark', 'Network Element UDM User Data Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3134, 3134, 'menu.mml.setRemark', 'MML Setup Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3135, 3135, 'menu.mml.omcRemark', 'OMC Operation Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3136, 3136, 'menu.config.licenseManage', 'License Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3137, 3137, 'menu.security', 'Security', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3138, 3138, 'menu.system.systemSet', 'System Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3139, 3139, 'menu.system.systemResource', 'System Resources', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3140, 3140, 'menu.config.configNEForm', 'Parameter Configuration Form', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3141, 3141, 'menu.config.configNETree', 'Parameter Configuration Tree', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3142, 3142, 'menu.config.configNETreeTable', 'Parameter Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3143, 3143, 'menu.config.licenseManageRemark', 'License Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3144, 3144, 'menu.securityRemark', 'Security Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3145, 3145, 'menu.system.systemSetRemark', 'System Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3146, 3146, 'menu.system.systemResourceRemark', 'System Resources cpu io network menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3147, 3147, 'menu.config.configNEFormRemark', 'Parameter Configuration Form Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3148, 3148, 'menu.config.configNETreeRemark', 'Parameter Configuration Tree Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3149, 3149, 'menu.config.configNETreeTableRemark', 'Configuring the TreeTable menu with parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3150, 3150, 'menu.noData', 'There is no accessible menu data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3151, 3151, 'menu.errNameExists', 'Failed to operate menu [{name}], menu name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3152, 3152, 'menu.errPathExists', 'Failed to operate menu [{name}], menu routing address already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3153, 3153, 'menu.errFramePath', 'Failed to manipulate menu [{name}], non-internal address should start with http(s)://', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3154, 3154, 'menu.errParentStatus', 'The parent menu is not enabled!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3155, 3155, 'menu.errHasChildUse', 'Operation menu [{name}] failed, number of submenus in use exists: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3156, 3156, 'menu.errHasRoleUse', 'Operation menu [{name}] failed, number of roles the menu has been assigned to: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3400, 3400, 'dictData.sex.un', 'Not selected', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3401, 3401, 'dictData.sex.male', 'Male', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3402, 3402, 'dictData.sex.female', 'Female', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3403, 3403, 'dictData.show', 'Show', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3404, 3404, 'dictData.hide', 'Hide', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3405, 3405, 'dictData.normal', 'Active', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3406, 3406, 'dictData.disable', 'Inactive', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3407, 3407, 'dictData.yes', 'Yes', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3408, 3408, 'dictData.no', 'No', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3409, 3409, 'dictData.success', 'Successful', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3410, 3410, 'dictData.fail', 'Failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3411, 3411, 'dictData.jobStatus.normal', 'Active', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3412, 3412, 'dictData.jobStatus.pause', 'Inactive', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3413, 3413, 'dictData.jobGroup.Default', 'Default', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3414, 3414, 'dictData.jobGroup.System', 'System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3415, 3415, 'dictData.operType.other', 'Other', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3416, 3416, 'dictData.operType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3417, 3417, 'dictData.operType.edit', 'Modify', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3418, 3418, 'dictData.operType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3419, 3419, 'dictData.operType.auth', 'Authorization', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3420, 3420, 'dictData.operType.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3421, 3421, 'dictData.operType.import', 'Import', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3422, 3422, 'dictData.operType.forced quit', 'Forced Retirement', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3423, 3423, 'dictData.operType.clear', 'Clear', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3424, 3424, 'dictData.trace.interface', 'Interface Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3425, 3425, 'dictData.trace.device', 'Module Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3426, 3426, 'dictData.trace.user', 'User Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3427, 3427, 'dictData.logType.download', 'Download', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3428, 3428, 'dictData.logType.activation', 'Activation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3429, 3429, 'dictData.logType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3430, 3430, 'dictData.logType.other', 'Other', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3431, 3431, 'dictData.logType.back', 'Rollback', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3432, 3432, 'dictData.logType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3433, 3433, 'dictData.logType.distribute', 'Assign', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3434, 3434, 'dictData.logType.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3435, 3435, 'dictData.logType.query', 'Query', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3436, 3436, 'dictData.logType.setup', 'Setup', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3437, 3437, 'dictData.logType.update', 'Update', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3438, 3438, 'dictData.logType.upload', 'Upload', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3439, 3439, 'dictData.logType.view', 'View', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3440, 3440, 'dictData.logType.login', 'Login', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3441, 3441, 'dictData.logType.logout', 'Logout', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3442, 3442, 'dictData.securityLogType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3443, 3443, 'dictData.securityLogType.update', 'Update', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3444, 3444, 'dictData.securityLogType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3445, 3445, 'dictData.securityLogType.lock', 'Locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3446, 3446, 'dictData.securityLogType.unlock', 'Unlock', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3447, 3447, 'dictData.securityLogType.reset', 'Reset', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3448, 3448, 'dictData.securityLogType.deactivate', 'Deactivate', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3449, 3449, 'dictData.jobSaveLog.no', 'No Record', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3450, 3450, 'dictData.jobSaveLog.yes', 'Recorded', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3451, 3451, 'dictData.neVersionStatus.upload', 'Uploaded', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3452, 3452, 'dictData.neVersionStatus.inactive', 'Inactivated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3453, 3453, 'dictData.neVersionStatus.active', 'Activated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3454, 3454, 'dictData.alarmStatus.history', 'Historical Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3455, 3455, 'dictData.alarmStatus.active', 'Active Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3456, 3456, 'dictData.export.code', 'Data Codes', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3457, 3457, 'dictData.export.sort', 'Data Sorting', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3458, 3458, 'dictData.export.label', 'Data Labeling', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3459, 3459, 'dictData.export.value', 'Data Key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3460, 3460, 'dictData.export.type', 'Data Sorting', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3461, 3461, 'dictData.export.status', 'Data Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3462, 3462, 'dictData.datascope.all', 'All data permissions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3463, 3463, 'dictData.datascope.custom', 'Customized Data Rights', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3464, 3464, 'dictData.datascope.dept', 'Departmental Data Permissions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3465, 3465, 'dictData.datascope.deptAndChid', 'Department and below', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3466, 3466, 'dictData.datascope.self', 'Personal data access only', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3467, 3467, 'dictData.noData', 'There is no accessible dictionary code data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3468, 3468, 'dictData.errLabelExists', 'Failed to manipulate data [{name}], tag name already exists under this dictionary type!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3500, 3500, 'dictType.sys_user_sex', 'User Gender', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3501, 3501, 'dictType.sys_show_hide', 'Menu Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3502, 3502, 'dictType.sys_normal_disable', 'System switches', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3503, 3503, 'dictType.sys_job_status', 'Task Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3504, 3504, 'dictType.sys_job_group', 'Task Grouping', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3505, 3505, 'dictType.sys_yes_no', 'System or not', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3506, 3506, 'dictType.sys_oper_type', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3507, 3507, 'dictType.sys_common_status', 'System Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3508, 3508, 'dictType.trace_type', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3509, 3509, 'dictType.operation_log_type', 'Operation Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3510, 3510, 'dictType.alarm_status', 'Alarm Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3511, 3511, 'dictType.security_log_type', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3512, 3512, 'dictType.ne_version_status', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3513, 3513, 'dictType.i18n_en', 'Multi-language - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3514, 3514, 'dictType.i18n_zh', 'Multi-language - Chinese', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3515, 3515, 'dictType.sys_user_sex_remark', 'User gender list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3516, 3516, 'dictType.sys_show_hide_remark', 'Menu Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3517, 3517, 'dictType.sys_normal_disable_remark', 'System switch list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3518, 3518, 'dictType.sys_job_status_remark', 'Task Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3519, 3519, 'dictType.sys_job_group_remark', 'Task Grouping List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3520, 3520, 'dictType.sys_yes_no_remark', 'System whether list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3521, 3521, 'dictType.sys_oper_type_remark', 'Operation type list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3522, 3522, 'dictType.sys_common_status_remark', 'Login Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3523, 3523, 'dictType.trace_type_remark', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3524, 3524, 'dictType.operation_log_type_remark', 'Operation log type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3525, 3525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3526, 3526, 'dictType.security_log_type_remark', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3527, 3527, 'dictType.ne_version_status_remark', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3528, 3528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3529, 3529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3530, 3530, 'dictType.export.id', 'Dictionary Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3531, 3531, 'dictType.export.name', 'Dictionary Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3532, 3532, 'dictType.export.type', 'Dictionary Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3533, 3533, 'dictType.export.status', 'Dictionary Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3534, 3534, 'dictType.sys_role_datascope', 'System Role Data Range', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3535, 3535, 'dictType.sys_role_datascope_remark', 'System Role Data Range Mapping', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3536, 3536, 'dictType.noData', 'There is no accessible dictionary type data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3537, 3537, 'dictType.errNameExists', 'Failed to manipulate dictionary [{name}], dictionary name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3538, 3538, 'dictType.errTypeExists', 'Failed to manipulate dictionary [{name}], dictionary type already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3600, 3600, 'dept.root', 'System Maintenance Department', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3601, 3601, 'dept.root.item1', 'Operation and Maintenance Department One', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3602, 3602, 'dept.noData', 'There is no accessible department data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3603, 3603, 'dept.errParentDelFlag', 'The parent department [{name}] has been deleted and is not allowed to be added.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3604, 3604, 'dept.errParentStatus', 'Parent department [{name}] is deactivated, additions are not allowed!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3605, 3605, 'dept.errNameExists', 'Manipulate department [{name}] failed, department name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3606, 3606, 'dept.errParentID', 'Failed to operate department [{name}], the parent department cannot be itself.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3607, 3607, 'dept.errHasChildUse', 'Operation failed, the department contains undeactivated sub-departments number: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3608, 3608, 'dept.errHasUserUse', 'Deletion is not allowed, number of users the department has been assigned to: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3630, 3630, 'config.sys.user.initPassword', 'User Management-Account Initial Password', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3631, 3631, 'config.sys.account.captchaEnabled', 'Account self-help-Certification code switch', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3632, 3632, 'config.sys.account.registerUser', 'Account self-service-Whether to enable the user registration function', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3633, 3633, 'config.sys.user.maxRetryCount', 'User Management-Maximum number of password errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3634, 3634, 'config.sys.user.lockTime', 'User Management-Password Lock Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3635, 3635, 'config.monitor.sysResource.storeDays', 'Monitor-System Resources-Data retention time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3636, 3636, 'config.sys.logo.type', 'System Settings-Logo Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3637, 3637, 'config.sys.logo.filePathIcon', 'System Settings-Logo File icon', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3638, 3638, 'config.sys.logo.filePathBrand', 'System Settings-Logo File Brand', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3639, 3639, 'config.sys.loginBackground', 'System Settings-Login Interface Background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3640, 3640, 'config.sys.title', 'System Settings-System Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3641, 3641, 'config.sys.copyright', 'System Settings-Copyright Notice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3642, 3642, 'config.sys.user.initPasswordRemark', 'Import user initialization password 123456', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3643, 3643, 'config.sys.account.captchaEnabledRemark', 'Whether to enable the verification code function (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3644, 3644, 'config.sys.account.registerUserRemark', 'Whether to enable the function of registered users (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3645, 3645, 'config.sys.user.maxRetryCountRemark', 'Maximum number of password errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3646, 3646, 'config.sys.user.lockTimeRemark', 'Password lock time in minutes (default 10 minutes)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3647, 3647, 'config.monitor.sysResource.storeDaysRemark', 'Monitor-System Resources-Data retention time, in days. According to the current date, delete the date data information that exceeds the retention time.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3648, 3648, 'config.sys.logo.typeRemark', 'Full image: brand\r\nSmall image: icon', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3649, 3649, 'config.sys.logo.filePathIconRemark', 'File support for web address images and file paths for internal uploads', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3650, 3650, 'config.sys.logo.filePathBrandRemark', 'File support for web address images and paths to internally uploaded files', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3651, 3651, 'config.sys.loginBackgroundRemark', 'The file supports web address images and internal upload file paths with a # in the default background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3652, 3652, 'config.sys.titleRemark', 'System name length limit of 11-digit string', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3653, 3653, 'config.sys.copyrightRemark', 'Footer fixing strip with copyright notice on the left side', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3654, 3654, 'config..export.id', 'Parameter Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3655, 3655, 'config..export.name', 'Parameter Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3656, 3656, 'config..export.key', 'Parameter key name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3657, 3657, 'config..export.value', 'Parameter Key Value', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3658, 3658, 'config..export.type', 'System builtin', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3659, 3659, 'config..export.remark', 'Parameter Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3660, 3660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3661, 3661, 'config.sys.copyrightValue', 'Copyright ©2023 AGrandTech', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3662, 3662, 'config.noData', 'No parameter configuration data is accessible!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3663, 3663, 'config.errKey', 'Invalid key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3664, 3664, 'config.errValueEq', 'Change state is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3665, 3665, 'config.errKeyExists', 'Failed to manipulate parameter configuration [{name}], parameter key name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3666, 3666, 'config.errDelete', 'Deletion of parameter configuration information failed!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3667, 3667, 'config.errType', 'The operation contains built-in parameters and deletion is prohibited!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3700, 3700, 'job.monitor_sys_resource', 'Monitor-System Resources', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3701, 3701, 'job.monitor_sys_resource_remark', 'System Resource CPU/IO/Netword Collection\r\ninterval unit minutes, average minute resource situation\r\nNote: Please pass the value of the parameter interva according to the time unit minutes of the cron expression', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3702, 3702, 'job.delExpiredNeBackup', 'Delete expired NE etc backup file', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3703, 3703, 'job.delExpiredNeBackupRemark', 'Delete expired network element etc backup file, pass in the parameter to keep the backup file for {duration} days, default is 60 days.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3704, 3704, 'job.deleteExpiredAlarmRecord', 'Delete expired historical alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3705, 3705, 'job.deleteExpiredAlarmRecordRemark', 'Delete expired history alarm records, pass in the parameter to keep the history alarm records for {duration} days.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3706, 3706, 'job.deleteExpiredKpiRecord', 'Delete expired KPI records', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3707, 3707, 'job.deleteExpiredKpiRecordRemark', 'KPI record retention for {duration} days', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3708, 3708, 'job.backupEtcFromNE', 'Network Element Configuration Auto Backup Task', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3709, 3709, 'job.backupEtcFromNERemark', 'Automatically backs up the configuration files in the network element\'s etc directory.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3710, 3710, 'job.export.jobID', 'Task Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3711, 3711, 'job.export.jobName', 'Task name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3712, 3712, 'job.export.jobGroupName', 'Task Group Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3713, 3713, 'job.export.invokeTarget', 'Call target', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3714, 3714, 'job.export.targetParams', 'Incoming Parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3715, 3715, 'job.export.cronExpression', 'cron expressions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3716, 3716, 'job.export.status', 'Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3717, 3717, 'job.export.remark', 'Remarks Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3718, 3718, 'job.export.jobLogID', 'Task log number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3719, 3719, 'job.export.jobLogStatus', 'Task log status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3720, 3720, 'job.export.jobLogTime', 'Task log time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3721, 3721, 'job.noData', 'There is no accessible scheduling task data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3722, 3722, 'job.errTargetParams', 'Failed to operate scheduling task [{name}] with incorrect task incoming parameter json string!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3723, 3723, 'job.errCronExpression', 'Scheduled task [{name}] failed with incorrect Cron expression!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3724, 3724, 'job.errJobExists', 'Failed to add a new task [{name}] to a scheduling task, same task name in the same task group', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3725, 3725, 'job.statusEq', 'The change state is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3750, 3750, 'role.admin', 'Super Administrator', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3751, 3751, 'role.adminAssign', 'Managers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3752, 3752, 'role.operator', 'Operators', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3753, 3753, 'role.monitor', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3754, 3754, 'role.vistor', 'General Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3755, 3755, 'role.adminRemark', 'Super Administrator, cannot modify or delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3756, 3756, 'role.adminAssignRemark', 'Administrators can perform any operation on the device', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3757, 3757, 'role.operatorRemark', 'Operation and maintenance personnel can read data from the device and configure the device, but cannot perform software upgrade operations on the device.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3758, 3758, 'role.monitorRemark', 'Monitoring personnel Can only read data from the device, but cannot make any settings on the device', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3759, 3759, 'role.vistorRemark', 'Ordinary users can only see system-related information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3760, 3760, 'role.export.id', 'Role ID', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3761, 3761, 'role.export.name', 'Role Name ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3762, 3762, 'role.export.key', 'Role Key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3763, 3763, 'role.export.sort', 'Role Order', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3764, 3764, 'role.export.dataScope', 'Role Data Range', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3765, 3765, 'role.export.status', 'Role Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3766, 3766, 'role.noData', 'There is no accessible role data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3767, 3767, 'role.statusEq', 'The change status is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3768, 3768, 'role.errNameExists', 'Manipulating role [{name}] failed, role name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3769, 3769, 'role.errKeyExists', 'Failed to manipulate role [{name}], role key already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3800, 3800, 'post.admin', 'Systems', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3801, 3801, 'post.operator', 'Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3802, 3802, 'post.monitor', 'Operation & Maintenance', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3803, 3803, 'post.visitor', 'Monitoring', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3804, 3804, 'post.export.id', 'Post ID ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3805, 3805, 'post.export.code', 'Position Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3806, 3806, 'post.export.name', 'Position Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3807, 3807, 'post.export.sort', 'Position Sort', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3808, 3808, 'post.export.status', 'Position Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3809, 3809, 'post.noData', 'There is no accessible post data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3810, 3810, 'post.errNameExists', 'Failed to manipulate post [{name}], post name already exists already exists', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3811, 3811, 'post.errCodeExists', 'Failed to manipulate role [{name}], role key already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3830, 3830, 'user.export.id', 'User ID', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3831, 3831, 'user.export.name', 'Login Account', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3832, 3832, 'user.export.nick', 'Nickname', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3833, 3833, 'user.export.email', 'E-Mail', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3834, 3834, 'user.export.phone', 'Cell phone number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3835, 3835, 'user.export.sex', 'Gender', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3836, 3836, 'user.export.status', 'User Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3837, 3837, 'user.export.deptID', 'Department number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3838, 3838, 'user.export.deptName', 'Department Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3839, 3839, 'user.export.deptLeader', 'Department Head', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3840, 3840, 'user.export.loginIP', 'User Login IP', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3841, 3841, 'user.export.loginDate', 'User Login Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3842, 3842, 'user.noData', 'No accessible user data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3843, 3843, 'user.statusEq', 'The change status is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3844, 3844, 'user.errPasswdOld', 'Change password failed, old password is wrong', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3845, 3845, 'user.errPasswdEqOld', 'New password cannot be the same as the old one', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3846, 3846, 'user.errPasswd', 'Login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3847, 3847, 'user.errEmailFormat', 'Failed to operate user [{name}], mailbox format error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3848, 3848, 'user.errEmailExists', 'Failed to operate user [{name}], mailbox already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3849, 3849, 'user.errPhoneFormat', 'Failed to operate user [{name}], cell phone number format is wrong.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3850, 3850, 'user.errPhoneExists', 'Failed to operate user [{name}], cell phone number already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3851, 3851, 'user.errNameExists', 'Failed to operate user [{name}], login account already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3852, 3852, 'user.import.mustItem', 'Required list item in form, {text}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3853, 3853, 'user.import.phoneExist', 'User ID: {id} cell phone number {phone} Existing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3854, 3854, 'user.import.phoneFormat', 'User ID: {id} cell phone number {phone} Wrong format', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3855, 3855, 'user.import.emailExist', 'User ID: {id} User Email: {email} Existing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3856, 3856, 'user.import.emailFormat', 'User ID: {id} Email: {email} Wrong Format', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3857, 3857, 'user.import.success', 'User ID:{id} Login name:{name} Imported successfully!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3858, 3858, 'user.import.fail', 'User ID: {id} Login name: {name} Import failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3859, 3859, 'user.import.successUpdate', 'User ID: {id} Login name: {name} Update success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3860, 3860, 'user.import.failUpdate', 'User ID: {id} Login Name: {name} Update Failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3861, 3861, 'user.import.failTip', 'Sorry, the import failed! A total of {num} entries were not formatted correctly, the error is below:', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3862, 3862, 'user.import.successTip', 'Congratulations, the data has been imported successfully! There are {num} entries with the following data:', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3900, 3900, 'app.common.err403', 'Unauthorized access {method} {requestURI}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3901, 3901, 'app.common.err401', 'Invalid authorization', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3902, 3902, 'app.common.err400', 'Parameter error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3903, 3903, 'app.common.exportEmpty', 'Export data record is empty', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3904, 3904, 'app.common.errOperateAdmin', 'Built-in users are not allowed to operate', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3905, 3905, 'app.common.errOperateRole', 'Built-in roles are not allowed to be operated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3906, 3906, 'app.common.deleteSuccess', 'Deleted successfully: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3907, 3907, 'app.common.loginSuccess', 'Login Success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3908, 3908, 'app.common.logoutSuccess', 'Logout Successful', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3909, 3909, 'app.common.errUnlock', 'The user is not locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3910, 3910, 'app.common.noLoginUser', 'Invalid login user information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3911, 3911, 'app.common.rateLimitTip', 'Access too often, please try again later', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3912, 3912, 'log.operate.export.id', 'Operation Number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3913, 3913, 'log.operate.export.title', 'Module Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3914, 3914, 'log.operate.export.businessType', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3915, 3915, 'log.operate.export.method', 'Operation Method', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3916, 3916, 'log.operate.export.requestMethod', 'Request Method ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3917, 3917, 'log.operate.export.operatorType', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3918, 3918, 'log.operate.export.operName', 'Operator', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3919, 3919, 'log.operate.export.deptName', 'Operator\'s department name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3920, 3920, 'log.operate.export.url', 'Request Link Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3921, 3921, 'log.operate.export.ip', 'Requesting Host ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3922, 3922, 'log.operate.export.location', 'Request Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3923, 3923, 'log.operate.export.param', 'Request Parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3924, 3924, 'log.operate.export.msg', 'Operation Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3925, 3925, 'log.operate.export.status', 'Operation status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3926, 3926, 'log.operate.export.costTime', 'Consumption time (ms)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3927, 3927, 'log.operate.export.operTime', 'Operation time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3928, 3928, 'log.login.export.id', 'Record number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3929, 3929, 'log.login.export.userName', 'Login Account', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3930, 3930, 'log.login.export.status', 'Login Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3931, 3931, 'log.login.export.ip', 'Login Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3932, 3932, 'log.login.export.location', 'Login Location', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3933, 3933, 'log.login.export.browser', 'Browser', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3934, 3934, 'log.login.export.os', 'Operating System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3935, 3935, 'log.login.export.msg', 'Login Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3936, 3936, 'log.login.export.time', 'Login Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3937, 3937, 'trace.tcpdump.noData', 'Can\'t find {type} {id} information of the corresponding network element.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3938, 3938, 'register.errUsername', 'The account number cannot start with a number, but can contain upper and lower case letters, numbers, and not less than 5 digits.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3939, 3939, 'register.errPasswd', 'The password must contain at least 6 upper and lower case letters, numbers, and special symbols.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3940, 3940, 'register.errPasswdNotEq', 'User confirms password inconsistency', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3941, 3941, 'register.success', 'Successful registration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3942, 3942, 'register.successMsg', '{name} Register Successful {id}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3943, 3943, 'log.operate.title.sysJobLog', 'Scheduling Task Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3944, 3944, 'log.operate.title.sysJob', 'Scheduling Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3945, 3945, 'log.operate.title.tcpdump', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3946, 3946, 'log.operate.title.sysConfig', 'Parameter Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3947, 3947, 'log.operate.title.sysDept', 'Sector', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3948, 3948, 'log.operate.title.sysDictData', 'Dictionary Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3949, 3949, 'log.operate.title.sysDictType', 'Dictionary type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3950, 3950, 'log.operate.title.sysMenu', 'Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3951, 3951, 'log.operate.title.sysPost', 'Positions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3952, 3952, 'log.operate.title.sysProfile', 'Personal Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3953, 3953, 'log.operate.title.sysProfileAvatar', 'Personal avatar', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3954, 3954, 'log.operate.title.sysRole', 'Roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3955, 3955, 'log.operate.title.sysUser', 'User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3956, 3956, 'log.operate.title.sysLogOper', 'Operation Logging', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3957, 3957, 'log.operate.title.sysLogLogin', 'Operation Logging', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3958, 3958, 'login.errNameOrPasswd', 'User does not exist or password is wrong', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3959, 3959, 'login.errDelFlag', 'Sorry, your account has been deleted', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3960, 3960, 'login.errStatus', 'Sorry, your account has been disabled', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3961, 3961, 'login.errRetryPasswd', 'Password was entered incorrectly several times, account has been locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3962, 3962, 'captcha.err', 'Captcha Error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3963, 3963, 'captcha.errValid', 'Captcha is invalid', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3964, 3964, 'app.common.noUaOsBrowser', 'Unknown Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3965, 3965, 'app.common.noIPregion', 'Intranet', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3966, 3966, 'app.common.unknown', 'Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3967, 3967, 'app.common.noNEInfo', 'No matching network element information found', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3968, 3968, 'ne.udm.errImportUserAuthFileFormat', 'Please upload a file in the format of. csv or. txt. English comma separated txt format: imsi, ki, algo, amf, opc', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3969, 3969, 'ne.udm.errExportType', 'Export file types support CSV and txt', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3970, 3970, 'ne.udm.errImportUserSubFileFormat', 'Please upload files in .csv or .txt format. English comma-separated txt format: imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3971, 3971, 'log.operate.title.udmAuth', 'UDM Authentication User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3972, 3972, 'log.operate.title.udmSub', 'UDM Subscribers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3973, 3973, 'dictType.active_alarm_type', 'Event Alarm Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3974, 3974, 'dictType.active_alarm_type_remark', 'List of Active Alarm Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3975, 3975, 'dictData.active_alarm_type.communication', 'Communication Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3976, 3976, 'dictData.active_alarm_type.equipment', 'Equipment Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3977, 3977, 'dictData.active_alarm_type.processing', 'Processing Failure Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3978, 3978, 'dictData.active_alarm_type.environmental', 'Environmental Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3979, 3979, 'dictData.active_alarm_type.qualityOfService', 'Quality of Service Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3980, 3980, 'dictType.active_clear_type', 'Alarm Clearing Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3981, 3981, 'dictType.active_clear_type_remark', 'List of Alarm Clearing Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3982, 3982, 'dictData.active_clear_type.notCleared', 'Not cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3983, 3983, 'dictData.active_clear_type.hand', 'Manually cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3984, 3984, 'dictData.active_clear_type.auto', 'Automatically cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3985, 3985, 'dictType.active_ack_state', 'Alarm Acknowledgement Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3986, 3986, 'dictType.active_ack_state_remark', 'Alarm Acknowledgement Type List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3987, 3987, 'dictData.active_ack_state.unconfirmed', 'Not Confirm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3988, 3988, 'dictData.active_ack_state.confirmed', 'Confirm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3989, 3989, 'dictType.active_alarm_severity', 'Severity', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3990, 3990, 'dictType.active_alarm_severity_remark', 'Severity List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3991, 3991, 'dictData.active_alarm_severity.critical', 'Critical', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3992, 3992, 'dictData.active_alarm_severity.major', 'Major', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3993, 3993, 'dictData.active_alarm_severity.minor', 'Minor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3994, 3994, 'dictData.active_alarm_severity.warning', 'Warning', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3995, 3995, 'dictData.active_alarm_severity.event', 'Event', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3996, 3996, 'config.sys.officialUrl', 'System Settings - Official Website Links', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3997, 3997, 'config.sys.helpDoc', 'System Settings-System Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3998, 3998, 'config.sys.officialUrlRemark', 'Default no address with # sign', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3999, 3999, 'config.sys.helpDocRemark', 'Static file directory address, use {language} to distinguish language files', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4000, 4000, 'log.operate.title.neAction', 'Network Element Processing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4001, 4001, 'log.operate.title.helpDoc', 'System Usage Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4002, 4002, 'menu.ueUser.n3iwf', 'N3IWF Online User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4003, 4003, 'menu.ueUser.pcf', 'User PCC Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4004, 4004, 'menu.system.user.editRole', 'Modifying user roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4005, 4005, 'config.sys.i18nOpen', 'Internationalization Switching', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4006, 4006, 'config.sys.i18nDefault', 'Internationalization Default Language', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4007, 4007, 'user.export.role', 'UserRole', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4008, 4008, 'menu.system.setting.i18n', 'Internationalization Switch', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4009, 4009, 'menu.system.setting.i18nRemark', 'Internationalized multilingual switching options', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4010, 4010, 'dictType.index_status', 'Home Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4011, 4011, 'dictType.index_status_remark', 'Network element status colors on the home page', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4012, 4012, 'dictType.index_status.normal', 'Normal', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4013, 4013, 'dictType.index_status.abnormal', 'Abnormal', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4014, 4014, 'menu.log.neFile', 'NE Log File', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4015, 4015, 'job.deleteExpiredNeStateRecord', 'Delete Expired NE State Record', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4016, 4016, 'job.deleteExpiredNeStateRecordRemark', 'Delete expired NE state records regularly and keep them for {duration} days by default.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4017, 4017, 'job.getStateFromNE', 'Get state from NEs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4018, 4018, 'job.getStateFromNERemark', 'Get state information from all NEs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4019, 4019, 'job.genNeStateAlarm', 'Network Element Health Check', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4020, 4020, 'job.genNeStateAlarmRemark', 'Health status inspection of network elements, generating alarms in case of abnormalities.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4021, 4021, 'menu.neUser.nssf', 'NSSF Subscription Info', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4022, 4022, 'menu.neUser.nssfAmf', 'NSSF Available AMFs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4023, 4023, 'menu.monitor.topology', 'Topology Info', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4024, 4024, 'menu.monitor.topologyBuild', 'Topological Graph Build', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4025, 4025, 'log.operate.title.chartGraph', 'Topological Graph', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 1, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4026, 4026, 'menu.monitor.topologyArchitecture', 'NE System Topology', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4027, 4027, 'menu.alarm', 'Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4028, 4028, 'menu.topology', 'Topology', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4029, 4029, 'config.sys.lockTime', 'System Settings - Screen Lock Timeout Duration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4030, 4030, 'config.sys.lockTimeRemark', 'Screen lock timeout duration when idle, in seconds.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4031, 4031, 'sys.account.captchaType', 'Account Self Service - Captcha Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4032, 4032, 'sys.account.captchaTypeRemark', 'Using CAPTCHA types (math numeric calculation, char character validation)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4033, 4033, 'menu.dashboard', 'Dashboard', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4034, 4034, 'menu.dashboard.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4035, 4035, 'menu.dashboard.cdr', 'CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4036, 4036, 'dictType.cdr_sip_code', 'CDR SIP Response Code Category Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4037, 4037, 'dictType.cdr_call_type', 'CDR Call Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4038, 4038, 'dictType.ue_auth_code', 'UE Event Authentication Code Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4039, 4039, 'dictType.ue_event_type', 'UE Event Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4040, 4040, 'dictData.cdr_sip_code.200', 'Normal Cleaning', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4041, 4041, 'dictData.cdr_sip_code.403', 'Banned', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4042, 4042, 'dictData.cdr_sip_code.408', 'Request Timeout', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4043, 4043, 'dictData.cdr_sip_code.500', 'Internal Server Error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4044, 4044, 'dictData.cdr_call_type.audio', 'Voice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4045, 4045, 'dictData.cdr_call_type.video', 'Video', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4046, 4046, 'dictData.ue_auth_code.200', 'Success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4047, 4047, 'dictData.ue_auth_code.001', 'Network Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4048, 4048, 'dictData.ue_auth_code.002', 'Air Interface Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4049, 4049, 'dictData.ue_auth_code.003', 'MAC Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4050, 4050, 'dictData.ue_auth_code.004', 'Synchronization failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4051, 4051, 'dictData.ue_auth_code.005', 'Non-5G Authentication Not Accepted', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4052, 4052, 'dictData.ue_auth_code.006', 'Response Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4053, 4053, 'dictData.ue_auth_code.007', 'Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4054, 4054, 'dictData.ue_event_type.auth', 'Authentication', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4055, 4055, 'dictData.ue_event_type.detach', 'Detach', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4056, 4056, 'dictData.ue_event_type.state', 'CM Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4057, 4057, 'dictType.ue_event_cm_state', 'UE Event CM Status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4058, 4058, 'dictData.ue_event_cm_state.connected', 'Connected', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4059, 4059, 'dictData.ue_event_cm_state.idle', 'Idle', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4060, 4060, 'dictData.ue_event_cm_state.inactive', 'Inactive', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4061, 4061, 'dictData.cdr_sip_code.404', 'Not Found', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4062, 4062, 'dictData.cdr_sip_code.487', 'Request Terminated', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4063, 4063, 'dictData.cdr_sip_code.503', 'Service Unavailable', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4064, 4064, 'dictData.cdr_sip_code.504', 'Server Time Out', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4065, 4065, 'dictData.cdr_sip_code.603', 'Decline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4066, 4066, 'dictData.cdr_sip_code.606', 'Not Acceptable', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4067, 4067, 'cache.name.user', 'Login User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4068, 4068, 'cache.name.sys_config', 'Parameters Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4069, 4069, 'cache.name.sys_dict', 'Dictionary Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4070, 4070, 'cache.name.captcha_codes', 'Captcha', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4071, 4071, 'cache.name.repeat_submit', 'Resubmit', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4072, 4072, 'cache.name.rate_limit', 'Limit Traffic', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4073, 4073, 'cache.name.pwd_err_cnt', 'Number of Password Errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4074, 4074, 'cache.name.ne_info', 'NE Info Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4075, 4075, 'cache.name.ne_data', 'NE Data Management', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4076, 4076, 'dictData.cdr_call_type.sms', 'SMS', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4077, 4077, 'dictData.cdr_sip_code.202', 'Accepted', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4078, 4078, 'dictData.cdr_sip_code.488', 'Not Aceptable Here', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4079, 4079, 'dictData.cdr_sip_code.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4080, 4080, 'log.operate.title.ws', 'WS Sessions', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4081, 4081, 'log.operate.title.neHost', 'NE Host', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4082, 4082, 'neHost.noData', 'There is no accessible host information data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4083, 4083, 'neHost.errKeyExists', 'Host information operation [{name}] failed, name already exists in the same group', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4084, 4084, 'neHost.errByHostInfo', 'Failed to connect to the host, please check the connection parameters and try again', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4085, 4085, 'dictType.ne_host_type', 'Network element host connection type', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4086, 4086, 'dictType.ne_host_groupId', 'Network element host grouping', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4087, 4087, 'dictType.ne_host_authMode', 'Network element host authentication mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4088, 4088, 'dictData.ne_host_type.ssh', 'SSH', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4089, 4089, 'dictData.ne_host_type.telnet', 'Telnet', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4090, 4090, 'dictData.ne_host_groupId.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4091, 4091, 'dictData.ne_host_groupId.1', 'Network Elements', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4092, 4092, 'dictData.ne_host_groupId.2', 'System', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4093, 4093, 'dictData.ne_host_authMode.0', 'Password Authentication', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4094, 4094, 'dictData.ne_host_authMode.1', 'Private key authentication', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4095, 4095, 'menu.tools.terminal', 'NE Host Terminal', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4096, 4096, 'menu.config.neHost', 'NE Host', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4097, 4097, 'menu.config.neHostCommand', 'NE Host CMD', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4098, 4098, 'log.operate.title.neHostCmd', 'NE Host CMD', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4099, 4099, 'neHostCmd.noData', 'No accessible host command data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4100, 4100, 'neHostCmd.errKeyExists', 'Host command operation [{name}] failed, name already exists in the same group', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4101, 4101, 'dictType.ne_host_cmd_groupId', 'Network element host command grouping', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4102, 4102, 'dictData.ne_host_cmd_groupId.0', 'Default', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4103, 4103, 'dictData.ne_host_cmd_groupId.1', 'Quick Commands', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4104, 4104, 'menu.config.neInfo', 'NE Info', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4105, 4105, 'log.operate.title.neInfo', 'NE Info', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4106, 4106, 'neInfo.noData', 'There is no accessible network element information data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4107, 4107, 'neInfo.errKeyExists', 'NE info operation [{key}] failed, identifier already exists under the same type', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4108, 4108, 'log.operate.title.imsCDR', 'IMS-CDR session', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4109, 4109, 'menu.dashboard.amfUE', 'UE', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4110, 4110, 'log.operate.title.amfUE', 'AMF-UE event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', 'Wait Sync', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4115, 4115, 'dictType.ne_info_status', 'NE Info State', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4116, 4116, 'menu.tools.neQuickSetup', 'NE Quick Setup', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4117, 4117, 'log.operate.title.neConfig', 'NE Parameter Configuration', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4118, 4118, 'menu.config.neLicense', 'NE License', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4119, 4119, 'log.operate.title.neLicense', 'NE License', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4120, 4120, 'menu.config.neSoftware', 'NE Software', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4121, 4121, 'log.operate.title.neSoftware', 'NE Software', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4122, 4122, 'menu.config.neVersion', 'Ne Version', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4123, 4123, 'log.operate.title.neVersion', 'Ne Version', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4124, 4124, 'dictType.ne_license_status', 'NE License Status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4125, 4125, 'ne_license_status.0', 'Invalid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4126, 4126, 'ne_license_status.1', 'Valid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4127, 4127, 'menu.dashboard.mocn', 'MOCN', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4128, 4128, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (3000, 3000, 'i18n', 'English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3001, 3001, 'hello', 'Hello', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3002, 3002, 'menu.system', 'System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3003, 3003, 'menu.monitor', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3004, 3004, 'menu.tools', 'Tools', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3005, 3005, 'menu.config', 'Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3006, 3006, 'menu.ueUser', 'UE', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3007, 3007, 'menu.systemRemark', 'System Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3008, 3008, 'menu.monitorRemark', 'System Monitor Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3009, 3009, 'menu.toolsRemark', 'System Tools Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3010, 3010, 'menu.configRemark', 'OMC Configuration Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3011, 3011, 'menu.ueUserRemark', 'Network Element Terminal Information Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3012, 3012, 'menu.security.user', 'User Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3013, 3013, 'menu.security.role', 'Role Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3014, 3014, 'menu.security.roleUser', 'Assigning Roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3015, 3015, 'menu.system.menu', 'Menu Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3016, 3016, 'menu.security.dept', 'Department Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3017, 3017, 'menu.security.post', 'Position Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3018, 3018, 'menu.system.dictType', 'Dictionary Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3019, 3019, 'menu.system.dictData', 'Dictionary Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3020, 3020, 'menu.system.paramSet', 'Parameter Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3021, 3021, 'menu.system.systemLog', 'System Log', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3022, 3022, 'menu.system.systemInfo', 'System Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3023, 3023, 'menu.system.cacheInfo', 'Cache Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3024, 3024, 'menu.system.cache', 'Cache Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3025, 3025, 'menu.security.onlineUser', 'Online Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3026, 3026, 'menu.system.job', 'Scheduling Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3027, 3027, 'menu.system.jobLog', 'Scheduling Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3028, 3028, 'menu.tools.help', 'Help Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3029, 3029, 'menu.log.operat', 'Operation logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3030, 3030, 'menu.log.login', 'Security logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3031, 3031, 'menu.security.userRemark', 'User Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3032, 3032, 'menu.security.roleRemark', 'Role Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3033, 3033, 'menu.security.roleUserRemark', 'Assign Roles Embedded Hidden Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3034, 3034, 'menu.system.menuRemark', 'Menu Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3035, 3035, 'menu.security.deptRemark', 'Department management menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3036, 3036, 'menu.security.postRemark', 'Job Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3037, 3037, 'menu.system.dictTypeRemark', 'Dictionary management menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3038, 3038, 'menu.system.dictDataRemark', 'Dictionary data embedded hidden menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3039, 3039, 'menu.system.paramSetRemark', 'Parameter setting menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3040, 3040, 'menu.system.systemLogRemark', 'System Log Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3041, 3041, 'menu.system.systemInfoRemark', 'System information menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3042, 3042, 'menu.system.cacheInfoRemark', 'Cache Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3043, 3043, 'menu.system.cacheRemark', 'Cache List Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3044, 3044, 'menu.security.onlineUserRemark', 'Online User Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3045, 3045, 'menu.system.jobRemark', 'Scheduling Tasks menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3046, 3046, 'menu.system.jobLogRemark', 'Scheduling Log Embedded Hidden Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3047, 3047, 'menu.tools.helpRemark', 'Help file menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3048, 3048, 'menu.log.operatRemark', 'Operation log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3049, 3049, 'menu.log.loginRemark', 'Login log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3050, 3050, 'menu.common.query', 'Inquiry', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3051, 3051, 'menu.common.add', 'Add', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3052, 3052, 'menu.common.edit', 'Modify', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3053, 3053, 'menu.common.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3054, 3054, 'menu.common.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3055, 3055, 'menu.common.import', 'Import', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3056, 3056, 'menu.common.reset', 'Reset', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3057, 3057, 'menu.common.unlock', 'Account Unlock', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3058, 3058, 'menu.forcedQuit.batch ', 'Batch Undo', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3059, 3059, 'menu.forcedQuit.single', 'Individual Forced Retirement', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3060, 3060, 'menu.ueUser.authUDM', 'UDM Authentication', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3061, 3061, 'menu.ueUser.subUDM', 'UDM Subscribers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3062, 3062, 'menu.ueUser.authUDMRemark', 'UDM Authentication Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3063, 3063, 'menu.ueUser.subUDMRemark', 'UDM Subscriber Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3064, 3064, 'menu.config.neManage', 'NE Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3065, 3065, 'menu.config.configNE', 'Parameter Configuration Original', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3066, 3066, 'menu.config.neManageRemark', 'Network Element Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3067, 3067, 'menu.config.configNERemark', 'Parameter Configuration Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3068, 3068, 'menu.config.backupManage', 'Backup Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3069, 3069, 'menu.config.softwareManage', 'Software Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3070, 3070, 'menu.ueUser.onlineIMS', 'IMS Online Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3071, 3071, 'menu.ueUser.onlineUE', 'UE Online Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3072, 3072, 'menu.ueUser.base5G', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3073, 3073, 'menu.trace', 'Trace', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'Trace Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'Signaling Analysis', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3076, 3076, 'menu.trace.pcap', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3077, 3077, 'menu.fault', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3078, 3078, 'menu.config.backupManageRemark', 'Backup Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3079, 3079, 'menu.config.softwareManageRemark', 'Software Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3080, 3080, 'menu.ueUser.onlineIMSRemark', 'IMS Online User Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3081, 3081, 'menu.ueUser.onlineUERemark', 'UE Online Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3082, 3082, 'menu.ueUser.base5GRemark', '5G Base Station Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3083, 3083, 'menu.traceRemark', 'Tracking Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3084, 3084, 'menu.trace.taskRemark', 'Tracking Task Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3086, 3086, 'menu.trace.pcapRemark', 'Signaling Capture Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3087, 3087, 'menu.faultRemark', 'Fault Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3088, 3088, 'menu.fault.active', 'Active Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3089, 3089, 'menu.log', 'Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3090, 3090, 'menu.log.operatOld', 'Operation Logs (old)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3091, 3091, 'menu.log.mml', 'MML Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3092, 3092, 'menu.log.alarm', 'Alarm Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3093, 3093, 'menu.log.securityOld', 'Security Logs (old)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3094, 3094, 'menu.log.forwarding', 'Alarm Forwarding Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3095, 3095, 'menu.log.set', 'Log Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3096, 3096, 'menu.monitor.sessionUser', 'User Sessions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3097, 3097, 'menu.fault.history', 'Historical Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3098, 3098, 'menu.fault.set', 'Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3099, 3099, 'menu.perf', 'Performance', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3100, 3100, 'menu.fault.activemRemark', 'Active Alarm Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3101, 3101, 'menu.logRemark', 'Log Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3102, 3102, 'menu.log.operatOldRemark', 'Operation log old layui menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3103, 3103, 'menu.log.mmlRemark', 'Operation MML Log', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3104, 3104, 'menu.log.alarmRemark', 'Alarm Log Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3105, 3105, 'menu.log.securityOldRemark', 'Security Log Old Layui Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3106, 3106, 'menu.log.forwardingRemark', 'Alarm forward log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3107, 3107, 'menu.log.setRemark', 'Log Settings menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3108, 3108, 'menu.monitor.sessionUserRemark', 'User Session Old Layui Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3109, 3109, 'menu.fault.historyRemark', 'Alarm history menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3110, 3110, 'menu.fault.setRemark', 'Fault General Setup Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3111, 3111, 'menu.perfRemark', 'Performance Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3112, 3112, 'menu.perf.task', 'Performance Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3113, 3113, 'menu.perf.data', 'Performance Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3114, 3114, 'menu.perf.report', 'Performance Reports', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3115, 3115, 'menu.perf.threshold', 'Performance Thresholds', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3116, 3116, 'menu.perf.kpi', 'Key Performance Indicators', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3117, 3117, 'menu.perf.customTarget', 'Custom Metrics', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3118, 3118, 'menu.perf.set', 'Performance General Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3119, 3119, 'menu.mml', 'MML', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3120, 3120, 'menu.mml.ne', 'NE Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3121, 3121, 'menu.mml.udm', 'UDM Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3122, 3122, 'menu.mml.set', 'MML Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3123, 3123, 'menu.mml.omc', 'OMC Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3124, 3124, 'menu.perf.taskRemark', 'Task Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3125, 3125, 'menu.perf.dataRemark', 'Performance Data Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3126, 3126, 'menu.perf.reportRemark', 'Performance Report Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3127, 3127, 'menu.perf.thresholdRemark', 'Performance Threshold Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3128, 3128, 'menu.perf.kpiRemark', 'Key Performance Indicator Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3129, 3129, 'menu.perf.customTargetRemark', 'Custom Metrics Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3130, 3130, 'menu.perf.setRemark', 'Performance General Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3131, 3131, 'menu.mmlRemark', 'MML Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3132, 3132, 'menu.mml.neRemark', 'Network Element Operations Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3133, 3133, 'menu.mml.udmRemark', 'Network Element UDM User Data Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3134, 3134, 'menu.mml.setRemark', 'MML Setup Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3135, 3135, 'menu.mml.omcRemark', 'OMC Operation Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3136, 3136, 'menu.config.licenseManage', 'License Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3137, 3137, 'menu.security', 'Security', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3138, 3138, 'menu.system.systemSet', 'System Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3139, 3139, 'menu.system.systemResource', 'System Resources', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3140, 3140, 'menu.config.configNEForm', 'Parameter Configuration Form', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3141, 3141, 'menu.config.configNETree', 'Parameter Configuration Tree', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3142, 3142, 'menu.config.configNETreeTable', 'Parameter Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3143, 3143, 'menu.config.licenseManageRemark', 'License Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3144, 3144, 'menu.securityRemark', 'Security Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3145, 3145, 'menu.system.systemSetRemark', 'System Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3146, 3146, 'menu.system.systemResourceRemark', 'System Resources cpu io network menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3147, 3147, 'menu.config.configNEFormRemark', 'Parameter Configuration Form Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3148, 3148, 'menu.config.configNETreeRemark', 'Parameter Configuration Tree Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3149, 3149, 'menu.config.configNETreeTableRemark', 'Configuring the TreeTable menu with parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3150, 3150, 'menu.noData', 'There is no accessible menu data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3151, 3151, 'menu.errNameExists', 'Failed to operate menu [{name}], menu name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3152, 3152, 'menu.errPathExists', 'Failed to operate menu [{name}], menu routing address already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3153, 3153, 'menu.errFramePath', 'Failed to manipulate menu [{name}], non-internal address should start with http(s)://', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3154, 3154, 'menu.errParentStatus', 'The parent menu is not enabled!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3155, 3155, 'menu.errHasChildUse', 'Operation menu [{name}] failed, number of submenus in use exists: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3156, 3156, 'menu.errHasRoleUse', 'Operation menu [{name}] failed, number of roles the menu has been assigned to: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3400, 3400, 'dictData.sex.un', 'Not selected', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3401, 3401, 'dictData.sex.male', 'Male', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3402, 3402, 'dictData.sex.female', 'Female', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3403, 3403, 'dictData.show', 'Show', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3404, 3404, 'dictData.hide', 'Hide', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3405, 3405, 'dictData.normal', 'Active', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3406, 3406, 'dictData.disable', 'Inactive', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3407, 3407, 'dictData.yes', 'Yes', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3408, 3408, 'dictData.no', 'No', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3409, 3409, 'dictData.success', 'Successful', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3410, 3410, 'dictData.fail', 'Failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3411, 3411, 'dictData.jobStatus.normal', 'Active', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3412, 3412, 'dictData.jobStatus.pause', 'Inactive', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3413, 3413, 'dictData.jobGroup.Default', 'Default', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3414, 3414, 'dictData.jobGroup.System', 'System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3415, 3415, 'dictData.operType.other', 'Other', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3416, 3416, 'dictData.operType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3417, 3417, 'dictData.operType.edit', 'Modify', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3418, 3418, 'dictData.operType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3419, 3419, 'dictData.operType.auth', 'Authorization', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3420, 3420, 'dictData.operType.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3421, 3421, 'dictData.operType.import', 'Import', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3422, 3422, 'dictData.operType.forced quit', 'Forced Retirement', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3423, 3423, 'dictData.operType.clear', 'Clear', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3424, 3424, 'dictData.trace.interface', 'Interface Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3425, 3425, 'dictData.trace.device', 'Module Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3426, 3426, 'dictData.trace.user', 'User Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3427, 3427, 'dictData.logType.download', 'Download', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3428, 3428, 'dictData.logType.activation', 'Activation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3429, 3429, 'dictData.logType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3430, 3430, 'dictData.logType.other', 'Other', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3431, 3431, 'dictData.logType.back', 'Rollback', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3432, 3432, 'dictData.logType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3433, 3433, 'dictData.logType.distribute', 'Assign', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3434, 3434, 'dictData.logType.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3435, 3435, 'dictData.logType.query', 'Query', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3436, 3436, 'dictData.logType.setup', 'Setup', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3437, 3437, 'dictData.logType.update', 'Update', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3438, 3438, 'dictData.logType.upload', 'Upload', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3439, 3439, 'dictData.logType.view', 'View', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3440, 3440, 'dictData.logType.login', 'Login', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3441, 3441, 'dictData.logType.logout', 'Logout', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3442, 3442, 'dictData.securityLogType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3443, 3443, 'dictData.securityLogType.update', 'Update', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3444, 3444, 'dictData.securityLogType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3445, 3445, 'dictData.securityLogType.lock', 'Locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3446, 3446, 'dictData.securityLogType.unlock', 'Unlock', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3447, 3447, 'dictData.securityLogType.reset', 'Reset', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3448, 3448, 'dictData.securityLogType.deactivate', 'Deactivate', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3449, 3449, 'dictData.jobSaveLog.no', 'No Record', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3450, 3450, 'dictData.jobSaveLog.yes', 'Recorded', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3451, 3451, 'dictData.neVersionStatus.upload', 'Uploaded', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3452, 3452, 'dictData.neVersionStatus.inactive', 'Inactivated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3453, 3453, 'dictData.neVersionStatus.active', 'Activated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3454, 3454, 'dictData.alarmStatus.history', 'Historical Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3455, 3455, 'dictData.alarmStatus.active', 'Active Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3456, 3456, 'dictData.export.code', 'Data Codes', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3457, 3457, 'dictData.export.sort', 'Data Sorting', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3458, 3458, 'dictData.export.label', 'Data Labeling', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3459, 3459, 'dictData.export.value', 'Data Key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3460, 3460, 'dictData.export.type', 'Data Sorting', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3461, 3461, 'dictData.export.status', 'Data Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3462, 3462, 'dictData.datascope.all', 'All data permissions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3463, 3463, 'dictData.datascope.custom', 'Customized Data Rights', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3464, 3464, 'dictData.datascope.dept', 'Departmental Data Permissions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3465, 3465, 'dictData.datascope.deptAndChid', 'Department and below', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3466, 3466, 'dictData.datascope.self', 'Personal data access only', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3467, 3467, 'dictData.noData', 'There is no accessible dictionary code data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3468, 3468, 'dictData.errLabelExists', 'Failed to manipulate data [{name}], tag name already exists under this dictionary type!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3500, 3500, 'dictType.sys_user_sex', 'User Gender', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3501, 3501, 'dictType.sys_show_hide', 'Menu Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3502, 3502, 'dictType.sys_normal_disable', 'System switches', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3503, 3503, 'dictType.sys_job_status', 'Task Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3504, 3504, 'dictType.sys_job_group', 'Task Grouping', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3505, 3505, 'dictType.sys_yes_no', 'System or not', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3506, 3506, 'dictType.sys_oper_type', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3507, 3507, 'dictType.sys_common_status', 'System Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3508, 3508, 'dictType.trace_type', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3509, 3509, 'dictType.operation_log_type', 'Operation Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3510, 3510, 'dictType.alarm_status', 'Alarm Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3511, 3511, 'dictType.security_log_type', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3512, 3512, 'dictType.ne_version_status', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3513, 3513, 'dictType.i18n_en', 'Multi-language - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3514, 3514, 'dictType.i18n_zh', 'Multi-language - Chinese', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3515, 3515, 'dictType.sys_user_sex_remark', 'User gender list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3516, 3516, 'dictType.sys_show_hide_remark', 'Menu Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3517, 3517, 'dictType.sys_normal_disable_remark', 'System switch list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3518, 3518, 'dictType.sys_job_status_remark', 'Task Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3519, 3519, 'dictType.sys_job_group_remark', 'Task Grouping List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3520, 3520, 'dictType.sys_yes_no_remark', 'System whether list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3521, 3521, 'dictType.sys_oper_type_remark', 'Operation type list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3522, 3522, 'dictType.sys_common_status_remark', 'Login Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3523, 3523, 'dictType.trace_type_remark', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3524, 3524, 'dictType.operation_log_type_remark', 'Operation log type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3525, 3525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3526, 3526, 'dictType.security_log_type_remark', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3527, 3527, 'dictType.ne_version_status_remark', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3528, 3528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3529, 3529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3530, 3530, 'dictType.export.id', 'Dictionary Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3531, 3531, 'dictType.export.name', 'Dictionary Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3532, 3532, 'dictType.export.type', 'Dictionary Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3533, 3533, 'dictType.export.status', 'Dictionary Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3534, 3534, 'dictType.sys_role_datascope', 'System Role Data Range', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3535, 3535, 'dictType.sys_role_datascope_remark', 'System Role Data Range Mapping', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3536, 3536, 'dictType.noData', 'There is no accessible dictionary type data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3537, 3537, 'dictType.errNameExists', 'Failed to manipulate dictionary [{name}], dictionary name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3538, 3538, 'dictType.errTypeExists', 'Failed to manipulate dictionary [{name}], dictionary type already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3600, 3600, 'dept.root', 'System Maintenance Department', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3601, 3601, 'dept.root.item1', 'Operation and Maintenance Department One', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3602, 3602, 'dept.noData', 'There is no accessible department data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3603, 3603, 'dept.errParentDelFlag', 'The parent department [{name}] has been deleted and is not allowed to be added.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3604, 3604, 'dept.errParentStatus', 'Parent department [{name}] is deactivated, additions are not allowed!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3605, 3605, 'dept.errNameExists', 'Manipulate department [{name}] failed, department name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3606, 3606, 'dept.errParentID', 'Failed to operate department [{name}], the parent department cannot be itself.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3607, 3607, 'dept.errHasChildUse', 'Operation failed, the department contains undeactivated sub-departments number: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3608, 3608, 'dept.errHasUserUse', 'Deletion is not allowed, number of users the department has been assigned to: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3630, 3630, 'config.sys.user.initPassword', 'User Management-Account Initial Password', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3631, 3631, 'config.sys.account.captchaEnabled', 'Account self-help-Certification code switch', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3632, 3632, 'config.sys.account.registerUser', 'Account self-service-Whether to enable the user registration function', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3633, 3633, 'config.sys.user.maxRetryCount', 'User Management-Maximum number of password errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3634, 3634, 'config.sys.user.lockTime', 'User Management-Password Lock Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3635, 3635, 'config.monitor.sysResource.storeDays', 'Monitor-System Resources-Data retention time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3636, 3636, 'config.sys.logo.type', 'System Settings-Logo Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3637, 3637, 'config.sys.logo.filePathIcon', 'System Settings-Logo File icon', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3638, 3638, 'config.sys.logo.filePathBrand', 'System Settings-Logo File Brand', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3639, 3639, 'config.sys.loginBackground', 'System Settings-Login Interface Background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3640, 3640, 'config.sys.title', 'System Settings-System Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3641, 3641, 'config.sys.copyright', 'System Settings-Copyright Notice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3642, 3642, 'config.sys.user.initPasswordRemark', 'Import user initialization password 123456', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3643, 3643, 'config.sys.account.captchaEnabledRemark', 'Whether to enable the verification code function (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3644, 3644, 'config.sys.account.registerUserRemark', 'Whether to enable the function of registered users (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3645, 3645, 'config.sys.user.maxRetryCountRemark', 'Maximum number of password errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3646, 3646, 'config.sys.user.lockTimeRemark', 'Password lock time in minutes (default 10 minutes)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3647, 3647, 'config.monitor.sysResource.storeDaysRemark', 'Monitor-System Resources-Data retention time, in days. According to the current date, delete the date data information that exceeds the retention time.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3648, 3648, 'config.sys.logo.typeRemark', 'Full image: brand\r\nSmall image: icon', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3649, 3649, 'config.sys.logo.filePathIconRemark', 'File support for web address images and file paths for internal uploads', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3650, 3650, 'config.sys.logo.filePathBrandRemark', 'File support for web address images and paths to internally uploaded files', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3651, 3651, 'config.sys.loginBackgroundRemark', 'The file supports web address images and internal upload file paths with a # in the default background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3652, 3652, 'config.sys.titleRemark', 'System name length limit of 11-digit string', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3653, 3653, 'config.sys.copyrightRemark', 'Footer fixing strip with copyright notice on the left side', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3654, 3654, 'config..export.id', 'Parameter Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3655, 3655, 'config..export.name', 'Parameter Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3656, 3656, 'config..export.key', 'Parameter key name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3657, 3657, 'config..export.value', 'Parameter Key Value', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3658, 3658, 'config..export.type', 'System builtin', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3659, 3659, 'config..export.remark', 'Parameter Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3660, 3660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3661, 3661, 'config.sys.copyrightValue', 'Copyright ©2023 AGrandTech', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3662, 3662, 'config.noData', 'No parameter configuration data is accessible!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3663, 3663, 'config.errKey', 'Invalid key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3664, 3664, 'config.errValueEq', 'Change state is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3665, 3665, 'config.errKeyExists', 'Failed to manipulate parameter configuration [{name}], parameter key name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3666, 3666, 'config.errDelete', 'Deletion of parameter configuration information failed!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3667, 3667, 'config.errType', 'The operation contains built-in parameters and deletion is prohibited!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3700, 3700, 'job.monitor_sys_resource', 'Monitor-System Resources', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3701, 3701, 'job.monitor_sys_resource_remark', 'System Resource CPU/IO/Netword Collection\r\ninterval unit minutes, average minute resource situation\r\nNote: Please pass the value of the parameter interva according to the time unit minutes of the cron expression', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3702, 3702, 'job.delExpiredNeBackup', 'Delete expired NE etc backup file', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3703, 3703, 'job.delExpiredNeBackupRemark', 'Delete expired network element etc backup file, pass in the parameter to keep the backup file for {duration} days, default is 60 days.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3704, 3704, 'job.deleteExpiredAlarmRecord', 'Delete expired historical alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3705, 3705, 'job.deleteExpiredAlarmRecordRemark', 'Delete expired history alarm records, pass in the parameter to keep the history alarm records for {duration} days.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3706, 3706, 'job.deleteExpiredKpiRecord', 'Delete expired KPI records', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3707, 3707, 'job.deleteExpiredKpiRecordRemark', 'KPI record retention for {duration} days', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3708, 3708, 'job.backupEtcFromNE', 'Network Element Configuration Auto Backup Task', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3709, 3709, 'job.backupEtcFromNERemark', 'Automatically backs up the configuration files in the network element\'s etc directory.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3710, 3710, 'job.export.jobID', 'Task Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3711, 3711, 'job.export.jobName', 'Task name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3712, 3712, 'job.export.jobGroupName', 'Task Group Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3713, 3713, 'job.export.invokeTarget', 'Call target', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3714, 3714, 'job.export.targetParams', 'Incoming Parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3715, 3715, 'job.export.cronExpression', 'cron expressions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3716, 3716, 'job.export.status', 'Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3717, 3717, 'job.export.remark', 'Remarks Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3718, 3718, 'job.export.jobLogID', 'Task log number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3719, 3719, 'job.export.jobLogStatus', 'Task log status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3720, 3720, 'job.export.jobLogTime', 'Task log time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3721, 3721, 'job.noData', 'There is no accessible scheduling task data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3722, 3722, 'job.errTargetParams', 'Failed to operate scheduling task [{name}] with incorrect task incoming parameter json string!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3723, 3723, 'job.errCronExpression', 'Scheduled task [{name}] failed with incorrect Cron expression!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3724, 3724, 'job.errJobExists', 'Failed to add a new task [{name}] to a scheduling task, same task name in the same task group', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3725, 3725, 'job.statusEq', 'The change state is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3750, 3750, 'role.admin', 'Super Administrator', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3751, 3751, 'role.adminAssign', 'Managers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3752, 3752, 'role.operator', 'Operators', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3753, 3753, 'role.monitor', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3754, 3754, 'role.vistor', 'General Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3755, 3755, 'role.adminRemark', 'Super Administrator, cannot modify or delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3756, 3756, 'role.adminAssignRemark', 'Administrators can perform any operation on the device', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3757, 3757, 'role.operatorRemark', 'Operation and maintenance personnel can read data from the device and configure the device, but cannot perform software upgrade operations on the device.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3758, 3758, 'role.monitorRemark', 'Monitoring personnel Can only read data from the device, but cannot make any settings on the device', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3759, 3759, 'role.vistorRemark', 'Ordinary users can only see system-related information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3760, 3760, 'role.export.id', 'Role ID', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3761, 3761, 'role.export.name', 'Role Name ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3762, 3762, 'role.export.key', 'Role Key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3763, 3763, 'role.export.sort', 'Role Order', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3764, 3764, 'role.export.dataScope', 'Role Data Range', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3765, 3765, 'role.export.status', 'Role Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3766, 3766, 'role.noData', 'There is no accessible role data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3767, 3767, 'role.statusEq', 'The change status is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3768, 3768, 'role.errNameExists', 'Manipulating role [{name}] failed, role name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3769, 3769, 'role.errKeyExists', 'Failed to manipulate role [{name}], role key already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3800, 3800, 'post.admin', 'Systems', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3801, 3801, 'post.operator', 'Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3802, 3802, 'post.monitor', 'Operation & Maintenance', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3803, 3803, 'post.visitor', 'Monitoring', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3804, 3804, 'post.export.id', 'Post ID ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3805, 3805, 'post.export.code', 'Position Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3806, 3806, 'post.export.name', 'Position Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3807, 3807, 'post.export.sort', 'Position Sort', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3808, 3808, 'post.export.status', 'Position Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3809, 3809, 'post.noData', 'There is no accessible post data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3810, 3810, 'post.errNameExists', 'Failed to manipulate post [{name}], post name already exists already exists', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3811, 3811, 'post.errCodeExists', 'Failed to manipulate role [{name}], role key already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3830, 3830, 'user.export.id', 'User ID', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3831, 3831, 'user.export.name', 'Login Account', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3832, 3832, 'user.export.nick', 'Nickname', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3833, 3833, 'user.export.email', 'E-Mail', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3834, 3834, 'user.export.phone', 'Cell phone number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3835, 3835, 'user.export.sex', 'Gender', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3836, 3836, 'user.export.status', 'User Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3837, 3837, 'user.export.deptID', 'Department number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3838, 3838, 'user.export.deptName', 'Department Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3839, 3839, 'user.export.deptLeader', 'Department Head', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3840, 3840, 'user.export.loginIP', 'User Login IP', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3841, 3841, 'user.export.loginDate', 'User Login Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3842, 3842, 'user.noData', 'No accessible user data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3843, 3843, 'user.statusEq', 'The change status is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3844, 3844, 'user.errPasswdOld', 'Change password failed, old password is wrong', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3845, 3845, 'user.errPasswdEqOld', 'New password cannot be the same as the old one', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3846, 3846, 'user.errPasswd', 'Login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3847, 3847, 'user.errEmailFormat', 'Failed to operate user [{name}], mailbox format error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3848, 3848, 'user.errEmailExists', 'Failed to operate user [{name}], mailbox already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3849, 3849, 'user.errPhoneFormat', 'Failed to operate user [{name}], cell phone number format is wrong.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3850, 3850, 'user.errPhoneExists', 'Failed to operate user [{name}], cell phone number already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3851, 3851, 'user.errNameExists', 'Failed to operate user [{name}], login account already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3852, 3852, 'user.import.mustItem', 'Required list item in form, {text}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3853, 3853, 'user.import.phoneExist', 'User ID: {id} cell phone number {phone} Existing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3854, 3854, 'user.import.phoneFormat', 'User ID: {id} cell phone number {phone} Wrong format', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3855, 3855, 'user.import.emailExist', 'User ID: {id} User Email: {email} Existing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3856, 3856, 'user.import.emailFormat', 'User ID: {id} Email: {email} Wrong Format', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3857, 3857, 'user.import.success', 'User ID:{id} Login name:{name} Imported successfully!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3858, 3858, 'user.import.fail', 'User ID: {id} Login name: {name} Import failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3859, 3859, 'user.import.successUpdate', 'User ID: {id} Login name: {name} Update success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3860, 3860, 'user.import.failUpdate', 'User ID: {id} Login Name: {name} Update Failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3861, 3861, 'user.import.failTip', 'Sorry, the import failed! A total of {num} entries were not formatted correctly, the error is below:', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3862, 3862, 'user.import.successTip', 'Congratulations, the data has been imported successfully! There are {num} entries with the following data:', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3900, 3900, 'app.common.err403', 'Unauthorized access {method} {requestURI}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3901, 3901, 'app.common.err401', 'Invalid authorization', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3902, 3902, 'app.common.err400', 'Parameter error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3903, 3903, 'app.common.exportEmpty', 'Export data record is empty', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3904, 3904, 'app.common.errOperateAdmin', 'Built-in users are not allowed to operate', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3905, 3905, 'app.common.errOperateRole', 'Built-in roles are not allowed to be operated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3906, 3906, 'app.common.deleteSuccess', 'Deleted successfully: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3907, 3907, 'app.common.loginSuccess', 'Login Success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3908, 3908, 'app.common.logoutSuccess', 'Logout Successful', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3909, 3909, 'app.common.errUnlock', 'The user is not locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3910, 3910, 'app.common.noLoginUser', 'Invalid login user information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3911, 3911, 'app.common.rateLimitTip', 'Access too often, please try again later', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3912, 3912, 'log.operate.export.id', 'Operation Number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3913, 3913, 'log.operate.export.title', 'Module Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3914, 3914, 'log.operate.export.businessType', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3915, 3915, 'log.operate.export.method', 'Operation Method', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3916, 3916, 'log.operate.export.requestMethod', 'Request Method ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3917, 3917, 'log.operate.export.operatorType', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3918, 3918, 'log.operate.export.operName', 'Operator', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3919, 3919, 'log.operate.export.deptName', 'Operator\'s department name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3920, 3920, 'log.operate.export.url', 'Request Link Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3921, 3921, 'log.operate.export.ip', 'Requesting Host ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3922, 3922, 'log.operate.export.location', 'Request Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3923, 3923, 'log.operate.export.param', 'Request Parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3924, 3924, 'log.operate.export.msg', 'Operation Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3925, 3925, 'log.operate.export.status', 'Operation status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3926, 3926, 'log.operate.export.costTime', 'Consumption time (ms)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3927, 3927, 'log.operate.export.operTime', 'Operation time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3928, 3928, 'log.login.export.id', 'Record number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3929, 3929, 'log.login.export.userName', 'Login Account', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3930, 3930, 'log.login.export.status', 'Login Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3931, 3931, 'log.login.export.ip', 'Login Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3932, 3932, 'log.login.export.location', 'Login Location', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3933, 3933, 'log.login.export.browser', 'Browser', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3934, 3934, 'log.login.export.os', 'Operating System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3935, 3935, 'log.login.export.msg', 'Login Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3936, 3936, 'log.login.export.time', 'Login Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3937, 3937, 'trace.tcpdump.noData', 'Can\'t find {type} {id} information of the corresponding network element.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3938, 3938, 'register.errUsername', 'The account number cannot start with a number, but can contain upper and lower case letters, numbers, and not less than 5 digits.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3939, 3939, 'register.errPasswd', 'The password must contain at least 6 upper and lower case letters, numbers, and special symbols.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3940, 3940, 'register.errPasswdNotEq', 'User confirms password inconsistency', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3941, 3941, 'register.success', 'Successful registration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3942, 3942, 'register.successMsg', '{name} Register Successful {id}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3943, 3943, 'log.operate.title.sysJobLog', 'Scheduling Task Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3944, 3944, 'log.operate.title.sysJob', 'Scheduling Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3945, 3945, 'log.operate.title.tcpdump', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3946, 3946, 'log.operate.title.sysConfig', 'Parameter Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3947, 3947, 'log.operate.title.sysDept', 'Sector', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3948, 3948, 'log.operate.title.sysDictData', 'Dictionary Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3949, 3949, 'log.operate.title.sysDictType', 'Dictionary type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3950, 3950, 'log.operate.title.sysMenu', 'Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3951, 3951, 'log.operate.title.sysPost', 'Positions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3952, 3952, 'log.operate.title.sysProfile', 'Personal Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3953, 3953, 'log.operate.title.sysProfileAvatar', 'Personal avatar', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3954, 3954, 'log.operate.title.sysRole', 'Roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3955, 3955, 'log.operate.title.sysUser', 'User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3956, 3956, 'log.operate.title.sysLogOper', 'Operation Logging', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3957, 3957, 'log.operate.title.sysLogLogin', 'Operation Logging', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3958, 3958, 'login.errNameOrPasswd', 'User does not exist or password is wrong', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3959, 3959, 'login.errDelFlag', 'Sorry, your account has been deleted', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3960, 3960, 'login.errStatus', 'Sorry, your account has been disabled', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3961, 3961, 'login.errRetryPasswd', 'Password was entered incorrectly several times, account has been locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3962, 3962, 'captcha.err', 'Captcha Error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3963, 3963, 'captcha.errValid', 'Captcha is invalid', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3964, 3964, 'app.common.noUaOsBrowser', 'Unknown Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3965, 3965, 'app.common.noIPregion', 'Intranet', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3966, 3966, 'app.common.unknown', 'Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3967, 3967, 'app.common.noNEInfo', 'No matching network element information found', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3968, 3968, 'ne.udm.errImportUserAuthFileFormat', 'Please upload a file in the format of. csv or. txt. English comma separated txt format: imsi, ki, algo, amf, opc', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3969, 3969, 'ne.udm.errExportType', 'Export file types support CSV and txt', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3970, 3970, 'ne.udm.errImportUserSubFileFormat', 'Please upload files in .csv or .txt format. English comma-separated txt format: imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3971, 3971, 'log.operate.title.udmAuth', 'UDM Authentication User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3972, 3972, 'log.operate.title.udmSub', 'UDM Subscribers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3973, 3973, 'dictType.active_alarm_type', 'Event Alarm Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3974, 3974, 'dictType.active_alarm_type_remark', 'List of Active Alarm Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3975, 3975, 'dictData.active_alarm_type.communication', 'Communication Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3976, 3976, 'dictData.active_alarm_type.equipment', 'Equipment Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3977, 3977, 'dictData.active_alarm_type.processing', 'Processing Failure Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3978, 3978, 'dictData.active_alarm_type.environmental', 'Environmental Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3979, 3979, 'dictData.active_alarm_type.qualityOfService', 'Quality of Service Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3980, 3980, 'dictType.active_clear_type', 'Alarm Clearing Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3981, 3981, 'dictType.active_clear_type_remark', 'List of Alarm Clearing Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3982, 3982, 'dictData.active_clear_type.notCleared', 'Not cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3983, 3983, 'dictData.active_clear_type.hand', 'Manually cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3984, 3984, 'dictData.active_clear_type.auto', 'Automatically cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3985, 3985, 'dictType.active_ack_state', 'Alarm Acknowledgement Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3986, 3986, 'dictType.active_ack_state_remark', 'Alarm Acknowledgement Type List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3987, 3987, 'dictData.active_ack_state.unconfirmed', 'Not Confirm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3988, 3988, 'dictData.active_ack_state.confirmed', 'Confirm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3989, 3989, 'dictType.active_alarm_severity', 'Severity', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3990, 3990, 'dictType.active_alarm_severity_remark', 'Severity List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3991, 3991, 'dictData.active_alarm_severity.critical', 'Critical', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3992, 3992, 'dictData.active_alarm_severity.major', 'Major', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3993, 3993, 'dictData.active_alarm_severity.minor', 'Minor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3994, 3994, 'dictData.active_alarm_severity.warning', 'Warning', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3995, 3995, 'dictData.active_alarm_severity.event', 'Event', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3996, 3996, 'config.sys.officialUrl', 'System Settings - Official Website Links', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3997, 3997, 'config.sys.helpDoc', 'System Settings-System Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3998, 3998, 'config.sys.officialUrlRemark', 'Default no address with # sign', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3999, 3999, 'config.sys.helpDocRemark', 'Static file directory address, use {language} to distinguish language files', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4000, 4000, 'log.operate.title.neAction', 'Network Element Processing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4001, 4001, 'log.operate.title.helpDoc', 'System Usage Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4002, 4002, 'menu.ueUser.n3iwf', 'N3IWF Online User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4003, 4003, 'menu.ueUser.pcf', 'User PCC Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4004, 4004, 'menu.system.user.editRole', 'Modifying user roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4005, 4005, 'config.sys.i18nOpen', 'Internationalization Switching', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4006, 4006, 'config.sys.i18nDefault', 'Internationalization Default Language', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4007, 4007, 'user.export.role', 'UserRole', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4008, 4008, 'menu.system.setting.i18n', 'Internationalization Switch', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4009, 4009, 'menu.system.setting.i18nRemark', 'Internationalized multilingual switching options', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4010, 4010, 'dictType.index_status', 'Home Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4011, 4011, 'dictType.index_status_remark', 'Network element status colors on the home page', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4012, 4012, 'dictType.index_status.normal', 'Normal', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4013, 4013, 'dictType.index_status.abnormal', 'Abnormal', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4014, 4014, 'menu.log.neFile', 'NE Log File', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4015, 4015, 'job.deleteExpiredNeStateRecord', 'Delete Expired NE State Record', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4016, 4016, 'job.deleteExpiredNeStateRecordRemark', 'Delete expired NE state records regularly and keep them for {duration} days by default.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4017, 4017, 'job.getStateFromNE', 'Get state from NEs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4018, 4018, 'job.getStateFromNERemark', 'Get state information from all NEs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4019, 4019, 'job.genNeStateAlarm', 'Network Element Health Check', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4020, 4020, 'job.genNeStateAlarmRemark', 'Health status inspection of network elements, generating alarms in case of abnormalities.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4021, 4021, 'menu.neUser.nssf', 'NSSF Subscription Info', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4022, 4022, 'menu.neUser.nssfAmf', 'NSSF Available AMFs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4023, 4023, 'menu.monitor.topology', 'Topology Info', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4024, 4024, 'menu.monitor.topologyBuild', 'Topological Graph Build', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4025, 4025, 'log.operate.title.chartGraph', 'Topological Graph', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 1, NULL); +REPLACE INTO `sys_dict_data` VALUES (4026, 4026, 'menu.monitor.topologyArchitecture', 'NE System Topology', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4027, 4027, 'menu.alarm', 'Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4028, 4028, 'menu.topology', 'Topology', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4029, 4029, 'config.sys.lockTime', 'System Settings - Screen Lock Timeout Duration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4030, 4030, 'config.sys.lockTimeRemark', 'Screen lock timeout duration when idle, in seconds.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4031, 4031, 'sys.account.captchaType', 'Account Self Service - Captcha Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4032, 4032, 'sys.account.captchaTypeRemark', 'Using CAPTCHA types (math numeric calculation, char character validation)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4033, 4033, 'menu.dashboard', 'Dashboard', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4034, 4034, 'menu.dashboard.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4035, 4035, 'menu.dashboard.cdr', 'IMS CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4036, 4036, 'dictType.cdr_sip_code', 'CDR SIP Response Code Category Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4037, 4037, 'dictType.cdr_call_type', 'CDR Call Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4038, 4038, 'dictType.ue_auth_code', 'UE Event Authentication Code Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4039, 4039, 'dictType.ue_event_type', 'UE Event Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4040, 4040, 'dictData.cdr_sip_code.200', 'Normal Cleaning', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4041, 4041, 'dictData.cdr_sip_code.403', 'Banned', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4042, 4042, 'dictData.cdr_sip_code.408', 'Request Timeout', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4043, 4043, 'dictData.cdr_sip_code.500', 'Internal Server Error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4044, 4044, 'dictData.cdr_call_type.audio', 'Voice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4045, 4045, 'dictData.cdr_call_type.video', 'Video', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4046, 4046, 'dictData.ue_auth_code.200', 'Success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4047, 4047, 'dictData.ue_auth_code.001', 'Network Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4048, 4048, 'dictData.ue_auth_code.002', 'Air Interface Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4049, 4049, 'dictData.ue_auth_code.003', 'MAC Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4050, 4050, 'dictData.ue_auth_code.004', 'Synchronization failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4051, 4051, 'dictData.ue_auth_code.005', 'Non-5G Authentication Not Accepted', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4052, 4052, 'dictData.ue_auth_code.006', 'Response Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4053, 4053, 'dictData.ue_auth_code.007', 'Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4054, 4054, 'dictData.ue_event_type.auth', 'Authentication', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4055, 4055, 'dictData.ue_event_type.detach', 'Detach', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4056, 4056, 'dictData.ue_event_type.state', 'CM Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4057, 4057, 'dictType.ue_event_cm_state', 'UE Event CM Status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4058, 4058, 'dictData.ue_event_cm_state.connected', 'Connected', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4059, 4059, 'dictData.ue_event_cm_state.idle', 'Idle', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4060, 4060, 'dictData.ue_event_cm_state.inactive', 'Inactive', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4061, 4061, 'dictData.cdr_sip_code.404', 'Not Found', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4062, 4062, 'dictData.cdr_sip_code.487', 'Request Terminated', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4063, 4063, 'dictData.cdr_sip_code.503', 'Service Unavailable', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4064, 4064, 'dictData.cdr_sip_code.504', 'Server Time Out', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4065, 4065, 'dictData.cdr_sip_code.603', 'Decline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4066, 4066, 'dictData.cdr_sip_code.606', 'Not Acceptable', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4067, 4067, 'cache.name.user', 'Login User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4068, 4068, 'cache.name.sys_config', 'Parameters Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4069, 4069, 'cache.name.sys_dict', 'Dictionary Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4070, 4070, 'cache.name.captcha_codes', 'Captcha', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4071, 4071, 'cache.name.repeat_submit', 'Resubmit', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4072, 4072, 'cache.name.rate_limit', 'Limit Traffic', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4073, 4073, 'cache.name.pwd_err_cnt', 'Number of Password Errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4074, 4074, 'cache.name.ne_info', 'NE Info Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4075, 4075, 'cache.name.ne_data', 'NE Data Management', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4076, 4076, 'dictData.cdr_call_type.sms', 'SMS', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4077, 4077, 'dictData.cdr_sip_code.202', 'Accepted', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4078, 4078, 'dictData.cdr_sip_code.488', 'Not Aceptable Here', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4079, 4079, 'dictData.cdr_sip_code.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4080, 4080, 'log.operate.title.ws', 'WS Sessions', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4081, 4081, 'log.operate.title.neHost', 'NE Host', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4082, 4082, 'neHost.noData', 'There is no accessible host information data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4083, 4083, 'neHost.errKeyExists', 'Host information operation [{name}] failed, name already exists in the same group', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4084, 4084, 'neHost.errByHostInfo', 'Failed to connect to the host, please check the connection parameters and try again', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4085, 4085, 'dictType.ne_host_type', 'Network element host connection type', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4086, 4086, 'dictType.ne_host_groupId', 'Network element host grouping', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4087, 4087, 'dictType.ne_host_authMode', 'Network element host authentication mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4088, 4088, 'dictData.ne_host_type.ssh', 'SSH', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4089, 4089, 'dictData.ne_host_type.telnet', 'Telnet', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4090, 4090, 'dictData.ne_host_groupId.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4091, 4091, 'dictData.ne_host_groupId.1', 'Network Elements', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4092, 4092, 'dictData.ne_host_groupId.2', 'System', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4093, 4093, 'dictData.ne_host_authMode.0', 'Password Authentication', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4094, 4094, 'dictData.ne_host_authMode.1', 'Private key authentication', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4095, 4095, 'menu.tools.terminal', 'NE Host Terminal', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4096, 4096, 'menu.config.neHost', 'NE Host', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4097, 4097, 'menu.config.neHostCommand', 'NE Host CMD', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4098, 4098, 'log.operate.title.neHostCmd', 'NE Host CMD', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4099, 4099, 'neHostCmd.noData', 'No accessible host command data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4100, 4100, 'neHostCmd.errKeyExists', 'Host command operation [{name}] failed, name already exists in the same group', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4101, 4101, 'dictType.ne_host_cmd_groupId', 'Network element host command grouping', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4102, 4102, 'dictData.ne_host_cmd_groupId.0', 'Default', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4103, 4103, 'dictData.ne_host_cmd_groupId.1', 'Quick Commands', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4104, 4104, 'menu.config.neInfo', 'NE Info', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4105, 4105, 'log.operate.title.neInfo', 'NE Info', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4106, 4106, 'neInfo.noData', 'There is no accessible network element information data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4107, 4107, 'neInfo.errKeyExists', 'NE info operation [{key}] failed, identifier already exists under the same type', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4108, 4108, 'log.operate.title.imsCDR', 'IMS-CDR session', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4109, 4109, 'menu.dashboard.amfUE', 'UE Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4110, 4110, 'log.operate.title.amfUE', 'AMF-UE event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', 'Sync Config', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4115, 4115, 'dictType.ne_info_status', 'NE Info State', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4116, 4116, 'menu.tools.neQuickSetup', 'NE Quick Setup', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4117, 4117, 'log.operate.title.neConfig', 'NE Parameter Configuration', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4118, 4118, 'menu.config.neLicense', 'NE License', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4119, 4119, 'log.operate.title.neLicense', 'NE License', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4120, 4120, 'menu.config.neSoftware', 'NE Software', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4121, 4121, 'log.operate.title.neSoftware', 'NE Software', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4122, 4122, 'menu.config.neVersion', 'Ne Version', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4123, 4123, 'log.operate.title.neVersion', 'Ne Version', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4124, 4124, 'dictType.ne_license_status', 'NE License Status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4125, 4125, 'ne_license_status.0', 'Invalid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4126, 4126, 'ne_license_status.1', 'Valid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4127, 4127, 'menu.dashboard.mocn', 'MOCN', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4128, 4128, 'menu.monitor.cdr', 'CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4130, 4130, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_menu.sql b/database/upgrade/upg_sys_menu.sql index 068d0a73..f3097974 100644 --- a/database/upgrade/upg_sys_menu.sql +++ b/database/upgrade/upg_sys_menu.sql @@ -447,5 +447,514 @@ SET WHERE `menu_id` = 2105; +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2142; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2143; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.tools.help', + `parent_id` = 3, + `menu_sort` = 1, + `path` = 'help', + `component` = 'tool/help/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'tool:help:list', + `icon` = '#', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'supervisor', + `update_time` = 1708480983482, + `remark` = 'menu.tools.helpRemark' +WHERE + `menu_id` = 118; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.ueUser.authUDM', + `parent_id` = 5, + `menu_sort` = 1, + `path` = 'auth', + `component` = 'neUser/auth/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'neUser:auth:index', + `icon` = 'icon-xiangmuchengyuan', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.ueUser.authUDMRemark' +WHERE + `menu_id` = 2009; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.ueUser.subUDM', + `parent_id` = 5, + `menu_sort` = 2, + `path` = 'sub', + `component` = 'neUser/sub/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'neUser:sub:index', + `icon` = 'icon-xiangmuchengyuan', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.ueUser.subUDMRemark' +WHERE + `menu_id` = 2010; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.config.neManage', + `parent_id` = 4, + `menu_sort` = 1, + `path` = 'neManage', + `component` = 'configManage/neManage/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'configManage:neManage:index', + `icon` = 'icon-biaoqing', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.config.neManageRemark' +WHERE + `menu_id` = 2075; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.config.configNE', + `parent_id` = 4, + `menu_sort` = 2, + `path` = 'configParam', + `component` = 'configManage/configParam/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'configManage:configParam:index', + `icon` = 'icon-piliang', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.config.configNERemark' +WHERE + `menu_id` = 2076; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.config.backupManage', + `parent_id` = 4, + `menu_sort` = 3, + `path` = 'backupManage', + `component` = 'configManage/backupManage/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'configManage:backupManage:index', + `icon` = 'icon-soutubiao', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.config.backupManageRemark' +WHERE + `menu_id` = 2078; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.config.softwareManage', + `parent_id` = 4, + `menu_sort` = 4, + `path` = 'softwareManage', + `component` = 'configManage/softwareManage/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'configManage:softwareManage:index', + `icon` = 'icon-huidingbu', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.config.softwareManageRemark' +WHERE + `menu_id` = 2079; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.ueUser.base5G', + `parent_id` = 5, + `menu_sort` = 7, + `path` = 'base5G', + `component` = 'neUser/base5G/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'neUser:base5G:index', + `icon` = 'icon-paixu', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.ueUser.base5GRemark' +WHERE + `menu_id` = 2082; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.trace.task', + `parent_id` = 2083, + `menu_sort` = 1, + `path` = 'task', + `component` = 'traceManage/task/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'traceManage:task:index', + `icon` = 'icon-chexiao', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'admin', + `update_time` = 1712807894783, + `remark` = 'menu.trace.taskRemark' +WHERE + `menu_id` = 2084; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.trace.analysis', + `parent_id` = 2083, + `menu_sort` = 2, + `path` = 'analysis', + `component` = 'traceManage/analysis/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'traceManage:analysis:index', + `icon` = 'icon-gongnengjieshao', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'supervisor', + `update_time` = 1712751454668, + `remark` = 'menu.trace.analysisRemark' +WHERE + `menu_id` = 2085; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.log.alarm', + `parent_id` = 2089, + `menu_sort` = 3, + `path` = 'alarm-log', + `component` = 'logManage/alarm/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'logManage:alarm:index', + `icon` = 'icon-fuzhidaima', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.log.alarmRemark' +WHERE + `menu_id` = 2092; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.perf.task', + `parent_id` = 2099, + `menu_sort` = 1, + `path` = 'taskManage', + `component` = 'perfManage/taskManage/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'perfManage:taskManage:index', + `icon` = 'icon-wofaqi', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'admin', + `update_time` = 1712807912947, + `remark` = 'menu.perf.taskRemark' +WHERE + `menu_id` = 2100; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.perf.data', + `parent_id` = 2099, + `menu_sort` = 2, + `path` = 'perfData', + `component` = 'perfManage/perfData/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'perfManage:perfData:index', + `icon` = 'icon-soutubiao', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'admin', + `update_time` = 1712807920148, + `remark` = 'menu.perf.dataRemark' +WHERE + `menu_id` = 2101; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.perf.threshold', + `parent_id` = 2099, + `menu_sort` = 4, + `path` = 'perfThreshold', + `component` = 'perfManage/perfThreshold/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'perfManage:perfThreshold:index', + `icon` = 'icon-zhuanrang', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'admin', + `update_time` = 1712807935215, + `remark` = 'menu.perf.thresholdRemark' +WHERE + `menu_id` = 2103; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.perf.customTarget', + `parent_id` = 2099, + `menu_sort` = 6, + `path` = 'customTarget', + `component` = 'perfManage/customTarget/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '0', + `status` = '0', + `perms` = 'perfManage:customTarget:index', + `icon` = 'icon-fanhui1', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'admin', + `update_time` = 1712807948673, + `remark` = 'menu.perf.customTargetRemark' +WHERE + `menu_id` = 2105; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.mml.set', + `parent_id` = 2107, + `menu_sort` = 4, + `path` = 'mmlSet', + `component` = 'mmlManage/mmlSet/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'mmlManage:mmlSet:index', + `icon` = 'icon-wofaqi', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.mml.setRemark' +WHERE + `menu_id` = 2110; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.system.setting.i18n', + `parent_id` = 2114, + `menu_sort` = 1, + `path` = NULL, + `component` = NULL, + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'B', + `visible` = '1', + `status` = '1', + `perms` = 'system:setting:i18n', + `icon` = '#', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'supervisor', + `update_time` = 1700000000000, + `remark` = 'menu.system.setting.i18nRemark' +WHERE + `menu_id` = 2122; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.dashboard.cdr', + `parent_id` = 2140, + `menu_sort` = 40, + `path` = 'imsCDR', + `component` = 'dashboard/imsCDR/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'dashboard:cdr:index', + `icon` = 'icon-paixu', + `create_by` = 'supervisor', + `create_time` = 1705550000000, + `update_by` = 'supervisor', + `update_time` = 1712751038982, + `remark` = '' +WHERE + `menu_id` = 2133; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.config.neHost', + `parent_id` = 4, + `menu_sort` = 15, + `path` = 'neHost', + `component` = 'ne/neHost/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'ne:neHost:list', + `icon` = 'icon-fuzhidaima', + `create_by` = 'supervisor', + `create_time` = 1708583596871, + `update_by` = '', + `update_time` = 0, + `remark` = '' +WHERE + `menu_id` = 2135; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.dashboard.amfUE', + `parent_id` = 2141, + `menu_sort` = 1, + `path` = 'amfUE', + `component` = 'dashboard/amfUE/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'dashboard:amfUE:index', + `icon` = 'icon-paixu', + `create_by` = 'supervisor', + `create_time` = 1705550000000, + `update_by` = 'supervisor', + `update_time` = 1711354049893, + `remark` = '' +WHERE + `menu_id` = 2138; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.logs.log', + `parent_id` = 2089, + `menu_sort` = 0, + `path` = 'log', + `component` = '', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'D', + `visible` = '0', + `status` = '1', + `perms` = '', + `icon` = 'icon-wenjian', + `create_by` = 'supervisor', + `create_time` = 1711352535855, + `update_by` = 'supervisor', + `update_time` = 1712751078161, + `remark` = '' +WHERE + `menu_id` = 2139; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.monitor.cdr', + `parent_id` = 2087, + `menu_sort` = 40, + `path` = 'cdr', + `component` = '', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'D', + `visible` = '1', + `status` = '1', + `perms` = '', + `icon` = 'icon-tubiaoku', + `create_by` = 'supervisor', + `create_time` = 1711352709786, + `update_by` = 'supervisor', + `update_time` = 1712751135878, + `remark` = '' +WHERE + `menu_id` = 2140; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.monitor.event', + `parent_id` = 2087, + `menu_sort` = 50, + `path` = 'event', + `component` = '', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'D', + `visible` = '1', + `status` = '1', + `perms` = '', + `icon` = 'icon-gengduo', + `create_by` = 'supervisor', + `create_time` = 1711352768797, + `update_by` = 'supervisor', + `update_time` = 1712751125648, + `remark` = '' +WHERE + `menu_id` = 2141; SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_role_menu.sql b/database/upgrade/upg_sys_role_menu.sql index c1fdf0c7..d917190d 100644 --- a/database/upgrade/upg_sys_role_menu.sql +++ b/database/upgrade/upg_sys_role_menu.sql @@ -264,4 +264,92 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (100, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (100, 100); INSERT IGNORE INTO `sys_role_menu` VALUES (100, 1000); +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 106; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 107; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 113; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 1025; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 1026; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 1027; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 1028; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 1029; + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (2, 2133); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (2, 2138); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (2, 2140); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (2, 2141); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (3, 2133); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (3, 2138); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (3, 2140); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (3, 2141); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (4, 2133); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (4, 2138); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (4, 2140); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (4, 2141); + SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgvue3/upg_sys_dict_data1_i18n_zh.sql b/database/upgvue3/upg_sys_dict_data1_i18n_zh.sql index 6f6cb515..be60c8bd 100644 --- a/database/upgvue3/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgvue3/upg_sys_dict_data1_i18n_zh.sql @@ -17,612 +17,645 @@ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -INSERT IGNORE INTO `sys_dict_data` VALUES (1000, 1000, 'i18n', '中文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1001, 1001, 'hello', '你好', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1002, 1002, 'menu.system', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1003, 1003, 'menu.monitor', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1004, 1004, 'menu.tools', '工具', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1005, 1005, 'menu.config', '配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1006, 1006, 'menu.ueUser', '终端', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1007, 1007, 'menu.systemRemark', '系统管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1008, 1008, 'menu.monitorRemark', '系统监控目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1009, 1009, 'menu.toolsRemark', '系统工具目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1010, 1010, 'menu.configRemark', 'OMC配置管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1011, 1011, 'menu.ueUserRemark', '网元终端信息目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1012, 1012, 'menu.security.user', '用户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1013, 1013, 'menu.security.role', '角色管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1014, 1014, 'menu.security.roleUser', '分配角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1015, 1015, 'menu.system.menu', '菜单管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1016, 1016, 'menu.security.dept', '部门管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1017, 1017, 'menu.security.post', '岗位管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1018, 1018, 'menu.system.dictType', '字典管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1019, 1019, 'menu.system.dictData', '字典数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1020, 1020, 'menu.system.paramSet', '参数设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1021, 1021, 'menu.system.systemLog', '系统日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1022, 1022, 'menu.system.systemInfo', '系统信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1023, 1023, 'menu.system.cacheInfo', '缓存信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1024, 1024, 'menu.system.cache', '缓存管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1025, 1025, 'menu.security.onlineUser', '在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1026, 1026, 'menu.system.job', '调度任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1027, 1027, 'menu.system.jobLog', '调度日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1028, 1028, 'menu.tools.help', '帮助文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1029, 1029, 'menu.log.operat', '操作日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1030, 1030, 'menu.log.login', '安全日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1031, 1031, 'menu.security.userRemark', '用户管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1032, 1032, 'menu.security.roleRemark', '角色管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1033, 1033, 'menu.security.roleUserRemark', '分配角色内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1034, 1034, 'menu.system.menuRemark', '菜单管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1035, 1035, 'menu.security.deptRemark', '部门管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1036, 1036, 'menu.security.postRemark', '岗位管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1037, 1037, 'menu.system.dictTypeRemark', '字典管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1038, 1038, 'menu.system.dictDataRemark', '字典数据内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1039, 1039, 'menu.system.paramSetRemark', '参数设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1040, 1040, 'menu.system.systemLogRemark', '系统日志目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1041, 1041, 'menu.system.systemInfoRemark', '系统信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1042, 1042, 'menu.system.cacheInfoRemark', '缓存信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1043, 1043, 'menu.system.cacheRemark', '缓存列表菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1044, 1044, 'menu.security.onlineUserRemark', '在线用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1045, 1045, 'menu.system.jobRemark', '调度任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1046, 1046, 'menu.system.jobLogRemark', '调度日志内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1047, 1047, 'menu.tools.helpRemark', '帮助文档菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1048, 1048, 'menu.log.operatRemark', '操作日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1049, 1049, 'menu.log.loginRemark', '登录日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1050, 1050, 'menu.common.query', '查询', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1051, 1051, 'menu.common.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1052, 1052, 'menu.common.edit', '修改', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1053, 1053, 'menu.common.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1054, 1054, 'menu.common.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1055, 1055, 'menu.common.import', '导入', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1056, 1056, 'menu.common.reset', '重置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1057, 1057, 'menu.common.unlock', '账户解锁', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1058, 1058, 'menu.forcedQuit.batch ', '批量强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1059, 1059, 'menu.forcedQuit.single', '单条强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1060, 1060, 'menu.ueUser.authUDM', 'UDM鉴权用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1061, 1061, 'menu.ueUser.subUDM', 'UDM签约用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1062, 1062, 'menu.ueUser.authUDMRemark', 'UDM鉴权用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1063, 1063, 'menu.ueUser.subUDMRemark', 'UDM签约用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1064, 1064, 'menu.config.neManage', '网元管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1065, 1065, 'menu.config.configNE', '参数配置Original', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1066, 1066, 'menu.config.neManageRemark', '网元管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1067, 1067, 'menu.config.configNERemark', '参数配置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1068, 1068, 'menu.config.backupManage', '备份管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1069, 1069, 'menu.config.softwareManage', '软件管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1070, 1070, 'menu.ueUser.onlineIMS', 'IMS在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1071, 1071, 'menu.ueUser.onlineUE', 'UE在线信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1072, 1072, 'menu.ueUser.base5G', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1073, 1073, 'menu.trace', '跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '信令分析', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1076, 1076, 'menu.trace.pcap', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1077, 1077, 'menu.fault', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1078, 1078, 'menu.config.backupManageRemark', '备份管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1079, 1079, 'menu.config.softwareManageRemark', '软件管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1080, 1080, 'menu.ueUser.onlineIMSRemark', 'IMS在线用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1081, 1081, 'menu.ueUser.onlineUERemark', 'UE在线信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1082, 1082, 'menu.ueUser.base5GRemark', '5G基站信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1083, 1083, 'menu.traceRemark', '跟踪管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1084, 1084, 'menu.trace.taskRemark', '跟踪任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1086, 1086, 'menu.trace.pcapRemark', '信令抓包菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1087, 1087, 'menu.faultRemark', '故障管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1088, 1088, 'menu.fault.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1089, 1089, 'menu.log', '日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1090, 1090, 'menu.log.operatOld', '操作日志(旧)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1091, 1091, 'menu.log.mml', 'MML日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1092, 1092, 'menu.log.alarm', '告警日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1093, 1093, 'menu.log.securityOld', '安全日志(旧)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1094, 1094, 'menu.log.forwarding', '告警前转日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1095, 1095, 'menu.log.set', '日志设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1096, 1096, 'menu.monitor.sessionUser', '用户会话', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1097, 1097, 'menu.fault.history', '历史告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1098, 1098, 'menu.fault.set', '设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1099, 1099, 'menu.perf', '性能', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1100, 1100, 'menu.fault.activemRemark', '活动告警菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1101, 1101, 'menu.logRemark', '日志管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1102, 1102, 'menu.log.operatOldRemark', '操作日志旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1103, 1103, 'menu.log.mmlRemark', '操作MML日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1104, 1104, 'menu.log.alarmRemark', '告警日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1105, 1105, 'menu.log.securityOldRemark', '安全日志旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1106, 1106, 'menu.log.forwardingRemark', '告警前转日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1107, 1107, 'menu.log.setRemark', '日志设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1108, 1108, 'menu.monitor.sessionUserRemark', '用户会话旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1109, 1109, 'menu.fault.historyRemark', '历史告警菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1110, 1110, 'menu.fault.setRemark', '故障通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1111, 1111, 'menu.perfRemark', '性能目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1112, 1112, 'menu.perf.task', '任务管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1113, 1113, 'menu.perf.data', '性能数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1114, 1114, 'menu.perf.report', '性能报表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1115, 1115, 'menu.perf.threshold', '性能门限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1116, 1116, 'menu.perf.kpi', '黄金指标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1117, 1117, 'menu.perf.customTarget', '自定义指标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1118, 1118, 'menu.perf.set', '性能通用设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1119, 1119, 'menu.mml', 'MML', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1120, 1120, 'menu.mml.ne', '网元操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1121, 1121, 'menu.mml.udm', 'UDM操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1122, 1122, 'menu.mml.set', 'MML设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1123, 1123, 'menu.mml.omc', 'OMC操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1124, 1124, 'menu.perf.taskRemark', '任务管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1125, 1125, 'menu.perf.dataRemark', '性能数据菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1126, 1126, 'menu.perf.reportRemark', '性能报表菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1127, 1127, 'menu.perf.thresholdRemark', '性能门限菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1128, 1128, 'menu.perf.kpiRemark', '黄金指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1129, 1129, 'menu.perf.customTargetRemark', '自定义指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1130, 1130, 'menu.perf.setRemark', '性能通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1131, 1131, 'menu.mmlRemark', 'MML管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1132, 1132, 'menu.mml.neRemark', '网元操作菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1133, 1133, 'menu.mml.udmRemark', '网元UDM用户数据菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1134, 1134, 'menu.mml.setRemark', 'MML设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1135, 1135, 'menu.mml.omcRemark', 'OMC操作菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1136, 1136, 'menu.config.licenseManage', '许可证管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1137, 1137, 'menu.security', '安全', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1138, 1138, 'menu.system.systemSet', '系统设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1139, 1139, 'menu.system.systemResource', '系统资源', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1140, 1140, 'menu.config.configNEForm', '参数配置Form', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1141, 1141, 'menu.config.configNETree', '参数配置Tree', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1142, 1142, 'menu.config.configNETreeTable', '参数配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1143, 1143, 'menu.config.licenseManageRemark', '许可证管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1144, 1144, 'menu.securityRemark', '安全管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1145, 1145, 'menu.system.systemSetRemark', '系统设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1146, 1146, 'menu.system.systemResourceRemark', '系统资源 cpu io network菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1147, 1147, 'menu.config.configNEFormRemark', '参数配置Form菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1148, 1148, 'menu.config.configNETreeRemark', '参数配置Tree菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1149, 1149, 'menu.config.configNETreeTableRemark', '参数配置TreeTable菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1150, 1150, 'menu.noData', '没有可访问菜单数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1151, 1151, 'menu.errNameExists', '操作菜单【{name}】失败,菜单名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1152, 1152, 'menu.errPathExists', '操作菜单【{name}】失败,菜单路由地址已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1153, 1153, 'menu.errFramePath', '操作菜单【{name}】失败,非内部地址请以http(s)://开头', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1154, 1154, 'menu.errParentStatus', '上级菜单未启用!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1155, 1155, 'menu.errHasChildUse', '操作菜单【{name}】失败,存在使用子菜单数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1156, 1156, 'menu.errHasRoleUse', '操作菜单【{name}】失败,菜单已分配给角色数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1400, 1400, 'dictData.sex.un', '未选择', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1401, 1401, 'dictData.sex.male', '男', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1402, 1402, 'dictData.sex.female', '女', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1403, 1403, 'dictData.show', '显示', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1404, 1404, 'dictData.hide', '隐藏', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1405, 1405, 'dictData.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1406, 1406, 'dictData.disable', '停用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1407, 1407, 'dictData.yes', '是', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1408, 1408, 'dictData.no', '否', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1409, 1409, 'dictData.success', '成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1410, 1410, 'dictData.fail', '失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1411, 1411, 'dictData.jobStatus.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1412, 1412, 'dictData.jobStatus.pause', '暂停', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1413, 1413, 'dictData.jobGroup.Default', '默认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1414, 1414, 'dictData.jobGroup.System', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1415, 1415, 'dictData.operType.other', '其他', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1416, 1416, 'dictData.operType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1417, 1417, 'dictData.operType.edit', '修改', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1418, 1418, 'dictData.operType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1419, 1419, 'dictData.operType.auth', '授权', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1420, 1420, 'dictData.operType.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1421, 1421, 'dictData.operType.import', '导入', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1422, 1422, 'dictData.operType.forced quit', '强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1423, 1423, 'dictData.operType.clear', '清空', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1424, 1424, 'dictData.trace.interface', '接口跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1425, 1425, 'dictData.trace.device', '设备跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1426, 1426, 'dictData.trace.user', '用户跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1427, 1427, 'dictData.logType.download', '下载', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1428, 1428, 'dictData.logType.activation', '激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1429, 1429, 'dictData.logType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1430, 1430, 'dictData.logType.other', '其他', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1431, 1431, 'dictData.logType.back', '回退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1432, 1432, 'dictData.logType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1433, 1433, 'dictData.logType.distribute', '分配', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1434, 1434, 'dictData.logType.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1435, 1435, 'dictData.logType.query', '查询', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1436, 1436, 'dictData.logType.setup', '设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1437, 1437, 'dictData.logType.update', '更新', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1438, 1438, 'dictData.logType.upload', '上传', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1439, 1439, 'dictData.logType.view', '查看', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1440, 1440, 'dictData.logType.login', '登录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1441, 1441, 'dictData.logType.logout', '登出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1442, 1442, 'dictData.securityLogType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1443, 1443, 'dictData.securityLogType.update', '更新', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1444, 1444, 'dictData.securityLogType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1445, 1445, 'dictData.securityLogType.lock', '锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1446, 1446, 'dictData.securityLogType.unlock', '解锁', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1447, 1447, 'dictData.securityLogType.reset', '重置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1448, 1448, 'dictData.securityLogType.deactivate', '停用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1449, 1449, 'dictData.jobSaveLog.no', '不记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1450, 1450, 'dictData.jobSaveLog.yes', '记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1451, 1451, 'dictData.neVersionStatus.upload', '已上传', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1452, 1452, 'dictData.neVersionStatus.inactive', '未激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1453, 1453, 'dictData.neVersionStatus.active', '已激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1454, 1454, 'dictData.alarmStatus.history', '历史告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1455, 1455, 'dictData.alarmStatus.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1456, 1456, 'dictData.export.code', '数据代码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1457, 1457, 'dictData.export.sort', '数据排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1458, 1458, 'dictData.export.label', '数据标签', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1459, 1459, 'dictData.export.value', '数据键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1460, 1460, 'dictData.export.type', '数据排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1461, 1461, 'dictData.export.status', '数据状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1462, 1462, 'dictData.datascope.all', '全部数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1463, 1463, 'dictData.datascope.custom', '自定数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1464, 1464, 'dictData.datascope.dept', '部门数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1465, 1465, 'dictData.datascope.deptAndChid', '部门及以下数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1466, 1466, 'dictData.datascope.self', '仅本人数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1467, 1467, 'dictData.noData', '没有可访问字典编码数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1468, 1468, 'dictData.errLabelExists', '操作数据【{name}】失败,该字典类型下标签名已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1500, 1500, 'dictType.sys_user_sex', '用户性别', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1501, 1501, 'dictType.sys_show_hide', '菜单状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1502, 1502, 'dictType.sys_normal_disable', '系统开关', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1503, 1503, 'dictType.sys_job_status', '任务状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1504, 1504, 'dictType.sys_job_group', '任务分组', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1505, 1505, 'dictType.sys_yes_no', '系统是否', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1506, 1506, 'dictType.sys_oper_type', '操作类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1507, 1507, 'dictType.sys_common_status', '系统状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1508, 1508, 'dictType.trace_type', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1509, 1509, 'dictType.operation_log_type', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1510, 1510, 'dictType.alarm_status', '告警日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1511, 1511, 'dictType.security_log_type', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1512, 1512, 'dictType.ne_version_status', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1513, 1513, 'dictType.i18n_en', '多语言-英文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1514, 1514, 'dictType.i18n_zh', '多语言-中文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1515, 1515, 'dictType.sys_user_sex_remark', '用户性别列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1516, 1516, 'dictType.sys_show_hide_remark', '菜单状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1517, 1517, 'dictType.sys_normal_disable_remark', '系统开关列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1518, 1518, 'dictType.sys_job_status_remark', '任务状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1519, 1519, 'dictType.sys_job_group_remark', '任务分组列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1520, 1520, 'dictType.sys_yes_no_remark', '系统是否列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1521, 1521, 'dictType.sys_oper_type_remark', '操作类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1522, 1522, 'dictType.sys_common_status_remark', '登录状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1523, 1523, 'dictType.trace_type_remark', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1524, 1524, 'dictType.operation_log_type_remark', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1525, 1525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1526, 1526, 'dictType.security_log_type_remark', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1527, 1527, 'dictType.ne_version_status_remark', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1528, 1528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1529, 1529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1530, 1530, 'dictType.export.id', '字典编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1531, 1531, 'dictType.export.name', '字典名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1532, 1532, 'dictType.export.type', '字典类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1533, 1533, 'dictType.export.status', '字典状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1534, 1534, 'dictType.sys_role_datascope', '系统角色数据范围', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1535, 1535, 'dictType.sys_role_datascope_remark', '系统角色数据范围映射', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1536, 1536, 'dictType.noData', '没有可访问字典类型数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1537, 1537, 'dictType.errNameExists', '操作字典【{name}】失败,字典名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1538, 1538, 'dictType.errTypeExists', '操作字典【{name}】失败,字典类型已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1600, 1600, 'dept.root', '系统维护部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1601, 1601, 'dept.root.item1', '运维一部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1602, 1602, 'dept.noData', '没有可访问部门数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1603, 1603, 'dept.errParentDelFlag', '上级部门【{name}】已删除,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1604, 1604, 'dept.errParentStatus', '上级部门【{name}】停用,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1605, 1605, 'dept.errNameExists', '操作部门【{name}】失败,部门名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1606, 1606, 'dept.errParentID', '操作部门【{name}】失败,上级部门不能是自己', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1607, 1607, 'dept.errHasChildUse', '操作失败,该部门包含未停用的子部门数量:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1608, 1608, 'dept.errHasUserUse', '不允许删除,部门已分配给用户数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1630, 1630, 'config.sys.user.initPassword', '用户管理-账号初始密码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1631, 1631, 'config.sys.account.captchaEnabled', '账号自助-验证码开关', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1632, 1632, 'config.sys.account.registerUser', '账号自助-是否开启用户注册功能', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1633, 1633, 'config.sys.user.maxRetryCount', '用户管理-密码最大错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1634, 1634, 'config.sys.user.lockTime', '用户管理-密码锁定时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1635, 1635, 'config.monitor.sysResource.storeDays', '监控-系统资源-数据保留时长', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1636, 1636, 'config.sys.logo.type', '系统设置-LOGO类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1637, 1637, 'config.sys.logo.filePathIcon', '系统设置-LOGO文件icon', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1638, 1638, 'config.sys.logo.filePathBrand', '系统设置-LOGO文件brand', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1639, 1639, 'config.sys.loginBackground', '系统设置-登录界面背景', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1640, 1640, 'config.sys.title', '系统设置-系统名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1641, 1641, 'config.sys.copyright', '系统设置-版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1642, 1642, 'config.sys.user.initPasswordRemark', '导入用户初始化密码 123456', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1643, 1643, 'config.sys.account.captchaEnabledRemark', '是否开启验证码功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1644, 1644, 'config.sys.account.registerUserRemark', '是否开启注册用户功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1645, 1645, 'config.sys.user.maxRetryCountRemark', '密码最大错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1646, 1646, 'config.sys.user.lockTimeRemark', '密码锁定时间,单位分钟(默认10分钟)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1647, 1647, 'config.monitor.sysResource.storeDaysRemark', '监控-系统资源-数据保留时长,单位天。根据当前日期,删除超过保留时长的日期数据信息。', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1648, 1648, 'config.sys.logo.typeRemark', '全图:brand\r\n小图:icon', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1649, 1649, 'config.sys.logo.filePathIconRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1650, 1650, 'config.sys.logo.filePathBrandRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1651, 1651, 'config.sys.loginBackgroundRemark', '文件支持网络地址图片和内部上传的文件路径,默认背景用#号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1652, 1652, 'config.sys.titleRemark', '系统名称长度限制11位字符串', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1653, 1653, 'config.sys.copyrightRemark', '底脚固定条,左侧放置版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1654, 1654, 'config..export.id', '参数编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1655, 1655, 'config..export.name', '参数名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1656, 1656, 'config..export.key', '参数键名', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1657, 1657, 'config..export.value', '参数键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1658, 1658, 'config..export.type', '系统内置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1659, 1659, 'config..export.remark', '参数说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1660, 1660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1661, 1661, 'config.sys.copyrightValue', 'Copyright ©2023 千通科技', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1662, 1662, 'config.noData', '没有可访问参数配置数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1663, 1663, 'config.errKey', '无效 key', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1664, 1664, 'config.errValueEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1665, 1665, 'config.errKeyExists', '操作参数配置【{name}】失败,参数键名已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1666, 1666, 'config.errDelete', '删除参数配置信息失败!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1667, 1667, 'config.errType', '操作含有内置参数,禁止删除!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1700, 1700, 'job.monitor_sys_resource', '监控-系统资源', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1701, 1701, 'job.monitor_sys_resource_remark', '系统资源CPU/IO/Netword收集\r\ninterval单位分钟,平均分钟资源情况\r\n注:请根据cron表达式的时间单位分钟,传入参数interva值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1702, 1702, 'job.delExpiredNeBackup', '删除过期网元备份文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1703, 1703, 'job.delExpiredNeBackupRemark', '删除过期网元etc备份文件, 传入参数表示保留{duration}天的备份文件, 默认60天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1704, 1704, 'job.deleteExpiredAlarmRecord', '删除过期历史告警记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1705, 1705, 'job.deleteExpiredAlarmRecordRemark', '删除过期历史告警记录,传入参数表示保留{duration}天的历史告警记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1706, 1706, 'job.deleteExpiredKpiRecord', '删除过期黄金指标记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1707, 1707, 'job.deleteExpiredKpiRecordRemark', '黄金指标记录保留{duration}天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1708, 1708, 'job.backupEtcFromNE', '网元配置自动备份任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1709, 1709, 'job.backupEtcFromNERemark', '自动备份网元etc目录下的配置文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1710, 1710, 'job.export.jobID', '任务编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1711, 1711, 'job.export.jobName', '任务名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1712, 1712, 'job.export.jobGroupName', '任务组名', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1713, 1713, 'job.export.invokeTarget', '调用目标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1714, 1714, 'job.export.targetParams', '传入参数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1715, 1715, 'job.export.cronExpression', 'cron表达式', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1716, 1716, 'job.export.status', '状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1717, 1717, 'job.export.remark', '备注说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1718, 1718, 'job.export.jobLogID', '任务日志编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1719, 1719, 'job.export.jobLogStatus', '任务日志状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1720, 1720, 'job.export.jobLogTime', '任务日志时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1721, 1721, 'job.noData', '没有可访问调度任务数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1722, 1722, 'job.errTargetParams', '操作调度任务【{name}】失败,任务传入参数json字符串不正确', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1723, 1723, 'job.errCronExpression', '操作调度任务【{name}】失败,Cron表达式不正确', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1724, 1724, 'job.errJobExists', '调度任务新增【{name}】失败,同任务组内有相同任务名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1725, 1725, 'job.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1750, 1750, 'role.admin', '超级管理员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1751, 1751, 'role.adminAssign', '管理人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1752, 1752, 'role.operator', '运维人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1753, 1753, 'role.monitor', '监控人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1754, 1754, 'role.vistor', '普通用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1755, 1755, 'role.adminRemark', '超级管理员,无法修改删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1756, 1756, 'role.adminAssignRemark', '管理人员 可以对设备进行任何操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1757, 1757, 'role.operatorRemark', '运维人员 可以从设备读取数据,并对设备进行配置,但是不能对设备进行软件升级操作。', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1758, 1758, 'role.monitorRemark', '监控人员 只能从设备读取数据,而不能对设备进行任何设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1759, 1759, 'role.vistorRemark', '普通用户 只可看系统相关信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1760, 1760, 'role.export.id', '角色编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1761, 1761, 'role.export.name', '角色名称 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1762, 1762, 'role.export.key', '角色键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1763, 1763, 'role.export.sort', '角色顺序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1764, 1764, 'role.export.dataScope', '角色数据范围', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1765, 1765, 'role.export.status', '角色状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1766, 1766, 'role.noData', '没有可访问角色数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1767, 1767, 'role.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1768, 1768, 'role.errNameExists', '操作角色【{name}】失败,角色名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1769, 1769, 'role.errKeyExists', '操作角色【{name}】失败,角色键值已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1800, 1800, 'post.admin', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1801, 1801, 'post.operator', '管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1802, 1802, 'post.monitor', '运维', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1803, 1803, 'post.visitor', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1804, 1804, 'post.export.id', '岗位编号 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1805, 1805, 'post.export.code', '岗位编码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1806, 1806, 'post.export.name', '岗位名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1807, 1807, 'post.export.sort', '岗位排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1808, 1808, 'post.export.status', '岗位状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1809, 1809, 'post.noData', '没有可访问岗位数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1810, 1810, 'post.errNameExists', '操作岗位【{name}】失败,岗位名称已存在已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1811, 1811, 'post.errCodeExists', '操作角色【{name}】失败,角色键值已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1830, 1830, 'user.export.id', '用户编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1831, 1831, 'user.export.name', '登录账号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1832, 1832, 'user.export.nick', '用户昵称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1833, 1833, 'user.export.email', '电子邮箱', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1834, 1834, 'user.export.phone', '手机号码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1835, 1835, 'user.export.sex', '用户性别', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1836, 1836, 'user.export.status', '用户状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1837, 1837, 'user.export.deptID', '部门编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1838, 1838, 'user.export.deptName', '部门名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1839, 1839, 'user.export.deptLeader', '部门负责人', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1840, 1840, 'user.export.loginIP', '用户登录IP', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1841, 1841, 'user.export.loginDate', '用户登录时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1842, 1842, 'user.noData', '没有可访问用户数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1843, 1843, 'user.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1844, 1844, 'user.errPasswdOld', '修改密码失败,旧密码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1845, 1845, 'user.errPasswdEqOld', '新密码不能与旧密码相同', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1846, 1846, 'user.errPasswd', '登录密码至少包含大小写字母、数字、特殊符号,且不少于6位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1847, 1847, 'user.errEmailFormat', '操作用户【{name}】失败,邮箱格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1848, 1848, 'user.errEmailExists', '操作用户【{name}】失败,邮箱已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1849, 1849, 'user.errPhoneFormat', '操作用户【{name}】失败,手机号码格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1850, 1850, 'user.errPhoneExists', '操作用户【{name}】失败,手机号码已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1851, 1851, 'user.errNameExists', '操作用户【{name}】失败,登录账号已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1852, 1852, 'user.import.mustItem', '表格中必填列表项,{text}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1853, 1853, 'user.import.phoneExist', '用户编号:{id} 手机号码 {phone} 已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1854, 1854, 'user.import.phoneFormat', '用户编号:{id} 手机号码 {phone} 格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1855, 1855, 'user.import.emailExist', '用户编号:{id} 用户邮箱:{email} 已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1856, 1856, 'user.import.emailFormat', '用户编号:{id} 用户邮箱:{email} 格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1857, 1857, 'user.import.success', '用户编号:{id} 登录名称:{name} 导入成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1858, 1858, 'user.import.fail', '用户编号:{id} 登录名称:{name} 导入失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1859, 1859, 'user.import.successUpdate', '用户编号:{id} 登录名称:{name} 更新成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1860, 1860, 'user.import.failUpdate', '用户编号:{id} 登录名称:{name} 更新失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1861, 1861, 'user.import.failTip', '很抱歉,导入失败!共 {num} 条数据格式不正确,错误如下:', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1862, 1862, 'user.import.successTip', '恭喜您,数据已全部导入成功!共 {num} 条,数据如下:', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1900, 1900, 'app.common.err403', '无权访问 {method} {requestURI}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1901, 1901, 'app.common.err401', '无效身份授权', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1902, 1902, 'app.common.err400', '参数错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1903, 1903, 'app.common.exportEmpty', '导出数据记录为空', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1904, 1904, 'app.common.errOperateAdmin', '不允许操作内置用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1905, 1905, 'app.common.errOperateRole', '不允许操作内置角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1906, 1906, 'app.common.deleteSuccess', '删除成功:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1907, 1907, 'app.common.loginSuccess', '登录成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1908, 1908, 'app.common.logoutSuccess', '注销成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1909, 1909, 'app.common.errUnlock', '该用户未被锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1910, 1910, 'app.common.noLoginUser', '登录用户信息无效', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1911, 1911, 'app.common.rateLimitTip', '访问过于频繁,请稍候再试', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1912, 1912, 'log.operate.export.id', '操作编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1913, 1913, 'log.operate.export.title', '模块名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1914, 1914, 'log.operate.export.businessType', '业务类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1915, 1915, 'log.operate.export.method', '操作方法', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1916, 1916, 'log.operate.export.requestMethod', '请求方式 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1917, 1917, 'log.operate.export.operatorType', '操作类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1918, 1918, 'log.operate.export.operName', '操作人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1919, 1919, 'log.operate.export.deptName', '操作人员部门名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1920, 1920, 'log.operate.export.url', '请求链接地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1921, 1921, 'log.operate.export.ip', '请求主机 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1922, 1922, 'log.operate.export.location', '请求地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1923, 1923, 'log.operate.export.param', '请求参数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1924, 1924, 'log.operate.export.msg', '操作信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1925, 1925, 'log.operate.export.status', '操作状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1926, 1926, 'log.operate.export.costTime', '消耗时间(毫秒)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1927, 1927, 'log.operate.export.operTime', '操作时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1928, 1928, 'log.login.export.id', '记录编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1929, 1929, 'log.login.export.userName', '登录账号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1930, 1930, 'log.login.export.status', '登录状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1931, 1931, 'log.login.export.ip', '登录地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1932, 1932, 'log.login.export.location', '登录地点', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1933, 1933, 'log.login.export.browser', '浏览器', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1934, 1934, 'log.login.export.os', '操作系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1935, 1935, 'log.login.export.msg', '登录信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1936, 1936, 'log.login.export.time', '登录时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1937, 1937, 'trace.tcpdump.noData', '找不到 {type} {id} 对应网元信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1938, 1938, 'register.errUsername', '账号不能以数字开头,可包含大写小写字母,数字,且不少于5位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1939, 1939, 'register.errPasswd', '登录密码至少包含大小写字母、数字、特殊符号,且不少于6位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1940, 1940, 'register.errPasswdNotEq', '用户确认输入密码不一致', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1941, 1941, 'register.success', '注册成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1942, 1942, 'register.successMsg', '{name} 注册成功 {id}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1943, 1943, 'log.operate.title.sysJobLog', '调度任务日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1944, 1944, 'log.operate.title.sysJob', '调度任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1945, 1945, 'log.operate.title.tcpdump', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1946, 1946, 'log.operate.title.sysConfig', '参数配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1947, 1947, 'log.operate.title.sysDept', '部门', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1948, 1948, 'log.operate.title.sysDictData', '字典数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1949, 1949, 'log.operate.title.sysDictType', '字典类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1950, 1950, 'log.operate.title.sysMenu', '菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1951, 1951, 'log.operate.title.sysPost', '岗位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1952, 1952, 'log.operate.title.sysProfile', '个人信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1953, 1953, 'log.operate.title.sysProfileAvatar', '个人头像', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1954, 1954, 'log.operate.title.sysRole', '角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1955, 1955, 'log.operate.title.sysUser', '用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1956, 1956, 'log.operate.title.sysLogOper', '操作日志记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1957, 1957, 'log.operate.title.sysLogLogin', '登录日志记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1958, 1958, 'login.errNameOrPasswd', '用户不存在或密码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1959, 1959, 'login.errDelFlag', '对不起,您的账号已被删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1960, 1960, 'login.errStatus', '对不起,您的帐户已被禁用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1961, 1961, 'login.errRetryPasswd', '密码输入错误多次,帐户已被锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1962, 1962, 'captcha.err', '验证码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1963, 1963, 'captcha.errValid', '验证码已失效', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1964, 1964, 'app.common.noUaOsBrowser', '未知 未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1965, 1965, 'app.common.noIPregion', '内网', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1966, 1966, 'app.common.unknown', '未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1967, 1967, 'app.common.noNEInfo', '未找到匹配网元信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1968, 1968, 'ne.udm.errImportUserAuthFileFormat', '请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, ki, algo, amf, opc', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1969, 1969, 'ne.udm.errExportType', '导出文件类型支持CSV和txt', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1970, 1970, 'ne.udm.errImportUserSubFileFormat', '请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1971, 1971, 'log.operate.title.udmAuth', 'UDM鉴权用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1972, 1972, 'log.operate.title.udmSub', 'UDM签约用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1973, 1973, 'dictType.active_alarm_type', '活动告警类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1974, 1974, 'dictType.active_alarm_type_remark', '活动告警类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1975, 1975, 'dictData.active_alarm_type.communication', '通信告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1976, 1976, 'dictData.active_alarm_type.equipment', '设备告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1977, 1977, 'dictData.active_alarm_type.processing', '处理错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1978, 1978, 'dictData.active_alarm_type.environmental', '环境告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1979, 1979, 'dictData.active_alarm_type.qualityOfService', '服务质量', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1980, 1980, 'dictType.active_clear_type', '告警清除类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1981, 1981, 'dictType.active_clear_type_remark', '告警清除类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1982, 1982, 'dictData.active_clear_type.notCleared', '告警未清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1983, 1983, 'dictData.active_clear_type.hand', '手动清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1984, 1984, 'dictData.active_clear_type.auto', '自动清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1985, 1985, 'dictType.active_ack_state', '告警确认类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1986, 1986, 'dictType.active_ack_state_remark', '告警确认类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1987, 1987, 'dictData.active_ack_state.unconfirmed', '未确认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1988, 1988, 'dictData.active_ack_state.confirmed', '已确认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1989, 1989, 'dictType.active_alarm_severity', '严重程度', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1990, 1990, 'dictType.active_alarm_severity_remark', '严重程度列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1991, 1991, 'dictData.active_alarm_severity.critical', '严重告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1992, 1992, 'dictData.active_alarm_severity.major', '主要告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1993, 1993, 'dictData.active_alarm_severity.minor', '次要告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1994, 1994, 'dictData.active_alarm_severity.warning', '警告告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1995, 1995, 'dictData.active_alarm_severity.event', '事件告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1996, 1996, 'config.sys.officialUrl', '系统设置-官网链接', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1997, 1997, 'config.sys.helpDoc', '系统设置-系统使用文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1998, 1998, 'config.sys.officialUrlRemark', '默认无地址用#号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1999, 1999, 'config.sys.helpDocRemark', '静态文件目录地址,使用{language}区分语言文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2000, 2000, 'log.operate.title.neAction', '网元处理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2001, 2001, 'log.operate.title.helpDoc', '系统使用文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2002, 2002, 'menu.ueUser.n3iwf', 'N3IWF在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2003, 2003, 'menu.ueUser.pcf', '用户策略控制信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2004, 2004, 'menu.system.user.editRole', '修改用户角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2005, 2005, 'config.sys.i18nOpen', '国际化切换', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2006, 2006, 'config.sys.i18nDefault', '国际化默认语言', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2007, 2007, 'user.export.role', '用户角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2008, 2008, 'menu.system.setting.i18n', '国际化切换', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2009, 2009, 'menu.system.setting.i18nRemark', '国际化多语言的切换选择', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2010, 2010, 'dictType.index_status', '首页状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2011, 2011, 'dictType.index_status_remark', '首页的网元状态颜色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2012, 2012, 'dictType.index_status.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2013, 2013, 'dictType.index_status.abnormal', '异常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2014, 2014, 'menu.log.neFile', '网元日志文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2015, 2015, 'job.deleteExpiredNeStateRecord', '删除过期网元状态记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2016, 2016, 'job.deleteExpiredNeStateRecordRemark', '定期删除过期的网元状态记录, 默认保留{duration}天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2017, 2017, 'job.getStateFromNE', '获取网元状态信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2018, 2018, 'job.getStateFromNERemark', '获取所有网元状态信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2019, 2019, 'job.genNeStateAlarm', '网元健康状态巡检', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2020, 2020, 'job.genNeStateAlarmRemark', '网元健康状态巡检,异常时产生告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2021, 2021, 'menu.neUser.nssf', 'NSSF在线订阅数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2022, 2022, 'menu.neUser.nssfAmf', 'NSSF可用的注册AMF', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2023, 2023, 'menu.monitor.topology', '拓扑信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2024, 2024, 'menu.monitor.topologyBuild', '拓扑图组编辑', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2025, 2025, 'log.operate.title.chartGraph', '拓扑图组', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2026, 2026, 'menu.monitor.topologyArchitecture', '网元拓扑组网', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2027, 2027, 'menu.alarm', '告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2028, 2028, 'menu.topology', '拓扑', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2029, 2029, 'config.sys.lockTime', '系统设置-锁屏超时时长', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2030, 2030, 'config.sys.lockTimeRemark', '无操作时锁屏超时时长,单位(秒)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2031, 2031, 'sys.account.captchaType', '账号自助-验证码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2032, 2032, 'sys.account.captchaTypeRemark', '使用验证码类型(math数值计算,char字符验证)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2033, 2033, 'menu.dashboard', '仪表盘', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2034, 2034, 'menu.dashboard.overview', '总览', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2035, 2035, 'menu.dashboard.cdr', 'CDR', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2036, 2036, 'dictType.cdr_sip_code', 'CDR SIP响应代码类别类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2037, 2037, 'dictType.cdr_call_type', 'CDR 呼叫类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2038, 2038, 'dictType.ue_auth_code', 'UE 事件认证代码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2039, 2039, 'dictType.ue_event_type', 'UE 事件类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2040, 2040, 'dictData.cdr_sip_code.200', '正常挂机', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2041, 2041, 'dictData.cdr_sip_code.403', '被禁止的', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2042, 2042, 'dictData.cdr_sip_code.408', '请求超时', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2043, 2043, 'dictData.cdr_sip_code.500', '服务器内部错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2044, 2044, 'dictData.cdr_call_type.audio', '语音', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2045, 2045, 'dictData.cdr_call_type.video', '视频', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2046, 2046, 'dictData.ue_auth_code.200', '成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2047, 2047, 'dictData.ue_auth_code.001', '网络失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2048, 2048, 'dictData.ue_auth_code.002', '空口接口失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2049, 2049, 'dictData.ue_auth_code.003', 'MAC失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2050, 2050, 'dictData.ue_auth_code.004', '同步失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2051, 2051, 'dictData.ue_auth_code.005', '不接受非5G认证', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2052, 2052, 'dictData.ue_auth_code.006', '响应失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2053, 2053, 'dictData.ue_auth_code.007', '未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2054, 2054, 'dictData.ue_event_type.auth', '认证', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2055, 2055, 'dictData.ue_event_type.detach', '注销', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2056, 2056, 'dictData.ue_event_type.state', 'CM状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2057, 2057, 'dictType.ue_event_cm_state', 'UE 事件CM状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2058, 2058, 'dictData.ue_event_cm_state.connected', '连接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2059, 2059, 'dictData.ue_event_cm_state.idle', '空闲', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2060, 2060, 'dictData.ue_event_cm_state.inactive', '不活动', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2061, 2061, 'dictData.cdr_sip_code.404', '未找到', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2062, 2062, 'dictData.cdr_sip_code.487', '请求终止', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2063, 2063, 'dictData.cdr_sip_code.503', '服务不可用', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2064, 2064, 'dictData.cdr_sip_code.504', '服务器超时', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2065, 2065, 'dictData.cdr_sip_code.603', '拒绝', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2066, 2066, 'dictData.cdr_sip_code.606', '不可接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2067, 2067, 'cache.name.user', '登录用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2068, 2068, 'cache.name.sys_config', '参数管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2069, 2069, 'cache.name.sys_dict', '字典管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2070, 2070, 'cache.name.captcha_codes', '验证码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2071, 2071, 'cache.name.repeat_submit', '防重提交', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2072, 2072, 'cache.name.rate_limit', '限流', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2073, 2073, 'cache.name.pwd_err_cnt', '登录账户密码错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2074, 2074, 'cache.name.ne_info', '网元信息管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (2075, 2075, 'cache.name.ne_data', '网元数据管理', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2076, 2076, 'dictData.cdr_call_type.sms', '短信', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2077, 2077, 'dictData.cdr_sip_code.202', '已接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2078, 2078, 'dictData.cdr_sip_code.488', '这里不能接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2079, 2079, 'dictData.cdr_sip_code.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2080, 2080, 'log.operate.title.ws', 'WS会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2081, 2081, 'log.operate.title.neHost', '网元主机', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2082, 2082, 'neHost.noData', '没有可访问主机信息数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2083, 2083, 'neHost.errKeyExists', '主机信息操作【{name}】失败,同组内名称已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2084, 2084, 'neHost.errByHostInfo', '连接主机失败,请检查连接参数后重试', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2085, 2085, 'dictType.ne_host_type', '网元主机连接类型', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2086, 2086, 'dictType.ne_host_groupId', '网元主机分组', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2087, 2087, 'dictType.ne_host_authMode', '网元主机认证模式', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2088, 2088, 'dictData.ne_host_type.ssh', 'SSH', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2089, 2089, 'dictData.ne_host_type.telnet', 'Telnet', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2090, 2090, 'dictData.ne_host_groupId.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2091, 2091, 'dictData.ne_host_groupId.1', '网元', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2092, 2092, 'dictData.ne_host_groupId.2', '系统', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2093, 2093, 'dictData.ne_host_authMode.0', '密码认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2094, 2094, 'dictData.ne_host_authMode.1', '私钥认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2095, 2095, 'menu.tools.terminal', '网元主机终端', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2096, 2096, 'menu.config.neHost', '网元主机', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2097, 2097, 'menu.config.neHostCommand', '网元主机命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2098, 2098, 'log.operate.title.neHostCmd', '网元主机命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2099, 2099, 'neHostCmd.noData', '没有可访问主机命令数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2100, 2100, 'neHostCmd.errKeyExists', '主机命令操作【{name}】失败,同组内名称已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2101, 2101, 'dictType.ne_host_cmd_groupId', '网元主机命令分组', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2102, 2102, 'dictData.ne_host_cmd_groupId.0', '默认', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (2103, 2103, 'dictData.ne_host_cmd_groupId.1', '快速命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); - +REPLACE INTO `sys_dict_data` VALUES (1000, 1000, 'i18n', '中文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1001, 1001, 'hello', '你好', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1002, 1002, 'menu.system', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1003, 1003, 'menu.monitor', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1004, 1004, 'menu.tools', '工具', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1005, 1005, 'menu.config', '配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1006, 1006, 'menu.ueUser', '终端', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1007, 1007, 'menu.systemRemark', '系统管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1008, 1008, 'menu.monitorRemark', '系统监控目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1009, 1009, 'menu.toolsRemark', '系统工具目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1010, 1010, 'menu.configRemark', 'OMC配置管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1011, 1011, 'menu.ueUserRemark', '网元终端信息目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1012, 1012, 'menu.security.user', '用户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1013, 1013, 'menu.security.role', '角色管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1014, 1014, 'menu.security.roleUser', '分配角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1015, 1015, 'menu.system.menu', '菜单管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1016, 1016, 'menu.security.dept', '部门管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1017, 1017, 'menu.security.post', '岗位管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1018, 1018, 'menu.system.dictType', '字典管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1019, 1019, 'menu.system.dictData', '字典数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1020, 1020, 'menu.system.paramSet', '参数设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1021, 1021, 'menu.system.systemLog', '系统日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1022, 1022, 'menu.system.systemInfo', '系统信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1023, 1023, 'menu.system.cacheInfo', '缓存信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1024, 1024, 'menu.system.cache', '缓存管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1025, 1025, 'menu.security.onlineUser', '在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1026, 1026, 'menu.system.job', '调度任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1027, 1027, 'menu.system.jobLog', '调度日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1028, 1028, 'menu.tools.help', '帮助文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1029, 1029, 'menu.log.operat', '操作日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1030, 1030, 'menu.log.login', '安全日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1031, 1031, 'menu.security.userRemark', '用户管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1032, 1032, 'menu.security.roleRemark', '角色管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1033, 1033, 'menu.security.roleUserRemark', '分配角色内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1034, 1034, 'menu.system.menuRemark', '菜单管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1035, 1035, 'menu.security.deptRemark', '部门管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1036, 1036, 'menu.security.postRemark', '岗位管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1037, 1037, 'menu.system.dictTypeRemark', '字典管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1038, 1038, 'menu.system.dictDataRemark', '字典数据内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1039, 1039, 'menu.system.paramSetRemark', '参数设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1040, 1040, 'menu.system.systemLogRemark', '系统日志目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1041, 1041, 'menu.system.systemInfoRemark', '系统信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1042, 1042, 'menu.system.cacheInfoRemark', '缓存信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1043, 1043, 'menu.system.cacheRemark', '缓存列表菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1044, 1044, 'menu.security.onlineUserRemark', '在线用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1045, 1045, 'menu.system.jobRemark', '调度任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1046, 1046, 'menu.system.jobLogRemark', '调度日志内嵌隐藏菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1047, 1047, 'menu.tools.helpRemark', '帮助文档菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1048, 1048, 'menu.log.operatRemark', '操作日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1049, 1049, 'menu.log.loginRemark', '登录日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1050, 1050, 'menu.common.query', '查询', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1051, 1051, 'menu.common.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1052, 1052, 'menu.common.edit', '修改', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1053, 1053, 'menu.common.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1054, 1054, 'menu.common.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1055, 1055, 'menu.common.import', '导入', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1056, 1056, 'menu.common.reset', '重置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1057, 1057, 'menu.common.unlock', '账户解锁', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1058, 1058, 'menu.forcedQuit.batch ', '批量强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1059, 1059, 'menu.forcedQuit.single', '单条强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1060, 1060, 'menu.ueUser.authUDM', 'UDM鉴权用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1061, 1061, 'menu.ueUser.subUDM', 'UDM签约用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1062, 1062, 'menu.ueUser.authUDMRemark', 'UDM鉴权用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1063, 1063, 'menu.ueUser.subUDMRemark', 'UDM签约用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1064, 1064, 'menu.config.neManage', '网元管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1065, 1065, 'menu.config.configNE', '参数配置Original', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1066, 1066, 'menu.config.neManageRemark', '网元管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1067, 1067, 'menu.config.configNERemark', '参数配置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1068, 1068, 'menu.config.backupManage', '备份管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1069, 1069, 'menu.config.softwareManage', '软件管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1070, 1070, 'menu.ueUser.onlineIMS', 'IMS在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1071, 1071, 'menu.ueUser.onlineUE', 'UE在线信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1072, 1072, 'menu.ueUser.base5G', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1073, 1073, 'menu.trace', '跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '信令分析', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1076, 1076, 'menu.trace.pcap', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1077, 1077, 'menu.fault', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1078, 1078, 'menu.config.backupManageRemark', '备份管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1079, 1079, 'menu.config.softwareManageRemark', '软件管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1080, 1080, 'menu.ueUser.onlineIMSRemark', 'IMS在线用户菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1081, 1081, 'menu.ueUser.onlineUERemark', 'UE在线信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1082, 1082, 'menu.ueUser.base5GRemark', '5G基站信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1083, 1083, 'menu.traceRemark', '跟踪管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1084, 1084, 'menu.trace.taskRemark', '跟踪任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1086, 1086, 'menu.trace.pcapRemark', '信令抓包菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1087, 1087, 'menu.faultRemark', '故障管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1088, 1088, 'menu.fault.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1089, 1089, 'menu.log', '日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1090, 1090, 'menu.log.operatOld', '操作日志(旧)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1091, 1091, 'menu.log.mml', 'MML日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1092, 1092, 'menu.log.alarm', '告警日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1093, 1093, 'menu.log.securityOld', '安全日志(旧)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1094, 1094, 'menu.log.forwarding', '告警前转日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1095, 1095, 'menu.log.set', '日志设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1096, 1096, 'menu.monitor.sessionUser', '用户会话', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1097, 1097, 'menu.fault.history', '历史告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1098, 1098, 'menu.fault.set', '设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1099, 1099, 'menu.perf', '性能', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1100, 1100, 'menu.fault.activemRemark', '活动告警菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1101, 1101, 'menu.logRemark', '日志管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1102, 1102, 'menu.log.operatOldRemark', '操作日志旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1103, 1103, 'menu.log.mmlRemark', '操作MML日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1104, 1104, 'menu.log.alarmRemark', '告警日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1105, 1105, 'menu.log.securityOldRemark', '安全日志旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1106, 1106, 'menu.log.forwardingRemark', '告警前转日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1107, 1107, 'menu.log.setRemark', '日志设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1108, 1108, 'menu.monitor.sessionUserRemark', '用户会话旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1109, 1109, 'menu.fault.historyRemark', '历史告警菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1110, 1110, 'menu.fault.setRemark', '故障通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1111, 1111, 'menu.perfRemark', '性能目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1112, 1112, 'menu.perf.task', '任务管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1113, 1113, 'menu.perf.data', '性能数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1114, 1114, 'menu.perf.report', '性能报表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1115, 1115, 'menu.perf.threshold', '性能门限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1116, 1116, 'menu.perf.kpi', '黄金指标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1117, 1117, 'menu.perf.customTarget', '自定义指标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1118, 1118, 'menu.perf.set', '性能通用设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1119, 1119, 'menu.mml', 'MML', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1120, 1120, 'menu.mml.ne', '网元操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1121, 1121, 'menu.mml.udm', 'UDM操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1122, 1122, 'menu.mml.set', 'MML设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1123, 1123, 'menu.mml.omc', 'OMC操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1124, 1124, 'menu.perf.taskRemark', '任务管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1125, 1125, 'menu.perf.dataRemark', '性能数据菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1126, 1126, 'menu.perf.reportRemark', '性能报表菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1127, 1127, 'menu.perf.thresholdRemark', '性能门限菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1128, 1128, 'menu.perf.kpiRemark', '黄金指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1129, 1129, 'menu.perf.customTargetRemark', '自定义指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1130, 1130, 'menu.perf.setRemark', '性能通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1131, 1131, 'menu.mmlRemark', 'MML管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1132, 1132, 'menu.mml.neRemark', '网元操作菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1133, 1133, 'menu.mml.udmRemark', '网元UDM用户数据菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1134, 1134, 'menu.mml.setRemark', 'MML设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1135, 1135, 'menu.mml.omcRemark', 'OMC操作菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1136, 1136, 'menu.config.licenseManage', '许可证管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1137, 1137, 'menu.security', '安全', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1138, 1138, 'menu.system.systemSet', '系统设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1139, 1139, 'menu.system.systemResource', '系统资源', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1140, 1140, 'menu.config.configNEForm', '参数配置Form', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1141, 1141, 'menu.config.configNETree', '参数配置Tree', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1142, 1142, 'menu.config.configNETreeTable', '参数配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1143, 1143, 'menu.config.licenseManageRemark', '许可证管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1144, 1144, 'menu.securityRemark', '安全管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1145, 1145, 'menu.system.systemSetRemark', '系统设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1146, 1146, 'menu.system.systemResourceRemark', '系统资源 cpu io network菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1147, 1147, 'menu.config.configNEFormRemark', '参数配置Form菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1148, 1148, 'menu.config.configNETreeRemark', '参数配置Tree菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1149, 1149, 'menu.config.configNETreeTableRemark', '参数配置TreeTable菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1150, 1150, 'menu.noData', '没有可访问菜单数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1151, 1151, 'menu.errNameExists', '操作菜单【{name}】失败,菜单名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1152, 1152, 'menu.errPathExists', '操作菜单【{name}】失败,菜单路由地址已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1153, 1153, 'menu.errFramePath', '操作菜单【{name}】失败,非内部地址请以http(s)://开头', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1154, 1154, 'menu.errParentStatus', '上级菜单未启用!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1155, 1155, 'menu.errHasChildUse', '操作菜单【{name}】失败,存在使用子菜单数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1156, 1156, 'menu.errHasRoleUse', '操作菜单【{name}】失败,菜单已分配给角色数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1400, 1400, 'dictData.sex.un', '未选择', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1401, 1401, 'dictData.sex.male', '男', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1402, 1402, 'dictData.sex.female', '女', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1403, 1403, 'dictData.show', '显示', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1404, 1404, 'dictData.hide', '隐藏', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1405, 1405, 'dictData.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1406, 1406, 'dictData.disable', '停用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1407, 1407, 'dictData.yes', '是', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1408, 1408, 'dictData.no', '否', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1409, 1409, 'dictData.success', '成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1410, 1410, 'dictData.fail', '失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1411, 1411, 'dictData.jobStatus.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1412, 1412, 'dictData.jobStatus.pause', '暂停', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1413, 1413, 'dictData.jobGroup.Default', '默认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1414, 1414, 'dictData.jobGroup.System', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1415, 1415, 'dictData.operType.other', '其他', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1416, 1416, 'dictData.operType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1417, 1417, 'dictData.operType.edit', '修改', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1418, 1418, 'dictData.operType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1419, 1419, 'dictData.operType.auth', '授权', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1420, 1420, 'dictData.operType.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1421, 1421, 'dictData.operType.import', '导入', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1422, 1422, 'dictData.operType.forced quit', '强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1423, 1423, 'dictData.operType.clear', '清空', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1424, 1424, 'dictData.trace.interface', '接口跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1425, 1425, 'dictData.trace.device', '设备跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1426, 1426, 'dictData.trace.user', '用户跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1427, 1427, 'dictData.logType.download', '下载', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1428, 1428, 'dictData.logType.activation', '激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1429, 1429, 'dictData.logType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1430, 1430, 'dictData.logType.other', '其他', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1431, 1431, 'dictData.logType.back', '回退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1432, 1432, 'dictData.logType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1433, 1433, 'dictData.logType.distribute', '分配', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1434, 1434, 'dictData.logType.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1435, 1435, 'dictData.logType.query', '查询', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1436, 1436, 'dictData.logType.setup', '设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1437, 1437, 'dictData.logType.update', '更新', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1438, 1438, 'dictData.logType.upload', '上传', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1439, 1439, 'dictData.logType.view', '查看', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1440, 1440, 'dictData.logType.login', '登录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1441, 1441, 'dictData.logType.logout', '登出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1442, 1442, 'dictData.securityLogType.add', '新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1443, 1443, 'dictData.securityLogType.update', '更新', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1444, 1444, 'dictData.securityLogType.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1445, 1445, 'dictData.securityLogType.lock', '锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1446, 1446, 'dictData.securityLogType.unlock', '解锁', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1447, 1447, 'dictData.securityLogType.reset', '重置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1448, 1448, 'dictData.securityLogType.deactivate', '停用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1449, 1449, 'dictData.jobSaveLog.no', '不记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1450, 1450, 'dictData.jobSaveLog.yes', '记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1451, 1451, 'dictData.neVersionStatus.upload', '已上传', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1452, 1452, 'dictData.neVersionStatus.inactive', '未激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1453, 1453, 'dictData.neVersionStatus.active', '已激活', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1454, 1454, 'dictData.alarmStatus.history', '历史告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1455, 1455, 'dictData.alarmStatus.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1456, 1456, 'dictData.export.code', '数据代码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1457, 1457, 'dictData.export.sort', '数据排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1458, 1458, 'dictData.export.label', '数据标签', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1459, 1459, 'dictData.export.value', '数据键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1460, 1460, 'dictData.export.type', '数据排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1461, 1461, 'dictData.export.status', '数据状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1462, 1462, 'dictData.datascope.all', '全部数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1463, 1463, 'dictData.datascope.custom', '自定数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1464, 1464, 'dictData.datascope.dept', '部门数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1465, 1465, 'dictData.datascope.deptAndChid', '部门及以下数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1466, 1466, 'dictData.datascope.self', '仅本人数据权限', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1467, 1467, 'dictData.noData', '没有可访问字典编码数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1468, 1468, 'dictData.errLabelExists', '操作数据【{name}】失败,该字典类型下标签名已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1500, 1500, 'dictType.sys_user_sex', '用户性别', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1501, 1501, 'dictType.sys_show_hide', '菜单状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1502, 1502, 'dictType.sys_normal_disable', '系统开关', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1503, 1503, 'dictType.sys_job_status', '任务状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1504, 1504, 'dictType.sys_job_group', '任务分组', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1505, 1505, 'dictType.sys_yes_no', '系统是否', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1506, 1506, 'dictType.sys_oper_type', '操作类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1507, 1507, 'dictType.sys_common_status', '系统状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1508, 1508, 'dictType.trace_type', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1509, 1509, 'dictType.operation_log_type', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1510, 1510, 'dictType.alarm_status', '告警日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1511, 1511, 'dictType.security_log_type', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1512, 1512, 'dictType.ne_version_status', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1513, 1513, 'dictType.i18n_en', '多语言-英文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1514, 1514, 'dictType.i18n_zh', '多语言-中文', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1515, 1515, 'dictType.sys_user_sex_remark', '用户性别列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1516, 1516, 'dictType.sys_show_hide_remark', '菜单状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1517, 1517, 'dictType.sys_normal_disable_remark', '系统开关列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1518, 1518, 'dictType.sys_job_status_remark', '任务状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1519, 1519, 'dictType.sys_job_group_remark', '任务分组列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1520, 1520, 'dictType.sys_yes_no_remark', '系统是否列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1521, 1521, 'dictType.sys_oper_type_remark', '操作类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1522, 1522, 'dictType.sys_common_status_remark', '登录状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1523, 1523, 'dictType.trace_type_remark', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1524, 1524, 'dictType.operation_log_type_remark', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1525, 1525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1526, 1526, 'dictType.security_log_type_remark', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1527, 1527, 'dictType.ne_version_status_remark', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1528, 1528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1529, 1529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1530, 1530, 'dictType.export.id', '字典编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1531, 1531, 'dictType.export.name', '字典名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1532, 1532, 'dictType.export.type', '字典类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1533, 1533, 'dictType.export.status', '字典状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1534, 1534, 'dictType.sys_role_datascope', '系统角色数据范围', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1535, 1535, 'dictType.sys_role_datascope_remark', '系统角色数据范围映射', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1536, 1536, 'dictType.noData', '没有可访问字典类型数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1537, 1537, 'dictType.errNameExists', '操作字典【{name}】失败,字典名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1538, 1538, 'dictType.errTypeExists', '操作字典【{name}】失败,字典类型已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1600, 1600, 'dept.root', '系统维护部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1601, 1601, 'dept.root.item1', '运维一部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1602, 1602, 'dept.noData', '没有可访问部门数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1603, 1603, 'dept.errParentDelFlag', '上级部门【{name}】已删除,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1604, 1604, 'dept.errParentStatus', '上级部门【{name}】停用,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1605, 1605, 'dept.errNameExists', '操作部门【{name}】失败,部门名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1606, 1606, 'dept.errParentID', '操作部门【{name}】失败,上级部门不能是自己', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1607, 1607, 'dept.errHasChildUse', '操作失败,该部门包含未停用的子部门数量:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1608, 1608, 'dept.errHasUserUse', '不允许删除,部门已分配给用户数:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1630, 1630, 'config.sys.user.initPassword', '用户管理-账号初始密码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1631, 1631, 'config.sys.account.captchaEnabled', '账号自助-验证码开关', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1632, 1632, 'config.sys.account.registerUser', '账号自助-是否开启用户注册功能', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1633, 1633, 'config.sys.user.maxRetryCount', '用户管理-密码最大错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1634, 1634, 'config.sys.user.lockTime', '用户管理-密码锁定时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1635, 1635, 'config.monitor.sysResource.storeDays', '监控-系统资源-数据保留时长', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1636, 1636, 'config.sys.logo.type', '系统设置-LOGO类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1637, 1637, 'config.sys.logo.filePathIcon', '系统设置-LOGO文件icon', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1638, 1638, 'config.sys.logo.filePathBrand', '系统设置-LOGO文件brand', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1639, 1639, 'config.sys.loginBackground', '系统设置-登录界面背景', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1640, 1640, 'config.sys.title', '系统设置-系统名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1641, 1641, 'config.sys.copyright', '系统设置-版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1642, 1642, 'config.sys.user.initPasswordRemark', '导入用户初始化密码 123456', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1643, 1643, 'config.sys.account.captchaEnabledRemark', '是否开启验证码功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1644, 1644, 'config.sys.account.registerUserRemark', '是否开启注册用户功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1645, 1645, 'config.sys.user.maxRetryCountRemark', '密码最大错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1646, 1646, 'config.sys.user.lockTimeRemark', '密码锁定时间,单位分钟(默认10分钟)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1647, 1647, 'config.monitor.sysResource.storeDaysRemark', '监控-系统资源-数据保留时长,单位天。根据当前日期,删除超过保留时长的日期数据信息。', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1648, 1648, 'config.sys.logo.typeRemark', '全图:brand\r\n小图:icon', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1649, 1649, 'config.sys.logo.filePathIconRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1650, 1650, 'config.sys.logo.filePathBrandRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1651, 1651, 'config.sys.loginBackgroundRemark', '文件支持网络地址图片和内部上传的文件路径,默认背景用#号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1652, 1652, 'config.sys.titleRemark', '系统名称长度限制11位字符串', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1653, 1653, 'config.sys.copyrightRemark', '底脚固定条,左侧放置版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1654, 1654, 'config..export.id', '参数编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1655, 1655, 'config..export.name', '参数名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1656, 1656, 'config..export.key', '参数键名', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1657, 1657, 'config..export.value', '参数键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1658, 1658, 'config..export.type', '系统内置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1659, 1659, 'config..export.remark', '参数说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1660, 1660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1661, 1661, 'config.sys.copyrightValue', 'Copyright ©2023 千通科技', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1662, 1662, 'config.noData', '没有可访问参数配置数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1663, 1663, 'config.errKey', '无效 key', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1664, 1664, 'config.errValueEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1665, 1665, 'config.errKeyExists', '操作参数配置【{name}】失败,参数键名已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1666, 1666, 'config.errDelete', '删除参数配置信息失败!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1667, 1667, 'config.errType', '操作含有内置参数,禁止删除!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1700, 1700, 'job.monitor_sys_resource', '监控-系统资源', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1701, 1701, 'job.monitor_sys_resource_remark', '系统资源CPU/IO/Netword收集\r\ninterval单位分钟,平均分钟资源情况\r\n注:请根据cron表达式的时间单位分钟,传入参数interva值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1702, 1702, 'job.delExpiredNeBackup', '删除过期网元备份文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1703, 1703, 'job.delExpiredNeBackupRemark', '删除过期网元etc备份文件, 传入参数表示保留{duration}天的备份文件, 默认60天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1704, 1704, 'job.deleteExpiredAlarmRecord', '删除过期历史告警记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1705, 1705, 'job.deleteExpiredAlarmRecordRemark', '删除过期历史告警记录,传入参数表示保留{duration}天的历史告警记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1706, 1706, 'job.deleteExpiredKpiRecord', '删除过期黄金指标记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1707, 1707, 'job.deleteExpiredKpiRecordRemark', '黄金指标记录保留{duration}天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1708, 1708, 'job.backupEtcFromNE', '网元配置自动备份任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1709, 1709, 'job.backupEtcFromNERemark', '自动备份网元etc目录下的配置文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1710, 1710, 'job.export.jobID', '任务编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1711, 1711, 'job.export.jobName', '任务名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1712, 1712, 'job.export.jobGroupName', '任务组名', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1713, 1713, 'job.export.invokeTarget', '调用目标', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1714, 1714, 'job.export.targetParams', '传入参数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1715, 1715, 'job.export.cronExpression', 'cron表达式', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1716, 1716, 'job.export.status', '状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1717, 1717, 'job.export.remark', '备注说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1718, 1718, 'job.export.jobLogID', '任务日志编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1719, 1719, 'job.export.jobLogStatus', '任务日志状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1720, 1720, 'job.export.jobLogTime', '任务日志时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1721, 1721, 'job.noData', '没有可访问调度任务数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1722, 1722, 'job.errTargetParams', '操作调度任务【{name}】失败,任务传入参数json字符串不正确', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1723, 1723, 'job.errCronExpression', '操作调度任务【{name}】失败,Cron表达式不正确', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1724, 1724, 'job.errJobExists', '调度任务新增【{name}】失败,同任务组内有相同任务名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1725, 1725, 'job.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1750, 1750, 'role.admin', '超级管理员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1751, 1751, 'role.adminAssign', '管理人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1752, 1752, 'role.operator', '运维人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1753, 1753, 'role.monitor', '监控人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1754, 1754, 'role.vistor', '普通用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1755, 1755, 'role.adminRemark', '超级管理员,无法修改删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1756, 1756, 'role.adminAssignRemark', '管理人员 可以对设备进行任何操作', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1757, 1757, 'role.operatorRemark', '运维人员 可以从设备读取数据,并对设备进行配置,但是不能对设备进行软件升级操作。', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1758, 1758, 'role.monitorRemark', '监控人员 只能从设备读取数据,而不能对设备进行任何设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1759, 1759, 'role.vistorRemark', '普通用户 只可看系统相关信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1760, 1760, 'role.export.id', '角色编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1761, 1761, 'role.export.name', '角色名称 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1762, 1762, 'role.export.key', '角色键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1763, 1763, 'role.export.sort', '角色顺序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1764, 1764, 'role.export.dataScope', '角色数据范围', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1765, 1765, 'role.export.status', '角色状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1766, 1766, 'role.noData', '没有可访问角色数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1767, 1767, 'role.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1768, 1768, 'role.errNameExists', '操作角色【{name}】失败,角色名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1769, 1769, 'role.errKeyExists', '操作角色【{name}】失败,角色键值已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1800, 1800, 'post.admin', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1801, 1801, 'post.operator', '管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1802, 1802, 'post.monitor', '运维', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1803, 1803, 'post.visitor', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1804, 1804, 'post.export.id', '岗位编号 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1805, 1805, 'post.export.code', '岗位编码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1806, 1806, 'post.export.name', '岗位名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1807, 1807, 'post.export.sort', '岗位排序', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1808, 1808, 'post.export.status', '岗位状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1809, 1809, 'post.noData', '没有可访问岗位数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1810, 1810, 'post.errNameExists', '操作岗位【{name}】失败,岗位名称已存在已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1811, 1811, 'post.errCodeExists', '操作角色【{name}】失败,角色键值已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1830, 1830, 'user.export.id', '用户编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1831, 1831, 'user.export.name', '登录账号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1832, 1832, 'user.export.nick', '用户昵称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1833, 1833, 'user.export.email', '电子邮箱', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1834, 1834, 'user.export.phone', '手机号码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1835, 1835, 'user.export.sex', '用户性别', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1836, 1836, 'user.export.status', '用户状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1837, 1837, 'user.export.deptID', '部门编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1838, 1838, 'user.export.deptName', '部门名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1839, 1839, 'user.export.deptLeader', '部门负责人', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1840, 1840, 'user.export.loginIP', '用户登录IP', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1841, 1841, 'user.export.loginDate', '用户登录时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1842, 1842, 'user.noData', '没有可访问用户数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1843, 1843, 'user.statusEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1844, 1844, 'user.errPasswdOld', '修改密码失败,旧密码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1845, 1845, 'user.errPasswdEqOld', '新密码不能与旧密码相同', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1846, 1846, 'user.errPasswd', '登录密码至少包含大小写字母、数字、特殊符号,且不少于6位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1847, 1847, 'user.errEmailFormat', '操作用户【{name}】失败,邮箱格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1848, 1848, 'user.errEmailExists', '操作用户【{name}】失败,邮箱已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1849, 1849, 'user.errPhoneFormat', '操作用户【{name}】失败,手机号码格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1850, 1850, 'user.errPhoneExists', '操作用户【{name}】失败,手机号码已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1851, 1851, 'user.errNameExists', '操作用户【{name}】失败,登录账号已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1852, 1852, 'user.import.mustItem', '表格中必填列表项,{text}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1853, 1853, 'user.import.phoneExist', '用户编号:{id} 手机号码 {phone} 已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1854, 1854, 'user.import.phoneFormat', '用户编号:{id} 手机号码 {phone} 格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1855, 1855, 'user.import.emailExist', '用户编号:{id} 用户邮箱:{email} 已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1856, 1856, 'user.import.emailFormat', '用户编号:{id} 用户邮箱:{email} 格式错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1857, 1857, 'user.import.success', '用户编号:{id} 登录名称:{name} 导入成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1858, 1858, 'user.import.fail', '用户编号:{id} 登录名称:{name} 导入失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1859, 1859, 'user.import.successUpdate', '用户编号:{id} 登录名称:{name} 更新成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1860, 1860, 'user.import.failUpdate', '用户编号:{id} 登录名称:{name} 更新失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1861, 1861, 'user.import.failTip', '很抱歉,导入失败!共 {num} 条数据格式不正确,错误如下:', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1862, 1862, 'user.import.successTip', '恭喜您,数据已全部导入成功!共 {num} 条,数据如下:', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1900, 1900, 'app.common.err403', '无权访问 {method} {requestURI}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1901, 1901, 'app.common.err401', '无效身份授权', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1902, 1902, 'app.common.err400', '参数错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1903, 1903, 'app.common.exportEmpty', '导出数据记录为空', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1904, 1904, 'app.common.errOperateAdmin', '不允许操作内置用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1905, 1905, 'app.common.errOperateRole', '不允许操作内置角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1906, 1906, 'app.common.deleteSuccess', '删除成功:{num}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1907, 1907, 'app.common.loginSuccess', '登录成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1908, 1908, 'app.common.logoutSuccess', '注销成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1909, 1909, 'app.common.errUnlock', '该用户未被锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1910, 1910, 'app.common.noLoginUser', '登录用户信息无效', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1911, 1911, 'app.common.rateLimitTip', '访问过于频繁,请稍候再试', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1912, 1912, 'log.operate.export.id', '操作编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1913, 1913, 'log.operate.export.title', '模块名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1914, 1914, 'log.operate.export.businessType', '业务类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1915, 1915, 'log.operate.export.method', '操作方法', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1916, 1916, 'log.operate.export.requestMethod', '请求方式 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1917, 1917, 'log.operate.export.operatorType', '操作类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1918, 1918, 'log.operate.export.operName', '操作人员', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1919, 1919, 'log.operate.export.deptName', '操作人员部门名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1920, 1920, 'log.operate.export.url', '请求链接地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1921, 1921, 'log.operate.export.ip', '请求主机 ', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1922, 1922, 'log.operate.export.location', '请求地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1923, 1923, 'log.operate.export.param', '请求参数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1924, 1924, 'log.operate.export.msg', '操作信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1925, 1925, 'log.operate.export.status', '操作状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1926, 1926, 'log.operate.export.costTime', '消耗时间(毫秒)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1927, 1927, 'log.operate.export.operTime', '操作时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1928, 1928, 'log.login.export.id', '记录编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1929, 1929, 'log.login.export.userName', '登录账号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1930, 1930, 'log.login.export.status', '登录状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1931, 1931, 'log.login.export.ip', '登录地址', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1932, 1932, 'log.login.export.location', '登录地点', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1933, 1933, 'log.login.export.browser', '浏览器', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1934, 1934, 'log.login.export.os', '操作系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1935, 1935, 'log.login.export.msg', '登录信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1936, 1936, 'log.login.export.time', '登录时间', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1937, 1937, 'trace.tcpdump.noData', '找不到 {type} {id} 对应网元信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1938, 1938, 'register.errUsername', '账号不能以数字开头,可包含大写小写字母,数字,且不少于5位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1939, 1939, 'register.errPasswd', '登录密码至少包含大小写字母、数字、特殊符号,且不少于6位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1940, 1940, 'register.errPasswdNotEq', '用户确认输入密码不一致', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1941, 1941, 'register.success', '注册成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1942, 1942, 'register.successMsg', '{name} 注册成功 {id}', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1943, 1943, 'log.operate.title.sysJobLog', '调度任务日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1944, 1944, 'log.operate.title.sysJob', '调度任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1945, 1945, 'log.operate.title.tcpdump', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1946, 1946, 'log.operate.title.sysConfig', '参数配置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1947, 1947, 'log.operate.title.sysDept', '部门', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1948, 1948, 'log.operate.title.sysDictData', '字典数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1949, 1949, 'log.operate.title.sysDictType', '字典类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1950, 1950, 'log.operate.title.sysMenu', '菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1951, 1951, 'log.operate.title.sysPost', '岗位', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1952, 1952, 'log.operate.title.sysProfile', '个人信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1953, 1953, 'log.operate.title.sysProfileAvatar', '个人头像', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1954, 1954, 'log.operate.title.sysRole', '角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1955, 1955, 'log.operate.title.sysUser', '用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1956, 1956, 'log.operate.title.sysLogOper', '操作日志记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1957, 1957, 'log.operate.title.sysLogLogin', '登录日志记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1958, 1958, 'login.errNameOrPasswd', '用户不存在或密码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1959, 1959, 'login.errDelFlag', '对不起,您的账号已被删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1960, 1960, 'login.errStatus', '对不起,您的帐户已被禁用', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1961, 1961, 'login.errRetryPasswd', '密码输入错误多次,帐户已被锁定', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1962, 1962, 'captcha.err', '验证码错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1963, 1963, 'captcha.errValid', '验证码已失效', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1964, 1964, 'app.common.noUaOsBrowser', '未知 未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1965, 1965, 'app.common.noIPregion', '内网', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1966, 1966, 'app.common.unknown', '未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1967, 1967, 'app.common.noNEInfo', '未找到匹配网元信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1968, 1968, 'ne.udm.errImportUserAuthFileFormat', '请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, ki, algo, amf, opc', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1969, 1969, 'ne.udm.errExportType', '导出文件类型支持CSV和txt', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1970, 1970, 'ne.udm.errImportUserSubFileFormat', '请上传.csv或.txt的格式文件。英文逗号分割txt格式:imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1971, 1971, 'log.operate.title.udmAuth', 'UDM鉴权用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1972, 1972, 'log.operate.title.udmSub', 'UDM签约用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1973, 1973, 'dictType.active_alarm_type', '活动告警类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1974, 1974, 'dictType.active_alarm_type_remark', '活动告警类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1975, 1975, 'dictData.active_alarm_type.communication', '通信告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1976, 1976, 'dictData.active_alarm_type.equipment', '设备告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1977, 1977, 'dictData.active_alarm_type.processing', '处理错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1978, 1978, 'dictData.active_alarm_type.environmental', '环境告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1979, 1979, 'dictData.active_alarm_type.qualityOfService', '服务质量', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1980, 1980, 'dictType.active_clear_type', '告警清除类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1981, 1981, 'dictType.active_clear_type_remark', '告警清除类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1982, 1982, 'dictData.active_clear_type.notCleared', '告警未清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1983, 1983, 'dictData.active_clear_type.hand', '手动清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1984, 1984, 'dictData.active_clear_type.auto', '自动清除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1985, 1985, 'dictType.active_ack_state', '告警确认类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1986, 1986, 'dictType.active_ack_state_remark', '告警确认类型列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1987, 1987, 'dictData.active_ack_state.unconfirmed', '未确认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1988, 1988, 'dictData.active_ack_state.confirmed', '已确认', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1989, 1989, 'dictType.active_alarm_severity', '严重程度', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1990, 1990, 'dictType.active_alarm_severity_remark', '严重程度列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1991, 1991, 'dictData.active_alarm_severity.critical', '严重告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1992, 1992, 'dictData.active_alarm_severity.major', '主要告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1993, 1993, 'dictData.active_alarm_severity.minor', '次要告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1994, 1994, 'dictData.active_alarm_severity.warning', '警告告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1995, 1995, 'dictData.active_alarm_severity.event', '事件告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1996, 1996, 'config.sys.officialUrl', '系统设置-官网链接', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1997, 1997, 'config.sys.helpDoc', '系统设置-系统使用文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1998, 1998, 'config.sys.officialUrlRemark', '默认无地址用#号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1999, 1999, 'config.sys.helpDocRemark', '静态文件目录地址,使用{language}区分语言文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2000, 2000, 'log.operate.title.neAction', '网元处理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2001, 2001, 'log.operate.title.helpDoc', '系统使用文档', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2002, 2002, 'menu.ueUser.n3iwf', 'N3IWF在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2003, 2003, 'menu.ueUser.pcf', '用户策略控制信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2004, 2004, 'menu.system.user.editRole', '修改用户角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2005, 2005, 'config.sys.i18nOpen', '国际化切换', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2006, 2006, 'config.sys.i18nDefault', '国际化默认语言', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2007, 2007, 'user.export.role', '用户角色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2008, 2008, 'menu.system.setting.i18n', '国际化切换', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2009, 2009, 'menu.system.setting.i18nRemark', '国际化多语言的切换选择', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2010, 2010, 'dictType.index_status', '首页状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2011, 2011, 'dictType.index_status_remark', '首页的网元状态颜色', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2012, 2012, 'dictType.index_status.normal', '正常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2013, 2013, 'dictType.index_status.abnormal', '异常', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2014, 2014, 'menu.log.neFile', '网元日志文件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2015, 2015, 'job.deleteExpiredNeStateRecord', '删除过期网元状态记录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2016, 2016, 'job.deleteExpiredNeStateRecordRemark', '定期删除过期的网元状态记录, 默认保留{duration}天', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2017, 2017, 'job.getStateFromNE', '获取网元状态信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2018, 2018, 'job.getStateFromNERemark', '获取所有网元状态信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2019, 2019, 'job.genNeStateAlarm', '网元健康状态巡检', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2020, 2020, 'job.genNeStateAlarmRemark', '网元健康状态巡检,异常时产生告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2021, 2021, 'menu.neUser.nssf', 'NSSF在线订阅数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2022, 2022, 'menu.neUser.nssfAmf', 'NSSF可用的注册AMF', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2023, 2023, 'menu.monitor.topology', '拓扑信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2024, 2024, 'menu.monitor.topologyBuild', '拓扑图组编辑', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2025, 2025, 'log.operate.title.chartGraph', '拓扑图组', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2026, 2026, 'menu.monitor.topologyArchitecture', '网元拓扑组网', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2027, 2027, 'menu.alarm', '告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2028, 2028, 'menu.topology', '拓扑', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2029, 2029, 'config.sys.lockTime', '系统设置-锁屏超时时长', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2030, 2030, 'config.sys.lockTimeRemark', '无操作时锁屏超时时长,单位(秒)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2031, 2031, 'sys.account.captchaType', '账号自助-验证码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2032, 2032, 'sys.account.captchaTypeRemark', '使用验证码类型(math数值计算,char字符验证)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2033, 2033, 'menu.dashboard', '仪表盘', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2034, 2034, 'menu.dashboard.overview', '总览', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2035, 2035, 'menu.dashboard.cdr', 'IMS 话单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2036, 2036, 'dictType.cdr_sip_code', 'CDR SIP响应代码类别类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2037, 2037, 'dictType.cdr_call_type', 'CDR 呼叫类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2038, 2038, 'dictType.ue_auth_code', 'UE 事件认证代码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2039, 2039, 'dictType.ue_event_type', 'UE 事件类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2040, 2040, 'dictData.cdr_sip_code.200', '正常挂机', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2041, 2041, 'dictData.cdr_sip_code.403', '被禁止的', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2042, 2042, 'dictData.cdr_sip_code.408', '请求超时', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2043, 2043, 'dictData.cdr_sip_code.500', '服务器内部错误', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2044, 2044, 'dictData.cdr_call_type.audio', '语音', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2045, 2045, 'dictData.cdr_call_type.video', '视频', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2046, 2046, 'dictData.ue_auth_code.200', '成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2047, 2047, 'dictData.ue_auth_code.001', '网络失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2048, 2048, 'dictData.ue_auth_code.002', '空口接口失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2049, 2049, 'dictData.ue_auth_code.003', 'MAC失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2050, 2050, 'dictData.ue_auth_code.004', '同步失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2051, 2051, 'dictData.ue_auth_code.005', '不接受非5G认证', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2052, 2052, 'dictData.ue_auth_code.006', '响应失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2053, 2053, 'dictData.ue_auth_code.007', '未知', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2054, 2054, 'dictData.ue_event_type.auth', '认证', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2055, 2055, 'dictData.ue_event_type.detach', '注销', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2056, 2056, 'dictData.ue_event_type.state', 'CM状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2057, 2057, 'dictType.ue_event_cm_state', 'UE 事件CM状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2058, 2058, 'dictData.ue_event_cm_state.connected', '连接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2059, 2059, 'dictData.ue_event_cm_state.idle', '空闲', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2060, 2060, 'dictData.ue_event_cm_state.inactive', '不活动', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2061, 2061, 'dictData.cdr_sip_code.404', '未找到', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2062, 2062, 'dictData.cdr_sip_code.487', '请求终止', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2063, 2063, 'dictData.cdr_sip_code.503', '服务不可用', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2064, 2064, 'dictData.cdr_sip_code.504', '服务器超时', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2065, 2065, 'dictData.cdr_sip_code.603', '拒绝', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2066, 2066, 'dictData.cdr_sip_code.606', '不可接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2067, 2067, 'cache.name.user', '登录用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2068, 2068, 'cache.name.sys_config', '参数管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2069, 2069, 'cache.name.sys_dict', '字典管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2070, 2070, 'cache.name.captcha_codes', '验证码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2071, 2071, 'cache.name.repeat_submit', '防重提交', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2072, 2072, 'cache.name.rate_limit', '限流', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2073, 2073, 'cache.name.pwd_err_cnt', '登录账户密码错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2074, 2074, 'cache.name.ne_info', '网元信息管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2075, 2075, 'cache.name.ne_data', '网元数据管理', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2076, 2076, 'dictData.cdr_call_type.sms', '短信', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2077, 2077, 'dictData.cdr_sip_code.202', '已接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2078, 2078, 'dictData.cdr_sip_code.488', '这里不能接受', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2079, 2079, 'dictData.cdr_sip_code.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2080, 2080, 'log.operate.title.ws', 'WS会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2081, 2081, 'log.operate.title.neHost', '网元主机', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2082, 2082, 'neHost.noData', '没有可访问主机信息数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2083, 2083, 'neHost.errKeyExists', '主机信息操作【{name}】失败,同组内名称已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2084, 2084, 'neHost.errByHostInfo', '连接主机失败,请检查连接参数后重试', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2085, 2085, 'dictType.ne_host_type', '网元主机连接类型', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2086, 2086, 'dictType.ne_host_groupId', '网元主机分组', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2087, 2087, 'dictType.ne_host_authMode', '网元主机认证模式', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2088, 2088, 'dictData.ne_host_type.ssh', 'SSH', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2089, 2089, 'dictData.ne_host_type.telnet', 'Telnet', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2090, 2090, 'dictData.ne_host_groupId.0', '其他', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2091, 2091, 'dictData.ne_host_groupId.1', '网元', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2092, 2092, 'dictData.ne_host_groupId.2', '系统', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2093, 2093, 'dictData.ne_host_authMode.0', '密码认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2094, 2094, 'dictData.ne_host_authMode.1', '私钥认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2095, 2095, 'menu.tools.terminal', '网元主机终端', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2096, 2096, 'menu.config.neHost', '网元主机', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2097, 2097, 'menu.config.neHostCommand', '网元主机命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2098, 2098, 'log.operate.title.neHostCmd', '网元主机命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2099, 2099, 'neHostCmd.noData', '没有可访问主机命令数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2100, 2100, 'neHostCmd.errKeyExists', '主机命令操作【{name}】失败,同组内名称已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2101, 2101, 'dictType.ne_host_cmd_groupId', '网元主机命令分组', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2102, 2102, 'dictData.ne_host_cmd_groupId.0', '默认', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2103, 2103, 'dictData.ne_host_cmd_groupId.1', '快速命令', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2104, 2104, 'menu.config.neInfo', '网元信息', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2105, 2105, 'log.operate.title.neInfo', '网元信息', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2106, 2106, 'neInfo.noData', '没有可访问网元信息数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2107, 2107, 'neInfo.errKeyExists', '网元信息操作【{key}】失败,同类型下标识已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2108, 2108, 'log.operate.title.imsCDR', 'IMS-CDR会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2109, 2109, 'menu.dashboard.amfUE', '用户事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2110, 2110, 'log.operate.title.amfUE', 'AMF-UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '同步配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2115, 2115, 'dictType.ne_info_status', '网元信息状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2116, 2116, 'menu.tools.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2117, 2117, 'log.operate.title.neConfig', '网元参数配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2118, 2118, 'menu.config.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2119, 2119, 'log.operate.title.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2120, 2120, 'menu.config.neSoftware', '网元软件包', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2121, 2121, 'log.operate.title.neSoftware', '网元软件包', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2122, 2122, 'log.operate.title.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2123, 2123, 'menu.config.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2124, 2124, 'dictType.ne_license_status', '网元授权状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2125, 2125, 'ne_license_status.0', '无效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2126, 2126, 'ne_license_status.1', '有效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2127, 2127, 'menu.dashboard.mocn', 'MOCN', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO + `sys_dict_data` +VALUES ( + 2128, 2128, 'menu.monitor.cdr', '话单', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '' + ); +REPLACE INTO + `sys_dict_data` +VALUES ( + 2129, 2129, 'menu.monitor.event', '事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '' + ); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgvue3/upg_sys_dict_data2_i18n_en.sql b/database/upgvue3/upg_sys_dict_data2_i18n_en.sql index 96087c81..7dc06be5 100644 --- a/database/upgvue3/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgvue3/upg_sys_dict_data2_i18n_en.sql @@ -17,612 +17,646 @@ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -INSERT IGNORE INTO `sys_dict_data` VALUES (3000, 3000, 'i18n', 'English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3001, 3001, 'hello', 'Hello', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3002, 3002, 'menu.system', 'System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3003, 3003, 'menu.monitor', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3004, 3004, 'menu.tools', 'Tools', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3005, 3005, 'menu.config', 'Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3006, 3006, 'menu.ueUser', 'UE', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3007, 3007, 'menu.systemRemark', 'System Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3008, 3008, 'menu.monitorRemark', 'System Monitor Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3009, 3009, 'menu.toolsRemark', 'System Tools Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3010, 3010, 'menu.configRemark', 'OMC Configuration Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3011, 3011, 'menu.ueUserRemark', 'Network Element Terminal Information Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3012, 3012, 'menu.security.user', 'User Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3013, 3013, 'menu.security.role', 'Role Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3014, 3014, 'menu.security.roleUser', 'Assigning Roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3015, 3015, 'menu.system.menu', 'Menu Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3016, 3016, 'menu.security.dept', 'Department Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3017, 3017, 'menu.security.post', 'Position Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3018, 3018, 'menu.system.dictType', 'Dictionary Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3019, 3019, 'menu.system.dictData', 'Dictionary Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3020, 3020, 'menu.system.paramSet', 'Parameter Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3021, 3021, 'menu.system.systemLog', 'System Log', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3022, 3022, 'menu.system.systemInfo', 'System Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3023, 3023, 'menu.system.cacheInfo', 'Cache Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3024, 3024, 'menu.system.cache', 'Cache Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3025, 3025, 'menu.security.onlineUser', 'Online Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3026, 3026, 'menu.system.job', 'Scheduling Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3027, 3027, 'menu.system.jobLog', 'Scheduling Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3028, 3028, 'menu.tools.help', 'Help Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3029, 3029, 'menu.log.operat', 'Operation logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3030, 3030, 'menu.log.login', 'Security logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3031, 3031, 'menu.security.userRemark', 'User Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3032, 3032, 'menu.security.roleRemark', 'Role Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3033, 3033, 'menu.security.roleUserRemark', 'Assign Roles Embedded Hidden Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3034, 3034, 'menu.system.menuRemark', 'Menu Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3035, 3035, 'menu.security.deptRemark', 'Department management menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3036, 3036, 'menu.security.postRemark', 'Job Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3037, 3037, 'menu.system.dictTypeRemark', 'Dictionary management menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3038, 3038, 'menu.system.dictDataRemark', 'Dictionary data embedded hidden menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3039, 3039, 'menu.system.paramSetRemark', 'Parameter setting menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3040, 3040, 'menu.system.systemLogRemark', 'System Log Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3041, 3041, 'menu.system.systemInfoRemark', 'System information menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3042, 3042, 'menu.system.cacheInfoRemark', 'Cache Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3043, 3043, 'menu.system.cacheRemark', 'Cache List Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3044, 3044, 'menu.security.onlineUserRemark', 'Online User Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3045, 3045, 'menu.system.jobRemark', 'Scheduling Tasks menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3046, 3046, 'menu.system.jobLogRemark', 'Scheduling Log Embedded Hidden Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3047, 3047, 'menu.tools.helpRemark', 'Help file menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3048, 3048, 'menu.log.operatRemark', 'Operation log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3049, 3049, 'menu.log.loginRemark', 'Login log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3050, 3050, 'menu.common.query', 'Inquiry', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3051, 3051, 'menu.common.add', 'Add', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3052, 3052, 'menu.common.edit', 'Modify', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3053, 3053, 'menu.common.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3054, 3054, 'menu.common.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3055, 3055, 'menu.common.import', 'Import', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3056, 3056, 'menu.common.reset', 'Reset', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3057, 3057, 'menu.common.unlock', 'Account Unlock', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3058, 3058, 'menu.forcedQuit.batch ', 'Batch Undo', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3059, 3059, 'menu.forcedQuit.single', 'Individual Forced Retirement', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3060, 3060, 'menu.ueUser.authUDM', 'UDM Authentication', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3061, 3061, 'menu.ueUser.subUDM', 'UDM Subscribers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3062, 3062, 'menu.ueUser.authUDMRemark', 'UDM Authentication Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3063, 3063, 'menu.ueUser.subUDMRemark', 'UDM Subscriber Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3064, 3064, 'menu.config.neManage', 'NE Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3065, 3065, 'menu.config.configNE', 'Parameter Configuration Original', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3066, 3066, 'menu.config.neManageRemark', 'Network Element Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3067, 3067, 'menu.config.configNERemark', 'Parameter Configuration Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3068, 3068, 'menu.config.backupManage', 'Backup Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3069, 3069, 'menu.config.softwareManage', 'Software Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3070, 3070, 'menu.ueUser.onlineIMS', 'IMS Online Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3071, 3071, 'menu.ueUser.onlineUE', 'UE Online Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3072, 3072, 'menu.ueUser.base5G', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3073, 3073, 'menu.trace', 'Trace', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'Trace Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'Signaling Analysis', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3076, 3076, 'menu.trace.pcap', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3077, 3077, 'menu.fault', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3078, 3078, 'menu.config.backupManageRemark', 'Backup Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3079, 3079, 'menu.config.softwareManageRemark', 'Software Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3080, 3080, 'menu.ueUser.onlineIMSRemark', 'IMS Online User Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3081, 3081, 'menu.ueUser.onlineUERemark', 'UE Online Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3082, 3082, 'menu.ueUser.base5GRemark', '5G Base Station Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3083, 3083, 'menu.traceRemark', 'Tracking Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3084, 3084, 'menu.trace.taskRemark', 'Tracking Task Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3086, 3086, 'menu.trace.pcapRemark', 'Signaling Capture Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3087, 3087, 'menu.faultRemark', 'Fault Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3088, 3088, 'menu.fault.active', 'Active Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3089, 3089, 'menu.log', 'Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3090, 3090, 'menu.log.operatOld', 'Operation Logs (old)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3091, 3091, 'menu.log.mml', 'MML Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3092, 3092, 'menu.log.alarm', 'Alarm Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3093, 3093, 'menu.log.securityOld', 'Security Logs (old)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3094, 3094, 'menu.log.forwarding', 'Alarm Forwarding Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3095, 3095, 'menu.log.set', 'Log Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3096, 3096, 'menu.monitor.sessionUser', 'User Sessions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3097, 3097, 'menu.fault.history', 'Historical Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3098, 3098, 'menu.fault.set', 'Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3099, 3099, 'menu.perf', 'Performance', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3100, 3100, 'menu.fault.activemRemark', 'Active Alarm Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3101, 3101, 'menu.logRemark', 'Log Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3102, 3102, 'menu.log.operatOldRemark', 'Operation log old layui menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3103, 3103, 'menu.log.mmlRemark', 'Operation MML Log', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3104, 3104, 'menu.log.alarmRemark', 'Alarm Log Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3105, 3105, 'menu.log.securityOldRemark', 'Security Log Old Layui Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3106, 3106, 'menu.log.forwardingRemark', 'Alarm forward log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3107, 3107, 'menu.log.setRemark', 'Log Settings menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3108, 3108, 'menu.monitor.sessionUserRemark', 'User Session Old Layui Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3109, 3109, 'menu.fault.historyRemark', 'Alarm history menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3110, 3110, 'menu.fault.setRemark', 'Fault General Setup Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3111, 3111, 'menu.perfRemark', 'Performance Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3112, 3112, 'menu.perf.task', 'Performance Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3113, 3113, 'menu.perf.data', 'Performance Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3114, 3114, 'menu.perf.report', 'Performance Reports', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3115, 3115, 'menu.perf.threshold', 'Performance Thresholds', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3116, 3116, 'menu.perf.kpi', 'Key Performance Indicators', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3117, 3117, 'menu.perf.customTarget', 'Custom Metrics', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3118, 3118, 'menu.perf.set', 'Performance General Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3119, 3119, 'menu.mml', 'MML', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3120, 3120, 'menu.mml.ne', 'NE Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3121, 3121, 'menu.mml.udm', 'UDM Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3122, 3122, 'menu.mml.set', 'MML Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3123, 3123, 'menu.mml.omc', 'OMC Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3124, 3124, 'menu.perf.taskRemark', 'Task Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3125, 3125, 'menu.perf.dataRemark', 'Performance Data Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3126, 3126, 'menu.perf.reportRemark', 'Performance Report Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3127, 3127, 'menu.perf.thresholdRemark', 'Performance Threshold Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3128, 3128, 'menu.perf.kpiRemark', 'Key Performance Indicator Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3129, 3129, 'menu.perf.customTargetRemark', 'Custom Metrics Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3130, 3130, 'menu.perf.setRemark', 'Performance General Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3131, 3131, 'menu.mmlRemark', 'MML Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3132, 3132, 'menu.mml.neRemark', 'Network Element Operations Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3133, 3133, 'menu.mml.udmRemark', 'Network Element UDM User Data Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3134, 3134, 'menu.mml.setRemark', 'MML Setup Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3135, 3135, 'menu.mml.omcRemark', 'OMC Operation Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3136, 3136, 'menu.config.licenseManage', 'License Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3137, 3137, 'menu.security', 'Security', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3138, 3138, 'menu.system.systemSet', 'System Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3139, 3139, 'menu.system.systemResource', 'System Resources', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3140, 3140, 'menu.config.configNEForm', 'Parameter Configuration Form', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3141, 3141, 'menu.config.configNETree', 'Parameter Configuration Tree', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3142, 3142, 'menu.config.configNETreeTable', 'Parameter Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3143, 3143, 'menu.config.licenseManageRemark', 'License Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3144, 3144, 'menu.securityRemark', 'Security Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3145, 3145, 'menu.system.systemSetRemark', 'System Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3146, 3146, 'menu.system.systemResourceRemark', 'System Resources cpu io network menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3147, 3147, 'menu.config.configNEFormRemark', 'Parameter Configuration Form Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3148, 3148, 'menu.config.configNETreeRemark', 'Parameter Configuration Tree Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3149, 3149, 'menu.config.configNETreeTableRemark', 'Configuring the TreeTable menu with parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3150, 3150, 'menu.noData', 'There is no accessible menu data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3151, 3151, 'menu.errNameExists', 'Failed to operate menu [{name}], menu name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3152, 3152, 'menu.errPathExists', 'Failed to operate menu [{name}], menu routing address already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3153, 3153, 'menu.errFramePath', 'Failed to manipulate menu [{name}], non-internal address should start with http(s)://', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3154, 3154, 'menu.errParentStatus', 'The parent menu is not enabled!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3155, 3155, 'menu.errHasChildUse', 'Operation menu [{name}] failed, number of submenus in use exists: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3156, 3156, 'menu.errHasRoleUse', 'Operation menu [{name}] failed, number of roles the menu has been assigned to: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3400, 3400, 'dictData.sex.un', 'Not selected', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3401, 3401, 'dictData.sex.male', 'Male', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3402, 3402, 'dictData.sex.female', 'Female', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3403, 3403, 'dictData.show', 'Show', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3404, 3404, 'dictData.hide', 'Hide', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3405, 3405, 'dictData.normal', 'Active', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3406, 3406, 'dictData.disable', 'Inactive', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3407, 3407, 'dictData.yes', 'Yes', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3408, 3408, 'dictData.no', 'No', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3409, 3409, 'dictData.success', 'Successful', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3410, 3410, 'dictData.fail', 'Failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3411, 3411, 'dictData.jobStatus.normal', 'Active', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3412, 3412, 'dictData.jobStatus.pause', 'Inactive', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3413, 3413, 'dictData.jobGroup.Default', 'Default', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3414, 3414, 'dictData.jobGroup.System', 'System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3415, 3415, 'dictData.operType.other', 'Other', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3416, 3416, 'dictData.operType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3417, 3417, 'dictData.operType.edit', 'Modify', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3418, 3418, 'dictData.operType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3419, 3419, 'dictData.operType.auth', 'Authorization', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3420, 3420, 'dictData.operType.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3421, 3421, 'dictData.operType.import', 'Import', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3422, 3422, 'dictData.operType.forced quit', 'Forced Retirement', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3423, 3423, 'dictData.operType.clear', 'Clear', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3424, 3424, 'dictData.trace.interface', 'Interface Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3425, 3425, 'dictData.trace.device', 'Device Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3426, 3426, 'dictData.trace.user', 'User Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3427, 3427, 'dictData.logType.download', 'Download', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3428, 3428, 'dictData.logType.activation', 'Activation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3429, 3429, 'dictData.logType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3430, 3430, 'dictData.logType.other', 'Other', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3431, 3431, 'dictData.logType.back', 'Rollback', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3432, 3432, 'dictData.logType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3433, 3433, 'dictData.logType.distribute', 'Assign', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3434, 3434, 'dictData.logType.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3435, 3435, 'dictData.logType.query', 'Query', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3436, 3436, 'dictData.logType.setup', 'Setup', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3437, 3437, 'dictData.logType.update', 'Update', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3438, 3438, 'dictData.logType.upload', 'Upload', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3439, 3439, 'dictData.logType.view', 'View', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3440, 3440, 'dictData.logType.login', 'Login', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3441, 3441, 'dictData.logType.logout', 'Logout', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3442, 3442, 'dictData.securityLogType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3443, 3443, 'dictData.securityLogType.update', 'Update', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3444, 3444, 'dictData.securityLogType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3445, 3445, 'dictData.securityLogType.lock', 'Locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3446, 3446, 'dictData.securityLogType.unlock', 'Unlock', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3447, 3447, 'dictData.securityLogType.reset', 'Reset', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3448, 3448, 'dictData.securityLogType.deactivate', 'Deactivate', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3449, 3449, 'dictData.jobSaveLog.no', 'No Record', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3450, 3450, 'dictData.jobSaveLog.yes', 'Recorded', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3451, 3451, 'dictData.neVersionStatus.upload', 'Uploaded', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3452, 3452, 'dictData.neVersionStatus.inactive', 'Inactivated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3453, 3453, 'dictData.neVersionStatus.active', 'Activated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3454, 3454, 'dictData.alarmStatus.history', 'Historical Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3455, 3455, 'dictData.alarmStatus.active', 'Active Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3456, 3456, 'dictData.export.code', 'Data Codes', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3457, 3457, 'dictData.export.sort', 'Data Sorting', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3458, 3458, 'dictData.export.label', 'Data Labeling', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3459, 3459, 'dictData.export.value', 'Data Key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3460, 3460, 'dictData.export.type', 'Data Sorting', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3461, 3461, 'dictData.export.status', 'Data Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3462, 3462, 'dictData.datascope.all', 'All data permissions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3463, 3463, 'dictData.datascope.custom', 'Customized Data Rights', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3464, 3464, 'dictData.datascope.dept', 'Departmental Data Permissions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3465, 3465, 'dictData.datascope.deptAndChid', 'Department and below', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3466, 3466, 'dictData.datascope.self', 'Personal data access only', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3467, 3467, 'dictData.noData', 'There is no accessible dictionary code data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3468, 3468, 'dictData.errLabelExists', 'Failed to manipulate data [{name}], tag name already exists under this dictionary type!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3500, 3500, 'dictType.sys_user_sex', 'User Gender', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3501, 3501, 'dictType.sys_show_hide', 'Menu Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3502, 3502, 'dictType.sys_normal_disable', 'System switches', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3503, 3503, 'dictType.sys_job_status', 'Task Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3504, 3504, 'dictType.sys_job_group', 'Task Grouping', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3505, 3505, 'dictType.sys_yes_no', 'System or not', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3506, 3506, 'dictType.sys_oper_type', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3507, 3507, 'dictType.sys_common_status', 'System Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3508, 3508, 'dictType.trace_type', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3509, 3509, 'dictType.operation_log_type', 'Operation Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3510, 3510, 'dictType.alarm_status', 'Alarm Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3511, 3511, 'dictType.security_log_type', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3512, 3512, 'dictType.ne_version_status', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3513, 3513, 'dictType.i18n_en', 'Multi-language - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3514, 3514, 'dictType.i18n_zh', 'Multi-language - Chinese', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3515, 3515, 'dictType.sys_user_sex_remark', 'User gender list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3516, 3516, 'dictType.sys_show_hide_remark', 'Menu Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3517, 3517, 'dictType.sys_normal_disable_remark', 'System switch list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3518, 3518, 'dictType.sys_job_status_remark', 'Task Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3519, 3519, 'dictType.sys_job_group_remark', 'Task Grouping List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3520, 3520, 'dictType.sys_yes_no_remark', 'System whether list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3521, 3521, 'dictType.sys_oper_type_remark', 'Operation type list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3522, 3522, 'dictType.sys_common_status_remark', 'Login Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3523, 3523, 'dictType.trace_type_remark', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3524, 3524, 'dictType.operation_log_type_remark', 'Operation log type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3525, 3525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3526, 3526, 'dictType.security_log_type_remark', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3527, 3527, 'dictType.ne_version_status_remark', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3528, 3528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3529, 3529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3530, 3530, 'dictType.export.id', 'Dictionary Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3531, 3531, 'dictType.export.name', 'Dictionary Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3532, 3532, 'dictType.export.type', 'Dictionary Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3533, 3533, 'dictType.export.status', 'Dictionary Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3534, 3534, 'dictType.sys_role_datascope', 'System Role Data Range', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3535, 3535, 'dictType.sys_role_datascope_remark', 'System Role Data Range Mapping', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3536, 3536, 'dictType.noData', 'There is no accessible dictionary type data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3537, 3537, 'dictType.errNameExists', 'Failed to manipulate dictionary [{name}], dictionary name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3538, 3538, 'dictType.errTypeExists', 'Failed to manipulate dictionary [{name}], dictionary type already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3600, 3600, 'dept.root', 'System Maintenance Department', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3601, 3601, 'dept.root.item1', 'Operation and Maintenance Department One', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3602, 3602, 'dept.noData', 'There is no accessible department data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3603, 3603, 'dept.errParentDelFlag', 'The parent department [{name}] has been deleted and is not allowed to be added.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3604, 3604, 'dept.errParentStatus', 'Parent department [{name}] is deactivated, additions are not allowed!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3605, 3605, 'dept.errNameExists', 'Manipulate department [{name}] failed, department name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3606, 3606, 'dept.errParentID', 'Failed to operate department [{name}], the parent department cannot be itself.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3607, 3607, 'dept.errHasChildUse', 'Operation failed, the department contains undeactivated sub-departments number: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3608, 3608, 'dept.errHasUserUse', 'Deletion is not allowed, number of users the department has been assigned to: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3630, 3630, 'config.sys.user.initPassword', 'User Management-Account Initial Password', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3631, 3631, 'config.sys.account.captchaEnabled', 'Account self-help-Certification code switch', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3632, 3632, 'config.sys.account.registerUser', 'Account self-service-Whether to enable the user registration function', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3633, 3633, 'config.sys.user.maxRetryCount', 'User Management-Maximum number of password errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3634, 3634, 'config.sys.user.lockTime', 'User Management-Password Lock Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3635, 3635, 'config.monitor.sysResource.storeDays', 'Monitor-System Resources-Data retention time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3636, 3636, 'config.sys.logo.type', 'System Settings-Logo Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3637, 3637, 'config.sys.logo.filePathIcon', 'System Settings-Logo File icon', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3638, 3638, 'config.sys.logo.filePathBrand', 'System Settings-Logo File Brand', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3639, 3639, 'config.sys.loginBackground', 'System Settings-Login Interface Background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3640, 3640, 'config.sys.title', 'System Settings-System Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3641, 3641, 'config.sys.copyright', 'System Settings-Copyright Notice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3642, 3642, 'config.sys.user.initPasswordRemark', 'Import user initialization password 123456', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3643, 3643, 'config.sys.account.captchaEnabledRemark', 'Whether to enable the verification code function (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3644, 3644, 'config.sys.account.registerUserRemark', 'Whether to enable the function of registered users (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3645, 3645, 'config.sys.user.maxRetryCountRemark', 'Maximum number of password errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3646, 3646, 'config.sys.user.lockTimeRemark', 'Password lock time in minutes (default 10 minutes)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3647, 3647, 'config.monitor.sysResource.storeDaysRemark', 'Monitor-System Resources-Data retention time, in days. According to the current date, delete the date data information that exceeds the retention time.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3648, 3648, 'config.sys.logo.typeRemark', 'Full image: brand\r\nSmall image: icon', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3649, 3649, 'config.sys.logo.filePathIconRemark', 'File support for web address images and file paths for internal uploads', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3650, 3650, 'config.sys.logo.filePathBrandRemark', 'File support for web address images and paths to internally uploaded files', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3651, 3651, 'config.sys.loginBackgroundRemark', 'The file supports web address images and internal upload file paths with a # in the default background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3652, 3652, 'config.sys.titleRemark', 'System name length limit of 11-digit string', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3653, 3653, 'config.sys.copyrightRemark', 'Footer fixing strip with copyright notice on the left side', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3654, 3654, 'config..export.id', 'Parameter Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3655, 3655, 'config..export.name', 'Parameter Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3656, 3656, 'config..export.key', 'Parameter key name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3657, 3657, 'config..export.value', 'Parameter Key Value', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3658, 3658, 'config..export.type', 'System builtin', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3659, 3659, 'config..export.remark', 'Parameter Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3660, 3660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3661, 3661, 'config.sys.copyrightValue', 'Copyright ©2023 AGrandTech', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3662, 3662, 'config.noData', 'No parameter configuration data is accessible!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3663, 3663, 'config.errKey', 'Invalid key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3664, 3664, 'config.errValueEq', 'Change state is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3665, 3665, 'config.errKeyExists', 'Failed to manipulate parameter configuration [{name}], parameter key name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3666, 3666, 'config.errDelete', 'Deletion of parameter configuration information failed!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3667, 3667, 'config.errType', 'The operation contains built-in parameters and deletion is prohibited!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3700, 3700, 'job.monitor_sys_resource', 'Monitor-System Resources', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3701, 3701, 'job.monitor_sys_resource_remark', 'System Resource CPU/IO/Netword Collection\r\ninterval unit minutes, average minute resource situation\r\nNote: Please pass the value of the parameter interva according to the time unit minutes of the cron expression', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3702, 3702, 'job.delExpiredNeBackup', 'Delete expired NE etc backup file', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3703, 3703, 'job.delExpiredNeBackupRemark', 'Delete expired network element etc backup file, pass in the parameter to keep the backup file for {duration} days, default is 60 days.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3704, 3704, 'job.deleteExpiredAlarmRecord', 'Delete expired historical alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3705, 3705, 'job.deleteExpiredAlarmRecordRemark', 'Delete expired history alarm records, pass in the parameter to keep the history alarm records for {duration} days.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3706, 3706, 'job.deleteExpiredKpiRecord', 'Delete expired KPI records', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3707, 3707, 'job.deleteExpiredKpiRecordRemark', 'KPI record retention for {duration} days', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3708, 3708, 'job.backupEtcFromNE', 'Network Element Configuration Auto Backup Task', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3709, 3709, 'job.backupEtcFromNERemark', 'Automatically backs up the configuration files in the network element\'s etc directory.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3710, 3710, 'job.export.jobID', 'Task Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3711, 3711, 'job.export.jobName', 'Task name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3712, 3712, 'job.export.jobGroupName', 'Task Group Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3713, 3713, 'job.export.invokeTarget', 'Call target', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3714, 3714, 'job.export.targetParams', 'Incoming Parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3715, 3715, 'job.export.cronExpression', 'cron expressions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3716, 3716, 'job.export.status', 'Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3717, 3717, 'job.export.remark', 'Remarks Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3718, 3718, 'job.export.jobLogID', 'Task log number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3719, 3719, 'job.export.jobLogStatus', 'Task log status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3720, 3720, 'job.export.jobLogTime', 'Task log time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3721, 3721, 'job.noData', 'There is no accessible scheduling task data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3722, 3722, 'job.errTargetParams', 'Failed to operate scheduling task [{name}] with incorrect task incoming parameter json string!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3723, 3723, 'job.errCronExpression', 'Scheduled task [{name}] failed with incorrect Cron expression!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3724, 3724, 'job.errJobExists', 'Failed to add a new task [{name}] to a scheduling task, same task name in the same task group', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3725, 3725, 'job.statusEq', 'The change state is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3750, 3750, 'role.admin', 'Super Administrator', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3751, 3751, 'role.adminAssign', 'Managers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3752, 3752, 'role.operator', 'Operators', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3753, 3753, 'role.monitor', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3754, 3754, 'role.vistor', 'General Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3755, 3755, 'role.adminRemark', 'Super Administrator, cannot modify or delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3756, 3756, 'role.adminAssignRemark', 'Administrators can perform any operation on the device', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3757, 3757, 'role.operatorRemark', 'Operation and maintenance personnel can read data from the device and configure the device, but cannot perform software upgrade operations on the device.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3758, 3758, 'role.monitorRemark', 'Monitoring personnel Can only read data from the device, but cannot make any settings on the device', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3759, 3759, 'role.vistorRemark', 'Ordinary users can only see system-related information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3760, 3760, 'role.export.id', 'Role ID', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3761, 3761, 'role.export.name', 'Role Name ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3762, 3762, 'role.export.key', 'Role Key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3763, 3763, 'role.export.sort', 'Role Order', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3764, 3764, 'role.export.dataScope', 'Role Data Range', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3765, 3765, 'role.export.status', 'Role Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3766, 3766, 'role.noData', 'There is no accessible role data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3767, 3767, 'role.statusEq', 'The change status is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3768, 3768, 'role.errNameExists', 'Manipulating role [{name}] failed, role name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3769, 3769, 'role.errKeyExists', 'Failed to manipulate role [{name}], role key already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3800, 3800, 'post.admin', 'Systems', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3801, 3801, 'post.operator', 'Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3802, 3802, 'post.monitor', 'Operation & Maintenance', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3803, 3803, 'post.visitor', 'Monitoring', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3804, 3804, 'post.export.id', 'Post ID ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3805, 3805, 'post.export.code', 'Position Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3806, 3806, 'post.export.name', 'Position Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3807, 3807, 'post.export.sort', 'Position Sort', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3808, 3808, 'post.export.status', 'Position Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3809, 3809, 'post.noData', 'There is no accessible post data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3810, 3810, 'post.errNameExists', 'Failed to manipulate post [{name}], post name already exists already exists', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3811, 3811, 'post.errCodeExists', 'Failed to manipulate role [{name}], role key already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3830, 3830, 'user.export.id', 'User ID', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3831, 3831, 'user.export.name', 'Login Account', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3832, 3832, 'user.export.nick', 'Nickname', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3833, 3833, 'user.export.email', 'E-Mail', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3834, 3834, 'user.export.phone', 'Cell phone number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3835, 3835, 'user.export.sex', 'Gender', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3836, 3836, 'user.export.status', 'User Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3837, 3837, 'user.export.deptID', 'Department number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3838, 3838, 'user.export.deptName', 'Department Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3839, 3839, 'user.export.deptLeader', 'Department Head', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3840, 3840, 'user.export.loginIP', 'User Login IP', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3841, 3841, 'user.export.loginDate', 'User Login Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3842, 3842, 'user.noData', 'No accessible user data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3843, 3843, 'user.statusEq', 'The change status is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3844, 3844, 'user.errPasswdOld', 'Change password failed, old password is wrong', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3845, 3845, 'user.errPasswdEqOld', 'New password cannot be the same as the old one', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3846, 3846, 'user.errPasswd', 'Login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3847, 3847, 'user.errEmailFormat', 'Failed to operate user [{name}], mailbox format error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3848, 3848, 'user.errEmailExists', 'Failed to operate user [{name}], mailbox already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3849, 3849, 'user.errPhoneFormat', 'Failed to operate user [{name}], cell phone number format is wrong.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3850, 3850, 'user.errPhoneExists', 'Failed to operate user [{name}], cell phone number already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3851, 3851, 'user.errNameExists', 'Failed to operate user [{name}], login account already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3852, 3852, 'user.import.mustItem', 'Required list item in form, {text}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3853, 3853, 'user.import.phoneExist', 'User ID: {id} cell phone number {phone} Existing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3854, 3854, 'user.import.phoneFormat', 'User ID: {id} cell phone number {phone} Wrong format', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3855, 3855, 'user.import.emailExist', 'User ID: {id} User Email: {email} Existing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3856, 3856, 'user.import.emailFormat', 'User ID: {id} Email: {email} Wrong Format', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3857, 3857, 'user.import.success', 'User ID:{id} Login name:{name} Imported successfully!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3858, 3858, 'user.import.fail', 'User ID: {id} Login name: {name} Import failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3859, 3859, 'user.import.successUpdate', 'User ID: {id} Login name: {name} Update success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3860, 3860, 'user.import.failUpdate', 'User ID: {id} Login Name: {name} Update Failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3861, 3861, 'user.import.failTip', 'Sorry, the import failed! A total of {num} entries were not formatted correctly, the error is below:', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3862, 3862, 'user.import.successTip', 'Congratulations, the data has been imported successfully! There are {num} entries with the following data:', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3900, 3900, 'app.common.err403', 'Unauthorized access {method} {requestURI}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3901, 3901, 'app.common.err401', 'Invalid authorization', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3902, 3902, 'app.common.err400', 'Parameter error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3903, 3903, 'app.common.exportEmpty', 'Export data record is empty', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3904, 3904, 'app.common.errOperateAdmin', 'Built-in users are not allowed to operate', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3905, 3905, 'app.common.errOperateRole', 'Built-in roles are not allowed to be operated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3906, 3906, 'app.common.deleteSuccess', 'Deleted successfully: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3907, 3907, 'app.common.loginSuccess', 'Login Success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3908, 3908, 'app.common.logoutSuccess', 'Logout Successful', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3909, 3909, 'app.common.errUnlock', 'The user is not locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3910, 3910, 'app.common.noLoginUser', 'Invalid login user information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3911, 3911, 'app.common.rateLimitTip', 'Access too often, please try again later', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3912, 3912, 'log.operate.export.id', 'Operation Number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3913, 3913, 'log.operate.export.title', 'Module Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3914, 3914, 'log.operate.export.businessType', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3915, 3915, 'log.operate.export.method', 'Operation Method', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3916, 3916, 'log.operate.export.requestMethod', 'Request Method ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3917, 3917, 'log.operate.export.operatorType', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3918, 3918, 'log.operate.export.operName', 'Operator', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3919, 3919, 'log.operate.export.deptName', 'Operator\'s department name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3920, 3920, 'log.operate.export.url', 'Request Link Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3921, 3921, 'log.operate.export.ip', 'Requesting Host ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3922, 3922, 'log.operate.export.location', 'Request Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3923, 3923, 'log.operate.export.param', 'Request Parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3924, 3924, 'log.operate.export.msg', 'Operation Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3925, 3925, 'log.operate.export.status', 'Operation status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3926, 3926, 'log.operate.export.costTime', 'Consumption time (ms)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3927, 3927, 'log.operate.export.operTime', 'Operation time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3928, 3928, 'log.login.export.id', 'Record number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3929, 3929, 'log.login.export.userName', 'Login Account', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3930, 3930, 'log.login.export.status', 'Login Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3931, 3931, 'log.login.export.ip', 'Login Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3932, 3932, 'log.login.export.location', 'Login Location', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3933, 3933, 'log.login.export.browser', 'Browser', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3934, 3934, 'log.login.export.os', 'Operating System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3935, 3935, 'log.login.export.msg', 'Login Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3936, 3936, 'log.login.export.time', 'Login Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3937, 3937, 'trace.tcpdump.noData', 'Can\'t find {type} {id} information of the corresponding network element.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3938, 3938, 'register.errUsername', 'The account number cannot start with a number, but can contain upper and lower case letters, numbers, and not less than 5 digits.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3939, 3939, 'register.errPasswd', 'The password must contain at least 6 upper and lower case letters, numbers, and special symbols.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3940, 3940, 'register.errPasswdNotEq', 'User confirms password inconsistency', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3941, 3941, 'register.success', 'Successful registration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3942, 3942, 'register.successMsg', '{name} Register Successful {id}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3943, 3943, 'log.operate.title.sysJobLog', 'Scheduling Task Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3944, 3944, 'log.operate.title.sysJob', 'Scheduling Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3945, 3945, 'log.operate.title.tcpdump', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3946, 3946, 'log.operate.title.sysConfig', 'Parameter Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3947, 3947, 'log.operate.title.sysDept', 'Sector', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3948, 3948, 'log.operate.title.sysDictData', 'Dictionary Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3949, 3949, 'log.operate.title.sysDictType', 'Dictionary type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3950, 3950, 'log.operate.title.sysMenu', 'Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3951, 3951, 'log.operate.title.sysPost', 'Positions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3952, 3952, 'log.operate.title.sysProfile', 'Personal Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3953, 3953, 'log.operate.title.sysProfileAvatar', 'Personal avatar', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3954, 3954, 'log.operate.title.sysRole', 'Roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3955, 3955, 'log.operate.title.sysUser', 'User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3956, 3956, 'log.operate.title.sysLogOper', 'Operation Logging', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3957, 3957, 'log.operate.title.sysLogLogin', 'Operation Logging', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3958, 3958, 'login.errNameOrPasswd', 'User does not exist or password is wrong', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3959, 3959, 'login.errDelFlag', 'Sorry, your account has been deleted', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3960, 3960, 'login.errStatus', 'Sorry, your account has been disabled', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3961, 3961, 'login.errRetryPasswd', 'Password was entered incorrectly several times, account has been locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3962, 3962, 'captcha.err', 'Captcha Error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3963, 3963, 'captcha.errValid', 'Captcha is invalid', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3964, 3964, 'app.common.noUaOsBrowser', 'Unknown Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3965, 3965, 'app.common.noIPregion', 'Intranet', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3966, 3966, 'app.common.unknown', 'Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3967, 3967, 'app.common.noNEInfo', 'No matching network element information found', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3968, 3968, 'ne.udm.errImportUserAuthFileFormat', 'Please upload a file in the format of. csv or. txt. English comma separated txt format: imsi, ki, algo, amf, opc', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3969, 3969, 'ne.udm.errExportType', 'Export file types support CSV and txt', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3970, 3970, 'ne.udm.errImportUserSubFileFormat', 'Please upload files in .csv or .txt format. English comma-separated txt format: imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3971, 3971, 'log.operate.title.udmAuth', 'UDM Authentication User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3972, 3972, 'log.operate.title.udmSub', 'UDM Subscribers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3973, 3973, 'dictType.active_alarm_type', 'Event Alarm Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3974, 3974, 'dictType.active_alarm_type_remark', 'List of Active Alarm Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3975, 3975, 'dictData.active_alarm_type.communication', 'Communication Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3976, 3976, 'dictData.active_alarm_type.equipment', 'Equipment Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3977, 3977, 'dictData.active_alarm_type.processing', 'Processing Failure Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3978, 3978, 'dictData.active_alarm_type.environmental', 'Environmental Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3979, 3979, 'dictData.active_alarm_type.qualityOfService', 'Quality of Service Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3980, 3980, 'dictType.active_clear_type', 'Alarm Clearing Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3981, 3981, 'dictType.active_clear_type_remark', 'List of Alarm Clearing Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3982, 3982, 'dictData.active_clear_type.notCleared', 'Not cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3983, 3983, 'dictData.active_clear_type.hand', 'Manually cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3984, 3984, 'dictData.active_clear_type.auto', 'Automatically cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3985, 3985, 'dictType.active_ack_state', 'Alarm Acknowledgement Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3986, 3986, 'dictType.active_ack_state_remark', 'Alarm Acknowledgement Type List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3987, 3987, 'dictData.active_ack_state.unconfirmed', 'Not Confirm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3988, 3988, 'dictData.active_ack_state.confirmed', 'Confirm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3989, 3989, 'dictType.active_alarm_severity', 'Severity', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3990, 3990, 'dictType.active_alarm_severity_remark', 'Severity List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3991, 3991, 'dictData.active_alarm_severity.critical', 'Critical', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3992, 3992, 'dictData.active_alarm_severity.major', 'Major', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3993, 3993, 'dictData.active_alarm_severity.minor', 'Minor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3994, 3994, 'dictData.active_alarm_severity.warning', 'Warning', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3995, 3995, 'dictData.active_alarm_severity.event', 'Event', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3996, 3996, 'config.sys.officialUrl', 'System Settings - Official Website Links', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3997, 3997, 'config.sys.helpDoc', 'System Settings-System Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3998, 3998, 'config.sys.officialUrlRemark', 'Default no address with # sign', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3999, 3999, 'config.sys.helpDocRemark', 'Static file directory address, use {language} to distinguish language files', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4000, 4000, 'log.operate.title.neAction', 'Network Element Processing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4001, 4001, 'log.operate.title.helpDoc', 'System Usage Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4002, 4002, 'menu.ueUser.n3iwf', 'N3IWF Online User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4003, 4003, 'menu.ueUser.pcf', 'User PCC Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4004, 4004, 'menu.system.user.editRole', 'Modifying user roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4005, 4005, 'config.sys.i18nOpen', 'Internationalization Switching', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4006, 4006, 'config.sys.i18nDefault', 'Internationalization Default Language', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4007, 4007, 'user.export.role', 'UserRole', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4008, 4008, 'menu.system.setting.i18n', 'Internationalization Switch', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4009, 4009, 'menu.system.setting.i18nRemark', 'Internationalized multilingual switching options', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4010, 4010, 'dictType.index_status', 'Home Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4011, 4011, 'dictType.index_status_remark', 'Network element status colors on the home page', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4012, 4012, 'dictType.index_status.normal', 'Normal', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4013, 4013, 'dictType.index_status.abnormal', 'Abnormal', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4014, 4014, 'menu.log.neFile', 'NE Log File', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4015, 4015, 'job.deleteExpiredNeStateRecord', 'Delete Expired NE State Record', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4016, 4016, 'job.deleteExpiredNeStateRecordRemark', 'Delete expired NE state records regularly and keep them for {duration} days by default.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4017, 4017, 'job.getStateFromNE', 'Get state from NEs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4018, 4018, 'job.getStateFromNERemark', 'Get state information from all NEs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4019, 4019, 'job.genNeStateAlarm', 'Network Element Health Check', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4020, 4020, 'job.genNeStateAlarmRemark', 'Health status inspection of network elements, generating alarms in case of abnormalities.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4021, 4021, 'menu.neUser.nssf', 'NSSF Subscription Info', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4022, 4022, 'menu.neUser.nssfAmf', 'NSSF Available AMFs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4023, 4023, 'menu.monitor.topology', 'Topology Info', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4024, 4024, 'menu.monitor.topologyBuild', 'Topological Graph Build', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4025, 4025, 'log.operate.title.chartGraph', 'Topological Graph', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 1, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4026, 4026, 'menu.monitor.topologyArchitecture', 'NE System Topology', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4027, 4027, 'menu.alarm', 'Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4028, 4028, 'menu.topology', 'Topology', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4029, 4029, 'config.sys.lockTime', 'System Settings - Screen Lock Timeout Duration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4030, 4030, 'config.sys.lockTimeRemark', 'Screen lock timeout duration when idle, in seconds.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4031, 4031, 'sys.account.captchaType', 'Account Self Service - Captcha Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4032, 4032, 'sys.account.captchaTypeRemark', 'Using CAPTCHA types (math numeric calculation, char character validation)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4033, 4033, 'menu.dashboard', 'Dashboard', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4034, 4034, 'menu.dashboard.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4035, 4035, 'menu.dashboard.cdr', 'CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4036, 4036, 'dictType.cdr_sip_code', 'CDR SIP Response Code Category Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4037, 4037, 'dictType.cdr_call_type', 'CDR Call Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4038, 4038, 'dictType.ue_auth_code', 'UE Event Authentication Code Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4039, 4039, 'dictType.ue_event_type', 'UE Event Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4040, 4040, 'dictData.cdr_sip_code.200', 'Normal Cleaning', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4041, 4041, 'dictData.cdr_sip_code.403', 'Banned', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4042, 4042, 'dictData.cdr_sip_code.408', 'Request Timeout', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4043, 4043, 'dictData.cdr_sip_code.500', 'Internal Server Error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4044, 4044, 'dictData.cdr_call_type.audio', 'Voice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4045, 4045, 'dictData.cdr_call_type.video', 'Video', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4046, 4046, 'dictData.ue_auth_code.200', 'Success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4047, 4047, 'dictData.ue_auth_code.001', 'Network Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4048, 4048, 'dictData.ue_auth_code.002', 'Air Interface Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4049, 4049, 'dictData.ue_auth_code.003', 'MAC Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4050, 4050, 'dictData.ue_auth_code.004', 'Synchronization failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4051, 4051, 'dictData.ue_auth_code.005', 'Non-5G Authentication Not Accepted', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4052, 4052, 'dictData.ue_auth_code.006', 'Response Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4053, 4053, 'dictData.ue_auth_code.007', 'Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4054, 4054, 'dictData.ue_event_type.auth', 'Authentication', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4055, 4055, 'dictData.ue_event_type.detach', 'Detach', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4056, 4056, 'dictData.ue_event_type.state', 'CM Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4057, 4057, 'dictType.ue_event_cm_state', 'UE Event CM Status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4058, 4058, 'dictData.ue_event_cm_state.connected', 'Connected', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4059, 4059, 'dictData.ue_event_cm_state.idle', 'Idle', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4060, 4060, 'dictData.ue_event_cm_state.inactive', 'Inactive', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4061, 4061, 'dictData.cdr_sip_code.404', 'Not Found', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4062, 4062, 'dictData.cdr_sip_code.487', 'Request Terminated', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4063, 4063, 'dictData.cdr_sip_code.503', 'Service Unavailable', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4064, 4064, 'dictData.cdr_sip_code.504', 'Server Time Out', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4065, 4065, 'dictData.cdr_sip_code.603', 'Decline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4066, 4066, 'dictData.cdr_sip_code.606', 'Not Acceptable', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4067, 4067, 'cache.name.user', 'Login User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4068, 4068, 'cache.name.sys_config', 'Parameters Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4069, 4069, 'cache.name.sys_dict', 'Dictionary Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4070, 4070, 'cache.name.captcha_codes', 'Captcha', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4071, 4071, 'cache.name.repeat_submit', 'Resubmit', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4072, 4072, 'cache.name.rate_limit', 'Limit Traffic', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4073, 4073, 'cache.name.pwd_err_cnt', 'Number of Password Errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4074, 4074, 'cache.name.ne_info', 'NE Info Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (4075, 4075, 'cache.name.ne_data', 'NE Data Management', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4076, 4076, 'dictData.cdr_call_type.sms', 'SMS', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4077, 4077, 'dictData.cdr_sip_code.202', 'Accepted', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4078, 4078, 'dictData.cdr_sip_code.488', 'Not Aceptable Here', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4079, 4079, 'dictData.cdr_sip_code.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4080, 4080, 'log.operate.title.ws', 'WS Sessions', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4081, 4081, 'log.operate.title.neHost', 'NE Host', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4082, 4082, 'neHost.noData', 'There is no accessible host information data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4083, 4083, 'neHost.errKeyExists', 'Host information operation [{name}] failed, name already exists in the same group', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4084, 4084, 'neHost.errByHostInfo', 'Failed to connect to the host, please check the connection parameters and try again', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4085, 4085, 'dictType.ne_host_type', 'Network element host connection type', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4086, 4086, 'dictType.ne_host_groupId', 'Network element host grouping', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4087, 4087, 'dictType.ne_host_authMode', 'Network element host authentication mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4088, 4088, 'dictData.ne_host_type.ssh', 'SSH', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4089, 4089, 'dictData.ne_host_type.telnet', 'Telnet', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4090, 4090, 'dictData.ne_host_groupId.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4091, 4091, 'dictData.ne_host_groupId.1', 'Network Elements', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4092, 4092, 'dictData.ne_host_groupId.2', 'System', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4093, 4093, 'dictData.ne_host_authMode.0', 'Password Authentication', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4094, 4094, 'dictData.ne_host_authMode.1', 'Private key authentication', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4095, 4095, 'menu.tools.terminal', 'NE Host Terminal', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4096, 4096, 'menu.config.neHost', 'NE Host', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4097, 4097, 'menu.config.neHostCommand', 'NE Host CMD', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4098, 4098, 'log.operate.title.neHostCmd', 'Network element host commands', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4099, 4099, 'neHostCmd.noData', 'No accessible host command data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4100, 4100, 'neHostCmd.errKeyExists', 'Host command operation [{name}] failed, name already exists in the same group', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4101, 4101, 'dictType.ne_host_cmd_groupId', 'Network element host command grouping', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4102, 4102, 'dictData.ne_host_cmd_groupId.0', 'Default', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (4103, 4103, 'dictData.ne_host_cmd_groupId.1', 'Quick Commands', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (3000, 3000, 'i18n', 'English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3001, 3001, 'hello', 'Hello', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3002, 3002, 'menu.system', 'System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3003, 3003, 'menu.monitor', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3004, 3004, 'menu.tools', 'Tools', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3005, 3005, 'menu.config', 'Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3006, 3006, 'menu.ueUser', 'UE', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3007, 3007, 'menu.systemRemark', 'System Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3008, 3008, 'menu.monitorRemark', 'System Monitor Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3009, 3009, 'menu.toolsRemark', 'System Tools Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3010, 3010, 'menu.configRemark', 'OMC Configuration Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3011, 3011, 'menu.ueUserRemark', 'Network Element Terminal Information Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3012, 3012, 'menu.security.user', 'User Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3013, 3013, 'menu.security.role', 'Role Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3014, 3014, 'menu.security.roleUser', 'Assigning Roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3015, 3015, 'menu.system.menu', 'Menu Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3016, 3016, 'menu.security.dept', 'Department Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3017, 3017, 'menu.security.post', 'Position Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3018, 3018, 'menu.system.dictType', 'Dictionary Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3019, 3019, 'menu.system.dictData', 'Dictionary Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3020, 3020, 'menu.system.paramSet', 'Parameter Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3021, 3021, 'menu.system.systemLog', 'System Log', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3022, 3022, 'menu.system.systemInfo', 'System Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3023, 3023, 'menu.system.cacheInfo', 'Cache Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3024, 3024, 'menu.system.cache', 'Cache Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3025, 3025, 'menu.security.onlineUser', 'Online Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3026, 3026, 'menu.system.job', 'Scheduling Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3027, 3027, 'menu.system.jobLog', 'Scheduling Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3028, 3028, 'menu.tools.help', 'Help Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3029, 3029, 'menu.log.operat', 'Operation logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3030, 3030, 'menu.log.login', 'Security logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3031, 3031, 'menu.security.userRemark', 'User Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3032, 3032, 'menu.security.roleRemark', 'Role Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3033, 3033, 'menu.security.roleUserRemark', 'Assign Roles Embedded Hidden Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3034, 3034, 'menu.system.menuRemark', 'Menu Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3035, 3035, 'menu.security.deptRemark', 'Department management menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3036, 3036, 'menu.security.postRemark', 'Job Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3037, 3037, 'menu.system.dictTypeRemark', 'Dictionary management menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3038, 3038, 'menu.system.dictDataRemark', 'Dictionary data embedded hidden menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3039, 3039, 'menu.system.paramSetRemark', 'Parameter setting menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3040, 3040, 'menu.system.systemLogRemark', 'System Log Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3041, 3041, 'menu.system.systemInfoRemark', 'System information menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3042, 3042, 'menu.system.cacheInfoRemark', 'Cache Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3043, 3043, 'menu.system.cacheRemark', 'Cache List Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3044, 3044, 'menu.security.onlineUserRemark', 'Online User Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3045, 3045, 'menu.system.jobRemark', 'Scheduling Tasks menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3046, 3046, 'menu.system.jobLogRemark', 'Scheduling Log Embedded Hidden Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3047, 3047, 'menu.tools.helpRemark', 'Help file menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3048, 3048, 'menu.log.operatRemark', 'Operation log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3049, 3049, 'menu.log.loginRemark', 'Login log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3050, 3050, 'menu.common.query', 'Inquiry', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3051, 3051, 'menu.common.add', 'Add', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3052, 3052, 'menu.common.edit', 'Modify', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3053, 3053, 'menu.common.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3054, 3054, 'menu.common.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3055, 3055, 'menu.common.import', 'Import', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3056, 3056, 'menu.common.reset', 'Reset', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3057, 3057, 'menu.common.unlock', 'Account Unlock', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3058, 3058, 'menu.forcedQuit.batch ', 'Batch Undo', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3059, 3059, 'menu.forcedQuit.single', 'Individual Forced Retirement', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3060, 3060, 'menu.ueUser.authUDM', 'UDM Authentication', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3061, 3061, 'menu.ueUser.subUDM', 'UDM Subscribers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3062, 3062, 'menu.ueUser.authUDMRemark', 'UDM Authentication Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3063, 3063, 'menu.ueUser.subUDMRemark', 'UDM Subscriber Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3064, 3064, 'menu.config.neManage', 'NE Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3065, 3065, 'menu.config.configNE', 'Parameter Configuration Original', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3066, 3066, 'menu.config.neManageRemark', 'Network Element Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3067, 3067, 'menu.config.configNERemark', 'Parameter Configuration Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3068, 3068, 'menu.config.backupManage', 'Backup Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3069, 3069, 'menu.config.softwareManage', 'Software Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3070, 3070, 'menu.ueUser.onlineIMS', 'IMS Online Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3071, 3071, 'menu.ueUser.onlineUE', 'UE Online Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3072, 3072, 'menu.ueUser.base5G', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3073, 3073, 'menu.trace', 'Trace', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'Trace Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'Signaling Analysis', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3076, 3076, 'menu.trace.pcap', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3077, 3077, 'menu.fault', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3078, 3078, 'menu.config.backupManageRemark', 'Backup Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3079, 3079, 'menu.config.softwareManageRemark', 'Software Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3080, 3080, 'menu.ueUser.onlineIMSRemark', 'IMS Online User Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3081, 3081, 'menu.ueUser.onlineUERemark', 'UE Online Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3082, 3082, 'menu.ueUser.base5GRemark', '5G Base Station Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3083, 3083, 'menu.traceRemark', 'Tracking Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3084, 3084, 'menu.trace.taskRemark', 'Tracking Task Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3086, 3086, 'menu.trace.pcapRemark', 'Signaling Capture Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3087, 3087, 'menu.faultRemark', 'Fault Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3088, 3088, 'menu.fault.active', 'Active Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3089, 3089, 'menu.log', 'Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3090, 3090, 'menu.log.operatOld', 'Operation Logs (old)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3091, 3091, 'menu.log.mml', 'MML Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3092, 3092, 'menu.log.alarm', 'Alarm Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3093, 3093, 'menu.log.securityOld', 'Security Logs (old)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3094, 3094, 'menu.log.forwarding', 'Alarm Forwarding Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3095, 3095, 'menu.log.set', 'Log Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3096, 3096, 'menu.monitor.sessionUser', 'User Sessions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3097, 3097, 'menu.fault.history', 'Historical Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3098, 3098, 'menu.fault.set', 'Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3099, 3099, 'menu.perf', 'Performance', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3100, 3100, 'menu.fault.activemRemark', 'Active Alarm Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3101, 3101, 'menu.logRemark', 'Log Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3102, 3102, 'menu.log.operatOldRemark', 'Operation log old layui menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3103, 3103, 'menu.log.mmlRemark', 'Operation MML Log', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3104, 3104, 'menu.log.alarmRemark', 'Alarm Log Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3105, 3105, 'menu.log.securityOldRemark', 'Security Log Old Layui Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3106, 3106, 'menu.log.forwardingRemark', 'Alarm forward log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3107, 3107, 'menu.log.setRemark', 'Log Settings menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3108, 3108, 'menu.monitor.sessionUserRemark', 'User Session Old Layui Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3109, 3109, 'menu.fault.historyRemark', 'Alarm history menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3110, 3110, 'menu.fault.setRemark', 'Fault General Setup Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3111, 3111, 'menu.perfRemark', 'Performance Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3112, 3112, 'menu.perf.task', 'Performance Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3113, 3113, 'menu.perf.data', 'Performance Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3114, 3114, 'menu.perf.report', 'Performance Reports', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3115, 3115, 'menu.perf.threshold', 'Performance Thresholds', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3116, 3116, 'menu.perf.kpi', 'Key Performance Indicators', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3117, 3117, 'menu.perf.customTarget', 'Custom Metrics', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3118, 3118, 'menu.perf.set', 'Performance General Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3119, 3119, 'menu.mml', 'MML', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3120, 3120, 'menu.mml.ne', 'NE Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3121, 3121, 'menu.mml.udm', 'UDM Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3122, 3122, 'menu.mml.set', 'MML Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3123, 3123, 'menu.mml.omc', 'OMC Operation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3124, 3124, 'menu.perf.taskRemark', 'Task Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3125, 3125, 'menu.perf.dataRemark', 'Performance Data Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3126, 3126, 'menu.perf.reportRemark', 'Performance Report Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3127, 3127, 'menu.perf.thresholdRemark', 'Performance Threshold Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3128, 3128, 'menu.perf.kpiRemark', 'Key Performance Indicator Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3129, 3129, 'menu.perf.customTargetRemark', 'Custom Metrics Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3130, 3130, 'menu.perf.setRemark', 'Performance General Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3131, 3131, 'menu.mmlRemark', 'MML Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3132, 3132, 'menu.mml.neRemark', 'Network Element Operations Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3133, 3133, 'menu.mml.udmRemark', 'Network Element UDM User Data Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3134, 3134, 'menu.mml.setRemark', 'MML Setup Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3135, 3135, 'menu.mml.omcRemark', 'OMC Operation Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3136, 3136, 'menu.config.licenseManage', 'License Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3137, 3137, 'menu.security', 'Security', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3138, 3138, 'menu.system.systemSet', 'System Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3139, 3139, 'menu.system.systemResource', 'System Resources', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3140, 3140, 'menu.config.configNEForm', 'Parameter Configuration Form', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3141, 3141, 'menu.config.configNETree', 'Parameter Configuration Tree', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3142, 3142, 'menu.config.configNETreeTable', 'Parameter Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3143, 3143, 'menu.config.licenseManageRemark', 'License Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3144, 3144, 'menu.securityRemark', 'Security Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3145, 3145, 'menu.system.systemSetRemark', 'System Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3146, 3146, 'menu.system.systemResourceRemark', 'System Resources cpu io network menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3147, 3147, 'menu.config.configNEFormRemark', 'Parameter Configuration Form Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3148, 3148, 'menu.config.configNETreeRemark', 'Parameter Configuration Tree Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3149, 3149, 'menu.config.configNETreeTableRemark', 'Configuring the TreeTable menu with parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3150, 3150, 'menu.noData', 'There is no accessible menu data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3151, 3151, 'menu.errNameExists', 'Failed to operate menu [{name}], menu name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3152, 3152, 'menu.errPathExists', 'Failed to operate menu [{name}], menu routing address already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3153, 3153, 'menu.errFramePath', 'Failed to manipulate menu [{name}], non-internal address should start with http(s)://', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3154, 3154, 'menu.errParentStatus', 'The parent menu is not enabled!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3155, 3155, 'menu.errHasChildUse', 'Operation menu [{name}] failed, number of submenus in use exists: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3156, 3156, 'menu.errHasRoleUse', 'Operation menu [{name}] failed, number of roles the menu has been assigned to: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3400, 3400, 'dictData.sex.un', 'Not selected', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3401, 3401, 'dictData.sex.male', 'Male', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3402, 3402, 'dictData.sex.female', 'Female', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3403, 3403, 'dictData.show', 'Show', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3404, 3404, 'dictData.hide', 'Hide', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3405, 3405, 'dictData.normal', 'Active', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3406, 3406, 'dictData.disable', 'Inactive', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3407, 3407, 'dictData.yes', 'Yes', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3408, 3408, 'dictData.no', 'No', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3409, 3409, 'dictData.success', 'Successful', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3410, 3410, 'dictData.fail', 'Failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3411, 3411, 'dictData.jobStatus.normal', 'Active', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3412, 3412, 'dictData.jobStatus.pause', 'Inactive', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3413, 3413, 'dictData.jobGroup.Default', 'Default', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3414, 3414, 'dictData.jobGroup.System', 'System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3415, 3415, 'dictData.operType.other', 'Other', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3416, 3416, 'dictData.operType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3417, 3417, 'dictData.operType.edit', 'Modify', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3418, 3418, 'dictData.operType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3419, 3419, 'dictData.operType.auth', 'Authorization', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3420, 3420, 'dictData.operType.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3421, 3421, 'dictData.operType.import', 'Import', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3422, 3422, 'dictData.operType.forced quit', 'Forced Retirement', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3423, 3423, 'dictData.operType.clear', 'Clear', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3424, 3424, 'dictData.trace.interface', 'Interface Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3425, 3425, 'dictData.trace.device', 'Module Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3426, 3426, 'dictData.trace.user', 'User Tracing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3427, 3427, 'dictData.logType.download', 'Download', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3428, 3428, 'dictData.logType.activation', 'Activation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3429, 3429, 'dictData.logType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3430, 3430, 'dictData.logType.other', 'Other', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3431, 3431, 'dictData.logType.back', 'Rollback', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3432, 3432, 'dictData.logType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3433, 3433, 'dictData.logType.distribute', 'Assign', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3434, 3434, 'dictData.logType.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3435, 3435, 'dictData.logType.query', 'Query', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3436, 3436, 'dictData.logType.setup', 'Setup', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3437, 3437, 'dictData.logType.update', 'Update', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3438, 3438, 'dictData.logType.upload', 'Upload', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3439, 3439, 'dictData.logType.view', 'View', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3440, 3440, 'dictData.logType.login', 'Login', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3441, 3441, 'dictData.logType.logout', 'Logout', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3442, 3442, 'dictData.securityLogType.add', 'New', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3443, 3443, 'dictData.securityLogType.update', 'Update', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3444, 3444, 'dictData.securityLogType.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3445, 3445, 'dictData.securityLogType.lock', 'Locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3446, 3446, 'dictData.securityLogType.unlock', 'Unlock', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3447, 3447, 'dictData.securityLogType.reset', 'Reset', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3448, 3448, 'dictData.securityLogType.deactivate', 'Deactivate', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3449, 3449, 'dictData.jobSaveLog.no', 'No Record', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3450, 3450, 'dictData.jobSaveLog.yes', 'Recorded', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3451, 3451, 'dictData.neVersionStatus.upload', 'Uploaded', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3452, 3452, 'dictData.neVersionStatus.inactive', 'Inactivated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3453, 3453, 'dictData.neVersionStatus.active', 'Activated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3454, 3454, 'dictData.alarmStatus.history', 'Historical Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3455, 3455, 'dictData.alarmStatus.active', 'Active Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3456, 3456, 'dictData.export.code', 'Data Codes', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3457, 3457, 'dictData.export.sort', 'Data Sorting', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3458, 3458, 'dictData.export.label', 'Data Labeling', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3459, 3459, 'dictData.export.value', 'Data Key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3460, 3460, 'dictData.export.type', 'Data Sorting', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3461, 3461, 'dictData.export.status', 'Data Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3462, 3462, 'dictData.datascope.all', 'All data permissions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3463, 3463, 'dictData.datascope.custom', 'Customized Data Rights', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3464, 3464, 'dictData.datascope.dept', 'Departmental Data Permissions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3465, 3465, 'dictData.datascope.deptAndChid', 'Department and below', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3466, 3466, 'dictData.datascope.self', 'Personal data access only', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3467, 3467, 'dictData.noData', 'There is no accessible dictionary code data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3468, 3468, 'dictData.errLabelExists', 'Failed to manipulate data [{name}], tag name already exists under this dictionary type!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3500, 3500, 'dictType.sys_user_sex', 'User Gender', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3501, 3501, 'dictType.sys_show_hide', 'Menu Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3502, 3502, 'dictType.sys_normal_disable', 'System switches', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3503, 3503, 'dictType.sys_job_status', 'Task Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3504, 3504, 'dictType.sys_job_group', 'Task Grouping', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3505, 3505, 'dictType.sys_yes_no', 'System or not', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3506, 3506, 'dictType.sys_oper_type', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3507, 3507, 'dictType.sys_common_status', 'System Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3508, 3508, 'dictType.trace_type', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3509, 3509, 'dictType.operation_log_type', 'Operation Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3510, 3510, 'dictType.alarm_status', 'Alarm Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3511, 3511, 'dictType.security_log_type', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3512, 3512, 'dictType.ne_version_status', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3513, 3513, 'dictType.i18n_en', 'Multi-language - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3514, 3514, 'dictType.i18n_zh', 'Multi-language - Chinese', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3515, 3515, 'dictType.sys_user_sex_remark', 'User gender list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3516, 3516, 'dictType.sys_show_hide_remark', 'Menu Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3517, 3517, 'dictType.sys_normal_disable_remark', 'System switch list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3518, 3518, 'dictType.sys_job_status_remark', 'Task Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3519, 3519, 'dictType.sys_job_group_remark', 'Task Grouping List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3520, 3520, 'dictType.sys_yes_no_remark', 'System whether list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3521, 3521, 'dictType.sys_oper_type_remark', 'Operation type list', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3522, 3522, 'dictType.sys_common_status_remark', 'Login Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3523, 3523, 'dictType.trace_type_remark', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3524, 3524, 'dictType.operation_log_type_remark', 'Operation log type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3525, 3525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3526, 3526, 'dictType.security_log_type_remark', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3527, 3527, 'dictType.ne_version_status_remark', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3528, 3528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3529, 3529, 'dictType.i18n_zh_remark', 'Internationalization - Chinese', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3530, 3530, 'dictType.export.id', 'Dictionary Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3531, 3531, 'dictType.export.name', 'Dictionary Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3532, 3532, 'dictType.export.type', 'Dictionary Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3533, 3533, 'dictType.export.status', 'Dictionary Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3534, 3534, 'dictType.sys_role_datascope', 'System Role Data Range', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3535, 3535, 'dictType.sys_role_datascope_remark', 'System Role Data Range Mapping', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3536, 3536, 'dictType.noData', 'There is no accessible dictionary type data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3537, 3537, 'dictType.errNameExists', 'Failed to manipulate dictionary [{name}], dictionary name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3538, 3538, 'dictType.errTypeExists', 'Failed to manipulate dictionary [{name}], dictionary type already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3600, 3600, 'dept.root', 'System Maintenance Department', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3601, 3601, 'dept.root.item1', 'Operation and Maintenance Department One', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3602, 3602, 'dept.noData', 'There is no accessible department data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3603, 3603, 'dept.errParentDelFlag', 'The parent department [{name}] has been deleted and is not allowed to be added.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3604, 3604, 'dept.errParentStatus', 'Parent department [{name}] is deactivated, additions are not allowed!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3605, 3605, 'dept.errNameExists', 'Manipulate department [{name}] failed, department name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3606, 3606, 'dept.errParentID', 'Failed to operate department [{name}], the parent department cannot be itself.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3607, 3607, 'dept.errHasChildUse', 'Operation failed, the department contains undeactivated sub-departments number: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3608, 3608, 'dept.errHasUserUse', 'Deletion is not allowed, number of users the department has been assigned to: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3630, 3630, 'config.sys.user.initPassword', 'User Management-Account Initial Password', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3631, 3631, 'config.sys.account.captchaEnabled', 'Account self-help-Certification code switch', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3632, 3632, 'config.sys.account.registerUser', 'Account self-service-Whether to enable the user registration function', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3633, 3633, 'config.sys.user.maxRetryCount', 'User Management-Maximum number of password errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3634, 3634, 'config.sys.user.lockTime', 'User Management-Password Lock Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3635, 3635, 'config.monitor.sysResource.storeDays', 'Monitor-System Resources-Data retention time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3636, 3636, 'config.sys.logo.type', 'System Settings-Logo Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3637, 3637, 'config.sys.logo.filePathIcon', 'System Settings-Logo File icon', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3638, 3638, 'config.sys.logo.filePathBrand', 'System Settings-Logo File Brand', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3639, 3639, 'config.sys.loginBackground', 'System Settings-Login Interface Background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3640, 3640, 'config.sys.title', 'System Settings-System Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3641, 3641, 'config.sys.copyright', 'System Settings-Copyright Notice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3642, 3642, 'config.sys.user.initPasswordRemark', 'Import user initialization password 123456', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3643, 3643, 'config.sys.account.captchaEnabledRemark', 'Whether to enable the verification code function (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3644, 3644, 'config.sys.account.registerUserRemark', 'Whether to enable the function of registered users (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3645, 3645, 'config.sys.user.maxRetryCountRemark', 'Maximum number of password errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3646, 3646, 'config.sys.user.lockTimeRemark', 'Password lock time in minutes (default 10 minutes)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3647, 3647, 'config.monitor.sysResource.storeDaysRemark', 'Monitor-System Resources-Data retention time, in days. According to the current date, delete the date data information that exceeds the retention time.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3648, 3648, 'config.sys.logo.typeRemark', 'Full image: brand\r\nSmall image: icon', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3649, 3649, 'config.sys.logo.filePathIconRemark', 'File support for web address images and file paths for internal uploads', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3650, 3650, 'config.sys.logo.filePathBrandRemark', 'File support for web address images and paths to internally uploaded files', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3651, 3651, 'config.sys.loginBackgroundRemark', 'The file supports web address images and internal upload file paths with a # in the default background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3652, 3652, 'config.sys.titleRemark', 'System name length limit of 11-digit string', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3653, 3653, 'config.sys.copyrightRemark', 'Footer fixing strip with copyright notice on the left side', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3654, 3654, 'config..export.id', 'Parameter Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3655, 3655, 'config..export.name', 'Parameter Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3656, 3656, 'config..export.key', 'Parameter key name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3657, 3657, 'config..export.value', 'Parameter Key Value', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3658, 3658, 'config..export.type', 'System builtin', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3659, 3659, 'config..export.remark', 'Parameter Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3660, 3660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3661, 3661, 'config.sys.copyrightValue', 'Copyright ©2023 AGrandTech', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3662, 3662, 'config.noData', 'No parameter configuration data is accessible!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3663, 3663, 'config.errKey', 'Invalid key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3664, 3664, 'config.errValueEq', 'Change state is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3665, 3665, 'config.errKeyExists', 'Failed to manipulate parameter configuration [{name}], parameter key name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3666, 3666, 'config.errDelete', 'Deletion of parameter configuration information failed!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3667, 3667, 'config.errType', 'The operation contains built-in parameters and deletion is prohibited!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3700, 3700, 'job.monitor_sys_resource', 'Monitor-System Resources', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3701, 3701, 'job.monitor_sys_resource_remark', 'System Resource CPU/IO/Netword Collection\r\ninterval unit minutes, average minute resource situation\r\nNote: Please pass the value of the parameter interva according to the time unit minutes of the cron expression', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3702, 3702, 'job.delExpiredNeBackup', 'Delete expired NE etc backup file', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3703, 3703, 'job.delExpiredNeBackupRemark', 'Delete expired network element etc backup file, pass in the parameter to keep the backup file for {duration} days, default is 60 days.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3704, 3704, 'job.deleteExpiredAlarmRecord', 'Delete expired historical alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3705, 3705, 'job.deleteExpiredAlarmRecordRemark', 'Delete expired history alarm records, pass in the parameter to keep the history alarm records for {duration} days.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3706, 3706, 'job.deleteExpiredKpiRecord', 'Delete expired KPI records', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3707, 3707, 'job.deleteExpiredKpiRecordRemark', 'KPI record retention for {duration} days', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3708, 3708, 'job.backupEtcFromNE', 'Network Element Configuration Auto Backup Task', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3709, 3709, 'job.backupEtcFromNERemark', 'Automatically backs up the configuration files in the network element\'s etc directory.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3710, 3710, 'job.export.jobID', 'Task Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3711, 3711, 'job.export.jobName', 'Task name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3712, 3712, 'job.export.jobGroupName', 'Task Group Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3713, 3713, 'job.export.invokeTarget', 'Call target', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3714, 3714, 'job.export.targetParams', 'Incoming Parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3715, 3715, 'job.export.cronExpression', 'cron expressions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3716, 3716, 'job.export.status', 'Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3717, 3717, 'job.export.remark', 'Remarks Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3718, 3718, 'job.export.jobLogID', 'Task log number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3719, 3719, 'job.export.jobLogStatus', 'Task log status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3720, 3720, 'job.export.jobLogTime', 'Task log time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3721, 3721, 'job.noData', 'There is no accessible scheduling task data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3722, 3722, 'job.errTargetParams', 'Failed to operate scheduling task [{name}] with incorrect task incoming parameter json string!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3723, 3723, 'job.errCronExpression', 'Scheduled task [{name}] failed with incorrect Cron expression!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3724, 3724, 'job.errJobExists', 'Failed to add a new task [{name}] to a scheduling task, same task name in the same task group', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3725, 3725, 'job.statusEq', 'The change state is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3750, 3750, 'role.admin', 'Super Administrator', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3751, 3751, 'role.adminAssign', 'Managers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3752, 3752, 'role.operator', 'Operators', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3753, 3753, 'role.monitor', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3754, 3754, 'role.vistor', 'General Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3755, 3755, 'role.adminRemark', 'Super Administrator, cannot modify or delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3756, 3756, 'role.adminAssignRemark', 'Administrators can perform any operation on the device', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3757, 3757, 'role.operatorRemark', 'Operation and maintenance personnel can read data from the device and configure the device, but cannot perform software upgrade operations on the device.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3758, 3758, 'role.monitorRemark', 'Monitoring personnel Can only read data from the device, but cannot make any settings on the device', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3759, 3759, 'role.vistorRemark', 'Ordinary users can only see system-related information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3760, 3760, 'role.export.id', 'Role ID', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3761, 3761, 'role.export.name', 'Role Name ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3762, 3762, 'role.export.key', 'Role Key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3763, 3763, 'role.export.sort', 'Role Order', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3764, 3764, 'role.export.dataScope', 'Role Data Range', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3765, 3765, 'role.export.status', 'Role Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3766, 3766, 'role.noData', 'There is no accessible role data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3767, 3767, 'role.statusEq', 'The change status is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3768, 3768, 'role.errNameExists', 'Manipulating role [{name}] failed, role name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3769, 3769, 'role.errKeyExists', 'Failed to manipulate role [{name}], role key already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3800, 3800, 'post.admin', 'Systems', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3801, 3801, 'post.operator', 'Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3802, 3802, 'post.monitor', 'Operation & Maintenance', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3803, 3803, 'post.visitor', 'Monitoring', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3804, 3804, 'post.export.id', 'Post ID ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3805, 3805, 'post.export.code', 'Position Code', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3806, 3806, 'post.export.name', 'Position Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3807, 3807, 'post.export.sort', 'Position Sort', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3808, 3808, 'post.export.status', 'Position Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3809, 3809, 'post.noData', 'There is no accessible post data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3810, 3810, 'post.errNameExists', 'Failed to manipulate post [{name}], post name already exists already exists', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3811, 3811, 'post.errCodeExists', 'Failed to manipulate role [{name}], role key already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3830, 3830, 'user.export.id', 'User ID', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3831, 3831, 'user.export.name', 'Login Account', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3832, 3832, 'user.export.nick', 'Nickname', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3833, 3833, 'user.export.email', 'E-Mail', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3834, 3834, 'user.export.phone', 'Cell phone number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3835, 3835, 'user.export.sex', 'Gender', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3836, 3836, 'user.export.status', 'User Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3837, 3837, 'user.export.deptID', 'Department number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3838, 3838, 'user.export.deptName', 'Department Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3839, 3839, 'user.export.deptLeader', 'Department Head', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3840, 3840, 'user.export.loginIP', 'User Login IP', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3841, 3841, 'user.export.loginDate', 'User Login Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3842, 3842, 'user.noData', 'No accessible user data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3843, 3843, 'user.statusEq', 'The change status is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3844, 3844, 'user.errPasswdOld', 'Change password failed, old password is wrong', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3845, 3845, 'user.errPasswdEqOld', 'New password cannot be the same as the old one', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3846, 3846, 'user.errPasswd', 'Login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3847, 3847, 'user.errEmailFormat', 'Failed to operate user [{name}], mailbox format error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3848, 3848, 'user.errEmailExists', 'Failed to operate user [{name}], mailbox already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3849, 3849, 'user.errPhoneFormat', 'Failed to operate user [{name}], cell phone number format is wrong.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3850, 3850, 'user.errPhoneExists', 'Failed to operate user [{name}], cell phone number already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3851, 3851, 'user.errNameExists', 'Failed to operate user [{name}], login account already exists.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3852, 3852, 'user.import.mustItem', 'Required list item in form, {text}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3853, 3853, 'user.import.phoneExist', 'User ID: {id} cell phone number {phone} Existing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3854, 3854, 'user.import.phoneFormat', 'User ID: {id} cell phone number {phone} Wrong format', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3855, 3855, 'user.import.emailExist', 'User ID: {id} User Email: {email} Existing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3856, 3856, 'user.import.emailFormat', 'User ID: {id} Email: {email} Wrong Format', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3857, 3857, 'user.import.success', 'User ID:{id} Login name:{name} Imported successfully!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3858, 3858, 'user.import.fail', 'User ID: {id} Login name: {name} Import failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3859, 3859, 'user.import.successUpdate', 'User ID: {id} Login name: {name} Update success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3860, 3860, 'user.import.failUpdate', 'User ID: {id} Login Name: {name} Update Failed', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3861, 3861, 'user.import.failTip', 'Sorry, the import failed! A total of {num} entries were not formatted correctly, the error is below:', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3862, 3862, 'user.import.successTip', 'Congratulations, the data has been imported successfully! There are {num} entries with the following data:', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3900, 3900, 'app.common.err403', 'Unauthorized access {method} {requestURI}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3901, 3901, 'app.common.err401', 'Invalid authorization', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3902, 3902, 'app.common.err400', 'Parameter error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3903, 3903, 'app.common.exportEmpty', 'Export data record is empty', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3904, 3904, 'app.common.errOperateAdmin', 'Built-in users are not allowed to operate', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3905, 3905, 'app.common.errOperateRole', 'Built-in roles are not allowed to be operated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3906, 3906, 'app.common.deleteSuccess', 'Deleted successfully: {num}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3907, 3907, 'app.common.loginSuccess', 'Login Success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3908, 3908, 'app.common.logoutSuccess', 'Logout Successful', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3909, 3909, 'app.common.errUnlock', 'The user is not locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3910, 3910, 'app.common.noLoginUser', 'Invalid login user information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3911, 3911, 'app.common.rateLimitTip', 'Access too often, please try again later', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3912, 3912, 'log.operate.export.id', 'Operation Number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3913, 3913, 'log.operate.export.title', 'Module Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3914, 3914, 'log.operate.export.businessType', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3915, 3915, 'log.operate.export.method', 'Operation Method', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3916, 3916, 'log.operate.export.requestMethod', 'Request Method ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3917, 3917, 'log.operate.export.operatorType', 'Operation Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3918, 3918, 'log.operate.export.operName', 'Operator', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3919, 3919, 'log.operate.export.deptName', 'Operator\'s department name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3920, 3920, 'log.operate.export.url', 'Request Link Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3921, 3921, 'log.operate.export.ip', 'Requesting Host ', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3922, 3922, 'log.operate.export.location', 'Request Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3923, 3923, 'log.operate.export.param', 'Request Parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3924, 3924, 'log.operate.export.msg', 'Operation Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3925, 3925, 'log.operate.export.status', 'Operation status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3926, 3926, 'log.operate.export.costTime', 'Consumption time (ms)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3927, 3927, 'log.operate.export.operTime', 'Operation time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3928, 3928, 'log.login.export.id', 'Record number', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3929, 3929, 'log.login.export.userName', 'Login Account', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3930, 3930, 'log.login.export.status', 'Login Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3931, 3931, 'log.login.export.ip', 'Login Address', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3932, 3932, 'log.login.export.location', 'Login Location', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3933, 3933, 'log.login.export.browser', 'Browser', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3934, 3934, 'log.login.export.os', 'Operating System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3935, 3935, 'log.login.export.msg', 'Login Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3936, 3936, 'log.login.export.time', 'Login Time', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3937, 3937, 'trace.tcpdump.noData', 'Can\'t find {type} {id} information of the corresponding network element.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3938, 3938, 'register.errUsername', 'The account number cannot start with a number, but can contain upper and lower case letters, numbers, and not less than 5 digits.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3939, 3939, 'register.errPasswd', 'The password must contain at least 6 upper and lower case letters, numbers, and special symbols.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3940, 3940, 'register.errPasswdNotEq', 'User confirms password inconsistency', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3941, 3941, 'register.success', 'Successful registration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3942, 3942, 'register.successMsg', '{name} Register Successful {id}', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3943, 3943, 'log.operate.title.sysJobLog', 'Scheduling Task Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3944, 3944, 'log.operate.title.sysJob', 'Scheduling Tasks', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3945, 3945, 'log.operate.title.tcpdump', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3946, 3946, 'log.operate.title.sysConfig', 'Parameter Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3947, 3947, 'log.operate.title.sysDept', 'Sector', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3948, 3948, 'log.operate.title.sysDictData', 'Dictionary Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3949, 3949, 'log.operate.title.sysDictType', 'Dictionary type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3950, 3950, 'log.operate.title.sysMenu', 'Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3951, 3951, 'log.operate.title.sysPost', 'Positions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3952, 3952, 'log.operate.title.sysProfile', 'Personal Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3953, 3953, 'log.operate.title.sysProfileAvatar', 'Personal avatar', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3954, 3954, 'log.operate.title.sysRole', 'Roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3955, 3955, 'log.operate.title.sysUser', 'User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3956, 3956, 'log.operate.title.sysLogOper', 'Operation Logging', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3957, 3957, 'log.operate.title.sysLogLogin', 'Operation Logging', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3958, 3958, 'login.errNameOrPasswd', 'User does not exist or password is wrong', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3959, 3959, 'login.errDelFlag', 'Sorry, your account has been deleted', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3960, 3960, 'login.errStatus', 'Sorry, your account has been disabled', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3961, 3961, 'login.errRetryPasswd', 'Password was entered incorrectly several times, account has been locked', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3962, 3962, 'captcha.err', 'Captcha Error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3963, 3963, 'captcha.errValid', 'Captcha is invalid', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3964, 3964, 'app.common.noUaOsBrowser', 'Unknown Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3965, 3965, 'app.common.noIPregion', 'Intranet', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3966, 3966, 'app.common.unknown', 'Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3967, 3967, 'app.common.noNEInfo', 'No matching network element information found', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3968, 3968, 'ne.udm.errImportUserAuthFileFormat', 'Please upload a file in the format of. csv or. txt. English comma separated txt format: imsi, ki, algo, amf, opc', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3969, 3969, 'ne.udm.errExportType', 'Export file types support CSV and txt', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3970, 3970, 'ne.udm.errImportUserSubFileFormat', 'Please upload files in .csv or .txt format. English comma-separated txt format: imsi, msisdn, ambr, nssai, arfb, sar, rat, cn, smf_sel, sm_dat, eps_dat', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3971, 3971, 'log.operate.title.udmAuth', 'UDM Authentication User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3972, 3972, 'log.operate.title.udmSub', 'UDM Subscribers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3973, 3973, 'dictType.active_alarm_type', 'Event Alarm Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3974, 3974, 'dictType.active_alarm_type_remark', 'List of Active Alarm Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3975, 3975, 'dictData.active_alarm_type.communication', 'Communication Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3976, 3976, 'dictData.active_alarm_type.equipment', 'Equipment Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3977, 3977, 'dictData.active_alarm_type.processing', 'Processing Failure Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3978, 3978, 'dictData.active_alarm_type.environmental', 'Environmental Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3979, 3979, 'dictData.active_alarm_type.qualityOfService', 'Quality of Service Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3980, 3980, 'dictType.active_clear_type', 'Alarm Clearing Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3981, 3981, 'dictType.active_clear_type_remark', 'List of Alarm Clearing Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3982, 3982, 'dictData.active_clear_type.notCleared', 'Not cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3983, 3983, 'dictData.active_clear_type.hand', 'Manually cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3984, 3984, 'dictData.active_clear_type.auto', 'Automatically cleared', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3985, 3985, 'dictType.active_ack_state', 'Alarm Acknowledgement Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3986, 3986, 'dictType.active_ack_state_remark', 'Alarm Acknowledgement Type List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3987, 3987, 'dictData.active_ack_state.unconfirmed', 'Not Confirm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3988, 3988, 'dictData.active_ack_state.confirmed', 'Confirm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3989, 3989, 'dictType.active_alarm_severity', 'Severity', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3990, 3990, 'dictType.active_alarm_severity_remark', 'Severity List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3991, 3991, 'dictData.active_alarm_severity.critical', 'Critical', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3992, 3992, 'dictData.active_alarm_severity.major', 'Major', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3993, 3993, 'dictData.active_alarm_severity.minor', 'Minor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3994, 3994, 'dictData.active_alarm_severity.warning', 'Warning', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3995, 3995, 'dictData.active_alarm_severity.event', 'Event', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3996, 3996, 'config.sys.officialUrl', 'System Settings - Official Website Links', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3997, 3997, 'config.sys.helpDoc', 'System Settings-System Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3998, 3998, 'config.sys.officialUrlRemark', 'Default no address with # sign', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3999, 3999, 'config.sys.helpDocRemark', 'Static file directory address, use {language} to distinguish language files', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4000, 4000, 'log.operate.title.neAction', 'Network Element Processing', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4001, 4001, 'log.operate.title.helpDoc', 'System Usage Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4002, 4002, 'menu.ueUser.n3iwf', 'N3IWF Online User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4003, 4003, 'menu.ueUser.pcf', 'User PCC Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4004, 4004, 'menu.system.user.editRole', 'Modifying user roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4005, 4005, 'config.sys.i18nOpen', 'Internationalization Switching', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4006, 4006, 'config.sys.i18nDefault', 'Internationalization Default Language', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4007, 4007, 'user.export.role', 'UserRole', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4008, 4008, 'menu.system.setting.i18n', 'Internationalization Switch', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4009, 4009, 'menu.system.setting.i18nRemark', 'Internationalized multilingual switching options', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4010, 4010, 'dictType.index_status', 'Home Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4011, 4011, 'dictType.index_status_remark', 'Network element status colors on the home page', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4012, 4012, 'dictType.index_status.normal', 'Normal', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4013, 4013, 'dictType.index_status.abnormal', 'Abnormal', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4014, 4014, 'menu.log.neFile', 'NE Log File', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4015, 4015, 'job.deleteExpiredNeStateRecord', 'Delete Expired NE State Record', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4016, 4016, 'job.deleteExpiredNeStateRecordRemark', 'Delete expired NE state records regularly and keep them for {duration} days by default.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4017, 4017, 'job.getStateFromNE', 'Get state from NEs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4018, 4018, 'job.getStateFromNERemark', 'Get state information from all NEs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4019, 4019, 'job.genNeStateAlarm', 'Network Element Health Check', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4020, 4020, 'job.genNeStateAlarmRemark', 'Health status inspection of network elements, generating alarms in case of abnormalities.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4021, 4021, 'menu.neUser.nssf', 'NSSF Subscription Info', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4022, 4022, 'menu.neUser.nssfAmf', 'NSSF Available AMFs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4023, 4023, 'menu.monitor.topology', 'Topology Info', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4024, 4024, 'menu.monitor.topologyBuild', 'Topological Graph Build', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4025, 4025, 'log.operate.title.chartGraph', 'Topological Graph', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 1, NULL); +REPLACE INTO `sys_dict_data` VALUES (4026, 4026, 'menu.monitor.topologyArchitecture', 'NE System Topology', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4027, 4027, 'menu.alarm', 'Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4028, 4028, 'menu.topology', 'Topology', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4029, 4029, 'config.sys.lockTime', 'System Settings - Screen Lock Timeout Duration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4030, 4030, 'config.sys.lockTimeRemark', 'Screen lock timeout duration when idle, in seconds.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4031, 4031, 'sys.account.captchaType', 'Account Self Service - Captcha Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4032, 4032, 'sys.account.captchaTypeRemark', 'Using CAPTCHA types (math numeric calculation, char character validation)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4033, 4033, 'menu.dashboard', 'Dashboard', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4034, 4034, 'menu.dashboard.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4035, 4035, 'menu.dashboard.cdr', 'IMS CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4036, 4036, 'dictType.cdr_sip_code', 'CDR SIP Response Code Category Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4037, 4037, 'dictType.cdr_call_type', 'CDR Call Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4038, 4038, 'dictType.ue_auth_code', 'UE Event Authentication Code Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4039, 4039, 'dictType.ue_event_type', 'UE Event Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4040, 4040, 'dictData.cdr_sip_code.200', 'Normal Cleaning', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4041, 4041, 'dictData.cdr_sip_code.403', 'Banned', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4042, 4042, 'dictData.cdr_sip_code.408', 'Request Timeout', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4043, 4043, 'dictData.cdr_sip_code.500', 'Internal Server Error', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4044, 4044, 'dictData.cdr_call_type.audio', 'Voice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4045, 4045, 'dictData.cdr_call_type.video', 'Video', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4046, 4046, 'dictData.ue_auth_code.200', 'Success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4047, 4047, 'dictData.ue_auth_code.001', 'Network Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4048, 4048, 'dictData.ue_auth_code.002', 'Air Interface Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4049, 4049, 'dictData.ue_auth_code.003', 'MAC Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4050, 4050, 'dictData.ue_auth_code.004', 'Synchronization failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4051, 4051, 'dictData.ue_auth_code.005', 'Non-5G Authentication Not Accepted', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4052, 4052, 'dictData.ue_auth_code.006', 'Response Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4053, 4053, 'dictData.ue_auth_code.007', 'Unknown', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4054, 4054, 'dictData.ue_event_type.auth', 'Authentication', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4055, 4055, 'dictData.ue_event_type.detach', 'Detach', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4056, 4056, 'dictData.ue_event_type.state', 'CM Status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4057, 4057, 'dictType.ue_event_cm_state', 'UE Event CM Status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4058, 4058, 'dictData.ue_event_cm_state.connected', 'Connected', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4059, 4059, 'dictData.ue_event_cm_state.idle', 'Idle', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4060, 4060, 'dictData.ue_event_cm_state.inactive', 'Inactive', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4061, 4061, 'dictData.cdr_sip_code.404', 'Not Found', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4062, 4062, 'dictData.cdr_sip_code.487', 'Request Terminated', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4063, 4063, 'dictData.cdr_sip_code.503', 'Service Unavailable', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4064, 4064, 'dictData.cdr_sip_code.504', 'Server Time Out', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4065, 4065, 'dictData.cdr_sip_code.603', 'Decline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4066, 4066, 'dictData.cdr_sip_code.606', 'Not Acceptable', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4067, 4067, 'cache.name.user', 'Login User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4068, 4068, 'cache.name.sys_config', 'Parameters Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4069, 4069, 'cache.name.sys_dict', 'Dictionary Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4070, 4070, 'cache.name.captcha_codes', 'Captcha', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4071, 4071, 'cache.name.repeat_submit', 'Resubmit', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4072, 4072, 'cache.name.rate_limit', 'Limit Traffic', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4073, 4073, 'cache.name.pwd_err_cnt', 'Number of Password Errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4074, 4074, 'cache.name.ne_info', 'NE Info Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4075, 4075, 'cache.name.ne_data', 'NE Data Management', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4076, 4076, 'dictData.cdr_call_type.sms', 'SMS', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4077, 4077, 'dictData.cdr_sip_code.202', 'Accepted', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4078, 4078, 'dictData.cdr_sip_code.488', 'Not Aceptable Here', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4079, 4079, 'dictData.cdr_sip_code.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4080, 4080, 'log.operate.title.ws', 'WS Sessions', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4081, 4081, 'log.operate.title.neHost', 'NE Host', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4082, 4082, 'neHost.noData', 'There is no accessible host information data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4083, 4083, 'neHost.errKeyExists', 'Host information operation [{name}] failed, name already exists in the same group', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4084, 4084, 'neHost.errByHostInfo', 'Failed to connect to the host, please check the connection parameters and try again', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4085, 4085, 'dictType.ne_host_type', 'Network element host connection type', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4086, 4086, 'dictType.ne_host_groupId', 'Network element host grouping', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4087, 4087, 'dictType.ne_host_authMode', 'Network element host authentication mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4088, 4088, 'dictData.ne_host_type.ssh', 'SSH', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4089, 4089, 'dictData.ne_host_type.telnet', 'Telnet', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4090, 4090, 'dictData.ne_host_groupId.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4091, 4091, 'dictData.ne_host_groupId.1', 'Network Elements', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4092, 4092, 'dictData.ne_host_groupId.2', 'System', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4093, 4093, 'dictData.ne_host_authMode.0', 'Password Authentication', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4094, 4094, 'dictData.ne_host_authMode.1', 'Private key authentication', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4095, 4095, 'menu.tools.terminal', 'NE Host Terminal', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4096, 4096, 'menu.config.neHost', 'NE Host', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4097, 4097, 'menu.config.neHostCommand', 'NE Host CMD', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4098, 4098, 'log.operate.title.neHostCmd', 'NE Host CMD', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4099, 4099, 'neHostCmd.noData', 'No accessible host command data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4100, 4100, 'neHostCmd.errKeyExists', 'Host command operation [{name}] failed, name already exists in the same group', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4101, 4101, 'dictType.ne_host_cmd_groupId', 'Network element host command grouping', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4102, 4102, 'dictData.ne_host_cmd_groupId.0', 'Default', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4103, 4103, 'dictData.ne_host_cmd_groupId.1', 'Quick Commands', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4104, 4104, 'menu.config.neInfo', 'NE Info', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4105, 4105, 'log.operate.title.neInfo', 'NE Info', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4106, 4106, 'neInfo.noData', 'There is no accessible network element information data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4107, 4107, 'neInfo.errKeyExists', 'NE info operation [{key}] failed, identifier already exists under the same type', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4108, 4108, 'log.operate.title.imsCDR', 'IMS-CDR session', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4109, 4109, 'menu.dashboard.amfUE', 'UE Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4110, 4110, 'log.operate.title.amfUE', 'AMF-UE event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', 'Sync Config', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4115, 4115, 'dictType.ne_info_status', 'NE Info State', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4116, 4116, 'menu.tools.neQuickSetup', 'NE Quick Setup', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4117, 4117, 'log.operate.title.neConfig', 'NE Parameter Configuration', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4118, 4118, 'menu.config.neLicense', 'NE License', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4119, 4119, 'log.operate.title.neLicense', 'NE License', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4120, 4120, 'menu.config.neSoftware', 'NE Software', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4121, 4121, 'log.operate.title.neSoftware', 'NE Software', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4122, 4122, 'menu.config.neVersion', 'Ne Version', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4123, 4123, 'log.operate.title.neVersion', 'Ne Version', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4124, 4124, 'dictType.ne_license_status', 'NE License Status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4125, 4125, 'ne_license_status.0', 'Invalid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4126, 4126, 'ne_license_status.1', 'Valid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4127, 4127, 'menu.dashboard.mocn', 'MOCN', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO + `sys_dict_data` +VALUES ( + 4128, 4128, 'menu.monitor.cdr', 'CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '' + ); +REPLACE INTO + `sys_dict_data` +VALUES ( + 4129, 4129, 'menu.monitor.event', 'Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '' + ); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgvue3/upg_sys_menu.sql b/database/upgvue3/upg_sys_menu.sql index 0f9f37c3..f3097974 100644 --- a/database/upgvue3/upg_sys_menu.sql +++ b/database/upgvue3/upg_sys_menu.sql @@ -238,7 +238,7 @@ INSERT IGNORE INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 12, 'set INSERT IGNORE INTO `sys_menu` VALUES (2115, 'menu.system.systemResource', 1, 13, 'monitor', 'monitor/monitor/index', '1', '1', 'M', '1', '1', 'monitor:monitor:info', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemResourceRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2116, 'menu.config.configNEForm', 4, 2, 'configParamForm', 'configManage/configParamForm/index', '1', '0', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNEFormRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2117, 'menu.config.configNETree', 4, 2, 'configParamTree', 'configManage/configParamTree/index', '1', '0', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2118, 'menu.config.configNETreeTable', 4, 2, 'configNETreeTable', 'configManage/configParamTreeTable/index', '1', '0', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeTableRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2118, 'menu.config.configNETreeTable', 4, 2, 'configNETreeTable', 'configManage/configParamTreeTable/index', '1', '1', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeTableRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2119, 'menu.ueUser.n3iwf', 5, 8, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '0', '1', 'neUser:n3iwf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2120, 'menu.ueUser.pcf', 5, 9, 'pcf', 'neUser/pcf/index', '1', '0', 'M', '1', '1', 'neUser:pcf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2121, 'menu.system.user.editRole', 100, 8, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:editRole', '#', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -253,14 +253,23 @@ INSERT IGNORE INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 10, 'alarm', NUL INSERT IGNORE INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 20, 'topology', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-anzhuo', 'supervisor', 1704800000000, 'supervisor', 1704847055540, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 0, 'dashboard', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1705550000000, 'supervisor', 1705550000000, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2131, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2133, 'menu.dashboard.cdr', 2131, 3, 'cdr', 'dashboard/cdr/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2134, 'menu.tools.terminal', 3, 3, 'terminal', 'tool/terminal/index', '1', '0', 'M', '1', '1', 'tool:terminal:index', 'icon-pcduan', 'supervisor', 1708481172778, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2133, 'menu.dashboard.cdr', 2131, 3, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2134, 'menu.tools.terminal', 3, 3, 'terminal', 'tool/terminal/index', '1', '1', 'M', '1', '1', 'tool:terminal:index', 'icon-pcduan', 'supervisor', 1708481172778, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2135, 'menu.config.neHost', 4, 15, 'neHost', 'ne/neHost/index', '1', '0', 'M', '1', '1', 'ne:neHost:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2136, 'menu.config.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '1', 'ne:neHostCommand:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2137, 'menu.config.neInfo', 4, 14, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2131, 6, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2139, 'menu.tools.neQuickSetup', 3, 6, 'neQuickSetup', 'tool/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neHost:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2140, 'menu.config.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2141, 'menu.config.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2142, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2143, 'menu.dashboard.mocn', 2131, 9, 'mocn', 'dashboard/mocn/index', '1', '0', 'M', '1', '1', 'dashboard:mocn:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); -- 指定记录条件更新 -UPDATE `sys_menu` SET `is_cache` = '1' WHERE `menu_id` = 2118; +UPDATE `omc_db`.`sys_menu` SET `is_cache` = '1' WHERE `menu_id` = 2118; +UPDATE `omc_db`.`sys_menu` SET `is_cache` = '1' WHERE `menu_id` = 2134; +UPDATE `omc_db`.`sys_menu` SET `path` = 'imsCDR', `component` = 'dashboard/imsCDR/index' WHERE `menu_id` = 2133; UPDATE `omc_db`.`sys_menu` SET @@ -438,4 +447,514 @@ SET WHERE `menu_id` = 2105; +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2142; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2143; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.tools.help', + `parent_id` = 3, + `menu_sort` = 1, + `path` = 'help', + `component` = 'tool/help/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'tool:help:list', + `icon` = '#', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'supervisor', + `update_time` = 1708480983482, + `remark` = 'menu.tools.helpRemark' +WHERE + `menu_id` = 118; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.ueUser.authUDM', + `parent_id` = 5, + `menu_sort` = 1, + `path` = 'auth', + `component` = 'neUser/auth/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'neUser:auth:index', + `icon` = 'icon-xiangmuchengyuan', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.ueUser.authUDMRemark' +WHERE + `menu_id` = 2009; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.ueUser.subUDM', + `parent_id` = 5, + `menu_sort` = 2, + `path` = 'sub', + `component` = 'neUser/sub/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'neUser:sub:index', + `icon` = 'icon-xiangmuchengyuan', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.ueUser.subUDMRemark' +WHERE + `menu_id` = 2010; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.config.neManage', + `parent_id` = 4, + `menu_sort` = 1, + `path` = 'neManage', + `component` = 'configManage/neManage/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'configManage:neManage:index', + `icon` = 'icon-biaoqing', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.config.neManageRemark' +WHERE + `menu_id` = 2075; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.config.configNE', + `parent_id` = 4, + `menu_sort` = 2, + `path` = 'configParam', + `component` = 'configManage/configParam/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'configManage:configParam:index', + `icon` = 'icon-piliang', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.config.configNERemark' +WHERE + `menu_id` = 2076; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.config.backupManage', + `parent_id` = 4, + `menu_sort` = 3, + `path` = 'backupManage', + `component` = 'configManage/backupManage/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'configManage:backupManage:index', + `icon` = 'icon-soutubiao', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.config.backupManageRemark' +WHERE + `menu_id` = 2078; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.config.softwareManage', + `parent_id` = 4, + `menu_sort` = 4, + `path` = 'softwareManage', + `component` = 'configManage/softwareManage/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'configManage:softwareManage:index', + `icon` = 'icon-huidingbu', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.config.softwareManageRemark' +WHERE + `menu_id` = 2079; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.ueUser.base5G', + `parent_id` = 5, + `menu_sort` = 7, + `path` = 'base5G', + `component` = 'neUser/base5G/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'neUser:base5G:index', + `icon` = 'icon-paixu', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.ueUser.base5GRemark' +WHERE + `menu_id` = 2082; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.trace.task', + `parent_id` = 2083, + `menu_sort` = 1, + `path` = 'task', + `component` = 'traceManage/task/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'traceManage:task:index', + `icon` = 'icon-chexiao', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'admin', + `update_time` = 1712807894783, + `remark` = 'menu.trace.taskRemark' +WHERE + `menu_id` = 2084; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.trace.analysis', + `parent_id` = 2083, + `menu_sort` = 2, + `path` = 'analysis', + `component` = 'traceManage/analysis/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'traceManage:analysis:index', + `icon` = 'icon-gongnengjieshao', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'supervisor', + `update_time` = 1712751454668, + `remark` = 'menu.trace.analysisRemark' +WHERE + `menu_id` = 2085; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.log.alarm', + `parent_id` = 2089, + `menu_sort` = 3, + `path` = 'alarm-log', + `component` = 'logManage/alarm/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'logManage:alarm:index', + `icon` = 'icon-fuzhidaima', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.log.alarmRemark' +WHERE + `menu_id` = 2092; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.perf.task', + `parent_id` = 2099, + `menu_sort` = 1, + `path` = 'taskManage', + `component` = 'perfManage/taskManage/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'perfManage:taskManage:index', + `icon` = 'icon-wofaqi', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'admin', + `update_time` = 1712807912947, + `remark` = 'menu.perf.taskRemark' +WHERE + `menu_id` = 2100; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.perf.data', + `parent_id` = 2099, + `menu_sort` = 2, + `path` = 'perfData', + `component` = 'perfManage/perfData/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'perfManage:perfData:index', + `icon` = 'icon-soutubiao', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'admin', + `update_time` = 1712807920148, + `remark` = 'menu.perf.dataRemark' +WHERE + `menu_id` = 2101; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.perf.threshold', + `parent_id` = 2099, + `menu_sort` = 4, + `path` = 'perfThreshold', + `component` = 'perfManage/perfThreshold/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'perfManage:perfThreshold:index', + `icon` = 'icon-zhuanrang', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'admin', + `update_time` = 1712807935215, + `remark` = 'menu.perf.thresholdRemark' +WHERE + `menu_id` = 2103; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.perf.customTarget', + `parent_id` = 2099, + `menu_sort` = 6, + `path` = 'customTarget', + `component` = 'perfManage/customTarget/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '0', + `status` = '0', + `perms` = 'perfManage:customTarget:index', + `icon` = 'icon-fanhui1', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'admin', + `update_time` = 1712807948673, + `remark` = 'menu.perf.customTargetRemark' +WHERE + `menu_id` = 2105; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.mml.set', + `parent_id` = 2107, + `menu_sort` = 4, + `path` = 'mmlSet', + `component` = 'mmlManage/mmlSet/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'mmlManage:mmlSet:index', + `icon` = 'icon-wofaqi', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = NULL, + `update_time` = 0, + `remark` = 'menu.mml.setRemark' +WHERE + `menu_id` = 2110; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.system.setting.i18n', + `parent_id` = 2114, + `menu_sort` = 1, + `path` = NULL, + `component` = NULL, + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'B', + `visible` = '1', + `status` = '1', + `perms` = 'system:setting:i18n', + `icon` = '#', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'supervisor', + `update_time` = 1700000000000, + `remark` = 'menu.system.setting.i18nRemark' +WHERE + `menu_id` = 2122; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.dashboard.cdr', + `parent_id` = 2140, + `menu_sort` = 40, + `path` = 'imsCDR', + `component` = 'dashboard/imsCDR/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'dashboard:cdr:index', + `icon` = 'icon-paixu', + `create_by` = 'supervisor', + `create_time` = 1705550000000, + `update_by` = 'supervisor', + `update_time` = 1712751038982, + `remark` = '' +WHERE + `menu_id` = 2133; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.config.neHost', + `parent_id` = 4, + `menu_sort` = 15, + `path` = 'neHost', + `component` = 'ne/neHost/index', + `is_frame` = '1', + `is_cache` = '1', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'ne:neHost:list', + `icon` = 'icon-fuzhidaima', + `create_by` = 'supervisor', + `create_time` = 1708583596871, + `update_by` = '', + `update_time` = 0, + `remark` = '' +WHERE + `menu_id` = 2135; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.dashboard.amfUE', + `parent_id` = 2141, + `menu_sort` = 1, + `path` = 'amfUE', + `component` = 'dashboard/amfUE/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '1', + `status` = '1', + `perms` = 'dashboard:amfUE:index', + `icon` = 'icon-paixu', + `create_by` = 'supervisor', + `create_time` = 1705550000000, + `update_by` = 'supervisor', + `update_time` = 1711354049893, + `remark` = '' +WHERE + `menu_id` = 2138; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.logs.log', + `parent_id` = 2089, + `menu_sort` = 0, + `path` = 'log', + `component` = '', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'D', + `visible` = '0', + `status` = '1', + `perms` = '', + `icon` = 'icon-wenjian', + `create_by` = 'supervisor', + `create_time` = 1711352535855, + `update_by` = 'supervisor', + `update_time` = 1712751078161, + `remark` = '' +WHERE + `menu_id` = 2139; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.monitor.cdr', + `parent_id` = 2087, + `menu_sort` = 40, + `path` = 'cdr', + `component` = '', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'D', + `visible` = '1', + `status` = '1', + `perms` = '', + `icon` = 'icon-tubiaoku', + `create_by` = 'supervisor', + `create_time` = 1711352709786, + `update_by` = 'supervisor', + `update_time` = 1712751135878, + `remark` = '' +WHERE + `menu_id` = 2140; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.monitor.event', + `parent_id` = 2087, + `menu_sort` = 50, + `path` = 'event', + `component` = '', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'D', + `visible` = '1', + `status` = '1', + `perms` = '', + `icon` = 'icon-gengduo', + `create_by` = 'supervisor', + `create_time` = 1711352768797, + `update_by` = 'supervisor', + `update_time` = 1712751125648, + `remark` = '' +WHERE + `menu_id` = 2141; + SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgvue3/upg_sys_role_menu.sql b/database/upgvue3/upg_sys_role_menu.sql index c1fdf0c7..d917190d 100644 --- a/database/upgvue3/upg_sys_role_menu.sql +++ b/database/upgvue3/upg_sys_role_menu.sql @@ -264,4 +264,92 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (100, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (100, 100); INSERT IGNORE INTO `sys_role_menu` VALUES (100, 1000); +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 106; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 107; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 113; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 1025; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 1026; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 1027; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 1028; + +DELETE FROM `omc_db`.`sys_role_menu` +WHERE + `role_id` = 2 + AND `menu_id` = 1029; + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (2, 2133); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (2, 2138); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (2, 2140); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (2, 2141); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (3, 2133); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (3, 2138); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (3, 2140); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (3, 2141); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (4, 2133); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (4, 2138); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (4, 2140); + +INSERT IGNORE INTO + `omc_db`.`sys_role_menu` (`role_id`, `menu_id`) +VALUES (4, 2141); + SET FOREIGN_KEY_CHECKS = 1; diff --git a/features/mml/mml.go b/features/mml/mml.go index 97e3c3e3..03195467 100644 --- a/features/mml/mml.go +++ b/features/mml/mml.go @@ -78,7 +78,7 @@ func PostMML2ToNF(w http.ResponseWriter, r *http.Request) { return } - var buf [20 * 1024]byte + var buf [100 * 1024]byte //buf := make([]byte, 0) var n int var mmlResult []string @@ -172,7 +172,7 @@ func PostMML2ToNF(w http.ResponseWriter, r *http.Request) { //re2 := regexp.MustCompile(`\x00`) // 匹配空字符 re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符 //re := regexp.MustCompile(`[\x00-\x1F\x7F]`) - result := re1.ReplaceAllString(string(buf[0:n-len(neType)-2]), "") + result := re1.ReplaceAllString(string(buf[0:n]), "") result = re2.ReplaceAllString(result, "") mmlResult = append(mmlResult, result) } diff --git a/makefile b/makefile index e206a93f..7f4451ab 100644 --- a/makefile +++ b/makefile @@ -3,7 +3,7 @@ ProjectL = omc ProjectU = OMC PROJECT = $(ProjectL) -VERSION = 2.2404.2 +VERSION = 2.2404.3 RelDate = `date +%Y%m%d` Release = $(RelDate) RelVer = $(VERSION)-$(RelDate) diff --git a/mkpkg.sh b/mkpkg.sh index 059783fd..d73cc656 100644 --- a/mkpkg.sh +++ b/mkpkg.sh @@ -2,7 +2,7 @@ ProcList="restagent crontask sshsvc captrace data2html" ProjectL=omc -VERSION=2.2404.2 +VERSION=2.2404.3 RelDate=`date +%Y%m%d` Release=${RelDate} RelVer=${VERSION}-${RelDate} diff --git a/restagent/makefile b/restagent/makefile index 977de199..9740485a 100644 --- a/restagent/makefile +++ b/restagent/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2404.2 +VERSION = 2.2404.3 PLATFORM = amd64 ARMPLATFORM = aarch64 BUILDDIR = ../../build diff --git a/src/framework/config/config/config.default.yaml b/src/framework/config/config/config.default.yaml index 9baa705d..1c0abbf8 100644 --- a/src/framework/config/config/config.default.yaml +++ b/src/framework/config/config/config.default.yaml @@ -1,7 +1,7 @@ # 项目信息 framework: name: "CN EMS" - version: "2.2404.2" + version: "2.2404.3" # 应用服务配置 server: diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 3b44020a..95eafb07 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -51,7 +51,7 @@ func (r *NeInfoImpl) SelectNeInfoByNeTypeAndNeID(neType, neID string) model.NeIn // RefreshByNeTypeAndNeID 通过ne_type和ne_id刷新redis中的缓存 func (r *NeInfoImpl) RefreshByNeTypeAndNeID(neType, neID string) model.NeInfo { var neInfo model.NeInfo - key := fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, neType, neID) + key := fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, strings.ToUpper(neType), neID) redis.Del("", key) neInfo = r.neInfoRepository.SelectNeInfoByNeTypeAndNeID(neType, neID) if neInfo.NeId == neID { @@ -94,7 +94,7 @@ func (r *NeInfoImpl) SelectNeInfoByRmuid(rmUid string) model.NeInfo { } else { neInfos := r.SelectList(neInfo, false) for _, v := range neInfos { - key := fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, v.NeType, v.NeId) + key := fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, strings.ToUpper(v.NeType), v.NeId) redis.Del("", key) values, _ := json.Marshal(v) redis.Set("", key, string(values)) diff --git a/sshsvc/makefile b/sshsvc/makefile index 31b30a3a..1630b19d 100644 --- a/sshsvc/makefile +++ b/sshsvc/makefile @@ -1,7 +1,7 @@ # Makefile for OMC-OMC-crontask project PROJECT = OMC -VERSION = 2.2404.2 +VERSION = 2.2404.3 LIBDIR = be.ems/lib BINNAME = sshsvc From c3bf466526a602ae112970ed71404096c518cdd5 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 15 Apr 2024 18:21:28 +0800 Subject: [PATCH 021/130] =?UTF-8?q?fix:=20=E7=89=88=E6=9C=AC=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E9=9C=80=E8=A6=81=E5=8D=87=E7=BA=A7=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=90=8E=E9=87=8D=E5=90=AF=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_version.impl.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 018d3d36..ad12f15c 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -151,6 +151,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp if neVersion.NeType == "OMC" { cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh stop") cmdStrArr = append(cmdStrArr, pkgCmdStr) + cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m upgrade") // 升级数据库 cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart") return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 15s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && "))) } else if neVersion.NeType == "IMS" { From 4c379689256ccd6941aeccda03e5009244abe063 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 16 Apr 2024 11:45:13 +0800 Subject: [PATCH 022/130] =?UTF-8?q?feat:=20=E8=BD=AF=E4=BB=B6=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ne_software.impl.go | 24 +++++++------- .../service/ne_version.impl.go | 32 +++++++++++++++++++ 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/modules/network_element/service/ne_software.impl.go b/src/modules/network_element/service/ne_software.impl.go index df1454e4..0f0ede9f 100644 --- a/src/modules/network_element/service/ne_software.impl.go +++ b/src/modules/network_element/service/ne_software.impl.go @@ -270,17 +270,19 @@ func (r *NeSoftwareImpl) InstallToNeHost(neSoftware model.NeSoftware, preinput m // 等待写入协程完成 <-done - // 更新Version - neVersion := NewNeVersionImpl.SelectByNeTypeAndNeID(neSoftware.NeType, neSoftware.NeId) - if neVersion.NeId == neSoftware.NeId { - neVersion.Name = neSoftware.Name - neVersion.Version = neSoftware.Version - neVersion.Path = neSoftware.Path - neVersion.NewName = "-" - neVersion.NewVersion = "-" - neVersion.NewPath = "-" - neVersion.Status = "1" - NewNeVersionImpl.Update(neVersion) + // 执行到最后语句的更新Version + if strings.LastIndex(logMsg, okFlagStr) > 5 { + verInfo := NewNeVersionImpl.SelectByNeTypeAndNeID(neSoftware.NeType, neSoftware.NeId) + if verInfo.NeId == neSoftware.NeId { + verInfo.Name = neSoftware.Name + verInfo.Version = neSoftware.Version + verInfo.Path = neSoftware.Path + verInfo.NewName = "-" + verInfo.NewVersion = "-" + verInfo.NewPath = "-" + verInfo.Status = "1" + NewNeVersionImpl.Update(verInfo) + } } return logMsg, nil } diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index ad12f15c..1b4b105c 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -236,5 +236,37 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp }() // 等待写入协程完成 <-done + + // 执行到最后语句的更新Version + if strings.LastIndex(logMsg, okFlagStr) > 5 { + verInfo := NewNeVersionImpl.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) + if verInfo.NeId == neVersion.NeId { + curName := verInfo.Name + curVersion := verInfo.Version + curPath := verInfo.Path + if action == "upgrade" { + verInfo.Name = neVersion.NewName + verInfo.Version = neVersion.NewVersion + verInfo.Path = neVersion.NewPath + verInfo.PreName = curName + verInfo.PreVersion = curVersion + verInfo.PrePath = curPath + verInfo.NewName = "-" + verInfo.NewVersion = "-" + verInfo.NewPath = "-" + } + if action == "rollback" { + verInfo.Name = neVersion.PreName + verInfo.Version = neVersion.PreVersion + verInfo.Path = neVersion.PrePath + verInfo.PreName = curName + verInfo.PreVersion = curVersion + verInfo.PrePath = curPath + } + + verInfo.Status = "1" + NewNeVersionImpl.Update(verInfo) + } + } return logMsg, nil } From 07f6b9c31a852f5d9c4e555b132eb172c46cf308 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 16 Apr 2024 19:40:29 +0800 Subject: [PATCH 023/130] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=BD=91?= =?UTF-8?q?=E5=85=83=E7=AB=AF=E5=85=AC=E5=85=B1=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=AF=BB=E5=86=99=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/i18n_data.xlsx | Bin 105553 -> 105748 bytes config/locales/i18n_table.xlsx | Bin 55829 -> 55968 bytes .../upgrade/upg_sys_dict_data1_i18n_zh.sql | 3 +- .../upgrade/upg_sys_dict_data2_i18n_en.sql | 3 +- database/upgrade/upg_sys_menu.sql | 3 +- .../network_element/controller/ne_info.go | 34 ++++++- .../network_element/network_element.go | 10 ++ .../network_element/service/ne_info.go | 8 ++ .../network_element/service/ne_info.impl.go | 89 +++++++++++++++++- 9 files changed, 145 insertions(+), 5 deletions(-) diff --git a/config/locales/i18n_data.xlsx b/config/locales/i18n_data.xlsx index 5ea03cbb0437af65770b13cb0d12408a3dd4aa1e..442153a0b1ae69cf97f79cf80d8bb52c17f59e70 100644 GIT binary patch literal 105748 zcmcd!c{tQx+b5-8t2QkX+N_~OgKTBrvy3%VO42WrJ?m&A%915Q6vi?_D%nE)BH5BH zm1T;og&Kpb^Pca_d}r+R{P8~5^<3|By;o<>`JQv1&wbyY`*R;BR2i19ri1?Dt)G|7{4O9Qw>C2Y|u3Y-} zLC|ZJH!>T%`mgnG7;3TR-=iJGf9=+lj1N7TkMn{pc7HZ;eEVU@@a2^aZVZ|Qe%AuN zabAtMvhn4_VPaJk;$XL%aj5b-dcS8oj_%MjSf(d-=_jYTQ%Xv;m}+2r{Zsp`LN6H3 z+S#~;2wWT3@Q#i%CVw`2_{?fsMu3)xs@7+%( zKG6N#wwma??)SRsdtCM)Ur-qAu_V~zjZ^p79A$eB+GO{;TB>gjZn=qDL6j|Zjf_t< zzwv@0R8nliWA1{R-_!VxTu_Q_p3FCFsP}0#7wz;IZVEn=sc%A9^)WMFV59m!zB0E> zU*z&s+vWR*aoa{;EX^~O^;!S*12(sS_r~eitY4O{3?H+;#>&+AuhNNqFzj{uXVLmC zPRf_NIILY$vY9j+PrWHVilR%rap1|as{O;P>{m1H`&b@VIkdOZyH~+;%XaY-5A)v$ zKl;=7<2CPa=c}ZXqR1aioK3>T`DayaHk}`C$$VzB-RtbTx7&A17pF&hC;qO>t}jVj z{;=nhX2}EG4c;vNca5^4?Kf(c5x1`9d26X=@RjZCmU|gG&!6FgnwuLg>SFd)o{4zN zlf3HO=b(*vy|2$MMxtLodt|_iMxihMsV2u>UjEvY8Y0}hT3tKHUc88C z{WhxgCc?#8RFJ94RU`LGsHEs>^P{OkO2^k;J#iB8;LG`67mQaN{^xNDQfJu6XKnP2 zo43b@IGeXi{?jIY`l=##BpZ&-JiGadhUgmAGPk$U8*qld6-eB+C@*gCh6<6?4$ zqB*3D63-oU`}XxFLOQo_&(6v!N5?G5b*2bS>2F*gR2oEfxbX$Y9@reU+`iJ+^VHMT z21N<<(Wlk)pC^5?oml_+@_L$Ydh$PTLfKxlvpjdsekR=XU(&@hM$*v{#Fo=- zpY?A^Lk>ZQ6*^%O%=h{3CGP^W!xP?5h4QiYea5Z#@*I`vV02{rpvIY}Uvu%nnT$wB zrL8EW!$24A;-15A@hgT63yM4}gY5hazWusOf5W`ff1;5%h#nsl#Eo|{Nl%P-vJ;2$ zP$*)1MkO#mn$R~q9^(iiIePTqS^D` zxWU%R#uy^L(`>RoAWZd`^!TQ+@iunipD^_JL??P=5@pP+bKN?|W8jUTH}TI%7&~!v zv{?}B))>xX`yZUgXk|ZotVBBH_O?OXIN?o<$8aw?XQDw`qNN#~63Wy;{4>Br{Np^@ zj~mCg;i{y^yTjgqkGb7d5}Al9%o%4L&tgZ9_ir2e!Hyp8t!!T|J>Kr!FQ`y3qCxx} zBmL^)50u9w5gpZoo)i?XE}X0)HiR|w-YDF0etZJeR%kaQ$S$owY}CY!|Mr%4A7)37 zwEt=|o2-&1{tiPEo3jLQK@rjNK?inZbmwK&z5m!=*CPaQ?HZe66Wo!y)C`#U>*-+G=B4M_jLIex*N?@f7T#@sWH2ONY&3bo?XIhTMEc=R=K|Lx0lcAN*dm9iUbcEcz%xF;%< zKZ_vjebOJsbU<@LN&0a*qq1}=im}v6#P^6ruz!*M=;G0}~3JXwZ*$DXnT zhO&tEh;0@Xd3;V}^l?w!NvSeUk?vkgoFKb_zsJv@CjIO2!7q{VN%W7HOIV}+i4BRJ zF>gePso%ZxBHiYvC}V2YgT;mw8O!^!Y%sE^c&Eu^QTlx z+Bnr)I_m}JzJNYaQQEQFgrk>#TYxF+iQxBc+WV3W)#&syeRI=sw_=NhA|qW^v|zkNMC{;a|K*IAsq;JL+t z&1XP(>uv5zY$~_K=YVV0)-|qGlP}Dq?+jX2m=qkktTuYb^{^VVJU`*PsQ(^lbaL#c z^Jjdy!!g`4Dxv|K9w)6TWKl$kB)*6ZHY7x85|nT~qhP_YAgK4ij)E zzu;TmrqGW}=8~oa6PGbJ2en*V+*%!Ztu>Nj{&7kgdwpE6+(Y-n_pG+ySsl3PecX-m zNAh(yz;CQ=^gZ(y{6XVf9SV$Y>oFg zc^|G+4=WF)nAbSBEHpP|Z~+)h1cUuvQ3qcL&@TyzT=jnQn6B1Au#1kIVt!}8aJgG} zIH+wb&bb#$$Ma3%MOG~5xKT(#v)-24U!1%mm(h*T1`2mbiFDK-NUv zwJ-6moaCVInHV4C!IuH<_hLWY+4NrDJ0akz^d0$c4Y9&w;2``ETFIqjjUE#RKeox^ z!Xj4Q(#g7!o)2}m z!3vOW`>nG6ShPNss#5N@`XmS)AIm@>ijy@M#kp2TZXF|kNl=u+roj-tvO|V-r}SbO zm9#qVX7gDc*s2wABahFjB>ts|RyY5JLIaW!$`;%QMtHytGQ!k_jIbb9STrkk`(t2( z((29qqm;$BSefn$W*M*u=k+z}Dz#yiw`EbT(~-}pDvEb$DUnju`d499XNv5AG0tF% z2fs@2Wj=7#GWFbpGr2X zk(~OUOm6l6Qn@+X)pbYRKEq20hxTvu>Xk*W5pDC?@nhwvjT(rZdCy7a%O3m_EWv## z7P!e;{tyoevOtdp@*OOBUXo&7R=K>>#~sVP-NlymXmFH*P;ao*;X?6*TdgNmwLC*E zvo#uPZ3f?e-Hy-qwaeyEmTcT01R#FSYJScRYE~7Ir?K2tkGM)~wv=Ajr=^(>p@6nz zzj+LX`$*i4f%-??=3kl2wWe%=6`r~R+rzKfHtSe(^6JRHhIa5M_zjyh2n7;uT{HAu z7Jp-a`Nv8-5`0GR(ghN-VHIuXFyh0Pd+#S?hn)|OC`j*K*NMEm>|L2W? zZn1uB-&UO3$&a0pH|<4!l3>u!xeT${zZ9|Aizk-x`aN^#0=Sehw}&6FI>@KR5T7)l z)Wj?Ta8UifW@d*O7O3+-SfJUjFXa6b9OcQce<{u>(lLkmOuNAySp^x~00TI`>1_$d zbMm@7{)894I=+{;kT24G%$Rbq|~){>~a{9X>bE|8o}v#+|xN0LPe$ zNJojG9wl?J)Mg#I*9YY3wf}PtIVC^Mj017-cZih&z!I;TVFwEh&fWNlI=J_D4?v*T z&SzrC81x?CnA%u;RYkf#PpoJI34}_9^hogiwaNF)lNLD)V;^|~-by6CoofqCAp}c~ z9?q!J-V&+xAAlgjpkR6DbHgF(3h|N)4L&>qH0FeAtvt=oL zt~vT`tS6k1i(C0@OXzKJ;K*ElduJs1rpq-87TnK%tcg?mZl>5mfx)1q!(dOevU6T+ zjd6`f20(!7@G!T--@*xoe@HmiJq^dUXdNV9;r#~S3cJf+xC|h`0PR~=h$txRZy@uD zt-8ucSYE2Dr3Klq?rS&u1Rc^Mt|0-8V1?IZVZ-ksklhxi&^Q2uql8#g4QKjR6_ys( zkZ{54kN6-zB!tw}{f*^JNV;Z-T?Sx)`!zP=*F_{tj4|>~LnO8?iadAi?E>Wo&Y35y zDkHCJiO+y#Su8g*0eI)=;nxR{)q8xw@f%5{06!ke*{a99c_4u|KM7vDb(zVE z$chs=sRvJJtpLN@#-R(qrJCN8V(!cPK2sN3dd5Wihgh(G$O|{Dk%!Kpu-dQ3#vm`0 z`1X5Y5DTjSUF6CU{TZqK!4H723BjxOZM^d~_mg(ZhlM!M>MLb2Y(SzE#eyN!Lv zhogpW178?pO1PBk=azY*AocPIJrVE=2LK4`$Qy>5KgGU&th+8S_WfQP{d(X9Q&sG2 zoRE?S5h#76i}4r8c-^fkE)}FcIZ^Yg<6)5-?et=O^(7C=l+*Vas6U=8f?CguP4Y@3hcRl*%t-15W+q?YaYj)P1*X*e3l85A z9KL4Yge-LU-~cMKn767l^haLz<;8--Bl#g6d3k1Fe_AV^k@gR=Kl1(^0sD6pg{>*6 zpst|s%AnOFg6!|Pt>*xejDARfe!P`$Q+X{q)sdr5aMA=|{Zjc|qXw!+?mx0mKxFA? z6)V`clY-&1;)WFCn{#;X-cRswe7NeG{p(QcRVu<>e+Y&A&wXBA>=h(rxX{=-0KC(t zwt5dQJgmgjh&!{R@>p`j467wa(BRmoSe`|j9`iG@G zg=Qa8p2zYiI|nS!n__vm2#?G;et-uHB7hn`Gyo4I89ey0oZ~9>ZLN*I<)eg4@{_mg z#)?NzKh_i!C+7C1+{9nHc^#M<{P|^A)?nm13yc*h3(3R2jRhAk!Y?nS=k90cJZw!P z8Txe0%VdT4Lxcft9HL#kq@-4)Cgt3XuXuL*a?8^0RXNy9>h;%;3|Iuc3?i- zo740rU$kbBZ(dl*IV0{1SL{xlDOd|`o+|KK5M-uAgvYM7NL~$YecbXC66U}sZ#P6) zb*{w0TGFLesh@u3MJQeuTv{mb#~YFW7hbn~FLmqUzU!|EZCw3cxK~#f9DLiS2!Qz) zVhGp*@q{E0c_K-Xr`dYQa%h{+{E~cnR%(+2rIa7&x1R`j@4f@_>LL(p&LMRn z$cJ*@1YciXkhAJmjeR|4qG&CS8mgMsxn1o|*&alM;Nrod*un;Cyd8g8ziARiwk z?IqzZ1vJ}He9=($1KIAL-}T44y<01fb*tmcPj!`L0IyTQY{EzE36JgR2}PjuPyMR^ z@-GAAPrfN9;Qpy!koa)OzVUYm1pd})c;I}V*G{uuJ9$Gg_6}6v*I*{)kYxCuy$t6Y z2{(hh5G(h0(AIDc`4a2HgFST*OUKhAq4H#!1&Ev{)=^AfR+vA;XrSYvZY32t`N|;V zB*!fPdPt`qgWL@K)-#(F-_OoEp;Dg1nv|QzbUuA6Zx(aZg)hlT*MQ&15CLwlR;n8b zatAGteuL>j`d!EhxlJ1K^Ijn@pf234glP3}{6iPwO-SKtiR}?&w|T61i=fq+nl%vm zsZ*Aaz&T!4H_%!R(9f+Q(Bq~vDT5u6Pjt=GUxP6YK&))PZFSJT-GF2UPkBquBCi`J zvp|lsRRBwZABDEQSQiWX76B|F?YY@w5Ve2>g#EF4WKYDC{MN!Ys19t9lVpSLW1Wx< zc5ZthK5q4>t^lzT<2U90i#O<(Y(eU$zs%8R2Y1+cpC0qr>OwtCbvClN>t(V^zX^GK z;#&!fJ~(=U-q;*&GuYRIeGCe_iY-De7l;d^_56xsRpP)IR6}QQY^Vx4gDOGs{M!ZM z+-8Myd4F>3Kp`Nos|pLS!YlyAA^hXJF=0pc{T>=&9ZQB!csPL1CbA911owjjIGit* zloZPXA}7VWOwFWJd`iSeTi_6dU`cE5Q62p zv^SrJA|H^skZzzQ2wUty*s?8?Jlv|n&ZT~S`{NyTKgj-|Tem$HFgW+Bz~}2>K7%9p z365Yze+?FPAC2PHO~edk(f1SNEV!YNO0uEf5*Xpf%B`cp*X+f z*jOliCkM_TeJ2Ob5q`$ViuW;Cd}GZdhKyl_@#_mg0MlQ2>_QwZfC+g&Sbs>qzMc;y zmGagC;vtd61rP{^fXK}XL~gDP`Q~SWMA~#Y4O|$9&O0;2^*jLYqMG!R8jk8el{qd2UwE6$V)B!QHY}7pb)l z#8D&)(ieaI#x!SUJROLB4wIIkXzqw89R@ahf5vbu>BQo(f)7rrGLt_$U(j?~QPB1SD#hKTj0cTiN=5JCj znmdfwXtukqQDi<%Uma!cr?FAqu=xJXr_Vk0K3UK_C>(OB;CTZd0DuYA6BrSiE=irtOJ zNE?}pHi03#ZRAW@Q;<<_yG&W_hByWCOO&Y-o8}jZ@#1cZmfbSvn>sV^gruXNv{p)!(WE}+klU+B5NjdIITe)vNhxqe6_5SQl=aa^_Yns@E3blG#1{Ad`wcd(7 zu=l+TlJ$cT>%LHB*1OwEte6uw=4~rkTi~P0uCb|sVbjVDyT0_++~l+ISCQVoNuOu$ z`ddRvC;j*NbC(IVuGKB3Pc1&CeZOdIxxa1;C_EMWoWa&rM))(SOnK1>plH)Tgh{< z-h6nIt;3*=!nQ=|&X^KY<6yUJ+93(|7az()wQ7H+erivp&m;UBnL$0n8J`*=&OtgM z%8KQidV3;+*KEK=b*W+;%Rs?S9d6DjZEvO-KOJx0?kncF5nl!^Y4gi zD7o$vP~4=r<=hS%Mr^C+$5xJHwbolNMfDtHHYHYr@BTTd73v{V#!NY==FrH^su-p^ zL{`|wl2sSxKV#BZuxI@?xvefTt#q-nd3l5$hhj0_d_mQdm^-2z3))wlv!MTH_i6T} zO13X0EuWN-jVtBmTX>47Uq`;E#jyIx(aS-UOVKA~lD(-jiJ-G*G1G*XJ-h}!uVyYH z7-}!H)LC;=0;#hu&Ai|_spi!umG1&fI$tb##)qn4esnCi4MvWmBr@%a{nQkkgY4!tI~SA%o~V0u%VZKt+| z2{8Nop!Z?8wXM*V8^Lvt7py_3Rdjdn-E3B6R;`e8MLUvw8H{dUj~DXUi*F@E-+(FW zvoS^FD19j|>Lc#N@7{1&*$=6 zZ8x4Pw%YEqk<+@j@%%&GQP-c(x0X0kkwAeoH9&%&Fysygw%F`{e`4f!LT)SXxgrQR z%kLHe*j9+TiWPmBDXK(8KB{F#!N}*Twk-|7=0u3nEW4h8*c33RnYdOo2o6Ke+cBWD z5Da~ww$xescxkgXDn-ThR4UIr=DFw87KAOtRW04Ll@*E7nE9dF-MM1)v_qopa`M0A z(_P=o_5%VhS?wi&S2F}&2iJWa!I`w+1UzK{R5$D7i0x>s(9ID$q|1!p_+od5<(9_A z;#Dcx8THGVZ5WJvckVkE6}OhpTI#C{UEv(o#aE>;2n~1LVG|WNpO@(I+^0c0rHMG+ z3D55+jXsKXCI0W$r5_#H1KotKeW`hu7fs>J$dii+QFN{}wRcA7FJ$fFs@cuAWVBIhUF}NMRP76Br^mzYs76nkV)`3c(Rye_Xyv6sO(9!PCZi z{z+>GL)yw;u6`Z8%ue(cHr-OD@B!hY^fZB2dp6afJ$5M;OY${Oq+WdFuE3%Tr0WX> zT!G`2rS9ZlO+WfePqO`rmttizP-pHB4+YlfN_L0%wfdTv;d4GIOWd-6UHQl%GHSH@ zr1|HT2OJ8@UZQ1;bbK!$g=zNs(fyE7?XhtXTsY98n4^8+Lq4)=0YittrvgW~v<1^X z)v5h+dNc^LmN;ddstF}P%fs(8(5#OPUgB5s8dJ{HsXgb(y)wxx(h!hY`*nDv${a-AUpL6uccn?~cKr7+0IQ-C$RL z+pJr(&XUJEFvP}R=yCRl=MVaEEjV=V!H{Mzx?MWU$8nMD0w5Jz&5`tI74)Cs z4(`4Fn``EYd#AcThZuA@9NjoEb$e*FvW9voEHypq$%apgt!5&&2+2!4l=Bk#?g~Tf zQT)BV&U<~acMuFnl*~m`pe`p$u4QLReI(~V%g(s54t^5`{6_{nBMG2~GIev3g%`RC zfM_TM32YZgLiK&&Nqd6b*I^X#W<=hHX$$Xnil{osBNad%NpmYBr^{UuABRN$G%eb} zo4?Y{Cl#<9Hmq=_KsB+oq$~%R*!|(w?NFN1tO|Rk!Mhb+H4OjV29xJ3NRq&7?>D7{ zX1T79Ydzzz*(wW1SZ6^-XiwY{hL%Uda|U#`=%PYH!L;Sf=aZIqr*4{;VcBX^l_IDi z@Jbln8SsGW4y$U|8kb`_)y~`agCr0{Sy~Jr%Idz+{r*SFO>M1ydj8_jviA)u6AQzB zdmBLCou%J&IBv|b7&9zN$sL*{6Sn5N@D6rWY7M5^Mr}~tq_|EFVjk-G-XBZm_8|pZ zWr3o5T#Nkx!4wP#fa<9PfcbVu~X0vr)F zGmNEVhFyI;`E4puaW(C!d}-R#1Jr3L?G!wDqYQ7nX7_)gqKcT9O-sEUG*i=@FEP~C znkP%^PCHJW_rlIO`GaW;4~;0HxEML_K73o{{xt0lRSQMTaIIhlbMIYIN3QAg;|`d9 zBuB%(qF8ld?m1yCCAd%1K9h)@2~>kqpZ#%cxWf z%~O#@+JM0&NmskJXhl8o-D#|TVk6=qCi|H7Td^`yD37-LCV$=ZRg7yDAh&WBU@xW|wf0>K*JI-DlK-e8 zX1yrZbb-v2mgUuPQm;i~qrbjlb4TK*F5eW_`+N(spOm1S&_`Qx)%xvLPLWb4W_!H3 zTo1TWW%uAUPlj>W7mH!tO8*7e4?!7~uuW#@&!{zGZPcRjuJFukWY1CkC@;*OUl|Y( zq9gwCy+y?~aN(u^KrxSRyLcMXHw81G@HyKx&}P(K123qckc za^GHKxnDqu_o(9cqGI4Xs$b@{IwC6ifQjG|nYbv&723I3`6Q+%tO7*YiDt_Hl$7+5 zP>jl-^2n0-Q`+sKX5}ZGrS29XdjyEV`Vh;Mwv+_B#^fgKx=;{D9*V^wjew2)E5A7Z zX%$QvS~lPV0cWC|{z*&)^HQkO++8r$?LOiyB@wE@`S+1nxisNhQsel)aJz2CSK(R1kBT6Bot6+Q$|Glz+j=;rSJeexi zv>7Sg3wzlrrsfaKfbi|-nPp$o$`~7+@^fPrjy zFsFqH{WXyf!G`-;F7;~G{hqKUSCDcGRflhb zf=b=qSuv4{eEu|QhMH5>$iv0Hu{`@iZg5sh2L=0NIFgeh9)CV((T-dfomCwO<)?%N zc-Ks*cytvzD+1(pkU@n)Mb%k@sYTVUNhx<-D1aP$x-|1rL^8GGUNrZT37z5L?p^xx zc{`J-e4X8YcEQ&fm$(Luo`dV3=4bcxSwqa~E&B1@#J)csS#;|`X`*kSpB2RG z6Cp3fK&g=#nZ-OTspPw zFDUoqFc?4uiO>BLwFB&nXU)soGmTNEfr0f(N_E6OhCMx@N>mXL!mM9J2;yU)7ElHSw2^hkw(J}xBnho ziezHJjFTGO3eeGP;j&8|JOaCSbM-b1O1o)}Sg zglLh)0y9}aQCKs420*KV{vKM2X8qT^C7b7VHPSi{zH`2L)wr5;bI zwkcXP+K$sCU9#?+&oFZbc`8$NZ17l+dQo{Bp1F_8drjWZ4`gI)`L%o(OMH8+OExq=G+dgQ#+5L2E_`?@SR#xE;-=gjry< z9e_{8u;u6E0|&_5EB4j~s0CYZAe%l}T_Z&-+D)JQg#d9MhSDJEBhIhuqv#_jpb1P1 z+AI*Z%rEGAs^2tC(G@U46;~`i7^uN$aSK&wBw2S}$QabXds3gy{A}%&1ie*rNi56g zCYwlJ$t9`k>jA`hKABAzRTpX3qHd{2qt$zw-(?k;s&Dlzzh zWXv_Cv!kVHXH11GAT)69BWVRl`}8+*9S2INLB4v6#D)B=rh2%jlb#pos&L3&GR4&e z%+VQ?u>oFLrvurkJjEA^o@Pe8h7ytv8s_S(XfhhbB5Wou+G6Qn_9kMGqdDZ1X+<(jz->W;b(BNUl!pqe&GKQAA3 z^J%uHUMopIuW=HRf;Z*y_4Qdq|3tB~YnM>+cfzkIl7_vKZI(9*Q9%cQsN<9Wbnz?* z9u5&#B~daLw&;OM9}GS?^6$$jZ&VA!e(M&9*~~0TCo|;EeNZmLus~VXne$m9zS0L! zuJc?6AjyVZnfghWfM7~S`bKp$sqXxeb)ab9@#K|lidZ4zyU?SZ{gEu&P3D+ z@wyO0`FSTc5Q^1gLhe2rtGo9-~x=BwOP31wp-;Ux=ou!z ztPg`)L1-cgvP%Pn{@C)@NT?5maoDs;;xkUFIo?T-whn0jK!`T8Gb7o4T8R%Xs2U@I z5*)UktU(~L8WDTCL@9R)FOAf)32U)|(kzpf1?-mGh(ZEtW2A#WxpE@ex3m@(itL_) z@mJz_Kr6-OKC}sppdn%N4zAlERD(e8r-r?+fNE`04OBJRD~=x?y}K`%#FQ%cxmRA zg{1-R6)^O`Vp>P2TdBXeGI*j_XL9red{9n63#Sd~;S^Z8;^%MNA@kbjkt3=KRQsrp z+^mR+T#=8|o6&(YPdE)H;r3m>1@c`$Bo2a0m06yR*95_}2%Z010HX6B;cGANTWT^* z)t3bf1IyIv#@|~^!vlA9P|MDeEr7@egh`F2&%!QMzKL2c%IqZr+J`oGJP{JF3u$b1 zB?~J)J?Pp}{TwNd(_h1E)8?jXb3Oi!UDRu+Yl!Vtzc7qva8n84N(_{Z&*a40V^n+& zp8&04pg#hZ)zN4%a9%M+a22`DJx9z&cXCZ9%6f_Hr?>!x+A1OSge;iak~-4JivMTW z@$-?u2SBC%045*|rzkEJSeYq39mT8s;8wUsMXYgIm@S&(lc~GoskcRs5Dfrn$`&i({cSaaJ1*9#2yN@(K+SXFEtgX!PoCY6tNQj!nJEi z-2hs#hb}qa3oEz@2a2STbMxx+$iiqY;-2EzoUI+x`@&$C8ktQPd;}ZEfUK(s&^FC( zc$^1rscHrnHw`ljNG7yMpAuDuA6+=y{38d+PoiD_L_xGGa4v64&wykT>PO4l{9sSS z3l;XSvx6}gIvSzhk`G5xf1-@`ftxJpVh7@KJ-9UmQd5NZxOagb&8%MrHuG1 z68?5j%fOJ-1+&{0=Ve~uv0&f!1Le*Cg7^g?P^Tp%9b6jMgc(}_d&h!(M2O7;qMe!H z(=-JO4F#y}KQ3;{P*)jbU^AFvZe~p6<~bYTsElu$YCdS}n%I09YNes>G}M7t2gr)K zYCg$rFzh`J7!nDI&UBeLcwotTaeHsrMuVFw&&Cmt zzo)MJzK+9myjDFY`T1gMWRi7}Rl1N3Cw*C60an-vp~sFbN~i=3d` z6gLJMwu@o84p_V~t51rqM@!gZ8fr$Mp$-Nb>iptTW2SdIK|eyW)ZNcoBX>cDwnz)b zYv3!s178s%4xd&TlWO$}5N&E+m?<2bVPNo3vn#L)1DaL48~<_9nh`vdTB+i3GKM1{ zxG{!R5pImBqi>F+gQS06aHDtyXcPzSboM&CDS<@ds2oJz&L&}IU>GCV=HM~TG&dBU z+{xgA)jaE{J88UFSIx%Z=c6q^5jNmdP~Ax3U=znf-_4y(rjE>x?5l8^5fzPmeak9Z z%eHZm8n(p=AzZ>fhjrP8aNs=vNRdl!sYRxXu0+~^zE(I3hIABU#d-iXdSI_H%=AS& zk|p{UOtS2OJ$JC^g}htR9oV>KlB{H zk`-A3?xM6Sfq^71q+W~}5H??Zkjgt~Isx7R*&`)=T63x8E^0q6L6;qK=`XtDs2$ss zfot~8VqrkSo~JSea`*JX9DiP2`2<-C=7J3X+I%%#_mCG$=>T~~?Es-*=kL~-p19}y zq1LBcnt()L{xnRS!-w2#4)`)LGgzz$P5(kS_vVs0Z(Lx~2#Nqo zu~4aMsezZ;0V)J=Uy_ylSSWUC{yG^gnV8yrKnP)foyZ4Vxw|0{(JqM)Ekkfs!REXV z@ptuCk7IE4r+fF`K3zZs%amwNLHLfNj1wA z!*EAa&Pqbll1PP_9RCdW0uNnx3ihU?JM>rODmd-Y0oNW=)6PE&I%p*86tW6L^xyVP zxe0$2T~fJ#d2voR#9CuY(e_#P7*&0rE-}PM>VZs_P-)Z|0VIh0Nf68%#6bqN@%*C$ z0uMv8Ig)>}-rc+nFoFsLeZF~xryU`vAwEOF`@|biGc*^!J|pHJrM93jht`LiBogu5 zmo(b}W3;pmeEW^mUu}&A4>gBD&OV+9&qh zoulo4MxwE&&ygff1^3jtM*c~m8A<1**{<~^8u06FXEXH4Pf0ZUXlztB#t5D%G)lU) zv(uRLmPFfH=%teSbb%(E6-+v$t5f2e_K{cV&~Ho^Nt@%X63{;5 z{7>V=CGt_{NCbV>0j(eltJ`QLc~F&sU6I&W1JoF?KjcE@> zz$}SN5S#n4lDRA6VN}|%vuO{BP@2(Vl*7C3D~ zjJ&P9*%`hsc8|#~OZ5H+v8HiJ5GDUvY!)Tooe4{G#iTD80wEIV8GuCsci01(;@isM zO6E&GP(I47D!dQgI26;aYQJ9ri8mL`?O+~|{V0sGEtoNRPy(9snWnj51e6r1 z?|8YiV4%9qT!A~L1~*UpH8uRM%Cr9lQR@tzOV+7TTOO;R(ETqS(g6~R&t%bMbU&$b zGMlZP$A{8hr|5+0r;EK#aXXv(%u?^yNe?pT5C$=EO;LA(i%rQ-0XTAr%L`u$^*B*5 z3%myDJOEouZW78rLc@wYka;qD$v`DrxQ* z2}3K)K`V!JIZIVQVd&MUCRttJ?^3p?V4T9y0<$`t0SANq3&@G*(OpxY(diPCzM%;c zLWtsBsL_VTQidxe$nv9k_hR^Uy2JOG=FQK zK24j`Pks%DbgtR~Ev&QKf=Gdfs*U;4GEp;jw}D37cp_(SKbqLsUpUh3grih)f%vQH zXMu@Lw}zdsSa)Xs0|TSBQ`vRj8U3rJRi2?I5aE}32;(6FC!t^jXwPO&J@<_USr6qIqAIA-9LZ~T z53jeoZQZTDcgFtT{kXA0;Q7vc`qX^z^5V;l&Zx&*QB0(F0SLv)lXlN1CP;l~z{t-! z)?H#o%q%SCZX30Fw8uIMMSj!dFzNk?!kk|ZbMo`QLfwuuAd?P_RFQ3N=Nbee#i`;K z=v4qDD=1vUZ$Cn>dXXLln25uMjiVyr(sho6Y9mmi&GvN3Ni&*E$?O==M;(KkOzqt7 zy?E5~=MqPo-$3;)=kmKRH_9X5f~Q9j4>J+q$v4EFe!u!2_3O_4ex>dM_xf7fNtCZR z*zgz54t25~x9$ooruJJ0UXkD&*0gD7-<^jhzwjg3aQ>k&uix6)Yo3wHz#J%5H}8^G zC6lGgvSU%D;C1kPLMb3HIM2WygEVKei^?nw+Kl{^LVwa4Qpt19EkHv|?|$PXGt>}u zN^TG!k6n}>x}9B8zYV-a7*RN|YZP{pV8H>GEP%5qm`lDov#N-ewh|&&75U7f4v0F93eWX9Tn~Z ziT-i;1OJk{K!8*bRZodHlg1e&|L&nJigDyO#s80CcG&1zd)38aAewK01)$;tZSoGe zznw+m@v6)%!hqUND1>}6bPE>Ck8imek;Gl}5=6Ei6r;+o`zxdJl)ga88u@UrQ3)>H zs7Q}gf^tu3q32`D%SPnyUNY?oDSdlLg`)iLq}NlF^rzonTO@d^+1G{1lHcEs_DC+J zA%2R7AZ_gWZd6Y&p znT&&W*(BMOU_nnt`e&GHYZv%iqMQ0guS=h0_>N+ViKEtU6z?uB{eeZX3Ik>9%{y~IQj-_Os= z*SNnVr58oF(WU6nap=j+g`?xCUD>A5I`He&E+piINH4JX8S2tskjyY+7xk5Im|9>6 zr(`y!J&ut7qkc4Ji6mK!RzOOqUqo0 zJ6vx5OV3DsT!FMp0BslSKBe(jvO8TNMfV45q$I9#JgWbf7?N zgf4-8e80)^F=mq51|Oc_t54#|7uMZZ0^R*Lug|17JbO8OAHJL20`HcPS@!u~l%RzI zG{n+`5o>yd8$24l6vWbw#`Go=3YOgAK*-n&`zO4Tg(ha{T^V71PKc45@32|%1e_fr zrCdvVos>!|d{CWyu-E}Qx&3o{(`Bu!(XP9GI$^+<1d){ z?cl-sj(xzYyve<@q!rJhJ{{fDH(LQQ(evM%RJce@_yW77AfiG4Y|u(EwONmC1uqG~ z52Di^_6qZJD5jOzNlSp96`xu5rM}oV^HE4}ts2SK3feeK^pDvu${IwdR^n!7v|X& zPys~v6&vME-hwyH#U5sgDU}6^?Lqn1TWLIVM)`kpKdfIMp3_TzpCMe_-Y(c;KP zFZD~t3zGS8(clH6I(oHTxjal3lgtMU?}|S&zDDp^C3ihuKv7#!m|3rWM-rC7ClOG4&A%d zdR%0B=n~d9hbRgYSKoWwg*}|Nze^Qbx2V5T&#i?2u;L8hJHWC-c00(K?gFb;7&P7W zY&Dc#{ zCw)$3SrLm8irBkjf5hq(g>|}q%ToQ0Yu~@K$vN(^UR=!KacNY@XY^sC0vABl-&v;S zmsi@5o2GRe!_Kio#6V=V9PX^JqL2zO3qO`5mK8=jZ^jGl*pF8*OjVFp97DHoo2~j+ zp|;XHt(q-R%QM*q(e7LY4zad$(Wy5R!PKbLN8;KeBTSgyalfj|j>JoRGkYC$V24QF zex)oK8G^ck-M%REa626RrOUCYud&jyr)BaqApOHx zoOIZP$N3DbS|W?J)xpbgs1g>SWL?dtP*NUAZkrSqe-ZZ-YMWdW1*C?!`0QX+_spTH zof8t)+tmdP6tn8E)OqmvAnb;sO)UWyPfAUStiDhe2YPp zWo?M8#`AxmZbwC{+3T_gcN5f!qK=q ziXn|`voS@lP?eSuvT{sOxY`wYr$b4>2iz(x2C$rqaR3bB>XQmwEel`ex0U;- zo8)p;7k^^VUP*$e9nd8ZpMfUG2UoG;57nFBT#r8T`!~9w@Sk61ZBYPN23|Y-I-7~D z4O^QpUU2hMT`1}*_?rgg8-9K-bi5KFM@D>lirn1_*;8RRoo*7`f0YY>^q70qW^37MAHN*xkWhX&@Q^xkIDZ9rYHqY($!0!|(V*9sc6+JZrXkzQ6>+9dC`+xVc{DRFrbi#q*xg&$}Ia}Gf z-0Bl8d8e&#P4Ng;6Vikhh;CCk>rH`Q(gHX%4)q3exG$%#o^R50Fexs^8n3nw8cU~h z)Vl1MFW5o;yIjwV2baqszVj&JS)=lGuXl7e(;?R z)4R>D>ii?|mf#lE?B~<8$m&^j%le&;|92lt-p4LNCkB^4A6l+_4lh^dQp4Tk3jRW{ z1V(csAcLHjg@3WpiIxLcGMW)MYtAH>Wk#;o;)R^|SV>;!>yUog*>mDM7E+ zo6W<-20ZHnjpz#N`pp}f0~1+GH&^Q#44!@1v&yn}RZ!V?pQOR~-C4s$TV6V=#Ej$X z81TyvX0|0roCg;!UIvU?RpY*Vo{mtV|tF=5lq%)GzarMLU=6>0&{j%g6Da#L+(i7JlbX5_Q z1AI_4U4p)gPRyQvpX803+z`HBiRI*o*sU%W#2K5MM(6>=iq)CKOir-NoUuc;H5H8) zBfMLiE8VeL5iT+j(DV`sW7+xv?TTy4gFmObEQ{TV583Msz&9m&Er7f7DPKO4H7v~Z z4zF9_c%_TH)dL}YZQo1JboXgTuho;JuU_X|c2@%Of|`ujXwQ$)z!;-%8EHn`bk!Vq zazL|N{KFt+&pLRTOG<-_YfNrS?07tVR$WQ@R7r3(B{pV83$GcD?l|r26kNy=n#dN& z<(a$-p_!b8Kbuj9a27K7qMEf)#$GnscAq8`aJY@SO*f7MO|B8%=bTmg_2IMX;K|o> zern(n>Hf@Mu*j4;wm$f(cJHX$6#LlPCt3OCsRV{;Eo@i=AuZDFrKd-DUg6I^S->RW zS!4L9vx=F7;dL{@8tso#UZJjC!^-e+;*y3ADt;B(H9jq2)mCGx_lya}T^2_AD z3ET-_L#LT;Drl&r8&AP17gTq11;f*(`1fV%Oz+k~cYieS`Zpy=3h0YEodwF(U zU)!$abt~bpo-8BQ%k!fbuq>}zMzRrZuCfD`2V}byjlEoCyhvZ2xZCW>=My<*m&bHv zqwYw(JK=x!mZiA4$k~Th|5#r72l(z=Nh0z0vk<~e#d-L|RG~TsA<{LL8v1js(o1{5 zVcmWAP4P!paEx-uiUsYC?Y>hVcon<*VdiddjdsU=3`}Tl`5>{r{DjNE-A8PJyCI_- z!L`0ON&`d#X z6?jFc{Lj3n6pGrUfJ=EgX5?w_nFG78}*z6sG7q0n6((^a34Jv!D zrSL-`?qAntiOOebX_18E-xF4TS9tZ4vzG(0O6k%p>%d$qFoIz3!l}KcysPAaU2Mrt zhc$C-gT?tEcch0f~^ghyb{OkW1a^mzW>v>=7C% z9Qh91BFN*rgxUss60UO2F>MI;;{!Ud#UPejr}aaj?Lxmrv{^f6{@zl`*wL3kkrz3n zvys-K#m_Yz7^oA2T~5lS?Xjf}9NN z_aVR|0rh@Yu{$4T?gY1JXYBjRfgarJ$Og`h5g1$1z|Cld_p&R9_MBhADM>5DU#B(ZY zLl#}XJqb&1lmhHIdAC))+xt`(uJO+3(J_gtJYZovYlS{C2r(XX=zbx!*YOR({KyaW ztQ|Gy9aBak-2CBtj$EOAvb8JdLFPh z)_ak{rLetO-2_0Ad2FV|gsuk9pIilHj;nOkt7-WKm`&T0rubnFvf1P*XK_H*D#ksB zwNAU6z2K7A7+BXF4I*z~)AyCDOVyXvG$u4%_Pr3(!+2}%&^E`}(7p6BeS+W)JWl8n zi16R61mM^23k)u-!#L`Um8H#LfCwd`{-pkIo5SG6o>mJPRRq-k9a5cJ?QY`Q{IX*2 zlc^wP;tUpD=STwGRim2#>hAR48?+PpBU?cr_R2k-2+X}KaA)jCzl1N~;D^f8v0BzH zGSRbJBNjv3#2i#-pbUkqg`zCOWOPQnTS0fb^1#J_R(4v4iT{+7VxFmw=&3eAB+H&D6i8> zQ5d+8Zozg6!#Sa*s?Mb3=V_>(yQcOWz`yi|0So#VBSeIzD`J3-57F&y3h$AAy9Fbj zJ)>+bSGc3HYZvFbTMdGT#e#N#d9A>wuKn<3Ex@p~S{D^+FQ6>g%+7I6RFtbRy}RT2 zSlss*-%@}R=d&FhAk6J<^sin zKXf2PQ+~EWiQN)qdZOkInVQc_UEGq z6x4>tnHzwD+VE8WetWfPncN#yjoc#tP`(En=B9^c+^i9N+`M>3oXM?pYruqXpUhFY z9}vd(VB_5Muo^v}5W9nt>D0Z>fmC2ufnA>L`ToYS9QhPAId&Kjh%~3DdMU?Ar?M7Ae+3t(Vsw-RY2p7F} zE8UB4+b_n|w*NA0fw15O(Z7`yF0Ml+FKTJTm2|zUnED*lazykS(Xp`KqPmWA% zt?F1dElZLBQ}MjS3|v``$Zpbuu=&yZKQ4n~9iE+@O|8dlfDY6CYxMQ*<07j4)=aah z3^JQMgTjbsHY4#4lM{fk#5HEKq~`*J)OradL5zlwt+8_2*>hB|GpnK8N>9KZLV!K^ zYv?oz=mh|vB=Zla3!_?*g-*~tvr3?QsyrYpKyIoa<1+q0&Hd9$nTY4AbB)xlM+>TK z>5lHzH~Rw&tm`bLh89w;LV;J)uFDk3K7(C2z4C=RYRzx8Vmv`NX7;C2etZuIV$R~lKh#1Hn$yMmhA6%Pf)Y3+0tk>a+=?!Kc_g~S44 zf&r7(u9QW5`nmv*UBK)*mME2@`wR-bn2h)K7Z2JmIc~EYFbS}oCYtmnhnUYbUJAt7 z4~Vl^Dy#}k)?mm&2XkFkOud@TR6PqgTObJvZNYrDp{icbAPZ>T0gUFGVHa>z1>x_glR!5SvxH~VO+dk<(uw7D zorZl)ftDLBH={?yW?T3QEGz<4rWqW603bmfF#-Ns@N7m_j$BvSC>1Gs+l*hoL6&r8v5q#8R;vQT|_6R4q*%M?AxU08JZ zzzCJ+xEj~|RdeRd`D2ck=69tN8FtvWk#pum{WX8iI`Dt5U6MfA+Fi7_vaoQlmw^A+ zBYy4jrHFA8`-}B{mlx${8&bVqUXxg`$iwsX_W0fve|x@L5)$Nya#So__Rk&*1MTMm zTXnK2?pm7&scvuGAEs#cY|#n5*t@{XH~o5F*ydl2)FCvbF9lET@KvM^1V>RQ7~6id z{Yak_xRX~Dg&2$l<@WjGc&Zutmzin)czduJmO2)dPwmk{Q-6XYe11jBKp%Bqy99@A0q(TjTd6wsU@}^qlLccy5cDGD9IL2 zO`wtnvF;-!iXN1oV~Xzbown$48x(4UjKk+sOYqq7rf*m>8ExSkMIm=!$v;}gv=qsO zcn|VeN>mt`+yYLdH$)xiN0SOAdWRLMM6@+lahyD^ICLuBQsn2jy+tpIda`@0(ahr) zDbCDebT9==`W6SaG&BMAMJlNRPafpQlH0wowtDKza`EVqmJ~1QueQ1<$}nX-1&aA9woF8#;->*m}8eD!t9V^3Ao}$}%@E(KN{nU;+Dz&2G9X|@| zyk@kF$80R4&l$@*>iposxXS|y)#($3A~oWDli;Y}F5f+Bmi3OH$b(U+ugJ|;XiE&k zQ-?dED5U!oTtcQ=|Y-sQ>aS#(KfDFngFt_E69dVtz zkBPK%or~f2aS@-d$#c=rSG-zA-Y9Y?`r+%L67Gl3_%RvpT#rNx<;~+03v?Rg`d{CH zwy)~{Yg;8hVaHxqc$w5cwCx12HhEyXs-ddNgN8iQuCm%nD39!UBbWCoCb*lvGHPA_ z>KrUug}T^hVME*C4<4nAmcW~me+B9g*9rE_HSD_nEON>9>UTz;pQ*g8e%5BFB{Gy` zrtosp__dG03s>jhEjl|NKcy4+w%uL6o6#NQxoK5g%JOUH#d&4E=#cpX<&oTz{+O8c zBkQE%y`j#cL-}&M?rn( zg7m-z#});jxDmAPo0LFL-uZg{HR*)77jCXCeJ*5&_O_vSCw+y+A2j2dmkAhl&7)ey zi+H=0@wPbhhp}O(i?N}4LD&o8ccK$Mh5v(#TvwqW8QR=*=d4u7PTR|so%YC2%CM`T zt1sUSKD@8BFY4Vf{R?H4+Ink-J_T1F@M)Fve;!|aHtLSbYWI8Y57WNfTOlsx6>AWx z=yT*7_>n)sk33@kk*;uOse9*QP+2ol;EH_4NB9=L#)hR8VJ~Vrv&THfcYSVAQQW?) z|CZm2y@H#>^ej&BxJ%z}IR>#p!p`B4M_ZSi7hdvUh4{1iq8I!QQ+gRS8X744r;4 z!Bx;R%20h~lLhdAV&DN|;Rn22M`NN6;;m6gln(tn1se#boqm`$NBG+w)t718$so)CpKSV|$=8T|dX8RP97=2gagMymj zrK5|2!wyx8mhl%pg~Z_@5Ql159I|?7!elRF3CnXt-xR;Xl;=}CVr+NWH_9MI^fySJ zZv8zYE7OE|SzXf3Tm2gPBEOK;?xVp(n|1CAiYI2}M4~$Nz?y&XA6-s1y?vEjvG#vm zFRmHCfMwb}{|!Kdm@VI|;iD53Z% z->BV&Lceh375nrIdnI=tSyQULX7jdFM;GaT{u^Ihbp=;^_E+<{m>YP$QJQKCrEJUF z*zOUGeqc8Rs8rcgS*`*6pp&aS1bVJsvX}US~X;l}cV0Xb9-^>ii#z@V}1P_?CS3EmwU7VD0S8W&V2jX{=yj7cd zGfEUsC>SL)Jl(v(9)7_+tMx8H)`jsdHDj7}VZ74gqFRgNMem=k=|QHEwChJj5=|Of zaerYtYQg{?iY%u^MO}#r1zTT`2yvfwRaad!*g(kHu@R5 zRPZt7uVt-*73Toel6mB>z3s4SIVU1gOJu#n_|T`bK)qhJK5KJ%_X*pqssI<)UVy3Y z7fMZXicbeDYLJgp`PP}0VCK4e#|C>5VBu7^#0U*Tzu_oxd9HSi#Uv^H z{YM!Mc?iq{FOm;s%Ws_Je0gq&-7CjhFBpiA%Zr2I8IoK+D>3`vc8d zRX?)Y7zlI0n$jwoFnMq6;t~QR1rQQB1u&`*iF9x^&$2LpbzBv-YlBf*<6<(+%eLA*24~t#L&m7;|4r!#= zr+397zr3fZX7GF`fNCCGO$In}QO(@`qIaqb%*(W&h;$%*&|K11u>k<`4ChbwS_8`h zvOcn=Q3rzL>Hu-Guhvi8H>{aJJ~{_ZkVHE9O9aa);bds{1<3C4&(A{6&X*g84K!z`0k{dqp=rj(>fgeW+$36Z=y=>u zh46UW5HJxhc;B!pg`Kq`UENgRY0>oZWtv_tGxz}m!Tqu%u@Bv4`uV{>n}B@+y&|d@ zf&3hR&t8I{}mdZw>e=U!X&52s1XmR~wc@jBbvEbW&8L17$7|bJIz}`XoRz zR!|R${Ia%im9gAsSd>2uvy1W#JZ=4k0CY47qJdc8R6yb~z;7NEBewt9-z8;F+L}Ut zY&0G#$h+4w>L4M2zSIk2S#>};KJEwMG43KH4kB3#kC;Qw3V`%RJN2x6kAjjQG!`T@ zZ2*?ZW$R0X@+5ilAt#%dV47Oix?hBSMupB0^8`LaEW2Wv63i4YxB1@B>qBUe*N@`v zGp&9(L8;8Z%jZS&f*I*cGt5YgHyj{lK|Z&;jk-1k+CJzt+xGS+>LI;4aeIsGtVjQ{ZI6HE z3fOSp1U5XSn>8C7x;VQujsTBOLB5L|W(e-khJP%_#zkv`F0+{iz)@kr13<&|SmX`( z8h~x#ssX_fi!9|lzchs`AtccK(FoI!q!Nc#>tCLLZf(@*iXrjb1h$2LxbmLWL6r3# zSJeR*-ZX4@sJ|Fi|lzH9HtW#SWneaXs(@575En z&K>3xF@Y)1r(x3sfrC+Q>Tnf=2juALbPv?0cP1P9e0=sy(#!D#5IU%$hYpCL)WXyq z3~W9xx-8390)o~GEt$OVeA&(|)OKp+i4W7`8Zh-!VM`G)5BSNAYIJ0b>T!e4;gTmO zQ~YH%Q&Gq1qPMVHdXV@dyeX`q0V+j*#oXi@7}>jt*WwbV1_JdfbA4|;SWnQlosteu zS?DmJdH}LCkvpj5S4P)iRBQGt$Ha>oM3UPF3xp5$=ux5n~u)!3m`h69&h5+ zyS(h~hj3LpKA<78+8$lHxJ%TSEBblKv8J4T!1IR8th^QZd-QEP^Z`R43~BkRf4R#m zt!KC?&M;9$(Znh$YoPE$vnc|N@jsvgNPXtyA%roR1rQ0Khd|a#w?IUwwn8}srn1=U zGeRrAkah{GpHjrZ~o#D4jn zN;6clve|%%eggRo=_Ml<@yi5_yC6tl5r!QiiVZX9NAwTd6iAqq&7DZgzhbVR6CG-2 zm1vb!dJr-)tW78oH24~MN1C~e{6=9wbDOJb|3d#HBF;ovc|FtRc>4ST8#+#uNMJG6 z(Ok#=0h7BZt|I+OWT=I71e=;J05957=D9Hit!e)K&>8ESoF>+)1vfY#| zXk0_(*;>QX#17qO_J>axR-S*-D@Gepy24Mk@+{~xMTI`a==4#1cDu^fRV~_#lHZJ) zQ~AUsGO0CL+b%d(K1cGAJ@-+sR&ixJ@7kH zftd1j*j&}Fj?0ewf4mKC7g0HhflV>>T7;$TP1h^88TQ`1b3ho+7sS%K4@w?M!5ZSPfNK{ zE$^oW&~RDA>xU}5;27tOK@}?H=crlUXd3ct0^fRfA~hT$h-^byiwDZylt!I)I7YA& zL>)d6a@F#2_j0Q~(C63c^ATg7nOjZ7Va(<5O)-*x5nPlA;43Q_^3m<6Ab-r>ZN(99 z!)15L2%@C@WuHDTeI#-c$mu)B$8 zvrLBTv1cDJ&j|bjYfJgW&NtmJj6M{1z`t|T30-~M{iN;BUv2zUh1)FLvclpdYH)7$ zh#p~IW_AZ|^&?!2$UHbbGdH!grwLrYhXjAtW}9(4L&9%U>CO^Uzt}yrvmr{sMmU4$%I`tK?uc z@*pw~X0|TjNz4{M>ifmI&!_J>!s;4*d9oiy%S>cewkC78E{91Vkq19sb#&AE(j2a5 zhwOp{as=)c-;?FiLn&QEfeKvu)5Q)q^O}#dJY9o)Y_$P&@U9rW*@OgnJf@KFRV&Vg zCCpm;zbxKAEz3P@?q`$lDK4#EVLBbbb@Q57-b^1A+Te=1Hx!1^%|ay9cgQFP0L!jP zxT31@fQ{#DvU5}H7R1)ep%3=}ZrL;sKtp74X7QKp&&RyTL8Hpq^?6sNoSxB`u9Enu z%dyS-pSzf!*VIs;3|LL>h9me&k8D`~UIy1OL_N+f>1@2i89_%!iNxji7OI%|MEmSm zoER5zGeO3Q*_I7H0u^y<7&JkTJDQKDspll6K@G+5Ib!ZUacGE1*CBMD|2(6-X8?Kc zmO{mc$@I~2CXU#P=LOGx)U&C!>;*f}Bv1rE(WtpB10D|nv5f~}n=4F5W}J>oTM&db zE*3$uH*>Pt*G~W{D*#lrwghddHiTg{<5D1g?;e{Z^Rq9d&WCkE^BTwIS(yD6V0InA z?2bAJxOQaRhvjSmW;Q{YVlA<^4N^u^@Qg*5(E>JD{{%!l0f=}SCORbZwr=3P1pk z!R71^J{v!lc$rZu_A;OZm$LK{}|qh@{%iyJ}OMbIAtb@lU z4<`Xym@A(QaJ#_3U`Mpt-D0!qh?nM7!Aj|;&tK$jG}btNRqAmJ<}d9J+lpTj+PQ2j z2bDGY`kYY<&I4?rSp!=6OtW zKwJRW@|gu&bSa)Ou!zsLccSbR4|WW;pZ?Q>1=zq3hMLzpo9&f3LRi-WVKHJoq4%i6 z8d%eFHdLA<8EsnHMc}E$af=>IvfCz@nhc>Vrdb`&$wdON?%rNBiO3>76BGa<8Hn9> zoD?7f-B)x(Z&Q0y>P8k*bH~2FSZ#A}OkAydkm#rEH} z#@AiD;Kf|Cz~A*WhhoM4Q>c zm?T^I+(s~?-ZkOW+GC2e$-mPA+C=|?#^nYm-ytnyQ0@)6RK+8e#nV6<8=Jp!HN_d^ z%-bEN*p6NI%LzMYIkXrRnhz@<&u0bqFeg^gS?y_Bx6P$}e-+?79}*U-tPkGtE*H#X zh$xFf9E70tXK3z$1m0U16;$Pghx8Z6h=!NcJ^yzH>|Pxw*&KmoO?K|g{smKi?Gccp zxfaDEgRqE4wEg~4)a(DeG+5&|m+EFEOS-~7Y}*oV*hDM0n?x*CjbFDTJ`q?>=>2*jZADw9YRSX|}I?molZjm}L(H+;{5{V3gh zH`s0O+8I1EmcD9CAtauFK2YA-NQyL&eiU1nR`QQ8noxe?{`b_)ljlhAI<@1E14rwmU z($8~2FR3hO4TM4#;Jd?3*6J73WWHBr^GQ@6{qipKQ$mpoA?oCLED1jX?Fz5UxR9j(Kj6^@i}x zO*7tw%K~?5Ru48vjP8mIlzarp;x23@Q!*6V^^$DxX()6N>)xF3T(BQ(Z~%_Ae{_`- zC6GH1fS76)=YVLNN>(4<3e3EekeR|gFtbw~45(QJ`81yMc%nxTi5V2%r$X3tzMS2S z5>ZPDVe#Gza3$UOz%w{MXp-x44dJ`BMzFQEdbBgOdv8Zo=_Pr?B%nI1n zUHc?q8zQ8x6ta+8j%{TNAOvoK0|+vkbE@GxU~OI~4)`(e;2#|12R%#N=WU`HUmH zmcv*JrP^e?ag78mk~%2#~7kqf4v^UVjcO|=6iIYK*vV(Qdc!tT8`sO(oM0}!GW?!B6qL~}p6 zZlIJwTzH+g4GbbZb^l^ zA}p-U3?9=WD@-hLs1>JcFL)_n>O`YF{Cc1@XVo4cs>D3eSit3>W^LCLm*y$+j9C`_AE%kcIXgGsYh20>#KR9CsE7fY3Me z*dz{_QWh0)LDbuggFICukFY34wLrPAGC9et*Rz(glV-9%N6)B3#GZ+P6y`n2NaI69+j8 zc~BBDapbZkh^V`%|8{1M5%dO1jmQjo&ydaqQCxix#Z@Y8*CI*1!8_4HY`f9tx_*P} z_!;>rdTdONR2b)QkY>6-!S5MDMPRx;J(vn~F*t)g-5n?X3Z!w}Y;4O^j0_W9ULok> z>O(~)|F$OEv?~bhhZNK%74|IpB#uGCdYwPxPbIE{ZIEP}^Ee2k8HxYd?R&mK-?>Af zh9DUZ@f%^^O4e-fglr8HUzzV#0p}JC2#Jr%dY#$B@6*^I%yZ|MChB(QHx1V~vulRQ z6$`L?0Bn59<)a8fD#T@L4=8LMP&Qt{mW#Thg%r4xRI+M+mll+>CLBN>$ z4>^lZEoyoC@ip$GKa)7SaU6!cB#{AaDz;%RSg5*&^Oz>fsiT8UVYLvfKPg7Yrc+qb z2U6dg5p1LS#X?R(?#e3}kFHAHeL7>wM>;70G31Z~2vHwVJ6{7oVSMSwGc#1Iu!h+@ zt`+n1Bldtfr3FgRMWDL;k4`RJnOdV316!0Dt1qn{{K)|)4DYg7Z|Yv9rAAPz4PeJtWx)ed3DptSBcRu5|0!0_~^yPi!NVebcq zwyRU)#nG}ik){26j{)c3&oD)IX}js}w=={w{Xi~N9pqA(am|kJ@Qstb9cHc=D8LPN z$ASRc!a=gA9s+EE)ZEXI*RZc^s&puvD9hd0c;Z9b@K<6$s^SMw5atJBACVzl*@NOH zBQ&F1jub~;8wz7nviA&LPg(~Ks?JIS)f!!(I%~fdo$8STmU8eN#P7|pnpWDC4$_OD z)T65#sWZ_c+261;h#wn}T{6i8VzVBB8m@OmEd_-#4ns&y*?^%WET^IZGs`I`!RrMj zc%Uwck%rdFIRaU2qNw+5DZ+gKiKso3VBiAs~}+NMW%wS-CK&kP&2;`=@bmxey0e7;WqaUtN!L#ddTX zr1k*DYM)zvNkpYuh zj>}D4R?`y^pL8h03t?GJG@4mfy)nT^N`BtY%h_;_G;%;{&TEh))ei7kBS|=V!l84O z@`?yhLzsYp=6R(loQ;dYfO%f0Y+^x(>mwPi$F0t=^uy7#O5kt&_KoN6f^H0Ao-^iO z)}T@n$3zTHhn5YNy~qY-yYv6Y>r%|W74{ak^FlSdPdh&e`v}T_%5FUr^jR4T_xGA= zDDYXCS517U2#KXoQCmuA*QBsWG5=vWk27N=5z?tFIfWLl4mSa9dazh)sO0G~IGPBG zKgQO7foLbR0I+^aK9Mx87@?T zUIdfV4xO}KgsYZMKz+NCDC#fm`fXb~#GzgSBF=f_iWJW{PX)>NDdVkdoqh`(>h8C( z#9W2(yMB}2EV%Z>m>}Y4mfttIi-99l`$}sl_%GNpP=JLMDTg6fYL__rB-8Air%l)t zq-htQ7)aWE@HF(bB!3oz-@vgVC56W&hdLUC_ZW#9tt{igQu}zoJTfqt%~)=`#W9@Q z70OSO7y6DH8eARKhr)7+TerjCfC7rvZP`}f0$B&&QUTmA+c$Miu5##WH`LvMlrNjU zM_w}=UkD42?H$9(`A}jl&O^2%nVJ&LQaO)!Qp~0YJdxJ)pjJ9#z6fetFm79{o~<`v z`FAtl8qgZkd7PAW8)C){+d)O|ByGDI1*VomwQoeuFE(Q#LBfbyT1bLy07=u>lsSx{w(mTptBq00mxvSwSD! zU)=`2%&JQ8KN~SAM;O0IhP`}$8R%Jv9ZexPEO2!FCP=rmI>sD|1fYZfUS!rZBjOzh z-9tR0{%SD38|+{8Y;yVH1f3b%k1IPweW!qrrd#Nr2HjnTVHldCVmYCq##*GSxuegXTIU#;QmQ zx4G;Eu;Ys5a_gVnMuONNFUJ(3fbI>VG@(s_)9YH0=c1;#G6;KBm|~;@=zp0-vPDhfaCkd z4uVv~`9ThRIuIz$RshC5Y!j)I-cq{L9q`!#R=!oSGu15Rx@ zdSf5Va`zyX`(R%6L}!x}UYxoUSLKGC5$?4dUzk zq3W32S;CeRkgoqTV$?}f?{9~1@jHDT$$ZG`k&Tk|mV&;(;$uK96J+e6f+S$Kv$Z~3 ze5AKNBlRK7plvx?^e8QawI0}IoOMj)x*!_Tp5iJ1hpN~1PKx|Zhc%2icLm8-pH}1m zZ9PN28uU(2tW5!LHv$(<14*4&fDDRLCbahGLY=^GXFwf>9uLwwLUr@c!rjvl*Kra(111@RV>2qu zw$nyE6OQ4PQCK@hZrcc3LsOI^PfR0D?6)5# zE!i~P#vr33Ige$a#?_HDq~(6_-!PBBX7J6^r-#PK-mU#UP)V{oM=5`AB;}9L{b%b4 ziQeTg+wIw+#leL{was+1sG$Sym4F%tCb>ayiX>AOeCrLFv4L39EEJ@*Nlei+Ih}H2 zS?ldcr~c&R2AeU=3^XSE3LmLCmBUvsBnECLE5_U}h;RnqsY06k6plRPH;puX>h&CX?Y+VgpT1Fq0FIsv4i} z&0z`gFuEQpuzA#B@L@rqRfkFMx?zSRxNyX9iBmBgR|WiL{mC<<1WVaws<>r|dk|7e zAG!v%ey1 z7N2fy{G#0Q`AjDpq$m23^n~s0*R-|=cgmA)NTuds_{8*a3yyke?t}7St5Iu;3E=y0 z;1l2Ce@dgEu|F63%Q1y;-$Q6wH4E8jNg1`-cnzUi6k(ujC*6GQ8|3)|hUaDzj`ae= z&m40LfLr%|M+?V@Dl)dduL|*a+nC52PP(|vaCr~=Z@40JB?imH=@P=J6_l6~LTia~ z&p)#jM4!>+RBcY<8bkZiX%lxUK%*NJj^P|lLmv)#Ac6^XZ2%9;>@KHZs!_sFK;CHh zzG&f@Wn&F$1WLMYCM3RYjD*`KP;DfZCt`+%bKO&|*Io(A45red)<(#@ zC^h(tfU)`s+uhy>|x*tZ@HhFUde4~c-jCbzXsE$(m!S?4x2IEBaQVo=Le zomNgSp;w~_0cZit_UO0Y+$Beg7W^Dno2BQ4+0?|m@rd;m*vQu2$}Qxb+KMFr_rgp{6~X0Bi{R#u0NM!qswb8(P0MUujL@e< z+t^dyn8DzyIP$KFcEH2PvKn5(;JlEz^dA9(w<>yZGU^D+9IrB$4^Emplp5-h=9 z(3queiZqtvo=29&0}=0loe%npOmL;9mN!^y_gV3!_B-JWJ?NXS< zPvPZ;1pWpdHSc#!(groni>f)T24dNn?C3ddtbDp@ZVVUWI7wCdcP(9pd!j~JVf)_~ zlgiI1;}ko9iJcf$-^1Pr$(BcMlBc&uS4gEd^R0!__@C6E)u34wC2v$3K3hv6YtsV~ zY1g7`Ll>0O3_pnBBW4;R!bcTGPi6OO(Col0JoSy)J`gfFqDD=AxM=x}=FYD8DBpqyzKeBl@Pr>4atM`XJ_46sXVpot^NdSIlR z=Fd6M2&J;B+RC*{R-;;e(gxdHn-7(dfE-s9lH-aDqkCJX;2<8Tn(=q`P{VcU>+>*b z&~sF^gXMqK@`5(=zqBWhhNJv_lu@uN(T2(Ab)<$1t$>7RVjbKxo$6|c4Dhf*I8^yT8`{-gNbW;XD_@QyP5dT%& z8)|fB4%*GD>9>{wB@tk%1q=XB=`(&=m=8?is2{YMY7__j0L8g%!@nS=shJ-!b&>d_ z2SCkp01rQ5{^it|$CzJ9)W*i)j*nE3z`!<+)}nJu_{$mdV$u&naU};KCEA5KC~-z6 z#krKBufXxJE_hU2Q^h7|M39dl`+(r}$beuZ$%V|_BpN~IwhIRBaX{5Xax`mz(VCb^ zV;nFfW>PYmtzio(H!Wk%X*2DC#bnCik8JU7dbXh}UzKvax3Ps*DqLpvh60z5%mZ1~ z{@Il5Scq5N`B7TiKC{~^6#E|3P);)#iY-&Xo@^N84n=CTL$T^7VYmH1OzBIZb;5vY zckGb{xD}?`2MokwPO?VoHyC4XOlgTCLe$`F!^aTPYoW%7l8X^Hpk2b?zfLv$bdhpH z0XD7vLyuoxy9AVE0y?hHsI~me(8!-N3>`(HQehZ7GYdSefu{@yR3w0P-|fJ4DJlggR6fDz3Xe1a1^M);KXv2+S^*18!r9{;SZJQ3DJ{hXh(OB~O;I(( z=7%wrDrEs*-uYp8ULRoE10ehknAT(yr?Kmtlz}Sx%VR&mb@5Z&dKwo9jIN1+LvzGX zbgCwe>g=*M#SnBvv1)pm(kIuYkb=|UKq!Zo26DkvGm zmAFXR<_8bH$>3;8gc&lVFh-V_=Cf;2_MuOjaB_9F{8n8sW3ZL!Aa~?+^;U4-*;He( zm}RXgq(kYj3&=6Isi9;T!lHN$j9BEnBo>6PB{tHh(RA)ZU(*65^3?GD@0^aesESz5 z07xEBxO8E*+D2xGhgs5jk@7!Us~P9zZLAwh!YQi%w(<2>a0q&qjYDzrI59$^8yI0u z-iPbDW;_?lrlyd*65!;Pm9n=U>N^BqtI3mG)yFNJA_H%R4h&Jr>T8wlttI;2fbWOBr1^bV5$#AUX7V4sasiaWLx zVlZS^B`tapZJpaQ?cZlKq^Y#dEnSTh`DCf)V-!-F4lY{>YvL(NhuLf>W)K(w240sk zdb(m3USZZnu}TL$TQRF5CBUPkU!^>~7~~Mw(q|249P-+|sT`vksq|enW9AZqE8mO2 zS1gZla&=bI&9Rv=dz~06ad0|J=ZN3_d-bd7;KmS6gcKn>@Dt3w(?(5IKB*%^O#-?2 z4$Og>b3IJk385Jz;IvG~?^lZJcoEW87fF6mKue{zt}iX(dUnJ=SfEHCR8=iF3&j1~ zQmc*l1cOxg{DKQF1jVK11s9&e7O7>+2&Qlg@|^DeWRkVjd0`_y#w$SXrnK|vjAH|K zg3gC^to0(VC&)d{lmj1Kk=rWaTPvbv?<(Q@)*~R8;CRfG=NR9cnkSfnpvpCkmg)ng zHky3v#Qa}xQsJxAH43tPEW%?Y#^YZs==-t6Jo96td$V-qAHUwA$pbxF=&^TNiqyU_ zGxSK(jn7?9O@ziW>s;=E;S3NcQNNE7HQRPM)jj{MJ;>wBBs{f;KMw+a^{NasJl{b{ zEe`rnL*SW+a_%OdK1{`RiWzFux#>!1WLo&JXZSpI`5aNR-QXwmCF0IYb*#EqUS#dl z8fYaVCjVAqO@d~AxRMVG*jvKD{^CfK=73h%{#Ak^b@NqHqN2u>ey_$ zq*?UN@OCv+JU9@|)x4=(G?9bd&2$Z}ttUWrS}ion`wK(Dt6t_IsGy zXM*iVIN5$|3D};Xc1g1&;t8nD6@F9m3gedFBe(C10=BO>{%yF#TOh$og2TIp^E$N0w%cmY%qhnb=Bz$O(rCfOWu9`)$fXCr5#ED zI()&G@P}i^K>AL{GyW>7?czhRtcqZ5y9-YCnr}P9!`qK(-ifVB(BaaHQ@R)jKClvZ zxLG){pz9qqYQ!(ATDciKTy(_SzRNLSY)kJRIi#hUc949kHJ^>lUM{@@)?!700Z75^~wlds>YtNx=k zot^`ZW#D%j^(WsbMjV;~5(iBIQEiP#Gm7wNzW=K(!fvg(y%9k`o(PEqBvmb!Qr-ES zXJ;nNpU`Wb1)O}JHv(a%;yPKFB$|_Dp?j4TL!dHc#$RvznIhXJ{vocK94gFQu3&sA zs_^6lD%8ebPtbXssRJ-ZXKR08Z8vey<~^1Wh*=j_?O?8q2x3sm&8#mT!F-%=-k#B< z?9z!y;dV$0FCLuj=(V`p!(7XFnv%b?#>gI!+2X1+Fei37E~x)b))xh8hr( zG*<`Y>$LQsZ90mnYrq&le<}WOkEoM3cO>dX+QjVNvLj zKD2x8y!6+^CJ6tvJQc1Cm(*$b2p*>|PlYi>yk?oh%BCl@8B`RY!^bxJ~~qikOnFX!3a*V5}* z$yHzE*ZV(>Fg@9Ysuic=R(@(&4y1nhiHpkb+-<$O(BL~bSh-=(-aj7oMT?e?%ve}*tr_WeE{^*g_vs6TCZyu?-hHSp{+sF{xNzZJqg!;O{e=NaT_{$n zUG=G96*%vz6Bkv@9c=GPyGjPx$bZ!3`MBy$jSpsE0VI!M7JDq5>|@__da1V^i@gmH zMwm-aN9m#tKp36FNy5tt^MqqN%5+_%{Nni@2z$o!qS|^MiDjXWQFomy?rm4UUdaf?b5%ea-UlaA9ldP8kd+BwC4ZIT(vUqEX`R!=L$P*(Isk=g1Ft6tKh6{e@+bVXye1%T*=~(A z(E5LlzvS}m1y?>ryu9oM9oahwpsC_%S)saHLz-uJ2m-KQP96uR(34wfo{kN3sxsYP~mKMZ!IY#D#|fP=Nrwid`E zQM_IDSO7XXJ7zqREU=mSk(dY0QD$Cs*?wr#-JEaAa@S0?*rmhdK%=cX3nwsgOqxR< zH}ie2LGNQ3A~Lcg(nTqDPOMW?ZA!QkFgy<)jV-k)U$t)hLHwqoRlq>nXYu&LVynxG z{fp1teJ(llI#>DXf>_s8T5Ws<^A5-@gLrxThP788f3>h%24=mExzy-Yc(yBmF&zM7 zBC!iI_U;3-_Ybd6624#9Cp{!rQ6UpowUU*mg!*2(Q@;975M1JXFuOk#R3*`Pnn|vN z6S3gb^VJnQlFT-`FXl%o80<@5XO$y84IRe$?08l9B6g{+#@r+g@WDLwKQm+Z z&KZeqUt}0tY;qfX2?NF}l5wR)_e!I?8iSNIC7$-pl%Z>z+5vHEO&by{CT5g+8m!zP?hO)ZRc@ zo(lQRvh&W%cBuzOYy|qGZz_F~;N)X5(Y zX_LOD7K5)BmsKl#D1ZJpUpV{?uIlpz<`LhE=rZWgblGaF zwM5A&Y-<_mVIfqz zLzZ@O>wzHnfUEHg050CApM8>pU1SHFL}lZ%)2g}B?Cn*YqOg}vI6*Yi zgJ@QB+>-kq-$zZKb6!>rFB*0q&*aL;;!>e;r&42Mh>&T$N-zdmEO1%|HDJ(NRKDzG zqGH`fSP36rB>x~{Q_*tJE}m)r_yV`pWo{spUe7b1oyf|TtjP66k$Aq8X!3mY@vPU( z-5v~|JF=%~7A@Rz5nS2UBChGsml2x&PE@GRnLA9nmDBsDQdJEX9YCpoa-QFiAqj(g0hFJ&)51~PvCu=$qSSlMCqfSo6F^@i#0>HSpe;?{N|hxdXZ0W z(;U#Lpf>Z`^74{y)3>W15mvWW?8pap*gJ#MSpntwFpvE-haSn?QuiPaO)XldpS6V4 zV!7u-Cz@K!eCC%ak1}l!(T6w;Iyl!Z`RXyU-cq}B0Pp3+*^#$uCHd@=3wI+JroaX> zSDisOQJwgsA>DIBAc>Ab|1^U%RCb|7@#zW33%jP5?*i8pG9xxvfVD3~b=vs;Rpa>> z=t)|ga!Rae-WaIBa=LcgntulF+5x!B(xhG`uhzK+;;ys+w7j9^r)57LC~9w=O`HRP zIHwa@aB8DRx7O1QwSYjF-0zl51-z_A-m^=9y&NI-x<+4G*A3fvJQC-o;1NAprHit_ z;F3L@#Ctz2FT(kAPy|uJtb@+h7yg-UTV4NT{8HV%IZ1s=+9AFF%XHdXJnYnNXy8<} zN&sQb+=GxXQoj8&8)MT1DlNb?7_u%Q{-Sn2oNi|}tJbo^(UIrdV)c>#nN~$~WXCPI z@(W;C)x{RqdBY^HwT0Ji$3K|`!dfo65?+@NCY47J57V~4BoyI39nGo&MgfO;MbIJC zNOpsvtL&gUK%t|^TO~b!pa6Ys%fyF%sOk@-(vku+-E#2J4VY?afNCN7PF1eCy+j%u z@SYQzYyCBd7xE?Q=RV_33lON^61qRpiJjc^h1xv`$I&vXyZEz^qux>JfZ#{*VQmhF2r?QhfpACYDZm{j zi4iF83j$E@C z-uC9UN!#uWiZR5Q~qmH;vGWGb=WxQp`8_;Z_HMe3nj1J%o2( zd}lszx;-}6;L3vUrf}fCSe3^CZUh-m1gq&e>+_7zv#=chgRM}1UctCX2CG&kRf1Bpq{)`8HU#c)M~I- zrlG)4@xu#&Fn0z-xT(b2L*@XFMbXqzhz^!m0&Tg4(0EBOow@DGoPcNGmB#5y+ogQX zhaUQpkcmNOlZukd#Q=`jb2!!QrdK(AQ#yMJ*iU+_c)`4Wb}N|<1c9y#M(9>@CTuKH zK8DZyUXTq!GrXGj(HX3_)hyBacCdMdo zGUcy34W3S1xkLU>nn4xWgCxAs2|73#gODqL!pUDgQOd&U?6AzpPK06B`lg*ITU0xQSTB5k8 zYP|ypUYWjhwY+L(V7+;9Ze&`)rWTiaQ-yJF)>#b`0z@JYT z97+n{`?y?r1-sS12e$gx1FN4W$9DwtYHWNcO&Kwfa+_gwuZT{t2S*s$&EoD%c+awz z0MtJM`|6<>q5~oG{VU+UL4^(L!74wr8< z7Jw5z9tuW0pSqNn|T!R>8;w!=U%3w4rL}EV|(G8?fOA81YwLX`WcO0_v2pgW^ zmF3%LzEXD*q2WACT{ss+0VXgVqIe_v?d&v3JnSjD}(9EBy1`6^OIDdQ=4DkYox zi-Pwcw~Q!K8_g(`5-Iff&x+9z=aI0U5fYUgjKT)QOUU}bUHLIV10tHA&G1O99OKA3xlvT)9vkGyl{tYrOb@L%37e(mz5 zK0__rjYn2t1%C1#b+t7Ya@wHmnD8al*sA(ys&P%rHThvpNlbd^dZC}oGL;1d5C3)Q z!K3wE z$>*lY^KT1o;jcQ^w3IN63En?XaJA;GM?e4GdsEo&ZDtY*pL17A@9^0hN(z2quht({ zjR_MK-ShXEof3nAfvQ<-mBxC_#T!t>XmT)z)&cEyGwlUr#Muom zd;{Pcl?*;ZK{gcGrKcG2L@mm-7(d{m3jhsdSkVNjX-Y;oge-33cpxa&6W~pPOKq^dn3i2^@iLkLr$!9N_IKWyrnL zt-VN06!pw}Gm0JHF6XSpg_nSvdae?~{Yf(RPc9~9+&;#KzPZ~taYEafq|i0hl>w z?QpYu54AY+dA&mpT_h9)W*+1FggG=`#}kEPpUOUtS()%#SVcY~ds7jXaUH23(qqCn z>I{jLKAAfL{4E9jCWe0H4f`&e#x7DQdf?M}3v*sZ?(lPm(Q9Nbu7 zBZCB2A5azbBAmj$y&7mGW0|QQOO$d6=S4H@)vfWc_gD6`S=Z+f+c_jwyL@Pe*Yt3H z+$hu-tH$O`n@_Z+6)Zd1+LcTx`1U4~Rkcw|&sH_2nWpH>R=BJwHs^Anyl@Q$3pQbA zgJ3@dEU&|{Ur!C^9n8p3^KN65hs8wUuL)7+wRI%ILt;bZ442rfn%LzjH0Pgo&*sSa z*eqBB(#|%*q{ZU=S(4;j!Hi@OJY7vJDc2TD&`~pJ)K}{P3US&DMsU)FpK%I7lX@?R z*%+>iLM3e0o>_~gNM{~5{8?3n%ZmjCs zX0n_WYa5Uv|CkjJYB#iGG$NrY2fH+)xwDU1C*%`FL@yd1p#htSeGK6TPPIQnD&fMy z6tsST+cnL$dFA%jtkab5v<%LUW0poZ>z4XqhO%n5^jMWFQ)Du#WUfrD*#mM&SYP+R zb=`vl6hW$+Zj!YDgFBsn?sHZ_gR$PDlBH7qeYbEw2h^@oO})sov0pWftJlT5CJjoX4y6+&GBhyvHzD>}OKA z2SWNESpTR9nf+d&7t}uAhu(_d^MmCNK~`VVT@5lwH%R+y0Q(+0Xp>2+veaffAI)06 zSYPl)wV3x5+1j#Y;(boCi%pa}ol}b!Np{At!?hh-NHs+Ebcw>yC_jgoz?ctR3|Bl4}V7Y=1h-B9< z`{G_UrP;(1(t%EDk&pmYn_X{W$!iC%w@NsjROpq!p(3Fk6iz2`+^LigG{AwNImvDcTxyH55)Y_FfU-}9SiW<2BFxN$i0l)Fwib_2hoYU_1Xar}NT zaQ(fG`n}usT3c1dQO_Uryuf!l>X9>6Z)|?`D;wkJ$a8M(J5Hp43V+;D_oL|GdaX9@ z?>nR3cs)39eE4P#Lg^{$ym2qOsBsCVtdW z&E%3ozWMe5E^4Ymv~`04xN=ANhH~wj*RIv?C~u(SAFlCdU;ptWh~8Ku|L`5(x}&JI z*c7iJjIL~MjDMos?RmgI9c8E=ctNN{KqJVqhI7^%IpmJ% z$**3$c!clT?}cMv9}zT6bPaQl-Z^spAVe2y#74>z*1J4QeiA{q=efI~n-xNiw@gPq z3OOpy5pezdz=nIf9o4oC__Ufx&B6#SZp`Y|p{|r|jFJ<(ds#tE5P{={z|oVU2w~N2 z`!WMtV6Y7a+m{;QZbpO@O`}k7+C`c=#nQGBnuW|2WTX&U8)+7r+9ikPW&laUYuV^i zT6m4J!xO;7(3J_MU~RtLq3UIn2j;v%`(|sqL~=?D+UV~x>5@~%mKWWZ8bB0m<~e~u zucKXV+H#Cp-DcymjN#$J7=~i5=OrU>0}syN%I3yFFN&Pdx8X#g$G49TU})yUi~zBw zh9rr6&fR-q??}^e?IYtg!+2RvaGh&Y`5E%X=r!^xJz$# z{eg4nz^tK(FW0yriaMOOpY$Ewu4SRPOSDC~%f;G&SS_P%HFXHNj$tg(K8v;0-C269 z287ybG};Z#(oL;wtdm%6yW3q(tPRHD<;F^R1(U(J4Xwm}YgP8+TD6s3)ZtBorPGfDGGhD>FTf+@`0 z2x28LbM`L?GoEC^w01WL2e7`S(4{2{W|ZX8=7#4CBbdj9?%qE79|Z?!Ru@E3FoJ`D z+uIBLo(G4uSR($9Bw<|)mcTk{w2zmt$RjE`YG6;`YUoyKqo4%#2fI^H0346~E+|2Q zyjYA|I{Kg@TQo*aqF9WaK*1O}iJ~z=05S%|NRFI=I~f6MNP?3w450<$%3>JLX(FjO zCVJ3ew#<6VZ0JpbdC~CVIAkkaC@E`wA@1R?mM1$3zgaL z50eURq7r^M z&fr#dwuSo_c7D@y_xzE=3%nHuk<*Xx7K=JK4=cdr7PRvsa{FlMyAKi$S+71Erd;LX zL(BNoQ}CaUk9hjs$!OOJZM^A%`LtXgVSW+&2)i1XkAO19Pwrz0xS4poC`eyREC!0U@XJx=ML*UplrN8#ru%yo?Rdf94b^vCA)^bK*SY+7wWic?h@Uc(}FH zfrp0ty<&;yG7sJt#dW1zMT62ShBE5Lu9(Z*C|V!}gp$+XL}HX%5;SfQT~Qagss)`w z(biRwss#+FNTxX$QH`xAj@&3(gR;uJ1fJ#qS#l%cu@k(4lht{}4L@N+JBJm3xH7M} zlBWr?a^PH!Q_F3xd_F5Xp@a=d@(vHY&p~pTy@w7-mG;R%&8oP_4bD(!$0|yd2&r@9 zF|D%mUA}Dt39AVu-?l3|%i)o%?4X8o5;gQ{rki(C=$fn4ym=>up1Mj-at#MwnX72J zc_#tY>T|NPT@KI5%Jw*Xy5YF`>8@;#!y{SQ9*1+%xC%XvQQ01cM{?yoPK{q)CyVXe zI(y?>%k0YGkS@MUCK`ALg0Kn?Y$~t@BI+cM=Hn?onODVU+ye*gVk_<3$UjZ_bGnn> zfxyL{^9=R!jg=A^<`S@n+p{6=*hsjhpcke)>h$^Z)2HvMj4!(r*Msfv$!?9b!0Er9 zPM`nu2lXGtGN_R=8NA&$Eu+`JrmQK`&p$i;`~BJPj;GHapMCt{=`TN30B`~L7lw#N5lo4Jcao;HO#gEddyD#WcDpXcm3KFmLtQMBBd_hIfNU=G z6?K73i75y7-w)0ny`23z$q0UK%A}+@eEo-)fbQ&X@5k=q$CykAzq&Gy%BQC%Uz|NY zdHun=r*l?C>PTUo{qrwp$L}R3Me2at66$1P1m*~3;Y~*#BtuGz*+<7`AOBu~Td9yp zCGu8XI^NS~f1dv4J!mMi5C577iu3{4Bu*1+iHJxcc)TMKIeq#GKr_4dG-XbtQA5fj z8XOb=8k|TQcv2%VNQDv@@!XjaK$8+ZGaHF*T`WTe-kq5SmfB`jN92wsrEI3{B&m2l z$U=bqPLjA$^*a76hDsO71K!I-PX6@z>tOod;g97#iL}F z81mY4niSI~FOvI366sO`pWXY}tLM)W5s^Z=ltP)vLP`m;fCOJmOsQoFvI+m;=Qwx; zy0i{v`oYwQBm)2?AZPY^$|Q6<>f1Y8Eo*zn*4Ntgt@fH}IE^){v9-O{FuPmZ+qPBL>)m&to}r(iyMCyd zb3a8la{FO04u;WsAKvTNjjRkPxsqXQ+^#~$1j(qO6cx7f9g%ALH4-XOxL z*T8LfAtnx@HcoyfZ}b09O9KQH000080EbTEK(93|)G9&%0AdvZ02BZK0C;RKb7*05 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 literal 105553 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Ν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%0A9{7 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 M#EgWs@SnZ@58NaNRR910 diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index e62e1a73..d66cbb86 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -636,7 +636,7 @@ REPLACE INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', ' REPLACE INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '同步配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2115, 2115, 'dictType.ne_info_status', '网元信息状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2116, 2116, 'menu.tools.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2116, 2116, 'menu.ne.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2117, 2117, 'log.operate.title.neConfig', '网元参数配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2118, 2118, 'menu.config.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2119, 2119, 'log.operate.title.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -651,5 +651,6 @@ REPLACE INTO `sys_dict_data` VALUES (2127, 2127, 'menu.dashboard.mocn', 'MOCN', REPLACE INTO `sys_dict_data` VALUES (2128, 2128, 'menu.monitor.cdr', '话单', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2129, 2129, 'menu.monitor.event', '事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2130, 2130, 'dictData.ne_host_authMode.2', '免密认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2131, 2131, 'menu.ne.neConfPara5G', '网元公共配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 9fc92cad..3f051b4d 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -636,7 +636,7 @@ REPLACE INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'O REPLACE INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', 'Sync Config', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4115, 4115, 'dictType.ne_info_status', 'NE Info State', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4116, 4116, 'menu.tools.neQuickSetup', 'NE Quick Setup', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4116, 4116, 'menu.ne.neQuickSetup', 'NE Quick Setup', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4117, 4117, 'log.operate.title.neConfig', 'NE Parameter Configuration', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4118, 4118, 'menu.config.neLicense', 'NE License', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4119, 4119, 'log.operate.title.neLicense', 'NE License', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -651,5 +651,6 @@ REPLACE INTO `sys_dict_data` VALUES (4127, 4127, 'menu.dashboard.mocn', 'MOCN', REPLACE INTO `sys_dict_data` VALUES (4128, 4128, 'menu.monitor.cdr', 'CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4130, 4130, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4131, 4131, 'menu.ne.neConfPara5G', 'NE Config Public 5G', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_menu.sql b/database/upgrade/upg_sys_menu.sql index f3097974..2e27cf73 100644 --- a/database/upgrade/upg_sys_menu.sql +++ b/database/upgrade/upg_sys_menu.sql @@ -259,11 +259,12 @@ INSERT IGNORE INTO `sys_menu` VALUES (2135, 'menu.config.neHost', 4, 15, 'neHost INSERT IGNORE INTO `sys_menu` VALUES (2136, 'menu.config.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '1', 'ne:neHostCommand:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2137, 'menu.config.neInfo', 4, 14, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2131, 6, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2139, 'menu.tools.neQuickSetup', 3, 6, 'neQuickSetup', 'tool/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neHost:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2139, 'menu.ne.neQuickSetup', 4, 10, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2140, 'menu.config.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2141, 'menu.config.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2142, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2143, 'menu.dashboard.mocn', 2131, 9, 'mocn', 'dashboard/mocn/index', '1', '0', 'M', '1', '1', 'dashboard:mocn:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2144, 'menu.ne.neConfPara5G', 4, 11, 'neConfPara5G', 'ne/neConfPara5G/index', '1', '0', 'M', '1', '1', 'ne:neConfPara5G:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); -- 指定记录条件更新 diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index a204572e..0b448e24 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -184,7 +184,7 @@ func (s *NeInfoController) ConfigFileWrite(c *gin.Context) { Content any `json:"content" binding:"required"` // 内容 Sync bool `json:"sync"` // 同步到网元 } - if err := c.ShouldBindJSON(&body); err != nil { + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -204,6 +204,38 @@ func (s *NeInfoController) ConfigFileWrite(c *gin.Context) { c.JSON(200, result.Ok(nil)) } +// 网元端公共配置文件读取 +// +// GET /para5GFile +func (s *NeInfoController) Para5GFileRead(c *gin.Context) { + fileType := c.Query("fileType") + data := s.neInfoService.NeConfPara5GRead(fileType) + c.JSON(200, result.OkData(data)) +} + +// 网元端公共配置文件写入 +// +// PUT /para5GFile +func (s *NeInfoController) Para5GFileWrite(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + FileType string `json:"fileType" binding:"oneof='' txt json yaml yml"` // 解析内容数据到对应文件类型 + Content any `json:"content" binding:"required"` // 内容 + SyncNE []string `json:"syncNe"` // 同步到网元 + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + err := s.neInfoService.NeConfPara5GWirte(body.FileType, body.Content, body.SyncNE) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.JSON(200, result.Ok(nil)) +} + // 网元信息列表 // // GET /list diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index a803dc88..11d8b9e9 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -64,8 +64,18 @@ func Setup(router *gin.Engine) { ) neInfoGroup.PUT("/configFile", middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeInfo.ConfigFileWrite, ) + neInfoGroup.GET("/para5GFile", + middleware.PreAuthorize(nil), + controller.NewNeInfo.Para5GFileRead, + ) + neInfoGroup.PUT("/para5GFile", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewNeInfo.Para5GFileWrite, + ) neInfoGroup.GET("/list", middleware.PreAuthorize(nil), controller.NewNeInfo.List, diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index 705dbd86..ffbc2253 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -59,4 +59,12 @@ type INeInfo interface { // NeConfigFileWirte 网元配置文件写入 content内容 sync同步到网元端 NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType string, content any, sync bool) error + + // NeConfPara5GRead 网元公共配置文件读取 + // + // 返回 string map[string]any + NeConfPara5GRead(fileType string) any + + // NeConfPara5GWirte 网元公共配置文件写入 content内容 syncNE同步到网元端NeType@NeId + NeConfPara5GWirte(fileType string, content any, syncNE []string) error } diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 95eafb07..47796819 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "os" + "path/filepath" "runtime" "strings" @@ -470,7 +471,7 @@ func (r *NeInfoImpl) NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType s // 同步到网元端 if sync { // 网元主机的SSH客户端 - sshClient, err := NewNeInfoImpl.NeRunSSHclient(neInfo.NeType, neInfo.NeId) + sshClient, err := r.NeRunSSHclient(neInfo.NeType, neInfo.NeId) if err != nil { return err } @@ -494,3 +495,89 @@ func (r *NeInfoImpl) NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType s return nil } + +// NeConfPara5GRead 网元公共配置文件读取 +// +// 返回 string map[string]any +func (r *NeInfoImpl) NeConfPara5GRead(fileType string) any { + // 网管本地路径 + omcFilePath := "/usr/local/omc/etc/para5G.yaml" + if runtime.GOOS == "windows" { + omcFilePath = fmt.Sprintf("C:%s", omcFilePath) + } + // 读取文件内容 + bytes, err := os.ReadFile(omcFilePath) + if err != nil { + logger.Warnf("NeConfPara5GRead ReadFile => %s", err.Error()) + return "read file error" + } + content := string(bytes) + if fileType == "" || fileType == "txt" { + return content + } + // 序列化Map + mapData, err := parse.ConvertConfigToMap(fileType, content) + if err != nil { + logger.Warnf("NeConfPara5GRead ConvertConfigToMap => %s", err.Error()) + return "content convert type error" + } + return mapData +} + +// NeConfPara5GWirte 网元公共配置文件写入 content内容 syncNE同步到网元端NeType@NeId +func (r *NeInfoImpl) NeConfPara5GWirte(fileType string, content any, syncNE []string) error { + // 网管本地路径 + omcFilePath := "/usr/local/omc/etc/para5G.yaml" + if runtime.GOOS == "windows" { + omcFilePath = fmt.Sprintf("C:%s", omcFilePath) + } + + var err error + if fileType == "" || fileType == "txt" { + err = parse.ConvertConfigToFile(fileType, omcFilePath, content) + } + if fileType == "json" || fileType == "yaml" || fileType == "yml" { + err = parse.ConvertConfigToFile(fileType, omcFilePath, content) + } + if err != nil { + return fmt.Errorf("please check if the file exists or write permissions") + } + + // 同步到网元端 + if len(syncNE) > 0 { + errMsg := []string{} + for _, neTI := range syncNE { + ti := strings.SplitN(neTI, "@", 2) + // 网元主机的SSH客户端 + sshClient, err := r.NeRunSSHclient(ti[0], ti[1]) + if err != nil { + errMsg = append(errMsg, fmt.Sprintf("%s : %s", ti, err.Error())) + continue + } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + errMsg = append(errMsg, fmt.Sprintf("%s : %s", ti, err.Error())) + continue + } + defer sftpClient.Close() + + // 网元端配置路径 + neFilePath := "/usr/local/etc/conf/para5G.yaml" + neFileDir := filepath.Dir(neFilePath) + // 修改网元文件权限 + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath)) + // 复制到网元进行覆盖 + if err = sftpClient.CopyFileLocalToRemote(omcFilePath, neFilePath); err != nil { + errMsg = append(errMsg, fmt.Sprintf("%s : please check if scp remote copy is allowed", ti)) + continue + } + } + if len(errMsg) > 0 { + return fmt.Errorf(strings.Join(errMsg, "\r\n")) + } + } + + return nil +} From 438ba4a06b9d68a29a80ef3af3012953efe62026 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 16 Apr 2024 19:41:19 +0800 Subject: [PATCH 024/130] =?UTF-8?q?fix:=20CopyUploadFile=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E5=88=B6=E5=88=A4=E6=96=AD=E9=9D=9E=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/file/file.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/framework/utils/file/file.go b/src/framework/utils/file/file.go index 51854149..8470fc98 100644 --- a/src/framework/utils/file/file.go +++ b/src/framework/utils/file/file.go @@ -317,7 +317,7 @@ func CopyUploadFile(filePath, dst string) error { } // 如果目标文件已经存在,先将目标文件重命名 - if _, err := os.Stat(dst); err == nil { + if info, err := os.Stat(dst); err == nil && !info.IsDir() { ext := filepath.Ext(dst) name := dst[0 : len(dst)-len(ext)] newName := fmt.Sprintf("%s-%s%s", name, time.Now().Format("20060102_150405"), ext) From b0506437148a3ba3ec2863dfdd4484f589d3fd1f Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 16 Apr 2024 19:42:14 +0800 Subject: [PATCH 025/130] =?UTF-8?q?fix:=20=E6=96=87=E4=BB=B6=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E6=97=B6=E5=88=A4=E6=96=AD=E7=9B=AE=E5=BD=95=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=AD=98=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/ssh/ssh.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/framework/utils/ssh/ssh.go b/src/framework/utils/ssh/ssh.go index 54ddb94a..7790f17d 100644 --- a/src/framework/utils/ssh/ssh.go +++ b/src/framework/utils/ssh/ssh.go @@ -422,6 +422,10 @@ func (s *SSHClientSFTP) CopyFileRemoteToLocal(remotePath, localPath string) erro } defer remoteFile.Close() + if err := os.MkdirAll(filepath.Dir(localPath), 0750); err != nil { + return err + } + // 如果目标文件已经存在,先将目标文件重命名 if info, err := os.Stat(localPath); err == nil && !info.IsDir() { ext := filepath.Ext(localPath) @@ -460,6 +464,12 @@ func (s *SSHClientSFTP) CopyFileLocalToRemote(localPath, remotePath string) erro } defer localFile.Close() + // 创建远程目录 + if err := s.Client.MkdirAll(filepath.Dir(remotePath)); err != nil { + logger.Errorf("CopyFileLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error()) + return err + } + // 创建远程文件 remoteFile, err := s.Client.Create(remotePath) if err != nil { From 325baed56e195df66222ed840af0443efa0f2edb Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 16 Apr 2024 19:51:23 +0800 Subject: [PATCH 026/130] =?UTF-8?q?fix:=20Telnet=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=8F=91=E9=80=81=E7=AA=97=E5=8F=A3=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/telnet/telnet.go | 6 +++++- src/modules/ws/controller/ws.go | 13 ++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/framework/utils/telnet/telnet.go b/src/framework/utils/telnet/telnet.go index 651ede9d..ad2c6b48 100644 --- a/src/framework/utils/telnet/telnet.go +++ b/src/framework/utils/telnet/telnet.go @@ -119,12 +119,16 @@ func (c *ConnTelnet) RunCMD(cmd string) (string, error) { } // NewClient 创建Telnet客户端会话对象 -func (c *ConnTelnet) NewClientSession() (*TelnetClientSession, error) { +func (c *ConnTelnet) NewClientSession(cols, rows uint8) (*TelnetClientSession, error) { if c.Client == nil { return nil, fmt.Errorf("telnet client not connected") } conn := *c.Client + // 需要确保接收方理解并正确处理发送窗口大小设置命令 + conn.Write([]byte{255, 251, 31}) // 发送窗口大小选项 + conn.Write([]byte{255, 250, 31, 0, rows, 0, cols, 255, 240}) // 发送窗口行和列的大小 + var buf bytes.Buffer tmp := make([]byte, 1024) // 排空连接登录的信息 diff --git a/src/modules/ws/controller/ws.go b/src/modules/ws/controller/ws.go index 297b8a01..04257dd3 100644 --- a/src/modules/ws/controller/ws.go +++ b/src/modules/ws/controller/ws.go @@ -256,8 +256,19 @@ func (s *WSController) Telnet(c *gin.Context) { } defer client.Close() + // 终端单行字符数 + cols, err := strconv.Atoi(c.Query("cols")) + if err != nil || cols > 254 { + cols = 80 + } + // 终端显示行数 + rows, err := strconv.Atoi(c.Query("rows")) + if err != nil || cols > rows { + rows = 40 + } + // 创建Telnet客户端会话 - clientSession, err := client.NewClientSession() + clientSession, err := client.NewClientSession(uint8(cols), uint8(rows)) if err != nil { // 连接主机失败,请检查连接参数后重试 c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo"))) From c80fe5df67af15b0749f2870ca6312fa5b35dd2b Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 18 Apr 2024 09:37:23 +0800 Subject: [PATCH 027/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E4=B8=BB?= =?UTF-8?q?=E6=9C=BA=E8=AE=A4=E8=AF=81=E6=A8=A1=E5=BC=8F=E6=B8=85=E9=99=A4?= =?UTF-8?q?=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/ne_host.impl.go | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/modules/network_element/repository/ne_host.impl.go b/src/modules/network_element/repository/ne_host.impl.go index 156b5709..b1effdc1 100644 --- a/src/modules/network_element/repository/ne_host.impl.go +++ b/src/modules/network_element/repository/ne_host.impl.go @@ -294,6 +294,20 @@ func (r *NeHostImpl) Insert(neHost model.NeHost) string { params["create_time"] = time.Now().UnixMilli() } + // 根据认证模式清除不必要的信息 + if neHost.AuthMode == "0" { + params["private_key"] = "" + params["pass_phrase"] = "" + } + if neHost.AuthMode == "1" { + params["password"] = "" + } + if neHost.AuthMode == "2" { + params["password"] = "" + params["private_key"] = "" + params["pass_phrase"] = "" + } + // 构建执行语句 keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params) sql := "insert into ne_host (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" @@ -376,6 +390,20 @@ func (r *NeHostImpl) Update(neHost model.NeHost) int64 { params["update_time"] = time.Now().UnixMilli() } + // 根据认证模式清除不必要的信息 + if neHost.AuthMode == "0" { + params["private_key"] = "" + params["pass_phrase"] = "" + } + if neHost.AuthMode == "1" { + params["password"] = "" + } + if neHost.AuthMode == "2" { + params["password"] = "" + params["private_key"] = "" + params["pass_phrase"] = "" + } + // 构建执行语句 keys, values := repo.KeyValueByUpdate(params) sql := "update ne_host set " + strings.Join(keys, ",") + " where host_id = ?" From 41643327558777ecc5d6fd081dbec4eb6beed33a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 18 Apr 2024 09:38:41 +0800 Subject: [PATCH 028/130] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=9F=A5=E8=AF=A2=E5=B8=A6=E4=B8=BB=E6=9C=BA=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E4=BF=A1=E6=81=AF=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_info.go | 6 +- .../network_element/service/ne_info.go | 3 +- .../network_element/service/ne_info.impl.go | 120 ++++++++---------- 3 files changed, 60 insertions(+), 69 deletions(-) diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index 0b448e24..53005ee0 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -120,7 +120,8 @@ func (s *NeInfoController) ListAll(c *gin.Context) { var querys struct { NeType string `form:"neType"` NeId string `form:"neId"` - BandStatus string `form:"bandStatus"` + BandStatus bool `form:"bandStatus"` + BandHost bool `form:"bandHost"` } if err := c.ShouldBindQuery(&querys); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) @@ -135,8 +136,7 @@ func (s *NeInfoController) ListAll(c *gin.Context) { if querys.NeId != "" { ne.NeId = querys.NeId } - bandStatus := parse.Boolean(querys.BandStatus) - neList := s.neInfoService.SelectList(ne, bandStatus) + neList := s.neInfoService.SelectList(ne, querys.BandStatus, querys.BandHost) if len(neList) == 0 { c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index ffbc2253..c8033457 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -27,7 +27,8 @@ type INeInfo interface { // SelectList 查询列表 // // bandStatus 带状态信息 - SelectList(ne model.NeInfo, bandStatus bool) []model.NeInfo + // bandHost 带主机信息 + SelectList(ne model.NeInfo, bandStatus bool, bandHost bool) []model.NeInfo // SelectByIds 通过ID查询 // diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 47796819..c60a8506 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -93,7 +93,7 @@ func (r *NeInfoImpl) SelectNeInfoByRmuid(rmUid string) model.NeInfo { } } } else { - neInfos := r.SelectList(neInfo, false) + neInfos := r.SelectList(neInfo, false, false) for _, v := range neInfos { key := fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, strings.ToUpper(v.NeType), v.NeId) redis.Del("", key) @@ -116,37 +116,7 @@ func (r *NeInfoImpl) SelectPage(query map[string]any, bandStatus bool) map[strin // 网元直连读取网元服务状态 if bandStatus { rows := data["rows"].([]model.NeInfo) - arr := &rows - for i := range *arr { - v := (*arr)[i] - result, err := NeState(v) - if err != nil { - (*arr)[i].ServerState = map[string]any{ - "online": false, - } - // 网元状态设置为离线 - if v.Status != "0" { - v.Status = "0" - (*arr)[i].Status = v.Status - r.neInfoRepository.Update(v) - } - continue - } - result["online"] = true - (*arr)[i].ServerState = result - // 网元状态设置为在线 - if v.Status != "1" { - // 下发网管配置信息给网元 - _, err = NeConfigOMC(v) - if err == nil { - v.Status = "1" - } else { - v.Status = "2" - } - (*arr)[i].Status = v.Status - r.neInfoRepository.Update(v) - } - } + r.bandNeStatus(&rows) } return data @@ -155,50 +125,70 @@ func (r *NeInfoImpl) SelectPage(query map[string]any, bandStatus bool) map[strin // SelectList 查询列表 // // bandStatus 带状态信息 -func (r *NeInfoImpl) SelectList(ne model.NeInfo, bandStatus bool) []model.NeInfo { +// bandHost 带主机信息 +func (r *NeInfoImpl) SelectList(ne model.NeInfo, bandStatus bool, bandHost bool) []model.NeInfo { list := r.neInfoRepository.SelectList(ne) // 网元直连读取网元服务状态 if bandStatus { - neList := &list - for i := range *neList { - v := (*neList)[i] - result, err := NeState(v) - if err != nil { - (*neList)[i].ServerState = map[string]any{ - "online": false, - } - // 网元状态设置为离线 - if v.Status != "0" { - v.Status = "0" - (*neList)[i].Status = v.Status - r.neInfoRepository.Update(v) - } - continue - } - result["online"] = true - (*neList)[i].ServerState = result - // 网元状态设置为在线 - if v.Status != "0" { - // 下发网管配置信息给网元 - _, err = NeConfigOMC(v) - if err == nil { - v.Status = "1" - } else { - v.Status = "2" - } - (*neList)[i].Status = v.Status - r.neInfoRepository.Update(v) - } - } + r.bandNeStatus(&list) + } + + // 网元主机信息 + if bandHost { + r.bandNeHosts(&list) } return list } +// bandNeStatus 网元列表项数据带网元服务状态 +func (r *NeInfoImpl) bandNeStatus(arr *[]model.NeInfo) { + for i := range *arr { + v := (*arr)[i] + result, err := NeState(v) + if err != nil { + (*arr)[i].ServerState = map[string]any{ + "online": false, + } + // 网元状态设置为离线 + if v.Status != "0" { + v.Status = "0" + (*arr)[i].Status = v.Status + r.neInfoRepository.Update(v) + } + continue + } + result["online"] = true + (*arr)[i].ServerState = result + // 网元状态设置为在线 + if v.Status != "1" { + // 下发网管配置信息给网元 + _, err = NeConfigOMC(v) + if err == nil { + v.Status = "1" + } else { + v.Status = "2" + } + (*arr)[i].Status = v.Status + r.neInfoRepository.Update(v) + } + } +} + +// bandNeHosts 网元列表项数据带网元主机信息 +func (r *NeInfoImpl) bandNeHosts(arr *[]model.NeInfo) { + for i := range *arr { + v := (*arr)[i] + if v.HostIDs != "" { + (*arr)[i].Hosts = NewNeHostImpl.neHostRepository.SelectByIds(strings.Split(v.HostIDs, ",")) + } + } +} + // SelectByIds 通过ID查询 // -// bandStatus 带主机信息 +// bandHost 带主机信息 func (r *NeInfoImpl) SelectById(infoId string, bandHost bool) model.NeInfo { if infoId == "" { return model.NeInfo{} From ed94c373ffcca60c6b9f95ebde40783da581196a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 19 Apr 2024 19:55:20 +0800 Subject: [PATCH 029/130] =?UTF-8?q?fix:=20=E5=8A=A0=E5=AF=86=E5=B7=A5?= =?UTF-8?q?=E5=85=B7aes=E4=BC=98=E5=8C=96=E9=81=BF=E5=85=8Dpanic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/crypto/aes.go | 87 ++++++++++++++++++------------- 1 file changed, 50 insertions(+), 37 deletions(-) diff --git a/src/framework/utils/crypto/aes.go b/src/framework/utils/crypto/aes.go index 4db36acc..290eb718 100644 --- a/src/framework/utils/crypto/aes.go +++ b/src/framework/utils/crypto/aes.go @@ -10,21 +10,17 @@ import ( "io" ) -// aesKey 字符串AES加解密密钥 -const aesKey = "AGT66VfY4SMaiT97" - // StringEncryptByAES 字符串AES加密 func StringEncryptByAES(text string) (string, error) { if len(text) == 0 { return "", nil } - pass := []byte(text) - xpass, err := aesEncryptWithSalt([]byte(aesKey), pass) - if err == nil { - pass64 := base64.StdEncoding.EncodeToString(xpass) - return pass64, err + xpass, err := aesEncryptWithSalt([]byte(text)) + if err != nil { + return "", err } - return "", err + pass64 := base64.StdEncoding.EncodeToString(xpass) + return pass64, nil } // StringDecryptByAES 字符串AES解密 @@ -36,53 +32,70 @@ func StringDecryptByAES(text string) (string, error) { if err != nil { return "", err } - var tpass []byte - tpass, err = aesDecryptWithSalt([]byte(aesKey), bytesPass) - if err == nil { - result := string(tpass[:]) - return result, err + + tpass, err := aesDecryptWithSalt(bytesPass) + if err != nil { + return "", err } - return "", err + return string(tpass), nil } -// aesEncryptWithSalt AES加密 -func aesEncryptWithSalt(key, plaintext []byte) ([]byte, error) { - blockSize := aes.BlockSize - padding := blockSize - len(plaintext)%blockSize - padtext := bytes.Repeat([]byte{byte(padding)}, padding) - plaintext = append(plaintext, padtext...) +// aesKey 字符串AES加解密密钥 +const aesKey = "AGT66VfY4SMaiT97a7df0aef1704d5c5" - block, err := aes.NewCipher(key) +// const aesKey = "AGT66VfY4SMaiT97" +// aesEncryptWithSalt AES加密 +func aesEncryptWithSalt(plaintext []byte) ([]byte, error) { + block, err := aes.NewCipher([]byte(aesKey)) if err != nil { return nil, err } + blockSize := aes.BlockSize + + padding := blockSize - (len(plaintext) % blockSize) + padtext := bytes.Repeat([]byte{byte(padding)}, padding) + plaintext = append(plaintext, padtext...) + ciphertext := make([]byte, blockSize+len(plaintext)) - iv := ciphertext[0:blockSize] + iv := ciphertext[:blockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { return nil, err } - cbc := cipher.NewCBCEncrypter(block, iv) - cbc.CryptBlocks(ciphertext[blockSize:], plaintext) + + mode := cipher.NewCBCEncrypter(block, iv) + mode.CryptBlocks(ciphertext[blockSize:], plaintext) + return ciphertext, nil } // aesDecryptWithSalt AES解密 -func aesDecryptWithSalt(key, ciphertext []byte) ([]byte, error) { +func aesDecryptWithSalt(ciphertext []byte) ([]byte, error) { blockSize := aes.BlockSize - var block cipher.Block - block, err := aes.NewCipher(key) + if len(ciphertext) < blockSize { + return nil, fmt.Errorf("ciphertext too short") + } + + iv := ciphertext[:blockSize] + ciphertext = ciphertext[blockSize:] + + block, err := aes.NewCipher([]byte(aesKey)) if err != nil { return nil, err } - if len(ciphertext) < blockSize { - return nil, fmt.Errorf("iciphertext too short") + + if len(ciphertext)%blockSize != 0 { + return nil, fmt.Errorf("ciphertext is not a multiple of the block size") } - iv := ciphertext[:blockSize] - ciphertext = ciphertext[blockSize:] - cbc := cipher.NewCBCDecrypter(block, iv) - cbc.CryptBlocks(ciphertext, ciphertext) - length := len(ciphertext) - unpadding := int(ciphertext[len(ciphertext)-1]) - ciphertext = ciphertext[:(length - unpadding)] + + mode := cipher.NewCBCDecrypter(block, iv) + mode.CryptBlocks(ciphertext, ciphertext) + + // 去除填充 + padding := int(ciphertext[len(ciphertext)-1]) + if padding > blockSize || padding == 0 { + return nil, fmt.Errorf("invalid padding") + } + ciphertext = ciphertext[:len(ciphertext)-padding] + return ciphertext, nil } From 1f520d95e3a11cb0849b22c8198fb88d3a89a997 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 19 Apr 2024 19:57:10 +0800 Subject: [PATCH 030/130] =?UTF-8?q?feat:=20=E9=A6=96=E6=AC=A1=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=90=AF=E5=8A=A8=E8=AE=B0=E5=BD=95=E5=88=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=81=9A=E5=94=AF=E4=B8=80=E8=BA=AB=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.go | 6 +- src/framework/utils/machine/launch.go | 162 ++++++++++++++++++++++++++ 2 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 src/framework/utils/machine/launch.go diff --git a/src/app.go b/src/app.go index b6b73297..33735482 100644 --- a/src/app.go +++ b/src/app.go @@ -8,6 +8,7 @@ import ( "be.ems/src/framework/errorcatch" "be.ems/src/framework/middleware" "be.ems/src/framework/middleware/security" + "be.ems/src/framework/utils/machine" "be.ems/src/modules/chart" "be.ems/src/modules/common" "be.ems/src/modules/crontask" @@ -37,6 +38,9 @@ func AppEngine() *gin.Engine { // 设置程序内全局资源访问 config.SetAssetsDirFS(assetsDir) + // 首次安装启动记录 + machine.Launch() + // 读取服务配置 app.ForwardedByClientIP = config.Get("server.proxy").(bool) return app @@ -108,7 +112,7 @@ func initDefeat(app *gin.Engine) { app.NoRoute(func(c *gin.Context) { c.JSON(404, gin.H{ "code": 404, - "msg": fmt.Sprintf("%s Not Found", c.Request.RequestURI), + "msg": fmt.Sprintf("Not Found %s", c.Request.RequestURI), }) }) } diff --git a/src/framework/utils/machine/launch.go b/src/framework/utils/machine/launch.go new file mode 100644 index 00000000..701b0b9f --- /dev/null +++ b/src/framework/utils/machine/launch.go @@ -0,0 +1,162 @@ +package machine + +import ( + "crypto/rand" + "encoding/json" + "fmt" + "hash/fnv" + "os" + "runtime" + "time" + + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/crypto" + "be.ems/src/framework/utils/parse" + "github.com/shirou/gopsutil/mem" +) + +// 机器的唯一标识符 +var Code string + +// 初始信息 +var LaunchInfo map[string]any + +// codeGenerate 生成机器的唯一标识符 +func codeGenerate() string { + var machineID string + + // 获取主机名 + hostname, err := os.Hostname() + if err != nil { + panic(err) + } + machineID += hostname + + // 获取 CPU 信息 + numCPU := runtime.NumCPU() + machineID += fmt.Sprintf("%d", numCPU) + + // 获取操作系统信息 + osInfo := runtime.GOOS + machineID += osInfo + + // 获取内存信息 + memInfo, _ := mem.VirtualMemory() + machineID += fmt.Sprintf("%d", memInfo.Total) + + // 使用哈希函数生成机器码 + h := fnv.New32a() + h.Write([]byte(machineID)) + machineCode := h.Sum32() + + return fmt.Sprintf("%x", machineCode) +} + +// 网管本地路径 +func filePath() string { + filePath := "/usr/local/etc/omc/machine.ini" + if runtime.GOOS == "windows" { + filePath = fmt.Sprintf("C:%s", filePath) + } + return filePath +} + +// codeFileRead 读取机器保留的信息 +func codeFileRead() (map[string]any, error) { + var mapData map[string]any + // 读取文件内容 + bytes, err := os.ReadFile(filePath()) + if err != nil { + logger.Warnf("CodeFileRead ReadFile => %s", err.Error()) + return mapData, fmt.Errorf("not file") + } + content := string(bytes) + // 解密 + contentDe, err := crypto.StringDecryptByAES(content) + if err != nil { + logger.Errorf("CodeFileRead decrypt: %v", err.Error()) + return mapData, fmt.Errorf("decrypt fail") + } + // 序列化Map + mapData, err = parse.ConvertConfigToMap("json", string(contentDe)) + if err != nil { + logger.Warnf("NeConfPara5GRead ConvertConfigToMap => %s", err.Error()) + return mapData, fmt.Errorf("content error") + } + return mapData, nil +} + +// codeFileWrite 写入机器保留的信息 +func codeFileWrite(data map[string]any) error { + jsonByte, _ := json.Marshal(data) + // 加密 + contentEn, err := crypto.StringEncryptByAES(string(jsonByte)) + if err != nil { + logger.Errorf("insert encrypt: %v", err.Error()) + return fmt.Errorf("encrypt fail") + } + return parse.ConvertConfigToFile("txt", filePath(), contentEn) +} + +// Launch 记录首次安装启动初始信息 +func Launch() { + Code = codeGenerate() + // 检查文件是否存在 + if _, err := os.Stat(filePath()); err != nil { + LaunchInfo = map[string]any{ + "code": Code, // 机器码 + "firstTime": time.Now().UnixMilli(), // 首次启动使用时间 + + "sysGuide": true, // 首次引导 + "sysGuideTime": 0, // 引导完成时间 + } + codeFileWrite(LaunchInfo) + } else { + // 创建一个用于存储密钥的字节数组 + key := make([]byte, 32) + + // 使用crypto/rand包生成安全的随机字节序列 + _, err := rand.Read(key) + if err != nil { + fmt.Println("Error generating random key:", err) + return + } + + // 将随机生成的字节序列作为密钥打印出来 + fmt.Printf("Generated AES-256 key: %x\n", key) + // 读取记录文件 + data, err := codeFileRead() + if err != nil { + // 文件异常就重新生成 + os.Remove(filePath()) + Launch() + return + } + LaunchInfo = data + } +} + +// SetLaunchInfo 新增额外的初始信息 +func SetLaunchInfo(info map[string]any) error { + if info == nil { + return fmt.Errorf("not info") + } + + // 固定值禁止变更 + constKeys := []string{"code", "firstTime"} + for k, v := range info { + constKey := false + for _, ck := range constKeys { + if ck == k { + constKey = true + break + } + } + if constKey { + continue + } else { + LaunchInfo[k] = v + } + } + return codeFileWrite(LaunchInfo) +} From 299ac091e4bb58de588115a5b100464ba2bee49e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 19 Apr 2024 19:58:14 +0800 Subject: [PATCH 031/130] =?UTF-8?q?feat:=20=E7=99=BB=E5=BD=95=E8=BA=AB?= =?UTF-8?q?=E4=BB=BD=E5=AF=86=E9=92=A5=E5=8A=A0=E6=9C=BA=E5=99=A8=E7=A0=81?= =?UTF-8?q?=E9=98=B2=E6=AD=A2=E5=85=B6=E4=BB=96=E7=BD=91=E5=85=83=E8=B7=A8?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/token/token.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/framework/utils/token/token.go b/src/framework/utils/token/token.go index 2a4fb060..b07879d6 100644 --- a/src/framework/utils/token/token.go +++ b/src/framework/utils/token/token.go @@ -11,6 +11,7 @@ import ( "be.ems/src/framework/logger" redisCahe "be.ems/src/framework/redis" "be.ems/src/framework/utils/generate" + "be.ems/src/framework/utils/machine" "be.ems/src/framework/vo" jwt "github.com/golang-jwt/jwt/v5" @@ -74,7 +75,7 @@ func Create(loginUser *vo.LoginUser, ilobArgs ...string) string { // 生成令牌设置密钥 secret := config.Get("jwt.secret").(string) - tokenStr, err := jwtToken.SignedString([]byte(secret)) + tokenStr, err := jwtToken.SignedString([]byte(machine.Code + "@" + secret)) if err != nil { logger.Infof("jwt sign err : %v", err) return "" @@ -118,7 +119,7 @@ func Verify(tokenString string) (jwt.MapClaims, error) { // 判断加密算法是预期的加密算法 if _, ok := token.Method.(*jwt.SigningMethodHMAC); ok { secret := config.Get("jwt.secret").(string) - return []byte(secret), nil + return []byte(machine.Code + "@" + secret), nil } return nil, jwt.ErrSignatureInvalid }) From 2b8b305484e52962b8cd22736cb906179c42c954 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 19 Apr 2024 19:59:50 +0800 Subject: [PATCH 032/130] =?UTF-8?q?style:=20=E5=8E=BB=E9=99=A4=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=AE=B0=E5=BD=95=E5=8A=A0=E8=A7=A3=E5=AF=86=E7=9A=84?= =?UTF-8?q?=E7=AE=97=E6=B3=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/repository/ne_host.impl.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/modules/network_element/repository/ne_host.impl.go b/src/modules/network_element/repository/ne_host.impl.go index b1effdc1..fdc9f030 100644 --- a/src/modules/network_element/repository/ne_host.impl.go +++ b/src/modules/network_element/repository/ne_host.impl.go @@ -175,21 +175,21 @@ func (r *NeHostImpl) SelectByIds(hostIds []string) []model.NeHost { for i := range *arr { passwordDe, err := crypto.StringDecryptByAES((*arr)[i].Password) if err != nil { - logger.Errorf("selectById %s StringDecryptByAES : %v", (*arr)[i].HostID, err.Error()) + logger.Errorf("selectById %s decrypt: %v", (*arr)[i].HostID, err.Error()) (*arr)[i].Password = "" } else { (*arr)[i].Password = passwordDe } privateKeyDe, err := crypto.StringDecryptByAES((*arr)[i].PrivateKey) if err != nil { - logger.Errorf("selectById %s StringDecryptByAES : %v", (*arr)[i].HostID, err.Error()) + logger.Errorf("selectById %s decrypt: %v", (*arr)[i].HostID, err.Error()) (*arr)[i].PrivateKey = "" } else { (*arr)[i].PrivateKey = privateKeyDe } passPhraseDe, err := crypto.StringDecryptByAES((*arr)[i].PassPhrase) if err != nil { - logger.Errorf("selectById %s StringDecryptByAES : %v", (*arr)[i].HostID, err.Error()) + logger.Errorf("selectById %s decrypt: %v", (*arr)[i].HostID, err.Error()) (*arr)[i].PassPhrase = "" } else { (*arr)[i].PassPhrase = passPhraseDe @@ -265,7 +265,7 @@ func (r *NeHostImpl) Insert(neHost model.NeHost) string { if neHost.Password != "" { passwordEn, err := crypto.StringEncryptByAES(neHost.Password) if err != nil { - logger.Errorf("insert StringEncryptByAES : %v", err.Error()) + logger.Errorf("insert encrypt: %v", err.Error()) return "" } params["password"] = passwordEn @@ -273,7 +273,7 @@ func (r *NeHostImpl) Insert(neHost model.NeHost) string { if neHost.PrivateKey != "" { privateKeyEn, err := crypto.StringEncryptByAES(neHost.PrivateKey) if err != nil { - logger.Errorf("insert StringEncryptByAES : %v", err.Error()) + logger.Errorf("insert encrypt: %v", err.Error()) return "" } params["private_key"] = privateKeyEn @@ -281,7 +281,7 @@ func (r *NeHostImpl) Insert(neHost model.NeHost) string { if neHost.PassPhrase != "" { passPhraseEn, err := crypto.StringEncryptByAES(neHost.PassPhrase) if err != nil { - logger.Errorf("insert StringEncryptByAES : %v", err.Error()) + logger.Errorf("insert encrypt: %v", err.Error()) return "" } params["pass_phrase"] = passPhraseEn @@ -363,7 +363,7 @@ func (r *NeHostImpl) Update(neHost model.NeHost) int64 { if neHost.Password != "" { passwordEn, err := crypto.StringEncryptByAES(neHost.Password) if err != nil { - logger.Errorf("update StringEncryptByAES : %v", err.Error()) + logger.Errorf("update encrypt: %v", err.Error()) return 0 } params["password"] = passwordEn @@ -371,7 +371,7 @@ func (r *NeHostImpl) Update(neHost model.NeHost) int64 { if neHost.PrivateKey != "" { privateKeyEn, err := crypto.StringEncryptByAES(neHost.PrivateKey) if err != nil { - logger.Errorf("update StringEncryptByAES : %v", err.Error()) + logger.Errorf("update encrypt: %v", err.Error()) return 0 } params["private_key"] = privateKeyEn @@ -379,7 +379,7 @@ func (r *NeHostImpl) Update(neHost model.NeHost) int64 { if neHost.PassPhrase != "" { passPhraseEn, err := crypto.StringEncryptByAES(neHost.PassPhrase) if err != nil { - logger.Errorf("update StringEncryptByAES : %v", err.Error()) + logger.Errorf("update encrypt: %v", err.Error()) return 0 } params["pass_phrase"] = passPhraseEn From 6b4ad6d59d9cc4d232f5c3b4d735a92fa30403d3 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 19 Apr 2024 20:00:59 +0800 Subject: [PATCH 033/130] =?UTF-8?q?feat:=20=E9=A6=96=E6=AC=A1=E5=BC=95?= =?UTF-8?q?=E5=AF=BC=E5=AE=89=E8=A3=85=E5=BC=80=E5=A7=8B=E5=92=8C=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E7=9A=84=E8=A7=A6=E5=8F=91=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/common/common.go | 6 ++ src/modules/common/controller/launch.go | 110 +++++++++++++++++++++ src/modules/common/service/commont.impl.go | 12 +++ 3 files changed, 128 insertions(+) create mode 100644 src/modules/common/controller/launch.go diff --git a/src/modules/common/common.go b/src/modules/common/common.go index b25d8e08..d08e68c5 100644 --- a/src/modules/common/common.go +++ b/src/modules/common/common.go @@ -25,6 +25,12 @@ func Setup(router *gin.Engine) { // 系统可暴露的配置信息 indexGroup.GET("/sys-conf", controller.NewCommont.SysConfig) + // 首次引导安装 + guideGroup := router.Group("/guide") + { + guideGroup.POST("", controller.NewLaunch.GuideStart) + guideGroup.PUT("", middleware.PreAuthorize(nil), controller.NewLaunch.GuideDone) + } // 验证码操作处理 indexGroup.GET("/captchaImage", diff --git a/src/modules/common/controller/launch.go b/src/modules/common/controller/launch.go new file mode 100644 index 00000000..ed3d4523 --- /dev/null +++ b/src/modules/common/controller/launch.go @@ -0,0 +1,110 @@ +package controller + +import ( + "time" + + adminConstants "be.ems/src/framework/constants/admin" + tokenConstants "be.ems/src/framework/constants/token" + "be.ems/src/framework/utils/ctx" + "be.ems/src/framework/utils/machine" + tokenUtils "be.ems/src/framework/utils/token" + "be.ems/src/framework/vo" + "be.ems/src/framework/vo/result" + commonService "be.ems/src/modules/common/service" + systemService "be.ems/src/modules/system/service" + "github.com/gin-gonic/gin" +) + +// 实例化控制层 LaunchController 结构体 +var NewLaunch = &LaunchController{ + accountService: commonService.NewAccountImpl, + sysUserService: systemService.NewSysUserImpl, +} + +// 首次启动安装 +// +// PATH /launch +type LaunchController struct { + // 账号身份操作服务 + accountService commonService.IAccount + // 用户信息服务 + sysUserService systemService.ISysUser +} + +// 首次引导安装开始 +// +// POST /guide +func (s *LaunchController) GuideStart(c *gin.Context) { + // 是否完成引导 + launchInfo := machine.LaunchInfo + if launchInfo == nil { + c.JSON(200, result.Err(nil)) + return + } + if v, ok := launchInfo["sysGuide"]; ok && !v.(bool) { + c.JSON(200, result.ErrMsg("guide done")) + return + } + + // 查询用户登录账号 + sysUser := s.sysUserService.SelectUserById("1") + if sysUser.UserID != "1" { + c.JSON(200, result.ErrMsg("not found user data")) + return + } + + // 登录用户信息 + loginUser := vo.LoginUser{ + UserID: sysUser.UserID, + DeptID: sysUser.DeptID, + User: sysUser, + Permissions: []string{adminConstants.PERMISSION}, + } + + // 当前请求信息 + ipaddr, location := ctx.IPAddrLocation(c) + os, browser := ctx.UaOsBrowser(c) + + // 生成令牌,创建系统访问记录 + tokenStr := tokenUtils.Create(&loginUser, ipaddr, location, os, browser) + if tokenStr == "" { + c.JSON(200, result.Err(nil)) + return + } else { + s.accountService.UpdateLoginDateAndIP(&loginUser) + } + + c.JSON(200, result.OkData(map[string]any{ + tokenConstants.RESPONSE_FIELD: tokenStr, + })) +} + +// 首次引导安装完成 +// +// PUT /guide +func (s *LaunchController) GuideDone(c *gin.Context) { + // 是否完成引导 + launchInfo := machine.LaunchInfo + if launchInfo == nil { + c.JSON(200, result.Err(nil)) + return + } + if v, ok := launchInfo["sysGuide"]; ok && !v.(bool) { + c.JSON(200, result.ErrMsg("guide done")) + return + } + + // 记录完成时间 + err := machine.SetLaunchInfo(map[string]any{ + "sysGuide": false, // 首次引导 + "sysGuideTime": time.Now().UnixMilli(), // 引导完成时间 + }) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + + // 清除授权信息 + tokenUtils.Remove(ctx.Authorization(c)) + c.JSON(200, result.Ok(nil)) +} diff --git a/src/modules/common/service/commont.impl.go b/src/modules/common/service/commont.impl.go index 6273ab33..fc94db06 100644 --- a/src/modules/common/service/commont.impl.go +++ b/src/modules/common/service/commont.impl.go @@ -5,6 +5,7 @@ import ( "be.ems/lib/global" "be.ems/src/framework/config" + "be.ems/src/framework/utils/machine" systemService "be.ems/src/modules/system/service" ) @@ -29,6 +30,17 @@ func (s *CommontImpl) SystemConfigInfo() map[string]string { infoMap["version"] = global.Version infoMap["buildTime"] = global.BuildTime infoMap["goVer"] = global.GoVer + // 系统首次使用标记 + launchInfo := machine.LaunchInfo + if launchInfo != nil { + if v, ok := launchInfo["sysGuide"]; ok { + infoMap["sysGuide"] = fmt.Sprint(v) + } else { + infoMap["sysGuide"] = "true" + } + } else { + infoMap["sysGuide"] = "true" + } // 序列号 infoMap["serialNum"] = fmt.Sprint(config.Get("omc.sn")) // 获取LOGO类型 From d164dc7ca55eea536dd4c240c72d870ad4ce7c5e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 19 Apr 2024 20:16:54 +0800 Subject: [PATCH 034/130] =?UTF-8?q?style:=20=E7=A7=BB=E9=99=A4aes=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=E5=AD=97=E8=8A=82=E5=BA=8F=E5=88=97=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/machine/launch.go | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/framework/utils/machine/launch.go b/src/framework/utils/machine/launch.go index 701b0b9f..35d47403 100644 --- a/src/framework/utils/machine/launch.go +++ b/src/framework/utils/machine/launch.go @@ -1,7 +1,6 @@ package machine import ( - "crypto/rand" "encoding/json" "fmt" "hash/fnv" @@ -112,18 +111,6 @@ func Launch() { } codeFileWrite(LaunchInfo) } else { - // 创建一个用于存储密钥的字节数组 - key := make([]byte, 32) - - // 使用crypto/rand包生成安全的随机字节序列 - _, err := rand.Read(key) - if err != nil { - fmt.Println("Error generating random key:", err) - return - } - - // 将随机生成的字节序列作为密钥打印出来 - fmt.Printf("Generated AES-256 key: %x\n", key) // 读取记录文件 data, err := codeFileRead() if err != nil { From 75007afabb1b74dc28bf16c7168b87fa0bb274f6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 22 Apr 2024 10:13:11 +0800 Subject: [PATCH 035/130] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E5=86=85?= =?UTF-8?q?=E5=AD=98=E6=80=BB=E5=AE=B9=E9=87=8F=E7=9A=84=E7=BB=84=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/machine/launch.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/framework/utils/machine/launch.go b/src/framework/utils/machine/launch.go index 35d47403..6f6e2086 100644 --- a/src/framework/utils/machine/launch.go +++ b/src/framework/utils/machine/launch.go @@ -11,7 +11,6 @@ import ( "be.ems/src/framework/logger" "be.ems/src/framework/utils/crypto" "be.ems/src/framework/utils/parse" - "github.com/shirou/gopsutil/mem" ) // 机器的唯一标识符 @@ -39,10 +38,6 @@ func codeGenerate() string { osInfo := runtime.GOOS machineID += osInfo - // 获取内存信息 - memInfo, _ := mem.VirtualMemory() - machineID += fmt.Sprintf("%d", memInfo.Total) - // 使用哈希函数生成机器码 h := fnv.New32a() h.Write([]byte(machineID)) From 3ea6285112534ba2491c97ab9542a6b328d5eb3f Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Apr 2024 15:35:12 +0800 Subject: [PATCH 036/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=96=B0=E5=A2=9E=E8=BF=94=E5=9B=9E=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E7=9A=84ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/controller/ne_info.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index 53005ee0..116c3f14 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -338,7 +338,7 @@ func (s *NeInfoController) Add(c *gin.Context) { body.UpdateBy = loginUserName insertId := s.neInfoService.Insert(body) if insertId != "" { - c.JSON(200, result.Ok(nil)) + c.JSON(200, result.OkData(insertId)) return } c.JSON(200, result.Err(nil)) From 03c3520279772d1429406efbb1f019cd21fb8f98 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Apr 2024 15:35:57 +0800 Subject: [PATCH 037/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E6=B5=8B?= =?UTF-8?q?=E8=AF=95telnet=E8=BF=9E=E6=8E=A5=E7=9A=84=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/controller/ne_host.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/modules/network_element/controller/ne_host.go b/src/modules/network_element/controller/ne_host.go index 3aad7628..d24ee3ae 100644 --- a/src/modules/network_element/controller/ne_host.go +++ b/src/modules/network_element/controller/ne_host.go @@ -203,7 +203,12 @@ func (s *NeHostController) Test(c *gin.Context) { return } defer client.Close() - c.JSON(200, result.Ok(nil)) + if strings.HasSuffix(client.LastResult, "> ") { + c.JSON(200, result.Ok(nil)) + } else { + // 连接主机失败,请检查连接参数后重试 + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo"))) + } return } } From ee22d66f86b8f7845ca6126e226c775657804c85 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Apr 2024 15:36:55 +0800 Subject: [PATCH 038/130] =?UTF-8?q?pref:=20telnet=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=9A=84=E4=BF=A1=E6=81=AF=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/telnet/telnet.go | 65 ++++++---------------------- 1 file changed, 13 insertions(+), 52 deletions(-) diff --git a/src/framework/utils/telnet/telnet.go b/src/framework/utils/telnet/telnet.go index ad2c6b48..fb3c5c4b 100644 --- a/src/framework/utils/telnet/telnet.go +++ b/src/framework/utils/telnet/telnet.go @@ -42,6 +42,10 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) { return nil, err } + // 需要确保接收方理解并正确处理发送窗口大小设置命令 + client.Write([]byte{255, 251, 31}) // 发送窗口大小选项 + client.Write([]byte{255, 250, 31, 0, 128, 0, 120, 255, 240}) // 发送窗口行和列的大小 + // 进行登录 time.Sleep(100 * time.Millisecond) client.Write([]byte(c.User + "\r\n")) @@ -49,8 +53,10 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) { client.Write([]byte(c.Password + "\r\n")) // fmt.Fprintln(client, c.User) // fmt.Fprintln(client, c.Password) - c.Client = &client + + // 排空连接登录的信息 + c.RunCMD("") return c, nil } @@ -70,32 +76,14 @@ func (c *ConnTelnet) RunCMD(cmd string) (string, error) { var buf bytes.Buffer tmp := make([]byte, 1024) - // 排空连接登录的信息 - for { - // 设置读取超时时间为100毫秒 - conn.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) - n, err := conn.Read(tmp) - if err != nil { - // 判断是否是超时错误 - if netErr, ok := err.(net.Error); ok && netErr.Timeout() { - break - } - break - } - if n == 0 { - break - } - buf.Write(tmp[:n]) - } - buf.Reset() - // 写入命令 - _, err := conn.Write([]byte(cmd)) - if err != nil { - return "", err + if cmd != "" { + if _, err := conn.Write([]byte(cmd)); err != nil { + return "", err + } } - // 读取本次响应命令消息 + // 读取命令消息 for { // 设置读取超时时间为1000毫秒 conn.SetReadDeadline(time.Now().Add(1000 * time.Millisecond)) @@ -123,35 +111,8 @@ func (c *ConnTelnet) NewClientSession(cols, rows uint8) (*TelnetClientSession, e if c.Client == nil { return nil, fmt.Errorf("telnet client not connected") } - conn := *c.Client - - // 需要确保接收方理解并正确处理发送窗口大小设置命令 - conn.Write([]byte{255, 251, 31}) // 发送窗口大小选项 - conn.Write([]byte{255, 250, 31, 0, rows, 0, cols, 255, 240}) // 发送窗口行和列的大小 - - var buf bytes.Buffer - tmp := make([]byte, 1024) - // 排空连接登录的信息 - for { - // 设置读取超时时间为5毫秒 - conn.SetReadDeadline(time.Now().Add(5 * time.Millisecond)) - n, err := conn.Read(tmp) - if err != nil { - // 判断是否是超时错误 - if netErr, ok := err.(net.Error); ok && netErr.Timeout() { - break - } - break - } - if n == 0 { - break - } - buf.Write(tmp[:n]) - } - buf.Reset() - return &TelnetClientSession{ - Client: conn, + Client: *c.Client, }, nil } From a36af385974d9e0abce601232aa1e6ecd924dd8d Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Apr 2024 15:37:36 +0800 Subject: [PATCH 039/130] =?UTF-8?q?fix:=20ssg=E6=8E=88=E6=9D=83=E5=AF=86?= =?UTF-8?q?=E9=92=A5=E7=9A=84=E6=93=8D=E4=BD=9C=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/ssh/ssh.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/framework/utils/ssh/ssh.go b/src/framework/utils/ssh/ssh.go index 7790f17d..1cb41b59 100644 --- a/src/framework/utils/ssh/ssh.go +++ b/src/framework/utils/ssh/ssh.go @@ -135,8 +135,12 @@ func (c *ConnSSH) SendToAuthorizedKeys() error { return err } authorizedKeysEntry := fmt.Sprintln(strings.TrimSpace(publicKey)) - cmdStr := "echo '" + authorizedKeysEntry + "' >> ~/.ssh/authorized_keys" - _, err = c.RunCMD(cmdStr) + cmdStrArr := []string{ + fmt.Sprintf("sudo chown %s:%s /home/%s/.ssh && sudo chmod 700 /home/%s/.ssh", c.User, c.User, c.User, c.User), + fmt.Sprintf("sudo chown %s:%s /home/%s/.ssh/authorized_keys && sudo chmod 600 /home/%s/.ssh/authorized_keys", c.User, c.User, c.User, c.User), + fmt.Sprintf("sudo echo '%s' >> ~/.ssh/authorized_keys", authorizedKeysEntry), + } + _, err = c.RunCMD(strings.Join(cmdStrArr, " && ")) if err != nil { logger.Errorf("SendAuthorizedKeys echo err %s", err.Error()) return err From a9af655d6341a5586597a2c95f564c71931bf518 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 25 Apr 2024 14:23:50 +0800 Subject: [PATCH 040/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=93=8D=E4=BD=9C=E6=94=AF=E6=8C=81install?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_version.go | 8 +- .../network_element/service/ne_version.go | 2 +- .../service/ne_version.impl.go | 94 +++++++++++++++---- 3 files changed, 81 insertions(+), 23 deletions(-) diff --git a/src/modules/network_element/controller/ne_version.go b/src/modules/network_element/controller/ne_version.go index 06e8cbc8..d18a8bb1 100644 --- a/src/modules/network_element/controller/ne_version.go +++ b/src/modules/network_element/controller/ne_version.go @@ -157,10 +157,10 @@ func (s *NeVersionController) Remove(c *gin.Context) { func (s *NeVersionController) Operate(c *gin.Context) { language := ctx.AcceptLanguage(c) var body struct { - Action string `json:"action" binding:"required,oneof=upgrade rollback"` // 操作行为 - NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型 - NeId string `json:"neId" gorm:"ne_id" binding:"required"` // 网元ID - Preinput map[string]string `json:"preinput" ` // 预先输入参数 + Action string `json:"action" binding:"required,oneof=install upgrade rollback"` // 操作行为 + NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型 + NeId string `json:"neId" gorm:"ne_id" binding:"required"` // 网元ID + Preinput map[string]string `json:"preinput" ` // 预先输入参数 } if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) diff --git a/src/modules/network_element/service/ne_version.go b/src/modules/network_element/service/ne_version.go index 09090f9f..ed04f0ed 100644 --- a/src/modules/network_element/service/ne_version.go +++ b/src/modules/network_element/service/ne_version.go @@ -30,6 +30,6 @@ type INeVersion interface { // Operate 操作版本上传到网元主机执行命令 // - // action 安装行为:upgrade rollback + // action 安装行为:install upgrade rollback Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) } diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 1b4b105c..38f40bd0 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "path/filepath" + "runtime" "strings" "time" @@ -97,10 +98,10 @@ func (r *NeVersionImpl) CheckUniqueTypeAndID(neType, neId, id string) bool { // Operate 操作版本上传到网元主机执行命令 // -// action 安装行为:upgrade rollback +// action 安装行为:install upgrade rollback func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) { softwarePath := neVersion.Path - if action == "upgrade" { + if action == "install" || action == "upgrade" { softwarePath = neVersion.NewPath } if action == "rollback" { @@ -136,6 +137,25 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp return "", fmt.Errorf("error uploading package") } + if action == "install" { + // ========= para5G公共参数文件 start ========= + // 网管本地路径 + omcPara5GFilePath := "/usr/local/etc/omc/para5G.yaml" + if runtime.GOOS == "windows" { + omcPara5GFilePath = fmt.Sprintf("C:%s", omcPara5GFilePath) + } + // 网元端配置路径 + nePara5GFilePath := "/usr/local/etc/conf/para5G.yaml" + nePara5GFileDir := filepath.Dir(nePara5GFilePath) + // 修改网元文件权限 + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", nePara5GFileDir, nePara5GFileDir, nePara5GFilePath)) + // 复制到网元进行覆盖 + if err = sftpClient.CopyFileLocalToRemote(omcPara5GFilePath, nePara5GFilePath); err != nil { + return "", fmt.Errorf("please check if scp remote copy is allowed") + } + // ========= para5G公共参数文件 end ========= + } + // ========= 安装命令 start ========= // 命令终止结束标记 okFlagStr := fmt.Sprintf("%s version %s successful!", neVersion.NeType, action) @@ -149,27 +169,52 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp // 预先参数 cmdStrArr := []string{} if neVersion.NeType == "OMC" { - cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh stop") cmdStrArr = append(cmdStrArr, pkgCmdStr) - cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m upgrade") // 升级数据库 + if action == "install" { + cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m install") // 初始化数据库 + } else { + cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh stop") + cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m upgrade") // 升级数据库 + } cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart") - return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 15s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && "))) + return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 3s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && "))) } else if neVersion.NeType == "IMS" { if !strings.Contains(strings.ToLower(fileName), "ims") { return "", fmt.Errorf("error file package not ims") } - cmdStrArr = append(cmdStrArr, "sudo ims-stop \n") - cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") - // P/I/S-CSCF Config 配置覆盖 - if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("%s \n", pisCSCF)) + if action == "install" { + cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + cmdStrArr = append(cmdStrArr, "sudo ims-stop && sudo ims-start") + // 公网 PLMN地址 + pubIP, pubIPOk := preinput["pubIP"] + mcc, mccOk := preinput["mcc"] + mnc, mncOk := preinput["mnc"] + if pubIPOk && pubIP != "" && mccOk && mcc != "" && mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", pubIP, mcc, mnc)) + } + // 内网 服务地址 + if priIP, ok := preinput["priIP"]; ok && priIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", priIP)) + } + // 30s后停止服务 + cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") + } else { + cmdStrArr = append(cmdStrArr, "sudo ims-stop \n") + cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + cmdStrArr = append(cmdStrArr, "sudo ims-start \n") } - cmdStrArr = append(cmdStrArr, "sudo ims-start \n") } else { neTypeLower := strings.ToLower(neVersion.NeType) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s stop \n", neTypeLower)) - cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) + if action == "install" { + cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) + // 30s后停止服务 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) + } else { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s stop \n", neTypeLower)) + cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) + } } // 删除软件包 @@ -208,11 +253,13 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp if !firstRead { logMsg += outputStr } - // IMS预输入 + // IMS预输入 P/I/S-CSCF Config 配置覆盖 if neVersion.NeType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? ") { - shiftElement := cmdStrArr[0] // 获取第一个元素 - cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除 - clientSession.Write(shiftElement) + if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { + clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) + } else { + clientSession.Write("y \n") + } continue } // 命令终止符后继续执行命令 @@ -244,6 +291,17 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp curName := verInfo.Name curVersion := verInfo.Version curPath := verInfo.Path + if action == "install" { + verInfo.Name = neVersion.NewName + verInfo.Version = neVersion.NewVersion + verInfo.Path = neVersion.NewPath + verInfo.PreName = "-" + verInfo.PreVersion = "-" + verInfo.PrePath = "-" + verInfo.NewName = "-" + verInfo.NewVersion = "-" + verInfo.NewPath = "-" + } if action == "upgrade" { verInfo.Name = neVersion.NewName verInfo.Version = neVersion.NewVersion From 965bb899ac46aadc019b0a469eefceaebfcede14 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 25 Apr 2024 14:24:34 +0800 Subject: [PATCH 041/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E5=8C=85=E6=96=B0=E5=A2=9E=E6=89=BE=E5=88=B0=E5=B7=B2?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E7=9A=84=E5=88=A0=E9=99=A4=E5=90=8E=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_software.go | 25 +++++++++++++------ .../service/ne_software.impl.go | 6 ++--- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/modules/network_element/controller/ne_software.go b/src/modules/network_element/controller/ne_software.go index 94ecc1fc..5a60173f 100644 --- a/src/modules/network_element/controller/ne_software.go +++ b/src/modules/network_element/controller/ne_software.go @@ -69,15 +69,26 @@ func (s *NeSoftwareController) Add(c *gin.Context) { return } - // 检查属性值唯一 - uniqueSoftware := s.neSoftwareService.CheckUniqueTypeAndNameAndVersion(body.NeType, body.Name, body.Version, "") - if !uniqueSoftware { - // 网元软件包操作【%s】失败,网元类型与文件名版本已存在 - msg := i18n.TTemplate(language, "neSoftware.errKeyExists", map[string]any{"name": body.Name}) - c.JSON(200, result.ErrMsg(msg)) - return + // 找到已存在的删除后重新添加 + neSoftwares := s.neSoftwareService.SelectList(model.NeSoftware{ + NeType: body.NeType, + Name: body.Name, + Version: body.Version, + }) + if len(neSoftwares) > 0 { + neSoftware := neSoftwares[0] + s.neSoftwareService.DeleteByIds([]string{neSoftware.ID}) } + // 检查属性值唯一 + // uniqueSoftware := s.neSoftwareService.CheckUniqueTypeAndNameAndVersion(body.NeType, body.Name, body.Version, "") + // if !uniqueSoftware { + // // 网元软件包操作【%s】失败,网元类型与文件名版本已存在 + // msg := i18n.TTemplate(language, "neSoftware.errKeyExists", map[string]any{"name": body.Name}) + // c.JSON(200, result.ErrMsg(msg)) + // return + // } + body.CreateBy = ctx.LoginUserToUserName(c) insertId := s.neSoftwareService.Insert(body) if insertId != "" { diff --git a/src/modules/network_element/service/ne_software.impl.go b/src/modules/network_element/service/ne_software.impl.go index 0f0ede9f..0fea558e 100644 --- a/src/modules/network_element/service/ne_software.impl.go +++ b/src/modules/network_element/service/ne_software.impl.go @@ -71,14 +71,14 @@ func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 { if rows > 0 { // 更新同类型的新包版本 neVersions := NewNeVersionImpl.SelectList(model.NeVersion{ - NeType: neSoftware.NeType, - NewPath: neSoftware.Path, - Status: "3", + NeType: neSoftware.NeType, + Status: "3", }) if len(neVersions) > 0 { for _, neVersion := range neVersions { neVersion.NewName = neSoftware.Name neVersion.NewVersion = neSoftware.Version + neVersion.NewPath = neSoftware.Path neVersion.Status = "3" neVersion.UpdateBy = neSoftware.UpdateBy NewNeVersionImpl.Update(neVersion) From d4f2cdb1be51908eebf2039f8b2ed74151c3158a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 25 Apr 2024 14:25:11 +0800 Subject: [PATCH 042/130] =?UTF-8?q?style:=20=E7=BD=91=E5=85=83=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E6=96=87=E4=BB=B6para5G=E8=B7=AF=E5=BE=84=E5=8F=98?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_info.impl.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index c60a8506..c97e8a24 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -491,7 +491,7 @@ func (r *NeInfoImpl) NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType s // 返回 string map[string]any func (r *NeInfoImpl) NeConfPara5GRead(fileType string) any { // 网管本地路径 - omcFilePath := "/usr/local/omc/etc/para5G.yaml" + omcFilePath := "/usr/local/etc/omc/para5G.yaml" if runtime.GOOS == "windows" { omcFilePath = fmt.Sprintf("C:%s", omcFilePath) } @@ -517,7 +517,7 @@ func (r *NeInfoImpl) NeConfPara5GRead(fileType string) any { // NeConfPara5GWirte 网元公共配置文件写入 content内容 syncNE同步到网元端NeType@NeId func (r *NeInfoImpl) NeConfPara5GWirte(fileType string, content any, syncNE []string) error { // 网管本地路径 - omcFilePath := "/usr/local/omc/etc/para5G.yaml" + omcFilePath := "/usr/local/etc/omc/para5G.yaml" if runtime.GOOS == "windows" { omcFilePath = fmt.Sprintf("C:%s", omcFilePath) } From 4e33857f6628d00a0043e52b036d03a5465039cc Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 25 Apr 2024 17:19:57 +0800 Subject: [PATCH 043/130] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9EOAM=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=A1=B5=E9=9D=A2=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/i18n_data.xlsx | Bin 105748 -> 106381 bytes config/locales/i18n_table.xlsx | Bin 55968 -> 56070 bytes database/upgrade/upg_sys_menu.sql | 1 + 3 files changed, 1 insertion(+) diff --git a/config/locales/i18n_data.xlsx b/config/locales/i18n_data.xlsx index 442153a0b1ae69cf97f79cf80d8bb52c17f59e70..0c3444be5e8b01dbaab53c94bb02fc034bdfed58 100644 GIT binary patch literal 106381 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

    P=&A<_L$bjlU&kz&o00#7CTiYP@0~8<) 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 &wh^Q$Me|`=>15b)=RM}?hCAIZ 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%0AdvZ02BZK0C;RKb7*05 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 diff --git a/config/locales/i18n_table.xlsx b/config/locales/i18n_table.xlsx index 9cf560d47e7f293eb1e82e0e50a1c65a5842877e..acf516f54d57511d21ce095e7fef7258ca989a41 100644 GIT binary patch delta 43361 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 delta 43214 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 Date: Thu, 25 Apr 2024 17:21:48 +0800 Subject: [PATCH 044/130] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83OAM=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E8=AF=BB=E5=86=99=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=92=8C=E9=83=A8=E5=88=86=E6=8E=A5=E5=8F=A3=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_info.go | 79 +++++++++++--- .../network_element/network_element.go | 9 ++ .../network_element/service/ne_info.go | 12 ++- .../network_element/service/ne_info.impl.go | 101 ++++++++++++++---- .../service/ne_version.impl.go | 2 +- 5 files changed, 166 insertions(+), 37 deletions(-) diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index 116c3f14..9c89d192 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -204,31 +204,86 @@ func (s *NeInfoController) ConfigFileWrite(c *gin.Context) { c.JSON(200, result.Ok(nil)) } -// 网元端公共配置文件读取 +// 网元端OAM配置文件读取 // -// GET /para5GFile -func (s *NeInfoController) Para5GFileRead(c *gin.Context) { - fileType := c.Query("fileType") - data := s.neInfoService.NeConfPara5GRead(fileType) +// GET /oamFile +func (s *NeInfoController) OAMFileRead(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var querys struct { + NeType string `form:"neType" binding:"required"` + NeID string `form:"neId" binding:"required"` + } + if err := c.ShouldBindQuery(&querys); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + data, err := s.neInfoService.NeConfOAMRead(querys.NeType, querys.NeID) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } c.JSON(200, result.OkData(data)) } -// 网元端公共配置文件写入 +// 网元端OAM配置文件写入 // -// PUT /para5GFile -func (s *NeInfoController) Para5GFileWrite(c *gin.Context) { +// PUT /oamFile +func (s *NeInfoController) OAMFileWrite(c *gin.Context) { language := ctx.AcceptLanguage(c) var body struct { - FileType string `json:"fileType" binding:"oneof='' txt json yaml yml"` // 解析内容数据到对应文件类型 - Content any `json:"content" binding:"required"` // 内容 - SyncNE []string `json:"syncNe"` // 同步到网元 + NeType string `json:"neType" binding:"required"` + NeID string `json:"neId" binding:"required"` + Content map[string]any `json:"content" binding:"required"` // 内容 + Sync bool `json:"sync"` // 同步到网元 } if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } - err := s.neInfoService.NeConfPara5GWirte(body.FileType, body.Content, body.SyncNE) + // 查询网元获取IP + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeID) + if neInfo.NeId != body.NeID || neInfo.IP == "" { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + + err := s.neInfoService.NeConfOAMWirte(body.NeType, body.NeID, body.Content, body.Sync) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.JSON(200, result.Ok(nil)) +} + +// 网元端Para5G配置文件读取 +// +// GET /para5GFile +func (s *NeInfoController) Para5GFileRead(c *gin.Context) { + data, err := s.neInfoService.NeConfPara5GRead() + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.JSON(200, result.OkData(data)) +} + +// 网元端Para5G配置文件写入 +// +// PUT /para5GFile +func (s *NeInfoController) Para5GFileWrite(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + Content map[string]any `json:"content" binding:"required"` // 内容 + SyncNE []string `json:"syncNe"` // 同步到网元 + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + err := s.neInfoService.NeConfPara5GWirte(body.Content, body.SyncNE) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index 11d8b9e9..5143a4de 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -67,6 +67,15 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeInfo.ConfigFileWrite, ) + neInfoGroup.GET("/oamFile", + middleware.PreAuthorize(nil), + controller.NewNeInfo.OAMFileRead, + ) + neInfoGroup.PUT("/oamFile", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewNeInfo.OAMFileWrite, + ) neInfoGroup.GET("/para5GFile", middleware.PreAuthorize(nil), controller.NewNeInfo.Para5GFileRead, diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index c8033457..206c3989 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -61,11 +61,15 @@ type INeInfo interface { // NeConfigFileWirte 网元配置文件写入 content内容 sync同步到网元端 NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType string, content any, sync bool) error + // NeConfOAMRead 网元OAM配置文件读取 + NeConfOAMRead(neType, neId string) (map[string]any, error) + + // NeConfOAMWirte 网元OAM配置文件写入 content内容 sync同步到网元端 + NeConfOAMWirte(neType, neId string, content any, sync bool) error + // NeConfPara5GRead 网元公共配置文件读取 - // - // 返回 string map[string]any - NeConfPara5GRead(fileType string) any + NeConfPara5GRead() (map[string]any, error) // NeConfPara5GWirte 网元公共配置文件写入 content内容 syncNE同步到网元端NeType@NeId - NeConfPara5GWirte(fileType string, content any, syncNE []string) error + NeConfPara5GWirte(content map[string]any, syncNE []string) error } diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index c97e8a24..2680dd53 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -486,10 +486,80 @@ func (r *NeInfoImpl) NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType s return nil } +// NeConfOAMRead 网元OAM配置文件读取 +func (r *NeInfoImpl) NeConfOAMRead(neType, neId string) (map[string]any, error) { + neTypeLower := strings.ToLower(neType) + // 网管本地路径 + omcPath := "/usr/local/etc/omc/ne_config" + if runtime.GOOS == "windows" { + omcPath = fmt.Sprintf("C:%s", omcPath) + } + localFilePath := fmt.Sprintf("%s/%s/%s/%s", omcPath, neTypeLower, neId, "oam_manager.yaml") + + // 读取文件内容 + bytes, err := os.ReadFile(localFilePath) + if err != nil { + logger.Warnf("NeConfOAMRead ReadFile => %s", err.Error()) + return nil, fmt.Errorf("read file error") + } + content := string(bytes) + + // 序列化Map + mapData, err := parse.ConvertConfigToMap("yaml", content) + if err != nil { + logger.Warnf("NeConfOAMRead ConvertConfigToMap => %s", err.Error()) + return nil, fmt.Errorf("content convert type error") + } + return mapData, nil +} + +// NeConfOAMWirte 网元OAM配置文件写入 content内容 sync同步到网元端 +func (r *NeInfoImpl) NeConfOAMWirte(neType, neId string, content any, sync bool) error { + neTypeLower := strings.ToLower(neType) + fileName := "oam_manager.yaml" + // 网管本地路径 + omcPath := "/usr/local/etc/omc/ne_config" + if runtime.GOOS == "windows" { + omcPath = fmt.Sprintf("C:%s", omcPath) + } + localFilePath := fmt.Sprintf("%s/%s/%s/%s", omcPath, neTypeLower, neId, fileName) + + // 写入文件 + if err := parse.ConvertConfigToFile("yaml", localFilePath, content); err != nil { + return fmt.Errorf("please check if the file exists or write permissions") + } + + // 同步到网元端 + if sync { + // 网元主机的SSH客户端 + sshClient, err := r.NeRunSSHclient(neType, neId) + if err != nil { + return err + } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + return err + } + defer sftpClient.Close() + + // 网元端配置路径 + neFilePath := fmt.Sprintf("/usr/local/etc/%s/%s", neTypeLower, fileName) + neFileDir := filepath.Dir(neFilePath) + // 修改网元文件权限 + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath)) + // 复制到网元进行覆盖 + if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { + return fmt.Errorf("please check if scp remote copy is allowed") + } + } + + return nil +} + // NeConfPara5GRead 网元公共配置文件读取 -// -// 返回 string map[string]any -func (r *NeInfoImpl) NeConfPara5GRead(fileType string) any { +func (r *NeInfoImpl) NeConfPara5GRead() (map[string]any, error) { // 网管本地路径 omcFilePath := "/usr/local/etc/omc/para5G.yaml" if runtime.GOOS == "windows" { @@ -499,37 +569,28 @@ func (r *NeInfoImpl) NeConfPara5GRead(fileType string) any { bytes, err := os.ReadFile(omcFilePath) if err != nil { logger.Warnf("NeConfPara5GRead ReadFile => %s", err.Error()) - return "read file error" + return nil, fmt.Errorf("read file error") } content := string(bytes) - if fileType == "" || fileType == "txt" { - return content - } + // 序列化Map - mapData, err := parse.ConvertConfigToMap(fileType, content) + mapData, err := parse.ConvertConfigToMap("yaml", content) if err != nil { logger.Warnf("NeConfPara5GRead ConvertConfigToMap => %s", err.Error()) - return "content convert type error" + return nil, fmt.Errorf("content convert type error") } - return mapData + return mapData, nil } // NeConfPara5GWirte 网元公共配置文件写入 content内容 syncNE同步到网元端NeType@NeId -func (r *NeInfoImpl) NeConfPara5GWirte(fileType string, content any, syncNE []string) error { +func (r *NeInfoImpl) NeConfPara5GWirte(content map[string]any, syncNE []string) error { // 网管本地路径 omcFilePath := "/usr/local/etc/omc/para5G.yaml" if runtime.GOOS == "windows" { omcFilePath = fmt.Sprintf("C:%s", omcFilePath) } - var err error - if fileType == "" || fileType == "txt" { - err = parse.ConvertConfigToFile(fileType, omcFilePath, content) - } - if fileType == "json" || fileType == "yaml" || fileType == "yml" { - err = parse.ConvertConfigToFile(fileType, omcFilePath, content) - } - if err != nil { + if err := parse.ConvertConfigToFile("yaml", omcFilePath, content); err != nil { return fmt.Errorf("please check if the file exists or write permissions") } @@ -555,7 +616,7 @@ func (r *NeInfoImpl) NeConfPara5GWirte(fileType string, content any, syncNE []st // 网元端配置路径 neFilePath := "/usr/local/etc/conf/para5G.yaml" - neFileDir := filepath.Dir(neFilePath) + neFileDir := filepath.ToSlash(filepath.Dir(neFilePath)) // 修改网元文件权限 sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath)) // 复制到网元进行覆盖 diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 38f40bd0..79d6d319 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -146,7 +146,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp } // 网元端配置路径 nePara5GFilePath := "/usr/local/etc/conf/para5G.yaml" - nePara5GFileDir := filepath.Dir(nePara5GFilePath) + nePara5GFileDir := filepath.ToSlash(filepath.Dir(nePara5GFilePath)) // 修改网元文件权限 sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", nePara5GFileDir, nePara5GFileDir, nePara5GFilePath)) // 复制到网元进行覆盖 From 588c390395c2a88ab81bba819f6e1ead345029a6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 25 Apr 2024 17:22:14 +0800 Subject: [PATCH 045/130] =?UTF-8?q?fix:=20=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=9B=AE=E5=BD=95=E4=B8=8D=E5=AD=98=E5=9C=A8=E6=97=B6?= =?UTF-8?q?=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/parse/parse.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/framework/utils/parse/parse.go b/src/framework/utils/parse/parse.go index 49758619..82f9ccba 100644 --- a/src/framework/utils/parse/parse.go +++ b/src/framework/utils/parse/parse.go @@ -5,6 +5,7 @@ import ( "fmt" "image/color" "os" + "path/filepath" "reflect" "regexp" "strconv" @@ -181,7 +182,7 @@ func ConvertConfigToMap(configType, content string) (map[string]any, error) { var configMap map[string]interface{} var err error - if configType == "txt" { + if configType == "" || configType == "txt" { configMap = map[string]interface{}{ "txt": content, } @@ -221,5 +222,9 @@ func ConvertConfigToFile(configType, filePath string, data any) error { if err != nil { return err } + + if err := os.MkdirAll(filepath.Dir(filePath), 0750); err != nil { + return err + } return os.WriteFile(filePath, dataByte, 0644) } From b8ee5990c7a063f1a1d79b808c7978f226128054 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 26 Apr 2024 15:08:50 +0800 Subject: [PATCH 046/130] =?UTF-8?q?fix:=20IMS=E6=9C=8D=E5=8A=A1=E9=87=8D?= =?UTF-8?q?=E5=90=AF=E5=91=BD=E4=BB=A4stop=E5=90=8E=E7=BB=A7=E7=BB=ADstart?= =?UTF-8?q?=E5=90=AF=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/controller/ne_action.go | 2 +- src/modules/network_element/service/ne_version.impl.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/controller/ne_action.go b/src/modules/network_element/controller/ne_action.go index 1336e5d6..4aae965a 100644 --- a/src/modules/network_element/controller/ne_action.go +++ b/src/modules/network_element/controller/ne_action.go @@ -184,7 +184,7 @@ func (s *NeActionController) Service(c *gin.Context) { cmdStr = fmt.Sprintf("sudo /usr/local/bin/omcsvc.sh %s", body.Action) } else if neTypeLower == "ims" { if body.Action == "restart" { - cmdStr = "sudo ims-stop && sudo ims-start" + cmdStr = "sudo ims-stop || true && sudo ims-start" } else { cmdStr = fmt.Sprintf("sudo ims-%s", body.Action) } diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 79d6d319..1d8a2737 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -184,7 +184,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp } if action == "install" { cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") - cmdStrArr = append(cmdStrArr, "sudo ims-stop && sudo ims-start") + cmdStrArr = append(cmdStrArr, "sudo ims-stop || true && sudo ims-start") // 公网 PLMN地址 pubIP, pubIPOk := preinput["pubIP"] mcc, mccOk := preinput["mcc"] From f1980b2d9057281879faa0bc1b4207fba7e0ecc3 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 26 Apr 2024 15:09:54 +0800 Subject: [PATCH 047/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E6=9D=83=E9=99=90=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/service/ne_license.impl.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/modules/network_element/service/ne_license.impl.go b/src/modules/network_element/service/ne_license.impl.go index 8e5fc916..9316f0cb 100644 --- a/src/modules/network_element/service/ne_license.impl.go +++ b/src/modules/network_element/service/ne_license.impl.go @@ -3,6 +3,7 @@ package service import ( "fmt" "os" + "path/filepath" "runtime" "strings" "time" @@ -174,17 +175,17 @@ func (r *NeLicenseImpl) UploadLicense(neLicense model.NeLicense) error { // 网元端授权文件路径 neTypeLower := strings.ToLower(neLicense.NeType) - neLicensePath := fmt.Sprintf("/usr/local/etc/%s/license", neTypeLower) - // 修改文件夹权限 - sshClient.RunCMD(fmt.Sprintf("sudo chmod o+w %s/", neLicensePath)) - sshClient.RunCMD(fmt.Sprintf("sudo chmod o+w %s/system.ini", neLicensePath)) + neLicensePath := fmt.Sprintf("/usr/local/etc/%s/license/system.ini", neTypeLower) + neLicenseDir := filepath.ToSlash(filepath.Dir(neLicensePath)) + // 修改网元文件权限 + sshClient.RunCMD(fmt.Sprintf("sudo chmod o+w %s && sudo chmod o+w %s", neLicenseDir, neLicensePath)) + // 尝试备份授权文件 neLicensePathBack := fmt.Sprintf("%s/system_%s.ini", neLicensePath, time.Now().Format("20060102_150405")) sshClient.RunCMD(fmt.Sprintf("sudo cp -rf %s/system.ini %s", neLicensePath, neLicensePathBack)) // 上传授权文件去覆盖 - err = sftpClient.CopyFileLocalToRemote(omcLicensePath, neLicensePath+"/system.ini") - if err != nil { + if err := sftpClient.CopyFileLocalToRemote(omcLicensePath, neLicensePath); err != nil { return err } @@ -192,7 +193,7 @@ func (r *NeLicenseImpl) UploadLicense(neLicense model.NeLicense) error { if neLicense.Reload { cmdStr := fmt.Sprintf("sudo service %s restart", neTypeLower) if neTypeLower == "ims" { - cmdStr = "sudo ims-stop && sudo ims-start" + cmdStr = "sudo ims-stop || true && sudo ims-start" } else if neTypeLower == "omc" { cmdStr = "sudo /usr/local/omc/bin/omcsvc.sh restart" } From 4c89a02557de55d9089a2d26a4a1c7d9debdbd05 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sun, 28 Apr 2024 10:18:22 +0800 Subject: [PATCH 048/130] =?UTF-8?q?fix:=20=E7=99=BB=E5=BD=95telnet?= =?UTF-8?q?=E5=90=8E=E5=9C=A8=E8=AE=BE=E7=BD=AE=E7=AA=97=E5=8F=A3=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/telnet/telnet.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/framework/utils/telnet/telnet.go b/src/framework/utils/telnet/telnet.go index fb3c5c4b..078fd477 100644 --- a/src/framework/utils/telnet/telnet.go +++ b/src/framework/utils/telnet/telnet.go @@ -42,10 +42,6 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) { return nil, err } - // 需要确保接收方理解并正确处理发送窗口大小设置命令 - client.Write([]byte{255, 251, 31}) // 发送窗口大小选项 - client.Write([]byte{255, 250, 31, 0, 128, 0, 120, 255, 240}) // 发送窗口行和列的大小 - // 进行登录 time.Sleep(100 * time.Millisecond) client.Write([]byte(c.User + "\r\n")) @@ -53,6 +49,10 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) { client.Write([]byte(c.Password + "\r\n")) // fmt.Fprintln(client, c.User) // fmt.Fprintln(client, c.Password) + + // 需要确保接收方理解并正确处理发送窗口大小设置命令 + client.Write([]byte{255, 251, 31}) // 发送窗口大小选项 + client.Write([]byte{255, 250, 31, 0, 128, 0, 120, 255, 240}) // 发送窗口行和列的大小 c.Client = &client // 排空连接登录的信息 From d8db8ea79aad95ba73a464b700bd68bf196acb24 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 29 Apr 2024 18:19:27 +0800 Subject: [PATCH 049/130] =?UTF-8?q?style:=20=E7=A7=BB=E9=99=A4OAM=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/i18n_data.xlsx | Bin 106381 -> 106259 bytes config/locales/i18n_table.xlsx | Bin 56070 -> 55984 bytes database/upgrade/upg_sys_menu.sql | 1 - 3 files changed, 1 deletion(-) diff --git a/config/locales/i18n_data.xlsx b/config/locales/i18n_data.xlsx index 0c3444be5e8b01dbaab53c94bb02fc034bdfed58..954448aeee3eb9448e0b967b68566718c6fdb41a 100644 GIT binary patch literal 106259 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 literal 106381 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
      P=&A<_L$bjlU&kz&o00#7CTiYP@0~8<) zRIK@n#RaQB&=>doB1F2#Jo7vjC%)_oc!h7kE7TiJta+Ukv^8G-z0q31EivUorj!@- z8N8qe-~}!2rGEL#Jt;34vSZkOE5jc$J2A1O>>8uB(T2~#{S$ZoET1AhIZyh>gWdT# zjh#fqjn$t)zp)#9JSualFQW?&egvP3V^w!>lzLE|5H7LZY9sgwd4nI+ANgaZ8 zKhFw_pe>L$+-eqP^Dy;U`abrX@o$7sW(^0o0XyVj)}R#He^xyyH<4yVr64PcfAn(} z9b))E$cc>v)=`8wu{PY#+1sy;djAnb(*Z(cL*y*_GxZ_2jl7JXa^V z=gj|N34I__Qh)6YhplJMfstG1To0fxjY)4Pptu5KbvzH55E)M(gd>8H+|h;&p2DVF zqswrnN#=RTvh*U1j=;d^s4ws&DKDFa+p^Z_oItxCFjSXw>!8FFw%F8EC=S3LQC6(S zP@@to@MXxTD~FJJRnb^CnFo|F@Ilui974^OZ((;{sq;GG+1qd%?fpV`#Kp1aketRQ z&$c01jT$_|jv&Ds5Wi8AA^!5aKGN~cLt;q>oGeK9hn#P?NXafH>9Rs1j|vr zP$UqVWH#8iQ=O~J0t+4e!-R{yA$Y-9*?)7f8?q5d%;#~6_>67(+p2wY4&-Ni)~nyI z&b7i)At(bn{?Jw|u%mSnegdQ0klEZ@V!#owB4av@FWL_UR*ew1t510CA1wpEz(8tb zSDWcUu{KkAu{0j=1CSlW#HUy8G;cg&ilu~ud1;Q@AkpXN6=L}#qjS^5i?{cz2R1-i zu9LFZ0o>lPk`-4n`E*@)DohLw%hF;abFD@dKs9j`tg)5KFj_CTeEXU@|!{P#g|qFtk9%myPcl^b@KgA`UD^^6ldk;lfEVT^#R5D=q60+F`)vgCzQUM zPSd?vm$$6`0WbG_opd?m3S!BY&Z;BbmD!L1#JK z76YC4Osc0TZ79K$dh3%E?-5YEk5t8@2`-}ihy_r)GszAq@yo!)mA|8!-#HYICOM#Z zYS6m{is!73o9zeIB7p_QhvR_z!cyJWI-vSV1k|t7WygI+o@^$o6DYPTWxXZ;Er4LpF1yA+rCb z-fVBSaps$?%MjP-F+dJG7xxK3Nes9)Prc;JMkibOOiT>f!IOc4H|WLF6A*D~0y4~g zhNAZ$fywy+OirBOXgS5?tiS6g)6@7be#B>Pwb@HPQ%A%YnPeX{f%UdOmn#^GzYL@l z$(8kKm+LsnqAvxCW1)8sIbLIRbuJKt8ZLTd0)=0O&pY16gQt@vUi~sd+^$O>Ir5-Q z1xj9&i@W&4ryYNT~oRixkDFuKI{ztmV*?d1K&L^U-Z+GO{U#dQ5HoH=HP@0HuOA<9td729Bxk)C zJXzqZAXD3p)Tf5dCS`VOfxCNL#JV5YOZePqL%QI|V#AI9c09Q#qraOA39eoK2{m&l z#sasG1#X{<;`Srdu3?t~lLL!>5$*1HLdo9!)E}tcZAngWwSK8V(;c5cao0>@Wm~zj zF7lLyVOJXECyWLk|9;Z`P}%3ut+nlX8=&TKh6=$q5Uw;{0NBv9x%L`6Zv=mKJC@YK-(ve=~uh+N%gn zuo}3Ff6b?xE2_W6(gNo;mU7^4kx{e@ATE9AN1$Hb@a{GQ1?Y}yYpD&B{VjY00z;!!Dyd2>XZIvQkBB$a8)qTbL+rd4 zAL!U!Nl8L04jY<638cw0Z?|M)iV9yuQv4Rpd@zn-$$#JBe&Uzvy#d3p&v#Wf=gM+C z7APK>Bo0O2YtpA^K=nrzDC~q(f0h37q<2LMV#tBxG{eye42M-?X(GCnar;##8vnCS zt2@<koC!)@ZV}ad8oze$h>#+eEX}!_d1eFQ42f0U& z)K$oGW$3`~XIU%t0CFO2zi>QaDzYQhJ36u!a9l~Idc6ZX%dSO55}!i~XiQT;%u<~6 zVA1b~Kmpt260MK6O1%Rw(6<)f+6&CbyRX%IhvVmRy4R>qw>GaZHJ1Bs?ltjZ37XRt zY1>j_A=ZK`f?oe0bTAa?pf;p~r`jg+Asrl6Pgx0WE~l@0uR{Xk{fE7QB96vJ3FqF% za`1-v1CV7Ukk6F`K35U=T(9@k^_ZOocqI6N;>MC$j89@b_RoeBZ~M{ks9|p9WK7Q9vm4 zpeP^|wgCi#7Pi65f%zm+b*SsxD7XMU=au5vRLJ{55CG(Rf%8)5dQCAxnoCV73Ird% z^G6)jeGpwgeQW#|;{yUlULS6H$mEs@S+GniPm=i}0HS3VQ&pb_gltgEq25DX&NC2W zH8`jKg$DWxyw*ISh|Es~2w2A>O5{WfdyJlqc2OhVJrPaIcHOx*#_|S{YiwAi;ZO5n z`%NJSkZ3jmQgE6ju`tp99gdAC%jJp~#5V_JWF?B#o@~RyY!ry=yZ$S<||50R##9#bC(O}2dx+NJ84wPh^0bx_ljF@|txF-cW z_T;f2o@&FSFfTyF-s9zZ;8Qmv@=0<9;E|#GU}ba-Hk%vx|6|DPEMNqAk`5uSe~QKu zTXU#C0Cq<=X05Bt<(lRCFx?>ggCuxLV=3?fRlJ`kTLGYfx>PIRs|{3e@uv<^R0((L z*rr!=1z-R`1R`YkvXRJ-I3iFYekrs^sAM&;#R7o{HY6i}jgKD_yg$X6QT2#!h(@VL zsEusV?;m%(@0L7mId)3$I@J>s@ee3601#fU$mxFY0+NY#_po#mtZia~oF@k0$z!Z8 zCYUV`Z(8hsAAGePpMPvObyr=JVwhj}%E>u0DK~AKrQn+PY-^UR z+W4uZlb79~V>i1dH!9}lkk;WK;UKX}>Gl;SWvm%xdyVdtuJ%Nwo1%DPyij`Y1dw>m z&m#zdEtyM%R|+aVu4?feG#NSX>1xtS&{ch`*`9hqtKC0-o6s9oB;Q*LKH=k9e7Dw@ zJ94G$ELdM2Qyie%hoWzsY$k;Ys`S_tB;EcYaMI3UI)1@--?e`TsuT`-bL^H zH5)=}X;SdUfbXmUZ2l{Ioa%RHmU4@$yfijDoOE4Y@RJZqAw)i2tjb^J0N0Yo>y~IA zU!(c0EZd^Yp|rPb=OyR%x~rk3gXc?G_gy_(==Mb?CZWzCpcGl@&laz=CPFAcDDdHR zc{U_U^(5-1i3n<+6<-=MW^u0-ALp=$WQ&y6VGb=mRX6(xKM#v`zVQ7bsBr1_^Y+1| z9aFzIT$}d2zY5ovdzS?0THC=(b9I}vViE||+J89jhQ6|$8P4rSQm~Mlk|0505u($# z#JIJ@uuQq6YA@95-sn7&C-hH6yB6X*%swlU8a`Zisf`)gFZ-o!=IeB1A`6 zD_olw$TvgxTPT4Ly)BLqy@G9Dyw5AhkgaxWyjWTw?;-sIs}c8-^7b0NRH%H=-pQ7U zQ^;?$Z?!_LKe8@DGJL#e!A<$I{_Amtx`>plSnvyWQbIwTb^HNUw@O#5n`^{ez{=mt zk=GIrmESBCgxq+u)Ik<}ccGt2lE6)uGTKFXbaa*);n@bOdybc){+;KJDQm$Ud&Okt z@!ym`-~CpSyu7^t+*E7CmP{iJzEwT9^7yp*48x9>a;FBeSzNo6C>n%@oI&I#2^XOmCE3?;dwgTC`hkegi-qpZ?8UaPkg2Q_LU)Y&9ra5 zW^=Z!G>JnL*391e%Mz#{9hEI>%(e=x^q-{H(_a+rvfOZjC?!D@OYQv@pMG%BI-;S> z?pnBvvFoliU8!hSBj)yO&}A%4i;&lBj1Hatp(Z0%LxV#$Wjfo{kz1cpZ`EIKs1S}#1B zQw@m%udqDzLN}<~JeW1tTL2tH zY-M%D2fO6T>VW&$Jl5J+n+8?4K(YM?%Whwj}u0OS&36c6Pc1JAfb*w57k)-Isd|EqTOH=7uM<&T)uOM%_6M^#Gl zXg1RgFHcphoafBIpTbtF!W`Dlq$X*X#mI&+V6qw!#8VlQ)= zOxG$)&k<}2@S`nN^E&St_R7+8U0PDVF~^{(Icb{n#<2Be*IV#48B)WYbtqDr^M1*v zvgg~9t{w3!WLXJ?4ILHfkSF_Un{CF05d7qNy(M7(YW+h=xuIF>#M@sE-)>*5&D|w` zi3=fcM(KRpNm=KtyyZKt>5_iI7Zl$07>#X?i3Bpw8H6S7_R=_a1r4=EN8d0`{i#|hRTVooS`%0sav^xbGUd}P`H9Fra{vCLO$#I65 z`)8%I7T0WcQ-hqw&Amqlt1A{oF8(>{w)%(j`lp*foMP$o?+@nf)Fs#p_E%R>BP>6& zxK$@HF0RMKn2)cne;cU00$7rK56kr*8rb$5_JYn(XDWP!KCR!-WP^$j76s0Oi zGw{zbL0jKu_Ti6ws69co?cJHmo8B1?OMU%|`<=4u$ktoT?pk2|mWyhWsRvfP^B0QD zK~vcm8L^Go%M0byU>`beLVs2mK9E^c;~_;iHPGcIahNb|r5@7qGU$pdoh=-cRgBU^GV_|I;|xs9dw=MUiDmyh>EPSno%=`NR{T1ut-jd9j8`?hiXUc1RgE zv|d`IYap1EmDTxE#!rh;jLPAgBHip=57NNl;EIlne_!&hYPprmSHWv&a=eH;70qVh z1(HEeq5jr`8LhH+NUa-M5YBj>o4Ncq5flUcFe|B2KWW~lkS4DW!W#`JyfI=Z^N*8a zN+IMCGgkMqKRHinko*>aq@V6qsyGh4+kHHVXiM7s<^W#lv+gN%FX5oC{xo!ku3~h6 zr2?cW-B6lh1q&=K*mhSK|0*kR*{`|g3(erOqe&sO(5%Jg?qWV<*&pB$5s(okjHcv` zNnqhUz4S=Qz+^$&X3DE=(Q*!-JA3x`vhqQ>uqF@h_WQwbhqs45h=?hjP`u`9vYHZQ z@%V!%OH|Lp%6fZPAezH|Yo^KB5@q@E;_E6eL3&nERNNlR-I6OISzNA7^Dn(SbGjRi zF`CXnSm*Gs{~ZjGcNB!sp)@PhN*#4=YOr;sboECGCjf0lz4k&~2dD`#TL=z6%H4v6 zKqfAb%51X4NYM(%&bbD-ns6^!alAB}iwW3)Q=Jxsdl=w1ngPf{(%JG)=n|YQ3GAl} zUT1w~se<@;m=?3IgRW{`I&&n3VS#mXWN98;jD49ywcs}iqgrke0?v})Gp(g}ixe8TOi;b7q0ndzh~Zx{VpD72g{QY7qBDbp|mk@aDw zkSz}>`jP$4K0Q#_M7$u*oa>o{L-zLL7T%Y5W7wfrD^ciwMBMe;nP@cf$KNhu!ydcq7e2Hd6f3wp%pr7aK+Tuy^f zKw8+;O_#D69V(j+t*}k zr1;0DZ+`Qy`C(NF)Lx^H3Y$eGDXDP_S8n0avp_{AlzrrB*Oj^_PODuUiL-rTf>s${ z12PNwv!YWmZf+Rko{^PT4g?5i8hH%I71aTh$+c_>IyVjCh-K1J}p&UL$h&uXwNxy&@)TdPAe+N2I^`)m_m*{gpDsmf^h zc3_nO|1FxA_3`b#k}0p5;fTSs<%NfCboOw0u-c*Un_&dTr}qi)8FKyf^v}kFlKv66y6%Ywff|h9Ry7KI zGda{BR~zp9_JkUX#*t4Q0?*6oC{VVk$?p^+JPBlP(KVwvX=N3Iz3t*jxwnYxc{eiW zD?6e?o2U`L&jfD;@Xh0kO;(>sHM!L)eqo+k4BcDqh7nxSu(PmkOaeAf=Z*w37(Kn9 z(mQZzhcG}aM5~!KYK=?<;_ACOy0TlN$C$C9g>>GRWFC4sIU=`?Bfm7ca zYXR`NghR*Ytv!|Yz(8t^%cs6|6nw&GqRApFwi0KCPZf7E0W}~L-<&m|$tZn-C?%Hq z)!x@v2bCsddvFSs{&U+BEL#W-A`Hg%3K-MF1iy&Zg#fm8*vE8HB&g4$kg6o(mIc;f z;C=CH&xnb{2~(gM23{_?0CqZUNu%n}T`_MIbm2&jG`v0@92#Jo%-u5P6m8S+wzP0? zU=EX+5g>*QowksHdQW;%O8a43M8YQ+{YA}71&bCVKk0Fz;UhSMzPvfT-JCTu_&HA~ zTSBYA@_>+4)fJyPhCRwjg^SMoBdF*W=hp?|b$rUVYC~jmD#$Ir%7fg}&~$dZ z!UM)D>S!Qz={1}b`EgK6U4`(x>Gb3>}zB=1yP=440emrvW(HOb8{L)2dFA1|1%mKRxN6^n4 zp}Yqaa|qMm%DF8ztX>_~BR@?>R2xss@UpWa&>%6~O-~G^$VdK5F$$h}K}Lpi={3C` zOX?7~{*z)f=LJhP_xjTC)v?2m$DJs3pq2=~9nYE8EYhr+1rGjqnso>iJNqa+1?u*o ziv5GR0=AKqJFWKJTcxt$3#LKHaz?BTlHl0`W)Sw$Dg{)5fyyX=4(BCx(D?!|V(Bxy zL})hU5OY^Gn@ks=mqjJoVwy=5T19UaZue&lc>mLjD^w=P3@ohAitdd&+BW{BVwq{f z*bX^HS=?GF94$PHpz027nYGBsfZ?Qqvq;Qn7L43mjx_O%wonS#1yTlkNhTv(0r`as zAr9)-@Xy6$Mus zq~6S-)9WwLa*9glhfu&}`GnqxpxSF@G}!4 zhN&J3csz&5=n$4T zZkxzo5ohQ@Ils#_=$@uA8!C}LIS0gb5Tby_GKmgG^QE9n8BDG2Ty1)Mqf`Nu{-!G> zLsAqn7*$Z3$lyT~H@tL=ch#R`9)|C4&@Dy|QH&*jzd$0SAb(_o!N<*#+(TVi8CMR- zYkyiuL-2o9SA5kk_-BY3XAvJz*jPGB=vhpb7}p^G?(Jnadc?kZ`v{n8*Vzxe3 zHjj$qhqHRKYVqwZz2^4;qBcORojH9A1glO)@yo}YZQ(kr(l-^`w_IJR#0yvnCUYP> zJ;3D{E_4JTIaG9H<}m|a7F?_$9*Cb(> z@XqVoScK^Gg4UGE(mGTPjU3U{^o$l}L8lEqZ6`k1UEKpYK>M1VK|+e^Yem!BUz&1K zB9`0jFVBXdN|f`wU8Ny@gv!Y?G=2olXad!u2y0$KS8@BxDemw!om@ec^t_8HL{u0I zfQd%k_mx9G0+J!pIehwOhbi96)nTv{VIbOv(`@n2E~-~j^AUNJR5$vNIrIlG6w8C) zP>Zs3_K0}a7~TNo>2jME!&A2f1lB**m0)G2({-rI4EU?lKX%F;GfWmB8n{xq0u(v@ z1ziV23pJ=u?@w{zYSKf9f2zlJZX(l>25~{^2+G)yz4Ah$0Cqt2g=I_A^0FHjCdIef zq$K5KZ#*88#Ua@i^BSsU(~wayCN;)S01I zv2~Y69Wi6y?3jgb87MtR4G3fvfU#pX-f$w)t zAO>vxMt|Q_l%(bFSG$M=2$~wYIl~*xL7oM{!?1xWEps9MjB(z-Ej+GyCV^m%x5x;1 ztoo}1Qouh6)A$)W8{bZ2zrzNgFoG7D@>j~-Q3A5(oAWtPY4h+xuNZitRh?#%G8q2H z91j#K*WG1#Xi1dZ-T>QYi3=$nLcKVMRhA3oTo1WauzAy*sV$ep-y z1wbL}yfhG3UN)&3#&EFbwAW{5=IMlA#m-atbW_L+gc=Fp(h|eXwhEJh{y;^CX%!xT zz$;r2A6uS|Ae&{vM0JJ>h$!i&q38!Z30M9cKdLwP5TZku@9=RA@vA!FmrJ1(R=(i1 zf_TI)D~@G}JE=bI+EB=OcXQMeovu;G`z^rX(lw? zb^dzN9CMJ0Urntvtk=Ee+Cg}Pe-2*J)j*OCpfPl&%Nzk4VDD+#d z%%o8L^GNNT6%#{vkzy~#IVkc2A=)$r&`J6}xx`1;9;^<%hXq}f0eT}UYi=<~QTQdyLl!7RYcE9tyN{8QCSm*dXD#&So z*jyoR{)0;7vGD+4YrQGn+j_f6>5Tzu?HjdN!b$lvnx)MFrm@m*9ToB9mb@l417MVL zAsQ=&Nc!NgJ;;^THAK$=eA2`Rjc6!9a3MwAQcIXrH)J^7;Fg1>$7T!Srxi3Wc}Y3N z{&0@#e}5Hr<3(^Ii*&pErazG~RMIM~rRnc0vo%Iuyk#3;#4-ow!%29&TCfMc5sJh? za5=-X8Q}{QSm%fH!EylSuLzI3BE)nu4RgWKMOg^ZAf1TZKeaf~(tk;M*}3}{0P>;E z8DE|GUFsy>eb#B3LF4ZWC7S^xJrwou185Th#EO@_fLM{7Q8!#-k?POebtsTm_;}3M z6{gMJPX}3i0e_Hc&*)7h<)f5rd>SS$K{nBexnP9v13hUlt!|P%ORFR|#KUf?uL}6Z zertI@S0>TV1{Cb2l%bxGc~e_zFB}CnjYD>*G=V|@RO&~2iy=g5j7#ZuP{E+~(e1aN zyW7Z!Rs}vVd@W<-I;b<5zx_jb4mN-7bqr@NP&ZfmPJz?@S^4+q;80o;@l|akHB4Tu z16QBKbSlm;U%@b0X*SO}8}UCX1`d3FM*{mLV=|$%bpEy1@}_EeWCot`&*{yXcKRf4BindN!&!|-RH`_<7G z1p4rx#B17nrXV15>DLpOe#2jt;G;yTc+XpmU{n;9V`$t6;z9nN?-(~vW@-4D&B#_N zv`*aPP!< zw|i~vW8?@6c}6e>T88L=KCzb`Np&@B27Z}P8x7*}C-lBjh)rSAKJx0FpfeUWDaX$^uu=l+A{nepn0>$&$C$p zM*GiKU8t)JD%{NIYZd!bUn{>g0g%%Pap$7}$DAQ)(7`*ct(9J<(%lFrxi&tJv+fhq z8^2#Y$~<3uw;Svu8Z}2P#9N+g&5z5eH-Ck~{Z(wgT}%EM@}RN~@ggl!C5qxIzTMS( z8=J)ZduerUB&Nzj?)S9_cjU?TsK zjSOiQg$@je`K~_aT5Tu*4#X#04;enU8N6N!lrp7l@eZjS(4bNH?fc>SJ~(_k$guhc zO1}MxLmf$Kjcf)S>h1em(Wq3b7 zCk?l!9|29kE&yzfhTCzK8bvAK?FrDjP#s>Ov`z+NpUsaF`r9o2&{cCS zFQt(rvi?XEZs11i1hv$y)RDDs_H5F*dX~t3!ne+r+OKU^B5%&JrhH}X{ggfTwPWu0 zKOlF4ZX$@0OX+S;N0%w2210$UliRf^jCDVg!5D#$0LiD&!HAD_sT6&$c~bEy=mLR8 zP(pu7LTrId=dBs>>P+2a^lQVq=>XbXA-lOB5GI*wCNwL-dK0KnTZadfOEJ&L!oSdl zx5Z0RC@)0Ni!t4V%~9+kEr%150^JF~0V54B^MrrFvXv|e6@!Q_|=!JWo~T8EN?J8M&Ti^r)<3N%`)3B>gJ zqo7}-T|*tfVCAdtZVr5ig8uV4eq3s6hGU$5E^qrHizWclpQUQHFnbm^F{HKN^KhO`H#1PM%>;X2aKKeFp}p z;X-lv*@tU7c!{^g$TQi2e@zt*R^a2#XBio!&*A9M(P(N3(il3cQE=-FK!0|Q>v#e- zqW_;KQ&uzEqAHSELgO#QRwg`F3g4eRllVA?g=!P0HnCH#ps)nEXcdb4~Rb(X{l${ZYD_b(HsbkN~6&E1RFECFrl(+PQ4vzSX*dC(#b z52Kmv`J@mGR&dvAXkO70!qmKylI_gZ-O$$v1Kjz0LOvQpDJ7GVV?fk3!&$D~fpbJ< zZqw#NQ8BUhO0^HY&eW@}>A3YemNE!uK6cxrq7K6q)qKQ3jS*k~z`TTYIwA(%c`lXx z(Dher9udhwBRHBH-c|kUugE-f*syCIaJdu(o7`eliF9B=PzXqqW=g3yJJC3*&B?HS zmFOFn!H9gg#K@XM0MxocnJnSFo`RaHLy&yso0*V&mOjmT)C@aRfwNP`0Q@0vr_@kD z;2t7i4OcR|EP-k^_)JtMG6~90n&X9*tg#&etl;oJWm$00F!BM;?FImlKma8mX7LWF zq<98yQ5}$^)NN)7+{MBt=4iiWgx{@6%gq3^F2J&l+0dQd@`x@0q5Dj_*(@W|XzW@* zp`hhQ-jvG8EW?)O@S*hS6iN}Ge)`Ah6s0Y2+qUx(5{ZgAeYN2hJfwjt^auk78R zf5Rb-cnQpaoo>9A{M=1%63SuNk5BK7hB3*`U``vOc7n{3UxGwUqSj3&P+0ZTo2z0W z6mhmuNwddDl8nL}<>VmBVU__U$$kV*t|Wtp+#8HbnCz|xY84v*2ZP>mbJL0E;9V!t z$LQ1yZ}Nu9kpSXl&TcXI6P1seAr2$+gPrL0=eMq&kF);BP@hz}b|S)<;b91nCSFyU zpMUJQ+5^Yn=J??#rEAK)hNFp{v$O?K0*^r6Cc~G*BcG$&d`7LK9^)7#eQG5akiWd_ zNIikNxtFNdCN-g;($(1rlyx4qJVe!@*MS-B^5{3gy0g?I0V#P-Mg(vfv^h0h{r1*> z)BV99uGe(bmIR^Ep!PHGcsp43ko|gY1)J<(?Fzs>S%P(9Hl&&4n1k_+fISNF&Zf8M zC)Ewk&S#wTz2(#iWE?C^R-Q|f7?XLrQkWf{$RHNe#t@->L8CdC!tgLGcNw>{s+(r3 zi?H)P!|-2r_XzCvJ;23%yYb4)Cg+^jLCRbJsr~(N2|az(IXSML!jBT1((+~$7K`7S zE$2dg^`_1=iFpRipO~n=yrjCPXAz~_k#5L_G0i4C1W6T4-_&`6&{P0yJ1AVkbN!&H zUeuug0?6WTeoZFum35eZiq%mHnc?Yl)QhJznbPJt)Ug-9`P27D05&OiX5)5_3GRJ$ zDCpY_F|2g!3X@{ijAAfmvuL%abGoTB&ucGdz24|txAjsK$hY=>SIXn+v;_Wswd-!r z{>1j%0j5ag`vppn|M@shoA8sb%+_M$V0&}MnWv>PFa}EJ&A)Z^SzM4*_e$`OOhGU{ z0US9`b~SBuTQ_A-{5#`6Mw~SGlTpH<>^TP~5;L{?jfPMI=#XBy`?)zWj3EvGL%6`v(Q(kR~3gx4MS;F#o=~a8Y?=pMm6`((~u@3^Hpl%hv3+g zBC%P3ggLvHE7!yH^{$Z>Zn{bQvy?JS!b+!(aHYi~Zn%3eV0$?3f)mqSAb=|9mj?G5 zb_jHXVJ^%Qo2_6zMTf}$7-knYoVa)Bk1-HEC4dQ_wf7@v5|WuwJvB0%gMzNDHVokrGn=$=}s)Ng(n+PzMFa2 z6NIV8RHpBiT*~y6f~oH}JZ;4BKB!}YY$hgj#sE}?hoFj^+1YKNNw8`Rj@v4N?=*sH z;vafQC!+&2*agxJUNG3=r~$LlA_T@YP{BALWkkbi-{-MRBg-2LU=nwgWc4p}nwv>6 zn0YgGLc}!t3THorJeotWI_tnkX-)<&ciK`gTq1MQaETmfP!5>!1Gh8} zd*O-v)W&e|EDMQ-TmJ@kWz6RROTmENAON7w7@-Pg*38C$1w9#l)fzNEF6HsJKzD&P zJTgJow-R&<{RLN<-epX5iGz4^f06ysO=bz8pfTH^BqHg482-*d?rsQWK6HF~U4I&Y zYEfF8PHjY+h+*Jf;9Uqby@pUL(BKHoyM!h&(a87npz^(6skxNZnC?W{x4#?yJlG#o z3HLZqEH4ClHBFzu+HiqFGwey7K3kOMDV*6DL5^*<*=%!Q`jd2v>MdrDCIm8@9rEgL zW1V{D|D`X(s=w`B9U!hjoyOC6Npqn3cnOY4*6%MoBYmFEp z@z=|z=IVgS3iuhUNYG~x&B-XbG;ZttVh7sLmh52vEQR0v0UBBl-hR0(5>$KuPCh^H z-X8GoIS{XVp*XyJ3tV>DLjLzLc!Ly_eeQ`8v!#iiIy8$lGNr-|&8ug|V)bu3ZIDDd z&U6igKCiwwOjFuRocXQ{+^M3%ikdAjWknYxKPk|>`adNAFlnFOmSNT3$A_2s8??%e zUS^Jf^5VZ4dkK5CN(k~{9;pW{zO+(?E`((K1ycX?cjrEYD9|dEZB(_QX7V%Hr|VHO z84v`s_54osBK3O_8XZ1jtQFg$=VuE@__je}1nJHdCe^GN)q9Puyk70; znr`YERqf@vqAxnXzp>&p$1A?44fms?iJXG&T!mGB8+ALu&?p7L5g}KF5QTV5Cb2X9 z!c)~ozPF#ir0@#9TZnQ;xs)$Oh;m}d9o<}XK_^qIVxQj`W#pda$ymGboC|p!~aqxe@UywjS!LUX8Sho1RMiD|7p{QlLQhjNcv5IFc(m=HcBlOU$&%k2nv%qh%wRt#IDqFd;a>+h|f)m2{yAB0t$@;R6#1=FN~2h#YhZ^`p0F%y=C zDv(CUuCgA}MwHH+vOuQnEjB9`#$j~(ju^dXGg`94y*qhN{IJ;rTXnO$AGhzdUI5Nr zj@oCWDa&Qr$eoI1gO0rdBh*iTPK^bp?oes$&@9%m2jIPm%2iTSV zi?uC-5`%ywu`-~7;vA`Z(jB}z_kC6y(~vD)>6r$VePrric^@I*H`3&R8=K%=RBUKB zR&76`7gEcA)9^e7h3LRngWEZ2tx@gND7MNcw3e?ztk&e9oZ~&mwf3jihE&>yz2ZHd z!!sW9h3ua2dLp{Ezp*NFiS61Wj?MZd@7!-#Y#V2(NPUJi6dVyrPzW&uYT?+R+9>w+ zlNiuPv0I2rN4XJ&Pvq|!!#YP~qMVf7ZVa8jzCiCr;no^2aEW*K|9R`*U~6yV2i)7+ z8h)TvHCU5hwuE&p1?p^DkqRVPuxLTNvviaY_m-$-X&US%Hx^{v_}A#p^);Re>FW|a z;;c)@sx)%Ho^3m&VN4q00HFWVhP>$hdta=d84a{(8KVk}Oho_b?$X$FHTk3-!VtT_OF6O?ugm!EecXF8nro;Bw;I*)$D> zEp!2*J%Kg7@vxpIg<_3zz{S^4!R>lmOa4^cyU`kP>b*T$j`}Ndy~%r`X8RRz4GnCT z392U(z||(~YZXgt?C#24N-i)gx%}b!ZRZQUusBYvBQG=Uz1|FNF(q*>VVEYwSxb+B zn{YWM6VGTbf9lj_@s-Q<~rh+LWLlc+*~Q@0%M&*P^ZEK#MxTZDjCF zSq)N+LdhwrFx>J2=M>hrZC3*RlD>u)?KaB=z-_j!v2FNadSgK?g1h?G^)%L^jX`?v_ESB30o02Sy|gjK6?9b{eXeynhzjh}~~3O(gtYcg)zVWKjXlv>3+RqEraWt8Ecfd29cj8* z`UJEpVPSXhJKu@lnSDdad${viI)aYJ9Q%|)h+i4C*-{}y5-M+nfXXT1SW1p0;4DhU zf0x*vU%Q^An73q8-j9cc736n`&BXJ~|3o&2T@_e=ui5LmvEHZ&qG9inZz7s5YO<%1 zEgMn`SS<=KBueLRa%`~=>ucHZ-Px(qV>>7sAQspm@R9>LEFGQ4pp6UeuT&I7D1`8W zjR`MR8`lwEe%7!h8UaRx9RUHeJFUpraHn>P!y>Q=L zn-=x9?C|p|sF1k@9hOC}CvR(wIFMk@zS!4Jjhw4mZl>^6aDs@}>zGo>w?E_K=6Z3OP zrALZ9bp$#AtkS=5N6y#eJ?Fr)cT@C~E<_rrx~avw2pjA(KH3<10V{ehM-<$PX#Bg- zE6uH(#y>l^`t(;BbG+hw+7J}o9|Me6$O5o#ixz4194p_{UmCAG8g)qOscdd*O6-rp zaMR^{3nD+EjQJ&imO55Mml^2;H^d7uf1;L2#J;SGrn2yfvQH8o4h%l~75-vy#pu1g zxy7-PPk(GJUgb$(^;{5Xh1d59eDJKd-(z*1?XI+_^Y&L{JG7$wlMCw7KvyO<;O@I9 zAmu3kPgUA7&RGupfgT7FM#F)?>Huv&5ZU|HO6j)1_H71sxrC+uPOprEz6AhJhL%1+ zxF9*{%RAdz>-Pv&84rK@a-S;dYU6_7P|<5ig}R>72L~7KLwwt+*}o6GbtN#SdVz)4 zMKGp%v!jy3x?ZK~7Z3L&eOG-C%PhrBK-6HJuE+L%+XvHj9bEW$XrcD;{(TMTx^2x~ zQCB-!^d~Nw#G+MWS(48-?@4N{3@tNi`&MzpL8?WArIy{Z^41;@JtYm`2c{~=qceRD z{I@%{7Fz?Pka|}sM2n7!WBAiU)yEn+z36L^28(raz7I^&5A!^dEJsy;nDP!-v8s*H z4x6J0*r*jI za;zD0pr#_bIwwkY87ZpM+&rqTt3Y<}yeuntL>LasA@F3*rbSGBLJV~tAm)wiYG0sd z+^a^Ym^cb1i9w1LmtEA8;MIT+PU*)vjM;hU%K3o%g?h&A6>WaW0^iDIz-EEw0d3<6 z*WZQOeHlWdW3C>zG{9e`o}8%TOb`lJx^1y}s%~s6E&_j-pL+3<$3vx{Lj-!jQJ1|8 z1|DoPz-T~Pxn_s;X8g+D92WdaH7CeyxU)?*8e+vx`3zgtU7X}0!|}=`R8ax}Y!&qO z32Gry9}<6VX*u-j=EoGC1@RoxVM5%Squv~3=T7BWV8IJCi+i&pyF-5udv!wgiX?&4 z+yqu`>Q`U!erBiE;rpz|m>nfOBB-VivMC;az47J+?52A;o4_;P6#wp~U2E&xJ!|_a z;?=2sFK0WXeY1D%`R+?AI<&6%C(D?sEyi9s|LzKSMpyhT z)S}LMsSU_)Q^QwlUO}r~ft2!_-!+3cwYW&hv5&@%0aHvC*gEurk>QB!qzCb-N2&Vj zgFWF=eEeQitu9J5knTQp2Wh^E%BmjtjWh0 zaqFlS*mhi@I0jWWRVNo=1n81&ym0}`doPC|k#4Un~ zXVNK5jdr`D#HHd+iyynmXo>IEb*wWCs>kPf+{!!1`@-f6zJyVtxNI8XKrr_@U;U+D*ZyJG(d zTd?zhJKN*4Y}&_N)EWwEe}5{x({(6cTcyFJp3Oz*NP!bU#y0Exn5Y3-^XtNT$;K6{ zvaIb~gk>Q4UcZ3lzL&!dM|}i zp9yq`BP{lxYui+??FsXIZD#~^+q0ns;)tbM#UZ@lQ$x?zTJo%-f2?9$@4^)(Ei4%= zsz!I3SLHa##tu1k4kMlFPHl!>5#;fam0;T?QL}A}weVP=dJ+KwS;RhYKPko0p1$GH z#2{gK?SPI`=7q7(rukpi)+;x%Gd2cNCQOp?ugBnWvRp!ySA0u`^y!;jL@QT^2rIrW z3_7)O3rj6)e#NckRr-gJh{af^^Y5I%D{}HzM1Y|@izJ^CGgK$sUyQ$4An(ocDB7)~ zc%2~L?;5zD?M@mS-9A%@)lpBxouFpP<`wpMJ7~Uuv;~64py_+3XRNh*OX7OU2eZ^m z6t@7^@K!XrX~NuA@h*6Tbyko=?Jq^`177Lw&bv@TDtZ?3ODiaT$pk#ZN9lW#csgjY zLyu&SkU`wRev{tSAb96YN#yMh6Y>P^I4yQXm?QMJJjQ~*<&hFUln`S(^G#!ozC!L{ zYfeeCkg%Xin8Ev1DUm!DbA2^9_hBzEmO}!8c|^Tq^k{(u=^wMFmJ_ErF<(~H??SS# zV!s*1rwwT|(&ip^v3&;6=fo?i$N`01!rh>a=hB`v>~Z!FqnhfsRTBQ?;r=q3l+S}9j|w^L4phlS$RUgaJ+0+ z@C%~|NiHZE=iJexMRFTS)lrq+WC@}~(Y*zCSmL+Vg$v=qga>TF3KMtM40qtA+*VtD z*Kv~V0s4kI=u{^xMAI1z7ce9Zi)UzzxE2Dv7?g+>FJL@Phg=Vt;1@2Tt(T~3^FyTN z;wzx7UH4|w*2!=4aZ}-)@}v3MeOgojx`Yad34>SS9PRRAYqAfPS8(>wwyX2_;FcGQ zB1>#v`Bfc(B76a0{E8(?)(KihIimtG_sgn*MWA-L)ti=8Lxc6BS+}>WfClSpeAghk z10yCK{B*JrbL*(kUtrWkF}lLtx{%eC57Kgi`p0#F9V1-13)Fq9nv=f;BFYh5{0DIH z8u@tE{M9=OwKHx;FHAIk#hwy5gmF6GeZKh{Wu?(x7aJ(>1J4r-0jJobyjt+hR{7d- z-=J@HRjU0ax&uh7viPZdS;Jex6-D}DEH4`pG3jCFfQQ{19^D{M-P95>>^x9KTM4|f z+Qzy3gxxz}I~#f{t>3{08!fei&13LdEb59wH1>+L{rQG(T8`jLu{>-@In|SLz?R7E z%iyU_DUR|yA09=N*)FFfD7U~)4lk(}0j{?AqVjZOKRszt?rC|=mfoBwfQDsc86M63 z%CA&hCg#YeEj{<6Wd*HpufJ*8LHlyEA!Srg%7A@k_GNJErxf4u^bWs6l#!BA5|mkB zCxhXVo=YDcAbk`893I$J;DH$n24<|)iLQ^G;A-oNugtHHd7ee)-dlgN>RB%=_Q?_vj2QTh z{Vr0x3jX3avn=jcQYjboNxjcu&iEm@9_U3$rT)mh+ca<7unbBMFJ(?Q_emFtv34NM%bXN_yo6Tc zdMn#rh0|73UQmed45KlJn{kS#xfv0%4=31H@$z&zP50&J!Iz32%-8lXhrjgf&1mkt zsv4nCo;N#A8#l7lvS2E1H9!tZZZX#J{5wbBpd9@z8xm&xy?^xMr>!UVp67he_u0=a#(Y|i@f!s0&5K&pb(>V(wWjtWs`2ljr4W<*ldrqGy{y-wfWzyZqMO* z)Z(Cs(TayIL+gQR3GV!{dKKRvP<$*|Te=Z^iaMropuiA}rB71}?B z29nG6q*^q=rhr2Un?hHN*RN)a9w1vEugHfN*QlhazMy+p{=iA+V=KbmDNZ(eZ?7Y@MOn;wVY%_D zbH5$31ThF`G%x^IniFdpVkl!8;*aXAt)DFvuS$fj*ypM!ah&0m>$rr_f7K3^O=ym; z-})BBYgA7ov4BU04LU2d)w&U%-cW7yeYZ@ZU|d79#setyVn38b5G^hilTVY{2-{AR zO?row6UQ}p5U76zy|mM*A7EAJpxfOa_De_S=^0kDo2qwG0LLc-j=u)uME-_Zd!uaz z?bM@?MOu@g5@XG2TqgjOcsrs)1PXT|)=n&B?TC^#Kt_FXegLGvuWf}5T__NNMAb|` zK~c3eR)7*Lz?pCS#Jm?S{_yfCyeA!2zj2RtTrnGI?t)Zt8Bt~P&KB6j?%svD2VLSOQBJ+-Iv9diC)wDk*iYg9Lqo^dO{~pl zfQhw;-NZscHf7-?$E!U&yxRBC^Vib2J^o|-C3?&2)P0_>O3^qJG_28Ds;!}sD-^L* z=)}9dJ4x8n#KR9S?>-GVLE6iK6Xdt`^m6Zj|2Qs||1+R<`Ua#PLU^qxMlI(?i#+qSYJ>+EK? ztEU$vllE>)QPnxIAm*m%Hoo{sw@_5&b2azaY)iq^>`-fdetv6Ny50D#XKt7SgyE>& z=m75$$Id&d5lZKAqbWNb6zd9cijsVtS_{go%0fohok0yblWU`6v&&wMeyHcMLJj3n zEu+L22KQ7P#3^owlpeBD>hyaPg7TM@uZ&*wT++^=bNLJ0=n-^JMdgJQ&AJO$qhy1O zdMZrMC*oY5YIZD8j{@(BD|6J0>fiE0+W+RDPi3^|6UWYh`i^}D7#)vF)vF#UxY0|t zQCZ^@Ikz8Q1FC!7C}dv3ST34Q%N8Jvbu`lZN5ZfJ)dIAaIxYis`EoV=zoKpz6XLROQb+RtA^r{oG?zhc`n`|W!26<*LOJ#tuT2iEOz zKQA47Mrq-qwe#l9`(>Vo>Noi#^=Ee!hRvJzQDM=%jo`mJU6DZB*jm|{o0{6&Nx**` z5O=zI1vhSBCtBlubwyUHF5M&f20?K(b)N37j@s?N%nw<50AE!lQ0%OstDPt)Tp6Sr zVMoWPUHNz}>x*oDwRYE2#bB!se`POq|HVsX33iM?k0;PtLg>`KHX|Cfyb+8V9Je87 zjko3!#=n<`(Wt4|F;Xf$p57)vOAW9gP+F>c>BCXI^nUPn!5yc!c@b`aU!l=y*s&ft zw^0g~*54~f`_Uy?`_+a(CD&o;L)8R&KDu$dKbt`RQQeEB6slqAeKvZO>M%E2*9f5# zOQYI={|zKerKuV5j&>Pk)saXt*b(q7YO0MK`bR(*J-)lIoIvXe!~WoK2$76rIt&` zjd#TpC|{!pZX>#Sn1J}k%!Z6&0`1K22MR~Kz>gHue~i&1AJAV(j>yrd0dn+FtQ!Wu zcCaZvp;(UA=haAU>LpNHJqTB|l~<-WVn>?dJ?KALs>5ibwDI^x?ATbN+u`q6DwWiW z9gC8Sy{9wONToIrXyiJ&BV7V}!_8^@tf)~C9olcML^+n;3f2PP7-40oKLQB1-LhP1 z!y#SO@994}qUg@11ZoGmvBALTOD=)>BfIjGWMdb7yv^%7FAB4N94lwkNx3j05zv#9 zwIzOdtnnkZ&7b~#NU5FvgAyV){v*DT4qz!m9SooshtUVS2y}8?wM`yPKyJK=+7w3b zX~b4me{ZsJRI5(?o~?#0T|Y`_qz)C2*1G)|4k5VF30X8c_69%g?O0(_iH+Nj+Q(Om z$9hVN-T7192kEKq!y|+=qpkMwzU^H~2K0Q#&*NJkq(0etOr}7j1tUtNO_$I?8OhEHk>kw4=2DDXwMQApO~K|W#OuxKU%&huWDI4<)M0U<>4*5YNM|Pkcaa0 zuJaD9@DBeck$+q5b>jP=ZA4+0Uw!UU=IM6a3J+azt2|q;DyetK+_}m(s|(&^xB%Y% zVusFfm$Ic5rGM)3&iFX3UZFo1HJ3g2-wp`ixn33@N+(N z=;q78ck0Feyz96i)>SI>85XSnDC1R+G%LB^ZSOu^{&CVXPxn$5UW!=i=_0;JmDftQ z*kKi!dcOMd(T-U9)daVVU8TN9sxr2;x{U-L=NHp1dU~|fU-NX4;GN*RyK^t8yXyvR z-gd&^RF`7JAK|<(!b0gF{RiWOPthf()yV ze|+hjGBCARVr{x#kn`bE1J)b!6z%G`+5NY(>(>mxyC;n>glFX>dH+&G)z)dAtyP-) z`Lgi6!aZMY?aVi8(EeEePb0DHMm_POTf?P@_>t5xxAA>dO)7Gcx;@YaUW7-)?CpFi z5p{iQp0kj;rhks?8qG`Z_nOYv_|MeunoRO1SOAZJ0LnvNYJEq<7p8F?20`g`(jRP) z`zWiVd*$S^fRJOFa_~!hsud#}pRaC{5&_33R>f-~(=e!+{_KY2eYdsSGye&Xxcl;G zX#f+5dvh=8y6fgKfLQc0;oKz)J#x`YzVbmwGiVbzqZeK(n1q&{Ai`&O1wKQiS~BW6gtN>BreV|vgPdh z@340@&U3nJ+(ebK9YpVab@lbnYG`yE2WOBQ;-q1_LmjBp`A)FTU@yAdq84Y4>yNfLfy? zeczr@TM+=r@~()Hp`86E);mZ5L{^wy!7>rK`IWxzuZ=JwUm3~WA2KhHT{klAS%m6# zAKc%OiM@|`l=%7nYH>-ANH^;By~_#SL$BYuUpEMo*ap$UMfh6u4lMrn0vSyS?lX_x zVRdG(MGGc{9r^optBlVkE;*$h;QjWX)!y~G!H@6_GFka|t+0)>wB{3Vnnp)@qZc$-y%P|J1M>_O7 zAW$1fPsb0O{5;)yBTzUGt;ZxC(TgEI;~%x%oa_BqVfA5cNRTJi7ig^Cw)6bSWoN7Y z2F!vSCb*Oy3_uZtzRt`H+&rEiT0WTP$OW9gru*l7XTX`4iO19b4?M~Y!u&cKao+f~ z0!)rIdG+r%uEj|C1Lf2)R5mvHEpW%Z^Z=lpIuE=d@atVt`4P8wWp&)%e|uHViu_RF zRSNWIrH)+zI_`n9N=_!E+#3yLT%p1RfY&KLpy%#6>Ek3m@K>aWO!(US`KVnc+)Jv*er;Qg=o+=z@oK@R% zpvi=RMx*kGY?!0%ry+bV{|Zbz}=*QFFAk2)$38rn?1KbGGwTHBBFf! zp2=M?Ln{l&+Awjo0@lV=i}Ti3_p92xDceA;gP*TyLiXuLFYOt&h(zhd)IQs`*$xKt zfpywfAbQi^r=-uIH~lqkR!Rf5R`;A;lKjPa8~De7_`(_n4QiW7NAWjYY39+E_x>_3 zfY~umODh4=lULsFy$b6|cI)^8&*nd?5ytH0dLSy!P)>(dr63Li8$SgSb9|(yUOIu zTLg_;#=Zq!1ZaGNpz#Xy7Al|P#CClz1ZeC@fS56QKSd{}kuSL}DvfL&?P9II>H))I z3%V=v2B?U#5cgm8OuYmigh;e)V5%$ z(t0tUH?MsFzeDtkEBX6t05QH{5Tl(Hpw*O!r)j9v(2X&vcA}W~u&T#c7GSc7*GkAc zRU82f^w%nzFwCvUXLrSb(Rgu%8GMZ4ix|gf364=4TT3L!3=LN>aUe8GequmNB?5az zZ27bO40}aWJqN;Z!s4W4298qzj^7;mJ@w7TSV{ek6||mcNCX`!jcu{NF6}WaGY5Au z<;2lLt+0~3Bogx(vNzutKLRp@>`k!!sz)DNtJa$gnTcYWGh~JUBgkfUP`eC!*AwZ< zH-2XMd+`2@<)g}~zXv_-ub0Mar{owSPj|_@2pOB7|I)2x7@M`g*3#b`qOX6yG9=Fa z)^}v{`GV47e%RGtxWJ%FO`KRHIQ^`EKBnaI*Pz4(eO&COdGpijFhDE5VQ9rxXU6Fz zq^0DX%d7zfM~LtOmO8oYF}MfR$yGM+DB5(h-@vi1r#V0))Ruj&uf6!P;Y!3`jiHd4 z6SmnG+dK;HP{5&DpwQTVVJ7$ud^3dL7vPP(hrkbv<*)~L;BjH8Mo!fe^MYtVq{=5u z^*!_6EJ;c{EPprs{s){spwKw62Zf}xp@MUnIOzOg^lF+AlVtdkT~)$?omRPiad{xa z+lYQKv;4!}^!KV~%0LD;IR5@?YD;_iy-rNGfxBXX5n>DzD{dJ;KO#S)?>5B{hpO2~ z({I<|-5ujCl4l{ICxq>XG5<9e$0h7xgJ5I66Pdvzl-x*&2<38sUYrHNZ~66L7I;t? zC-$+E!9~npXrYAi)MiGO0v4E)%8=y%M)iyfn7>dKdc3{UtdD10pvdm3^_oAx1p+q! zk>KAzf`(IgaGgG|DWacwB@~yf4^jUQFkwIL8pPyR00o={OdjImiU>g931G2&IYAfB zHxS88knj|K;}pj@g`Rki^)Q*604hxYRJz=a@e7v9wB3b37Z{dLO9H2DXh0t)GxTxt z=iu*K^v7~CA!RHfNSCdIm2s3LPT;@~^0smB2X%62Cwr~&ps1szfsoS@beH&MtMAp7 zW~Np**E(#vgG&AQ48F{GJF8+&F!sB5HSi5y3pj}n55F(AJdz78le^l|_`;=*DNE|U zWb{&*<}iY+H1YFXI_;o?l~rh(0J%S2E3=28)a^j^9#SN^rIBy&Ay$vpzQ<%jE1s|DiE7@EyH-D=stmFbKMq%MFoML7RQLz% zOdzE!Qy)=E=3KA!W*V(J0mXz~=2iH5pqB@HYq0K`yZGpHI6uZe}Q6OaQcm zN;TXV3zTwW{<)XHwyFrE){Vk)Y;l0(_#RP9(<#N_dIqo4lKrvKojnoEEhzaz=h%i) z^E|+A-N3gxXMF*Tf|JWQQLsKM6Ed@92_1v4U=;1{-D!?*f=m+=(>J~o^Fw9_?Flh-~g#gIg z0fd0{B7-9s=_v1+W*3t!L_|BYKR##(di>a{pLjgPiXF_mfW|;%66RvZaTi2jRs{O} zS2GLI4FE;SH>`ni7zZG<0WuFnelRs-zl~Q0s(m}%vAxOV5fJ;@Uszh5In)X{&5_R%#d0s{yX)4#Q5;*DLv@?)!OTw1T9b9) ztWDclAO*H-VML=C7uO!96fQ>sD7{v4{{io!bXEl)oT#s_{52%5 z;=j~t%lZCnDd8sACs zBfJ!;l^h^=_TmT$b6q(h$4U%#Gp^XcZpH*5_SM1xS+fA_a5qUl(SJ!FEI-6LR@X|I zg-?O>tr$KUni3V%uu@3B!?m14e0ySQXCc&-?>#9H4LFtKsRR3am-xh0giP~zUy;#? zi!3(4p%DIRG=wygmt{a?EEwi-n_D-IkB-Hn;SMHwf3GyAAxoF3whjqAL+cz0~5?G}6D|8`q+_v+H2FE7QxHxz86gws)# zn&D>704lH(9QK6u4EgW!smBI6>yjeI`%t$BRv zT4wc|UZgM7!-L|_G{JuIxj6En3nS!>?+UMGe^M2&XA& zX4G#gNLv_w%r-zUP4F)9K5C&hTHXo`O7qai8~9=?agn_Zd`*;A@rg~}XwxB!>_l5c z2B6%f(8l(s$hJc0fbJu)Vymjpsg3o`Gkx=N^%RWKgsLYDGYeYW;7{=$B{FU?>*)J~;$mp_0}$ zKW*V{o}PZ3Xj-gaeT1_S`PbI^Tcz96^1bVSJ7M|}cPj?tz28@ZGf$_`Saj zllP=4p%-|rKS=&)RrXYK>uGzi=U6ga8NJfH1N!pXodYlNl$&*9A|t`Ibpzz(1!N7$ zM)HQ6^$Eu^C}mgEVk^dvxm^jX-}JJ3*yCOM!}{w&oVzDJgmw=GPuDYcU?f>(^TH4O z9wLI9eh^sF*K9*Cu_Hsj&~l1=``Lk}BKb=8O*lkFXQFe@5z>@M70w7s@2!GGkD5Q{ zvDJcO8{#;&r9t)DisUlfyeYDubVF2nGEpB#3k^CW>xXXEgO4UUQbL~o?`!{tFV@fO z*ALJC5OuS?L|h5JSO3dW^8QR$NK`wOr+`#LS0JIhmak5o1#zaVwB8{5^|DZ&@sOgI z*)C0X1dWdjoYwc89npUE?oddZk+BQjXdX0&8XtAYG6SVZ_W2f`b04q1mQOmz`*_>! zXNjHGR}LS|A>DjLUUGUL|k~;Ki(DEoej|o z!x=5%cmKODy-?eMtuxVAUbIvI`9L1rwk&<0{sUg=VYbi z5prOsB)Y>Dr^=K(S(qWd2p!)k+@dwE(4Fj<>&RlJe}^0RG{;+C)t{|l;zg|k6%PX@ zHV^myF>0T*5L(Iy_3TB#+kcm;h$W)VH0a@)Yax!8nyxZ=DHv&!3Bu~7bGn%k;#dn<@f;TR=XUYvR1LO zOK&j;8)7+REDjYDl!hD`V>umLev9+; z!P_cb$Dud=093=0gE*#cAjz^pE^UBAC;7$DZ{w=S zP~!+wqg4PIz63Hv@gb+zQ!aT7CdX+YJ4qcPi}M$-_U>*7@4fkzwHe{^U$f{mVzuQM0Yh#_+-Y#GZ0ETfm*u??0nb)!eAE^6tf@fh=1RF{tsl)fY)2wP%BQpgU zid}$`RXvzGi5Mm~!7%u<^V!Xx$(ADEW0Ub#aZ<-a2Bn^%4AgSTiipiI;Kh2b&7&EZ zZ3eSJM4u_C7TzM*$jl6$V%tU}%7R9H)SGaIRV_viWogkEM2qqcC8U^yJZXMauX8={ zy5v4-`@08j7yYIZA5=6bv0jAyu}h4!(&vD9-|{Nbjdwj)XwRcFWqMz|>z>$n$uZ28 zxTnqHnYE=?TVEZ_wFWlw9(TyxN_1(EdXWx3aD+NFjlm|Mp^TPhUef0n>oCtj@*a}0 z+W!KV7G7E&WNE`fz!Wd~xpQ;3{mFAI$+LaeqwM6Q*v@ds0j5*xQTqy6gr$3&VcFCLU^TzQ`d_iZtRw~&Z~h_vpa*mSBgN*Jk+X>J+Dn8DZ?RlPHFouC5IRw`wMwGGg|+7GSM{AK^1A!b5gP)8gBZ4J$di5G;Q03jWgY9vusetGY~=LeHP$c{6GL<$+=FQ1&ZCH0J9>cy*$W@J z(&B4QajeA@@1-wk-ZvuSJEzd;9j|Ct?_uDm&5I*f6v-kH1LBzU&J4Risot4`2iHdu zp$JH1&5eMfzf;FRr_wfQE&kt!pa6)9w9Cu%EhkDj;vXO0O=_fQ=%WecR-&ewSoqN9mv9z`LzW^?u zR*(7-%N%yGg{)Yj5*^VtWCS%^w$J-H<oZ@GfhXFLMLd=kpU4QY`5Osg(ZG+l2eWX@>K{};KNj_e zPy1GNt+S*Dak~Jkm6VaT2{)}ag-K0r;CoC^7GkkEf!K*{E>B-;zJwtBe8F=s8`c2t z!Utt|b1J;h(EKsx<&59b)fQAfVZ9ig1Qu(@g^ZSgq6_4VS@yt+F|wIHM&|x_#WbwK z>vJ@2X>IcAjtr%+SECsR15vZwP}YGfO_*$MPqkq}F4yK(n-L!&7XCkHVUVinOgV8y zl^-1DPddY&Vt1ZJ3KTZG1nZNOSF5M&2yofw8(7inD3>dajQpF9<&twHXIu z=XX&nfPb+-FKvYnQT#V4G$WW?geL*7$f3z27pzC_wym!&S;UllLVs4QPvFEq4B0iW zA@FVN8zOYdo#%?6BW4=wsr?I$!OgalD>rG$QiKT9Y5oq5pg+_11wntND`!B-V|cDF zsPh5=f3_I}pR(s#bBf9#np0p0Bg=8Bd9Ex6Q|(1xVJ$rlg0UU0W-`57&9XQ{BpPe% zam(0ZqAYo7uoS-AsuMtU$#n+MSAM$4<)uXLN1lyc1^d3iyM|=S=g7{$?=462CtOXy zGlFye*m_2KX4e!GlOwewMkeb(p4ep(cW77;2Jo1F!MbNVubD5%T^a1u&DBH2t0A|bJ$8aBs_(WqL)ecawPN+e`I3A;(r1=VZ@7)D!?twJCs?W zl5N1S1$n?Zz=9ZtawM53)P3ZT8h-_cH0&BVYs{OKF_4Qo`1LBtPC-N_nT=KedV`Ui zI;n2ozE)v1#APvf=zFMWFrQ$Hkm>nnzcRwNjTVUONn+$moCZ$Zg#|WOb_dF!!W51r z{rK7^#Y!f6@mhR<@7RCbiYz+B2G8K6_P*^8?!W*?FW`PPQ)VtVPKEyqy}HjuZjsH( zOYskQ>HIW4CotyK4u_|3p;O@L7rbp!@|DTM6Y}!vFwulnm+H+a(XDBn5FNA{<<4%_ zu9X{I09Hm?^kcbO-ukMjmEn5={WUsMT#e(&IizgJ^}Jm}6_$H2$V3{D+1^Z`Gs|!{ zxk^q697;)TBdrT0`PbZ-|A`OvAq0CvQG**hoIM5V=0sEztYoG!U2cd}i~Q?@|2xls zR51SdGp7f}@Y@+dIgmqU`usX(1K^uKP*Si-GwtmD>BHAEFrj5Sl3M!twX9&K7bR@| zkTaC3htg8z8^|_i4lm+V{d@!q_k`?1P^|G&w88ImMIw+nbr`YO>2b8x3z| zN|J4cj0G!{>~ceO!*=Oj$bGNm?#{`PT6T9at%&wMDa=D)wUP5T?wLZcGi0GzX6oRN z$61@W1Yi>q`>=nL%KY$ieUyN%3y8Euc;#>hz{5-cMkq-$^rF7Edd#Fe#%`aARSy^S@?3+ z#OUPm2bUYs)gp*9IU=)$y=G%_gmc2gUvrWfdGL~$F~>MVq>Po}YTr-qvoeU)0;IuZ zFd3VkuNI4-+=M2W0Tt)i=5rmSV|%n56!VxH7({DLGr$QB`@i$6`ohXao|2ppNAFA|Vti?cDZ z7;JI2CXXm;@@C}Fv%u(MV1gCl|Ly=@Ath7_3Jh;O%~`B-V8+y@%MBGtd^7lZ|TTek#*5&Qn`wm|fbnq{`eMVe+YpW_}*$juas054QJU;la z0Wwko2Y6-{BNnaTjfK}-wbH>=u{kUIwjex9zw~K8YNdvbu)(Fsu1%QSLxE$S%Vr5>Kj_XxnSn(9gz4xe zZV16`NMu$&1E5Vu5~}(LY|F(VXe&2JBW{JzwhWbCSU*w#xe9RIM`X2f{EwVJb4X5^ z5%{ATA9otQhYCOV3c?O2GIVQ%x-JuIYUmcloHMoo!9tvwNeFCAlRKVSdIG+_iehY_ z>m#okH>!rc+cd$}eO$z|>6IiqjC`&g99wM{rq}-sV_iFLD%NMv#=RG%dl|7h zHA-Ux}iVwfhhl`EWC=zF( zAV`^ZPwB;vq&;^*-s;pdsD9Ex@=frQZ`SgRw3XilQsL72qE=TZs*7H1hVH-z!jc0P z9T7Vu51snl$usuq4}s9$GS)6+TCkoE8Qbum!WA>h4>5;{smVVlK2}wrNa_jLjvi5g z;vt+Blo7kyU8fDQDmCV?03RjiR4z05sv!X=mS-+3r>hQ~H@tYZ($TlB zx{Lx4Lptfk{H>0lj#8#2Y5;a1j@u@Kv^>y~XHgVLEaD}PSgo1xgIMA2A^EsAQj z1eP9@sI7N~>jGG{vlWYQ(>s5xV2lezK+!JccQ<$kRY%HCF3ptI9)iFF^>gM^Oit;Ght(tx*oQL3Osp z`MQh%*z-BK^{uM`v*5_aER$))Y0?&lK{2?r_ydMwzuPq)1SYp?-vUrj8Ch5+>XvW@ zfY63fyQ}k>+`7>E@_-JDCVk5y>KF$X4#;I>#=)Nzi=rMo-V3TK z?E{+36FS8~@li~v)Uy{a-zJ@L+)zR^c&O!g=Tq7}I6#4Jkg4BaWhCk5RD|7i95Li5 zOVzogI4IG|sJLd?p}-CcJPI>3mm~p|lQNU*gMRd*=Vw~W4Y|=@h@kz`CA{Q(xZ)@9 zXg0MZ&qrup(!5gSh|>gU4gvSU)44`){k=e?|0@8D?oL9#cwAroCLiE z(of<$Lye3C>_vyWu-0_j5v*4=_`XyKuPXM?H}HY^N>EE&32KQu%kFGrIs;ME-i5#$ zz&UoDgramf$LX6S+FhwUn7H;Xr}P6Dd-?z7qQ zsgiR2->=0#WtPA(1C`$j<=Vz}!uL-S^gXcG6XiobNhKd(J*3&A^JcT^G2jtI)6)C0 z?PwHnMCr5z!HpMlTZf?4gjL*(pz(3r?-1|$Z+d@W(iPTN)6ChX0RJF>D_z(}82ZlC(HByn>Mm-9u zR6zRPf5#LnWx604mUNCxyn$|n>(N|_;ADVp0C^GDbe;TifKeDc_*iWZtgPbKa(9gi z4RB0Pq*#}c2++AZJJIKmtR0M6mVdaCRV*jpKMZ}Y>9|KIx_ zK8c?>GYALHldqHKZSXl`^6pZicD2k>~)%3%)to>s1~k) z$#5kDCZnsJKsb13xB31i>$N95RIdv`nszUNFl~|V6QszOWz4tbGNM#O%sP)rm5Yj% zSoWqeC}P4;J0M~*M%Da z4HaeqWXS*{Cjr-8w(-TEp1J#wrS)tuz@~)i>1E{nt^5;IfG?A!Vc*baxn`oL4wRnu zmVrW&$vrcOb-qjx3A@xKjb_AFU?^QXCjqZ*N>d(UDMgyHKp%mg@ybNIU>Z340hz!Z zEL25~U#)}L9yS-}Ow==|LV@j%~19)eb$awX3}-yrbD}h0%iVF zJ6BXnQkG9wPp1?n&w|=%f^6)jr%;scj#NS6FI*KlFY;jqv+Zahj84v9*ei3yI0xJ zr06|Xuzrfwo82&A51U*Fqg&&UAn8D(8r;tTgvhORueJ?g3c@3+b;t4yEPX)ss@|cM zGjTgJT$c$UaHXQpJ2XIDsM>LmJ8%0l?ei2qpgDm1; zM0*xLyJa-NQWLvWg0exj++I6&0L1g-55AwVQ2Y8w22}NX@po)=aUX~ddqA0#@VEv9b#@JN)nq17 zl2|miY!Fz5&7OSU3VR0{Pr|H+v)XTEx zOj}rsKLPFv`I(;aGFDPxc*waF7M>{3?C7`yTt!(~i0kPZc(xL{vS$H5bJwuND)k;4 z%`iVkl4}uI>^Ft2W;k+Iu>rhxMxtw*zD=A3_1fyT6I&F?5Y*DF)=eZVXQuW+)(ypA z456sBL1kwK2olZ`;bJBu_7%1cNx7}~^5n9$HR`wrOWdyZAyQ~oy7h!|CiB1)62^3t38pFc@w@EZhp>^m4HIK;I7S@zv8Sf$x}Olw2jNkeHeqBn7Mv{ zt-7R`N%FFCzv!_NA$F7DqE*G{e4Y|mHlTE5Fgt+4M*hG^{LSP8Wup!_G8qWSx|U*)Lurf;O*qT2CaI| zxehhd6G$gbdcQAx>P`b=)Q5}`$+>po!8{udQvneF(6}JpGQG|?f`wW}F z8opB;H)dQKe7T!3*;k#ND*M_W%uPd8G~7Ye1t~?5rTg5j*Y2cA$puXt%4Hv0gLufV_*vXaFlS$t4 zfOdOOe-2t|>UHH`nLDk4E+K_ipTp-(vN<8Ui-H+BSh;Mt#8n?&A3% z-)LjTv|P=@u-}2zJpJ3xP&dXVHfH)}E|{~4js3M5`5WMDOitghN-J42nc%8_Lb_`q zt1V@i;&B^}X!XXP(GoKJGTS3 zro8v0a5d80p>lpSw1zQ;stv0JpOthzx14D44RKIq>DiCr*Vdgq7%?#(iD(u2wt;^G zTq`F_Zz_UP4Y(FASZ&}Suh$4Gum6D&jR37%;rC!8qR5tO=k%OhnIEf($(b4lZD1N7 zY33fLJ4#IBNrG}Rg0cNqoV@xSOL|IKHE_@Sv~EU62ImMcW|K(^ z+r$68!v5#XTd%}EdQSl>2l6VR@YPYnMwWKuTr6}=53Q6^pW_pfe&hB^^oPpYP$iN78sp^ zNOIVQwi64LFgJsrcr>fM%kGp8b)95&G-Wog0i~raS(l|J^MmDolO`NZ+*Bl%lm|yG z+kn-{bp^qrR9G{9O5E}*`^ov|23?qBN9v@{JJJ4kTP!*u<2F@_wy=M#zL;I~MU zB2g&{9?dkZvAJ{lK!!mIlB8(aj#&mP;pv_}gT=?{-!zPSOG8L@!VFMoH@&CV;b5vH24*4 z1AvS4%DR==a?dLF=O{U1A6lbu>p3ekuMsNM4J=22dteVqoU`Aem(4JhY{E|n=r4f6 zpQH9u!=E#_Sreu@y#0bk+r+@J40ztotV8EOQp^bHIBefZ&#uRZ+c)^TUNi$!o%(`j z88nE{1k1z7Y|fnzL)~Cg2k48ccjlNkG}mjNaefY~v}wT_VYQB9+91npLtNs)e!r|m zunq9){uIw@POny?B`6yz00Abt!@;px-uoUt7b?pHkq}Df*PiR}kfcn%%RDGxZPM5I zh39}tAlzpc?3q#azE-1tK}R@r2MkA$9ms%tp*@AB8?nHi*m6<6%!(sPQ1*+#Hx3}~ z@;)@@L@w5-gUL#Sf}fE_{pMi*Q2^l)Xa*uWDt7=Q#PSg zGUujeD9fF)7W8EOuS-GuC%5C^kTEdr5wcMv5N`b_KgUw$*d#Cv4o?|=3)hQ4a?1Vv zC^XIV8b`plFrHG^OVd2|otHrG;RRoa#M?~UZNthoOcnxQe9qu6G#E~#3mOR2beK8I zmn|B14%={mm8}UFee8HlcZv*WYU%`mGiNd!RzVIgwgVhIck}qR>_A!oB!;AVK&Amq z7@4Bm*+V*ruM5?kTnl9~7BOs{3mS47xgG=vN)4E!h^nc%^03zhP24gg&vsKMV$NWm z3$yPbg>m{|ai`gE1{djAHgQ!kupY~8CYNn#tAJU_NC7f2b1Zb`E*-W3O2-lqjstIv zxv~aSmAPKzIYl)?I7tlZQg zg!%tq5|}d(StC{v2ZS}!uY~z%ZW{@)>2*&ct_iNDuIhy| z4T@6S_^fQ124?dpu;~Vx=0TSgu0WV&ybilT#~VL3p;M9c5>zWRB`mh<279&B#0c$) z0X3PeOUqz$eA=O!oqAu^S+#Y2(NFsV-O8j;@I|8)Ru}Z5l zTRl`5F^aha#vG?)@jLc(d4FBgf7Ej15Hx|JEPCaCO!IrL@2m5tp_(lxM89=tdLLw7kqGA zfeR_s#010*7(gZy%_aN^s3-4bF(lNo52r``Do>nvG9y*N?L7ev6Kqdb z+VQ`GmHzA&97~+5ny!Xajx;?Ol_ygfOOYZNTFGFIC@CKs$ zjk}x91~yi?cQ6(jkK{lo=JxR+c=jvCOjpcx<`acYY&VR)ZN}?8H_YW?xKju9q4^@s`Peq)q^`%<0%5IaDYR!g|qe-j3?Ar0c~AR812$TxU0*p^=k)f3T80#+#9G? zv|OMVfHg9gR$=!R+6-7B67Ukgz%im}YDj0EK+4AO%-K#VQ0IO^qthL}9T{{C}u{fFL+^aplHI$NB7l)?Y-$j#_uXv(8I z&6}=-2~_QIUSik(&fL4Xl)t(?I}Pn?e%^2ch2whkNeyN~aZD9rb% zUg)!QpF_KNF^TbPy-Cm34!sp~CJQ+}o{77mEB9ktTQ5O{fOEH6fM=i-qo7Wn5<{5-;Xs$3G8ynmy6t%=o^?m!}$E~MS z??jfBZJ}O#+UbX@Qr#Y{ta>Ly6Z($Ls8qYvc-RrOw4>KBnYs9}LF;DtcP#4-vex@+ zy7vq$e*SoKfz;w~JKJDEshz=!v8pTm(xI>kE)kT22z#T6mJXxN3%`V+i4WWhErN3y zF9Q7l(Hr`KfQM6lKnu4Z4)>=<(Bsw4Q7_L%g-I@`TRIi%0SgsUUfbs3SLF2 z!=Gj4bahl$wm$x=R7$GQ`|)a(2<@mPF{-yFHW6E1yk!YJL(}@u4e3I!cmC!44>fN_ zUq@3yVjge4f(^_18;GMwcq7iYd~2R?sg|CD<&(~}<~?h{cWL}Sp-fYx$1}XY7o%F1 zd}uxNV92(1q3!a0hsok$H*GCnV`!^=G~K15jO|rb?S!HLwko4<#b`cB(FEtKxue&w zvU6~N_Mcp@-`MJqa@))1;0r16>U^-Q2eh%An)BuBc%YZpxuROGG7lFevn^_#W)qnh z{#xu!ap2=%(qqki(z~Oid^Dd$CwErJR|=QZ3WE>KAaa-d2IOvVztAGhE4gdF)Z)O+ zXdV8fD+w4kpEq-?zCQY$-iCSJ^9Na~yG-R~Y7|I`8G~bUrY7bL>yCpi{*D)Six^$i znie@7P~}|td@&pkR5|yt+TDhJs9eA#MY?iROjrRWs<_-^5)hsDCgluMfCvh$+2!xz z4n75eODt#ZLq-ksGK@M){;5E>8}a6Ud+#~~L<1K|FZCFq3Rsd%q~p!n4`WTqI8V@EM2Y$&Smx91F!}T%sP%t>M9sHk|DS z6T4vR1?@+A5OMYbanja{al5>!+=3P=%sNSvFtIm{5fa;_4&&#*k@W|FBmBmYa{D#% z$Sv^CJ*s~ti~um)J;x=${|0bGzIa77AM+f{sDkf6%l^{!b#l+=ez+D|uvWm_>5F5| zuK4j8c{Dx9M7w7Ih1JSFmmR0_V@O8SZW+xc&;!{ZOZglDpcW~X*XA$L;}`Nj z%@01WB?2h3_xe!2zK-$e;wK)qE6nF_4P62l_tg>MQNlZo0PxwQ{*U*{p243@0>}6X zQqpipj<}^x{bS4UmmM~;Uxss4`G>ZjE6(V`;RLcM6m%mkHA-|}zEW?`)y1bm9ZPs0 zkM|Gl&Lj5{k3C!Sx;Xsy-|E@PUTc<|)EC;Tu=?botB)EgHmuOT(4D*3$|aA0z~SqT@7iy5 zH=l9@9py263$;=5Rw$r@P{-r=9&}{#wf-nn-R$l_hM(H=Ja%=}W4*t^@8BqM zuLK>yOKBPp9*eXU(uAnZ?^cZPlN4bqul^sHA2``SC~>`AGPQ zx%Yg98Ah7nj4u95_gmDw;e@uzpt;)Abd4q`F%D(|6 zpt&R_@@7>e_?}wiZ9UD+uCAH|IU&*ZE1%fKEWNbc*fQ6^xdPA_h3u;g;3m9pbi1aM zk1&9nB~iX|ZAtA~z@cl^FL&lO{2REdMs%M_qF2lBA3&Fc>gPAv6`uHhW7B&*0_DOt zk^}c2HuQ6Q3=cB_G*|)AVDx-36}W)-q?Ka0jjO6mVN#z-TIs-W^1MrT`6AISIs)O{ zuQ6G|do;}?FE79E_DRe0(p>=7-~(q4FHZh_@oCcoCn|!=Hr9s(w_OTSJWSN${j~NS zcy61$`iOM`Ms}JFD;hupbR)snXD;1+aX7;Jt>oe2f&<#*6Gw(_D$iH$d0Q8yv^eO% zXW7PBe_{984z{VG;)q{Vyi=^Ps7pc)~$LlfF>IVv;O%hwTF?k}7a!Y1NJ4PO97X?9Nl z3O=99OhEbF>}YiEG6}c2g`q7GMP+S}IJ8$iz>pKi z+j^+YcU(~e1$$8~Ssy@Do(F>Cs8hS>`qd*8{n)KRn8$+qq_-)^T&z6j4e@0whx1>tLK{RE|U1REaA ze3q5J>4o$HJrqEO)DBBNi(kong?9ZW6iHo70I*@;doM6@Bj>-;V-$C9M}fB60j%Xo z(g)5sEJ}7<1hn??3hAh6i3UEOU)Qh5`QxnS9H;iIlnZBEy@~M)IIP|?ta6ImM;pd4$rJM*`ij`=n70~wLFA%>#y(=@e`4T_g%Y!sI8i+0Hy=(O?l;LAp^oD4utpt zge1M{elC0xMhF0x!#^;%?(CThT*%U1CFl|h8YlV+=jR^F3F#mBn-0?5nb zyASyY0YO)mWEQZWC02O#0S0)0Q(q>-)Q*LBaZuC)wNS5i6BPBhU*-9+dbr*h*QSp{ zbv*dQ6t?sjL)d>#5%yqY*0~q87osMppbAhyIZ-u6ow;ib(V5n2`EEsUS*sE~zvyHOB@>_Sm;mtERD-{Se~WREb&a00c}li_Ui zRK)(ZIQr%KCt2(ebrZIg@-6(yFt_qkkyW+z!BUCI5kMpa%EbyTBfC!`*# z$o0-yA(!>oF*VxkgWK|iw&Kspx}`$}WW`gmRVO?%CQT#mV9#?kahT)Hyo;vM4}J|4 zP}KV-8+^7D_UjOmkKPVL185i5aBvTcX5BF`)pUUYp)87`7``6>ljtA|!jf@+Mb+9S zuZ{2-#1+aA2LrVZ)ABWnDqiH7q6Q{ zhs=Jgc#nnBs}Pw~iR-8#Fr<$zzROuF#i!xwJ(+em_Q(N(FnP(Bm``#*II7(8$5{c9>pKG#n`B~`92(+0ao=4 zCL%&yVI2&O_{P`qA#PDc>;jI+%xGfH5yUEs%(v5KVBHYgMIcDfOw@`|ha7!t0?lrqrG1H09z9YBfUe@qB#YUl4XPXG0bjF*Vork& zb#*}==W9-H_{1>uExY^WHsuwq{O&U!0>Ho0Y%azm*qMC>I=Y#tn&$kv3o?l?j?GxV zhqx{8z`|Axe_2bjKo)smDBPF-6A!2a<*e7223~LV5%E zl`lK#_rf4zZpi&SbI2?k81CD39EpYQOmcMz09M%_VB;BH37jr;Wn3|vuYtV$W^txb z*6rufyX(tNY*%?&wo<{^#<}-BYR$N)z)BFd=NY>bGHmv~ zOAeTZNXyzW{s6@JDOw}Z^~~Lv2#dS&qZEuQGs6BHc>IjcO(-__vG)Z2V_sK02cM5t*2Lb zSO3>Js1eO?F<&o?arb&^o^4O5KA@IR<`XO;CbLa!!7ef9lRl5Od`Y8y$%OorYdbcyypN$HL(Ysltw@vu8-fcaxU{zPKfghtz^i@$LNBu8Pmp(u7?q!7Gy!v?( zluo_ND)tzm2KCHTP1VdiJ>5Oi{}ck2qw!6so(%scqS_2r-TX@_p$WBFtH$_btNSaH5qS9} zCaBT;u{Q7T?dP%N|24fOBiasmtL6wwMZf)zqkvCSKx%SyHnL z{aDWZcDh1^q3?Nu|LH2(1O&}jvcw9$tIM1ww`6)JGYa18?*H4pf{?{b%lJJHr+16i zwRXr=KoGLE_rvIWDzGEQrbV6Uo;Ew@wd+lvpDsZX*X#f7bE^6&UZJ-E#^f3GuPfMc<+OS&u!Fnq z(Tca~Vv#D*`(cCW>vJ!*yUYLU?CIZG_;1>+#9z-J(_fEA-5*nlZy)J#I-s8`cB|9INGmzFO=N`4^4TBcX?EsUImc+O-U@$wOn$^k)+B_EP@6T}us z6W`lh?Y`9>!Ko^0^!JxQd}bS-sC02A9UV)MAwAPw68W{=fLIh3U&PIr;x^d~eq-{Y zw5cz}5F4E0Ut>jYbG8B!A>V42m9b=ZTs}(a(}1|}95p!txIjW86?S2H(@Z#*FiqA! zo+0mL3NfmGa8uy**a9P75Y$>~YPKh3!^)u=DB5dY#`jqQc6uw)m7`z=ix%yw9ZgGT z?7?Iw_jt190m=;bcwopP*9#z}CCxKC747yZ^pVf3<&ByJI(8iWxo!?~=fXv+Mf`LI zwQ}&)+-B}~aZ_Lm@N^q#WcSSZS<4!*q33=LZF2Lka+y5jH93f{IAG!QGjs|3!j1I; z%4A>_iOC0Y8$TIQKtzZGbG5h>_ePXqtQl8uy8rLrYA zxxX^@=Ze%vA@@3xA%9CM@H%si%EHpS)Tg_BAKq!a9^OYs`^~9P{JA{ukN0<;)KbYj zAgT5mw*T4iUp~fBX6+TayAh}V67_TVJ#PkwyZ!D~ zAh)nR6hodYWyw3_VrB$ldpSj-thw>R?xgO?WC`I20_VbYA|x9yV!Un(#3EyzgaB4>$az-{C) z515|b;R#))T+H4s;9JTL`_FC8sss zN`#3kz`bxh2)uG?6~1R30H;Fe_l-rTS~utX3vfA4W0OJsFeBxw@04##>;}@{8ya;W zHo25453_mdu9;!Jwq)v?ZA1Om@&mto zLiJR}akf&;t8qJ;Hse-+Evufx2%MW_V;Tx_cDXgLLN(2LQuzsh~ zA#eoi8U|#6-_(f}u^vdX`nrJMEhvoB%ZX%?oZybcSkD)$Z|a`ZADc9nk5JdR$<+Wp z7NN`c4u0#@3%Hd-hq9RpO(j_LysMyOS(@iZ%0$)X-!ju`>?P?X#}jI8RWuw&PI;XU zNYDrzhUS3=g5T(C`|I@;kd6o^MilStjFUnKMR#i9ejhfwlJ|)iiR>e$u2f~L9MG^G z<+@EDj=ZeUYe3FTar6}p?!Id#?CbPKnV|CN%F)v-W6R9^X0=#QKLdw%1R;t$%mwE< z!V4vOF@>$-)qVzcF7&IH zT^e+wAal$bvaqc2<4C{Kuu!cyn@re9^J!rKYz6I&v6@u-7-FJK--+_UGsAolcVOh3 z1x09g`uZ@N{Qj)5Pqug-JT6tuCtWomPQ@6fh;yB#yt+}=av^Yj6xH?eB~L(Zb++Ii zOrlUXa*1D&Gx@^Ruc-W-z-czn>;ZYoU^pvzS?YCF@i3Yzo2mW zJbcHY#IAg^d1$;9=hG(}k2%I^)Ky}rg*U&kW@{+loCz|;-k#I4=3UAfu6$VM3ft`* z{;6?puG9u2{7S6xRR){>p_h-dAg~p>8L@pAcz`0Lraz~P#3IQl`DP9FM#O88C{@|8 zV8%;4snw;Se=Xje_Jp|#YB1gPm2ZfYOXAH|j>M628>;JXCe)T>7kzXI@0+0(3{C4v zL(x63|Lt=P1_6X@{lqZqmLJ8;ktHnh?lW2bgHpPxKzZ@kx=}vYkS&4Y%_QjfnoH0h zQ+5TtL0|Hgp+U%+Iol$5JL76*8{W)=!AgBx*yF)wN4ReSkpY0pfny~Ab?r-Uz5Z$e z`2d|%zPGHL!VI;aEzgI`GTQ#|UsnCU zbXguKEGqGjWWVIWz>xlzE}dOGZA_j2LzIg;7xwFtcwaFCUk2@eQNm1?ncjBwIEq&X z(B}f=t>WXrR5Nw$jYh3uYFnkbvQ>_gd-6&1i7@4<9M{W}P}q6`@_1^1{v`l8fg7gl ziAa9d&HClk0f79Yh)r#7>(*VSxf$QyMw=toZ4yA9%MG%-(CW-p)$!f$r^5#@<`ua1 zsHLqs^n054zO%=j=QN&G&ECfEfewG~c*NQ6f>*xi54`{S@2A4!ZLeyM%PZc(O%Hx9 z2cKs%+@M0eZ>2kWwmzslz+POq=*|qiT2AZ2oU_VI{7(~;*n;{w6iUB^-;?_Z!d)+q zV2oB3!cDG$;B8J4FCk7BnaeecSJd`-d&D(2=K5bZI!ER z!e4K@aNOII6TXAm*>4Ft)cZm4Zhy6OYfE>HalTz}+U>(wmOM;zN6tnzPy5R3O}q;X zr+=TkJRJIYt(o8o*$`D@V;ALLuzum$BS>gkM(iO}Ci;tPq#?w437>mE=47;159kqe z1-c40HXuf0lXXFIj@{&T`uHJ=V?7`~hQ0*glkr0rYCUQP#7B$&fap*J&YfT)u+BIx*v4S_SoT&5K~0fOzVzl{%~t7vVp~6e-v1KNeFqk&(wyu z;g#gP;{`S4Ph>v#KOte>x_-Y_RFX%;5`$j7#v7_ymTX$rQYfYabs3{n213v}JdNZI3aepB0E~Ufj_1s)7yzS+RkT zCgNJfI|oD3o=}OsZAjGve%7jwdpc(vKGIX{&903B0u*Znp3S&5 zCnII&w27iMvENM$q~Jgd~5bcn2J>|dIRbyy>cpU#g= zu&g;IeNAqhurPI9#WTee2xdw9bB7^Eh-7KQ!Izr?uf$L=7HT-6zkmJ>3|L!3c+Y_e zZPp)b5xO?zAOoITxkZjA6@! z*SO8G++WYx>s>ArHq&X2$db53>J(x5JOg;{a3=h{A8F@a@(FYxT<+k6p*BS`fvI59 z1WBAR%xG8e)O|M_d^P9mM15-0qn)ZGF=1^Df<_1L9Q>wr;hRg|9Cw7|)hm=lc)J30 zKdybXYr}a6tqrlvZ!;u((M6#}I*AxPa;Pjf4TAB)ya@YB(pTF(ybVIUOL9}&YHlsT zZ#Zs#^UhE2@%;#$SkUqFvDesAcce~l7AF7{bY#t10fG{pgI$sF=LO~K z+}K!;*Nst&WjNc;lfN%bI>d&4Xm7B9?`g4rScViXjp5qTJ?8t9C7D;(ohWpY8`1L2 z(nGYJSb#bleXRFs(Z43(Uo3VR1l1W1er`nVd^4f@MkOJWMmHqTw^$$m8fQHFxf~9t zuAB!aDZT5E_H@+eX(7PpvI*#nLYnbE#H6VoXUccp<=Y2gDyDkEw(fhhH7^8&hP(rf z!jD)`HgN`Bi*>{T=jcLMPKRpJ#@DH}en1B$%x{YtC26Cx*`ezG#%ZsB$`+noQjM>G zLM)Rk;l}+PT}>VH4;k1n*7+^x5KPmFY^NTh^Kas!=OB`xp$Km%)}J<(+O~vJxJIXK zofzeD+ZrDMI^O&sB&l0ul+I}(r*vQ_vQ+Zp= &wh^Q$Me|`=>15b)=RM}?hCAIZ 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

      >^sB0Hv2An$-{Xz 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 diff --git a/database/upgrade/upg_sys_menu.sql b/database/upgrade/upg_sys_menu.sql index ed40b1e9..e24a0d40 100644 --- a/database/upgrade/upg_sys_menu.sql +++ b/database/upgrade/upg_sys_menu.sql @@ -265,7 +265,6 @@ INSERT IGNORE INTO `sys_menu` VALUES (2141, 'menu.config.neSoftware', 4, 23, 'ne INSERT IGNORE INTO `sys_menu` VALUES (2142, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2143, 'menu.dashboard.mocn', 2131, 9, 'mocn', 'dashboard/mocn/index', '1', '0', 'M', '1', '1', 'dashboard:mocn:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2144, 'menu.ne.neConfPara5G', 4, 11, 'neConfPara5G', 'ne/neConfPara5G/index', '1', '0', 'M', '1', '1', 'ne:neConfPara5G:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2145, 'menu.ne.neConfOAM', 4, 12, 'neConfOAM', 'ne/neConfOAM/index', '1', '0', 'M', '1', '1', 'ne:neConfOAM:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); -- 指定记录条件更新 From 93a4a40374c95c2e1ba9a72ba8146416acbadd43 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 29 Apr 2024 18:21:09 +0800 Subject: [PATCH 050/130] =?UTF-8?q?fix:=20=E5=B7=A5=E5=85=B7sftp=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E5=88=B0=E8=BF=9C=E7=A8=8B=E4=B8=8D=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9/=E5=A4=8D=E5=88=B6=E5=88=B0?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E4=B8=8D=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/ssh/ssh.go | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/framework/utils/ssh/ssh.go b/src/framework/utils/ssh/ssh.go index 1cb41b59..d25c686f 100644 --- a/src/framework/utils/ssh/ssh.go +++ b/src/framework/utils/ssh/ssh.go @@ -431,15 +431,15 @@ func (s *SSHClientSFTP) CopyFileRemoteToLocal(remotePath, localPath string) erro } // 如果目标文件已经存在,先将目标文件重命名 - if info, err := os.Stat(localPath); err == nil && !info.IsDir() { - ext := filepath.Ext(localPath) - name := localPath[0 : len(localPath)-len(ext)] - newName := fmt.Sprintf("%s-%s%s", name, time.Now().Format("20060102_150405"), ext) - err := os.Rename(localPath, newName) - if err != nil { - return err - } - } + // if info, err := os.Stat(localPath); err == nil && !info.IsDir() { + // ext := filepath.Ext(localPath) + // name := localPath[0 : len(localPath)-len(ext)] + // newName := fmt.Sprintf("%s-%s%s", name, time.Now().Format("20060102_150405"), ext) + // err := os.Rename(localPath, newName) + // if err != nil { + // return err + // } + // } // 创建本地文件 localFile, err := os.Create(localPath) @@ -468,12 +468,6 @@ func (s *SSHClientSFTP) CopyFileLocalToRemote(localPath, remotePath string) erro } defer localFile.Close() - // 创建远程目录 - if err := s.Client.MkdirAll(filepath.Dir(remotePath)); err != nil { - logger.Errorf("CopyFileLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error()) - return err - } - // 创建远程文件 remoteFile, err := s.Client.Create(remotePath) if err != nil { From 10ac5629a829fa97f2f689acae60fba2f868b183 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 29 Apr 2024 18:21:42 +0800 Subject: [PATCH 051/130] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83OAM=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E9=BB=98=E8=AE=A4=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/service/ne_info.impl.go | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 2680dd53..814cd76d 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -486,6 +486,52 @@ func (r *NeInfoImpl) NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType s return nil } +// neConfOAMData 网元OAM配置文件默认格式数据 +func (r *NeInfoImpl) neConfOAMData() map[string]any { + return map[string]any{ + "httpManageCfg": map[string]any{ + "ipType": "ipv4", + // 必改 + "ipv4": "172.60.5.2", + "ipv6": "", + "port": 33030, + "scheme": "http", + }, + "oamConfig": map[string]any{ + "enable": true, + "ipType": "ipv4", + // 必改 + "ipv4": "172.60.5.1", + "ipv6": "", + "port": 33030, + "scheme": "http", + // 必改 + "neConfig": map[string]any{ + "neId": "001", + "rmUid": "4400HX1XXX001", + "neName": "XXX_001", + "dn": "-", + "vendorName": "GD", + "province": "-", + "pvFlag": "PNF", + }, + }, + "snmpConfig": map[string]any{ + "enable": false, + "ipType": "ipv4", + // 必改 + "ipv4": "172.60.5.2", + "ipv6": "", + "port": 4957, + }, + "kpiConfig": map[string]any{ + "enable": true, + // 必改 + "timer": 60, + }, + } +} + // NeConfOAMRead 网元OAM配置文件读取 func (r *NeInfoImpl) NeConfOAMRead(neType, neId string) (map[string]any, error) { neTypeLower := strings.ToLower(neType) @@ -499,8 +545,12 @@ func (r *NeInfoImpl) NeConfOAMRead(neType, neId string) (map[string]any, error) // 读取文件内容 bytes, err := os.ReadFile(localFilePath) if err != nil { - logger.Warnf("NeConfOAMRead ReadFile => %s", err.Error()) - return nil, fmt.Errorf("read file error") + // logger.Warnf("NeConfOAMRead ReadFile => %s", err.Error()) + // return nil, fmt.Errorf("read file error") + // 无保留文件时返回默认文件数据 + oamData := r.neConfOAMData() + r.NeConfOAMWirte(neType, neId, oamData, false) + return oamData, nil } content := string(bytes) From 4bbfc12c71a38396c19f1d0e4241dfb46b904af2 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Apr 2024 19:52:18 +0800 Subject: [PATCH 052/130] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E5=8C=85=E8=AE=BE=E4=B8=BA=E7=BD=91=E5=85=83=E6=96=B0?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=9A=84=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_software.go | 30 +++++++++++++++++++ .../network_element/service/ne_software.go | 3 ++ .../service/ne_software.impl.go | 18 +++++++++++ 3 files changed, 51 insertions(+) diff --git a/src/modules/network_element/controller/ne_software.go b/src/modules/network_element/controller/ne_software.go index 5a60173f..1f372bfc 100644 --- a/src/modules/network_element/controller/ne_software.go +++ b/src/modules/network_element/controller/ne_software.go @@ -162,6 +162,36 @@ func (s *NeSoftwareController) Remove(c *gin.Context) { c.JSON(200, result.OkMsg(msg)) } +// 网元软件包设为网元新版本 +// +// POST /newNeVersion +func (s *NeSoftwareController) NewNeVersion(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body model.NeSoftware + err := c.ShouldBindBodyWith(&body, binding.JSON) + if err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + // 找到已存在的软件包信息 + neSoftwares := s.neSoftwareService.SelectList(model.NeSoftware{ + NeType: body.NeType, + Name: body.Name, + Version: body.Version, + }) + if len(neSoftwares) > 0 { + neSoftware := neSoftwares[0] + s.neSoftwareService.UpdateVersions(neSoftware, model.NeVersion{ + NeType: neSoftware.NeType, + UpdateBy: ctx.LoginUserToUserName(c), + }) + c.JSON(200, result.Ok(nil)) + return + } + c.JSON(200, result.Err(nil)) +} + // 网元软件包安装 // // POST /install diff --git a/src/modules/network_element/service/ne_software.go b/src/modules/network_element/service/ne_software.go index 0b10dd62..2c18615d 100644 --- a/src/modules/network_element/service/ne_software.go +++ b/src/modules/network_element/service/ne_software.go @@ -25,6 +25,9 @@ type INeSoftware interface { // CheckUniqueTypeAndNameAndVersion 校验网元类型和文件名版本是否唯一 CheckUniqueTypeAndNameAndVersion(neType, name, version, id string) bool + // UpdateVersions 更新软件包对应网元的新版本 + UpdateVersions(neSoftware model.NeSoftware, neVersion model.NeVersion) int64 + // InstallToNeHost 安装包上传到网元主机执行安装命令 InstallToNeHost(neSoftware model.NeSoftware, preinput map[string]string) (string, error) } diff --git a/src/modules/network_element/service/ne_software.impl.go b/src/modules/network_element/service/ne_software.impl.go index 0fea558e..3e4b3a40 100644 --- a/src/modules/network_element/service/ne_software.impl.go +++ b/src/modules/network_element/service/ne_software.impl.go @@ -127,6 +127,24 @@ func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neType, name, version, return uniqueId == "" } +// UpdateVersions 更新软件包对应网元的新版本 +func (r *NeSoftwareImpl) UpdateVersions(neSoftware model.NeSoftware, neVersion model.NeVersion) int64 { + var rows int64 = 0 + // 更新同类型的新包版本 + neVersions := NewNeVersionImpl.SelectList(neVersion) + if len(neVersions) > 0 { + for _, v := range neVersions { + v.NewName = neSoftware.Name + v.NewVersion = neSoftware.Version + v.NewPath = neSoftware.Path + v.Status = "3" + v.UpdateBy = neVersion.UpdateBy + rows += NewNeVersionImpl.Update(v) + } + } + return rows +} + // InstallToNeHost 安装包上传到网元主机执行安装命令 func (r *NeSoftwareImpl) InstallToNeHost(neSoftware model.NeSoftware, preinput map[string]string) (string, error) { // 检查文件是否存在 From 20115704cc59432794a0e50163a3a5bd9b3738b6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Apr 2024 19:53:09 +0800 Subject: [PATCH 053/130] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=BF=BD=E5=8A=A0=E7=BD=91=E5=85=83neType=E5=92=8CneI?= =?UTF-8?q?D=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_license.go | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/modules/network_element/controller/ne_license.go b/src/modules/network_element/controller/ne_license.go index b1253b81..14e2695b 100644 --- a/src/modules/network_element/controller/ne_license.go +++ b/src/modules/network_element/controller/ne_license.go @@ -167,6 +167,30 @@ func (s *NeLicenseController) Remove(c *gin.Context) { c.JSON(200, result.OkMsg(msg)) } +// 网元neType和neID查询 +// +// GET /byTypeAndID +func (s *NeLicenseController) NeTypeAndID(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var querys struct { + NeType string `form:"neType" binding:"required"` + NeId string `form:"neId" binding:"required"` + } + if err := c.ShouldBindQuery(&querys); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + neLicense := s.neLicenseService.SelectByNeTypeAndNeID(querys.NeType, querys.NeId) + if neLicense.NeId != querys.NeId { + // 没有可访问网元授权激活数据! + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) + return + } + + c.JSON(200, result.OkData(neLicense)) +} + // 网元授权激活授权申请码 // // GET /code From 3ed0bdc813d9dfa48f197b2afd6b83e732e5006f Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Apr 2024 19:54:04 +0800 Subject: [PATCH 054/130] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E5=8C=85=E8=AE=BE=E4=B8=BA=E7=BD=91=E5=85=83=E6=96=B0?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=92=8C=E7=BD=91=E5=85=83neType=E5=92=8CneI?= =?UTF-8?q?D=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E5=A3=B0=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/network_element.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index 5143a4de..07bfa740 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -245,6 +245,11 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeSoftware.Remove, ) + neSoftwareGroup.POST("/newNeVersion", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewNeSoftware.NewNeVersion, + ) neSoftwareGroup.POST("/install", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_OTHER)), @@ -278,6 +283,10 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neLicense", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeLicense.Remove, ) + neLicenseGroup.GET("/byTypeAndID", + middleware.PreAuthorize(nil), + controller.NewNeLicense.NeTypeAndID, + ) neLicenseGroup.GET("/code", middleware.PreAuthorize(nil), controller.NewNeLicense.Code, From 49a7d10ea068ecdef61cb17507a32264638243f0 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Apr 2024 20:24:37 +0800 Subject: [PATCH 055/130] =?UTF-8?q?ref=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=93=8D=E4=BD=9C=E6=94=AF=E6=8C=81=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ne_version.impl.go | 396 ++++++++++++++++-- 1 file changed, 368 insertions(+), 28 deletions(-) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 1d8a2737..2d2b378f 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -4,10 +4,10 @@ import ( "fmt" "os" "path/filepath" - "runtime" "strings" "time" + "be.ems/lib/core/utils/parse" "be.ems/src/framework/utils/file" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" @@ -119,6 +119,12 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp nePath := "/tmp" neFilePath := fmt.Sprintf("%s/%s", nePath, fileName) + // 网元信息 + neInfo := NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) + if neInfo.NeId != neVersion.NeId { + return "", fmt.Errorf("error found neinfo") + } + // 网元主机的SSH客户端 sshClient, err := NewNeInfoImpl.NeRunSSHclient(neVersion.NeType, neVersion.NeId) if err != nil { @@ -137,28 +143,23 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp return "", fmt.Errorf("error uploading package") } + var para5GData map[string]any if action == "install" { - // ========= para5G公共参数文件 start ========= - // 网管本地路径 - omcPara5GFilePath := "/usr/local/etc/omc/para5G.yaml" - if runtime.GOOS == "windows" { - omcPara5GFilePath = fmt.Sprintf("C:%s", omcPara5GFilePath) + // ========= 网元公共配置文件 start ========= + para5GData, err = NewNeInfoImpl.NeConfPara5GRead() + if para5GData == nil || err != nil { + return "", fmt.Errorf("error read para5G file info") } - // 网元端配置路径 - nePara5GFilePath := "/usr/local/etc/conf/para5G.yaml" - nePara5GFileDir := filepath.ToSlash(filepath.Dir(nePara5GFilePath)) - // 修改网元文件权限 - sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", nePara5GFileDir, nePara5GFileDir, nePara5GFilePath)) - // 复制到网元进行覆盖 - if err = sftpClient.CopyFileLocalToRemote(omcPara5GFilePath, nePara5GFilePath); err != nil { - return "", fmt.Errorf("please check if scp remote copy is allowed") + if err := NewNeInfoImpl.NeConfPara5GWirte(para5GData, []string{fmt.Sprintf("%s@%s", neInfo.NeType, neInfo.NeId)}); err != nil { + return "", fmt.Errorf("error wirte OAM file info") } - // ========= para5G公共参数文件 end ========= + // ========= 网元公共配置文件 end =========== } // ========= 安装命令 start ========= + neTypeLower := strings.ToLower(neInfo.NeType) // 命令终止结束标记 - okFlagStr := fmt.Sprintf("%s version %s successful!", neVersion.NeType, action) + okFlagStr := fmt.Sprintf("%s version %s successful!", neTypeLower, action) // 安装软件包 pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", neFilePath) fileExt := filepath.Ext(strings.ToLower(fileName)) @@ -166,9 +167,9 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s", neFilePath) } - // 预先参数 + // 组合命令输入 cmdStrArr := []string{} - if neVersion.NeType == "OMC" { + if neInfo.NeType == "OMC" { cmdStrArr = append(cmdStrArr, pkgCmdStr) if action == "install" { cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m install") // 初始化数据库 @@ -178,7 +179,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp } cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart") return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 3s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && "))) - } else if neVersion.NeType == "IMS" { + } else if neInfo.NeType == "IMS" { if !strings.Contains(strings.ToLower(fileName), "ims") { return "", fmt.Errorf("error file package not ims") } @@ -186,15 +187,19 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") cmdStrArr = append(cmdStrArr, "sudo ims-stop || true && sudo ims-start") // 公网 PLMN地址 - pubIP, pubIPOk := preinput["pubIP"] - mcc, mccOk := preinput["mcc"] - mnc, mncOk := preinput["mnc"] - if pubIPOk && pubIP != "" && mccOk && mcc != "" && mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", pubIP, mcc, mnc)) + sipIP, sipIPOk := para5GData["SIPIP"] + mcc, mccOk := para5GData["MCC"] + mnc, mncOk := para5GData["MNC"] + if sipIPOk && sipIP != "" && mccOk && mcc != "" && mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", sipIP, mcc, mnc)) } // 内网 服务地址 - if priIP, ok := preinput["priIP"]; ok && priIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", priIP)) + if imsIP, ok := para5GData["IMSIP"]; ok && imsIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", imsIP)) + } + // IWF连接PCF服务 + if pcfIP, ok := para5GData["PCFIP"]; ok && pcfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", pcfIP)) } // 30s后停止服务 cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") @@ -204,9 +209,291 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, "sudo ims-start \n") } } else { - neTypeLower := strings.ToLower(neVersion.NeType) if action == "install" { cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") + + // AMF配置修改 + if neTypeLower == "amf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/amf/default/amfcfg.yaml /usr/local/etc/amf/amfcfg.yaml \n") + if amfIP, ok := para5GData["AMFIP"]; ok && amfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", amfIP)) + } + if n2IP, ok := para5GData["N2IP"]; ok && n2IP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", n2IP)) + } + if mcc, ok := para5GData["MCC"]; ok && mcc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", mcc)) + } + if mnc, ok := para5GData["MNC"]; ok && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", mnc)) + } + if sst, ok := para5GData["SST"]; ok && sst != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", sst)) + } + if sd, ok := para5GData["SD"]; ok && sd != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", sd)) + } + if nrtac, ok := para5GData["NRTAC"]; ok && nrtac != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- 4388/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", nrtac)) + } + if ausfIP, ok := para5GData["AUSFIP"]; ok && ausfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", ausfIP)) + } + if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", udmIP)) + } + if smfIP, ok := para5GData["SMFIP"]; ok && smfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", smfIP)) + } + if pcfIP, ok := para5GData["PCFIP"]; ok && pcfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", pcfIP)) + } + if dnn, ok := para5GData["DNN"]; ok && dnn != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- internet/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", dnn)) + } + } + // AUSF配置修改 + if neTypeLower == "ausf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/ausf/default/ausfcfg.yaml /usr/local/etc/ausf/ausfcfg.yaml \n") + if ausfIP, ok := para5GData["AUSFIP"]; ok && ausfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", ausfIP)) + } + if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", udmIP)) + } + if mcc, ok := para5GData["MCC"]; ok && mcc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", mcc)) + } + if mnc, ok := para5GData["MNC"]; ok && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", mnc)) + } + } + // UDM配置修改 + if neTypeLower == "udm" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/udmcfg.yaml /usr/local/etc/udm/udmcfg.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/oam_manager.yaml /usr/local/etc/udm/oam_manager.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/nssai.yaml /usr/local/etc/udm/nssai.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/snssai.yaml /usr/local/etc/udm/snssai.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/as.yaml /usr/local/etc/udm/as.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/dnn.yaml /usr/local/etc/udm/dnn.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/scscfSet.yaml /usr/local/etc/udm/scscfSet.yaml \n") + + if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", udmIP)) + } + if ausfIP, ok := para5GData["AUSFIP"]; ok && ausfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", ausfIP)) + } + if amfIP, ok := para5GData["AMFIP"]; ok && amfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", amfIP)) + } + mcc, mccOk := para5GData["MCC"] + mnc, mncOk := para5GData["MNC"] + if mccOk && mcc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", mcc)) + } + if mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", mnc)) + } + if mccOk && mcc != "" && mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", mnc, mcc)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/as.yaml \n", mnc, mcc)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/scscfSet.yaml \n", mnc, mcc)) + } + if sst, ok := para5GData["SST"]; ok && sst != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/nssai.yaml \n", sst)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/snssai.yaml \n", sst)) + } + if sd, ok := para5GData["SD"]; ok && sd != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/nssai.yaml \n", sd)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/snssai.yaml \n", sd)) + } + if dnn, ok := para5GData["DNN"]; ok && dnn != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/udm/snssai.yaml \n", dnn)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/udm/dnn.yaml \n", dnn)) + } + if sipIP, ok := para5GData["SIPIP"]; ok && sipIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/udm/as.yaml \n", sipIP)) + } + } + // SMF配置修改 + if neTypeLower == "smf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/smf/default/smf_conf.yaml /usr/local/etc/smf/smf_conf.yaml \n") + if sipIP, ok := para5GData["SIPIP"]; ok && sipIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", sipIP)) + } + if amfIP, ok := para5GData["AMFIP"]; ok && amfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", amfIP)) + } + if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", udmIP)) + } + if smfIP, ok := para5GData["SMFIP"]; ok && smfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", smfIP)) + } + if pcfIP, ok := para5GData["PCFIP"]; ok && pcfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", pcfIP)) + } + if upfIP, ok := para5GData["UPFIP"]; ok && upfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", upfIP)) + } + if dnn, ok := para5GData["DNN"]; ok && dnn != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", dnn)) + } + if ueIP, ok := para5GData["UEIP"]; ok && ueIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|10.2.1.0/24|%s/24|g\" /usr/local/etc/smf/smf_conf.yaml \n", ueIP)) + } + } + // PCF配置修改 + if neTypeLower == "pcf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/pcf/default/pcfcfg.yaml /usr/local/etc/pcf/pcfcfg.yaml \n") + if amfIP, ok := para5GData["AMFIP"]; ok && amfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", amfIP)) + } + if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", udmIP)) + } + if pcfIP, ok := para5GData["PCFIP"]; ok && pcfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", pcfIP)) + } + mcc, mccOk := para5GData["MCC"] + mnc, mncOk := para5GData["MNC"] + if mccOk && mcc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", mcc)) + } + if mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", mnc)) + } + if mccOk && mcc != "" && mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", mnc, mcc)) + } + } + + // UPF配置修改-标准版 + if upfType, ok := para5GData["UPFType"]; ok && upfType == "Standard" && neTypeLower == "upf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfcfg.yaml /usr/local/etc/upf/upfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n") + if upfIP, ok := para5GData["UPFIP"]; ok && upfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", upfIP)) + } + if n3IP, ok := para5GData["N3IP"]; ok && n3IP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", n3IP)) + } + if n3MAC, ok := para5GData["N3MAC"]; ok && n3MAC != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n3MAC)) + } + if n3PCI, ok := para5GData["N3PCI"]; ok && n3PCI != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n3PCI)) + } + if n3Mask, ok := para5GData["N3Mask"]; ok && n3Mask != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: \"255.255.240.0\"/s/ipv4Mask: \"255.255.240.0\"/ipv4Mask: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n3Mask)) + } + if nN3GW, ok := para5GData["nN3GW"]; ok && nN3GW != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", nN3GW)) + } + if n6IP, ok := para5GData["N6IP"]; ok && n6IP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", n6IP)) + } + if n6MAC, ok := para5GData["N6MAC"]; ok && n6MAC != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n6MAC)) + } + if n6PCI, ok := para5GData["N6PCI"]; ok && n6PCI != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n6PCI)) + } + if n6Mask, ok := para5GData["N6Mask"]; ok && n6Mask != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: \"255.255.240.0\"/s/ipv4Mask: \"255.255.240.0\"/ipv4Mask: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n6Mask)) + } + if nN6GW, ok := para5GData["nN6GW"]; ok && nN6GW != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", nN6GW)) + } + } + // UPF配置修改-轻量版 + if upfType, ok := para5GData["UPFType"]; ok && upfType == "Light" && neTypeLower == "upf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfcfg.yaml /usr/local/etc/upf/upfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n") + if upfIP, ok := para5GData["UPFIP"]; ok && upfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", upfIP)) + } + if n3IP, ok := para5GData["N3IP"]; ok && n3IP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", n3IP)) + } + if n3Mask, ok := para5GData["N3Mask"]; ok && n3Mask != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: \"255.255.240.0\"/s/ipv4Mask: \"255.255.240.0\"/ipv4Mask: \"'%s'\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n3Mask)) + } + if ueIP, ok := para5GData["UEIP"]; ok && ueIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: '\"%s\"'/' /usr/local/etc/upf/upfForwarder_1.yaml \n", ueIP)) + } + if ueIPMask, ok := para5GData["UEIPMask"]; ok && ueIPMask != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: '\"%s\"'/' /usr/local/etc/upf/upfForwarder_1.yaml \n", ueIPMask)) + } + cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: \"vmxnet3\"/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") + } + + // MME配置修改 + if neTypeLower == "mme" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/mme/default/mme.conf /usr/local/etc/mme/mme.conf \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/epsApn.yaml /usr/local/etc/udm/epsApn.yaml \n") + if smfIP, ok := para5GData["SMFIP"]; ok && smfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/mme/mme.conf \n", smfIP)) + } + if mmeIPs1, ok := para5GData["S1_MMEIP"]; ok && mmeIPs1 != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220/20|%s|g\" /usr/local/etc/mme/mme.conf \n", mmeIPs1)) + } + if mmeIPs10, ok := para5GData["S20_MMEIP"]; ok && mmeIPs10 != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220/24|%s|g\" /usr/local/etc/mme/mme.conf \n", mmeIPs10)) + } + if mmeIPs11, ok := para5GData["S21_MMEIP"]; ok && mmeIPs11 != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.221/24|%s|g\" /usr/local/etc/mme/mme.conf \n", mmeIPs11)) + } + mcc, mccOk := para5GData["MCC"] + mnc, mncOk := para5GData["MNC"] + if mccOk && mcc != "" && mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/mme/mme.conf \n", mnc, mcc)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/\"00101\"/\"%s%s\"/g\" /usr/local/etc/mme/mme.conf \n", mcc, mnc)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC=\"001\" ; MNC=\"01\";/MCC=\"%s\" ; MNC=\"%s\";/g\" /usr/local/etc/mme/mme.conf \n", mcc, mnc)) + } + if ltetac, ok := para5GData["LTETAC"]; ok && ltetac != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = \"1\";/TAC = \"%s\";/g\" /usr/local/etc/mme/mme.conf \n", ltetac)) + } + if dnn, ok := para5GData["DNN"]; ok && dnn != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/udm/epsApn.yaml \n", dnn)) + } + // SMF开启 + cmdStrArr = append(cmdStrArr, "sudo sed -i \"/^ *gxcfg:/,/^ *[^ ]/{s/enable: false/enable: true/;b};\" /usr/local/etc/smf/smf_conf.yaml \n") + } + + // NSSF配置修改 + if neTypeLower == "nssf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nssf/default/nssfcfg.yaml /usr/local/etc/nssf/nssfcfg.yaml \n") + if nssfIP, ok := para5GData["NSSFIP"]; ok && nssfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", nssfIP)) + } + if nrfIP, ok := para5GData["NRFIP"]; ok && nrfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", nrfIP)) + } + if mcc, mccOk := para5GData["MCC"]; mccOk && mcc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", mcc)) + } + if mnc, mncOk := para5GData["MNC"]; mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", mnc)) + } + } + // NRF配置修改 + if neTypeLower == "nrf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nssfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n") + if nrfIP, ok := para5GData["NRFIP"]; ok && nrfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", nrfIP)) + } + if mcc, mccOk := para5GData["MCC"]; mccOk && mcc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", mcc)) + } + if mnc, mncOk := para5GData["MNC"]; mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", mnc)) + } + } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) // 30s后停止服务 cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) @@ -284,8 +571,61 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp // 等待写入协程完成 <-done - // 执行到最后语句的更新Version + // 执行到最后语句 if strings.LastIndex(logMsg, okFlagStr) > 5 { + if action == "install" { + // ========= 网元OAM配置文件 start ========== + oamData, err := NewNeInfoImpl.NeConfOAMRead(neInfo.NeType, neInfo.NeId) + if oamData == nil || err != nil { + return "", fmt.Errorf("error read OAM file info") + } + // 网元HTTP服务 + if v, ok := oamData["httpManageCfg"]; ok { + item := v.(map[string]any) + item["ipv4"] = neInfo.IP + item["port"] = neInfo.Port + oamData["httpManageCfg"] = item + } + // 对网管HTTP配置 + if v, ok := oamData["oamConfig"]; ok { + item := v.(map[string]any) + item["enable"] = true + if omcIP, ok := para5GData["OMCIP"]; ok && omcIP != "" { + item["ipv4"] = omcIP + } + item["neConfig"] = map[string]string{ + "neId": neInfo.NeId, + "rmUid": neInfo.RmUID, + "neName": neInfo.NeName, + "dn": neInfo.Dn, + "vendorName": neInfo.VendorName, + "province": neInfo.Province, + "pvFlag": neInfo.PvFlag, + } + oamData["oamConfig"] = item + } + // 对网管SNMP配置 + if v, ok := oamData["snmpConfig"]; ok { + item := v.(map[string]any) + item["ipv4"] = neInfo.IP + oamData["snmpConfig"] = item + } + // 对网管KPI上报配置 + if v, ok := oamData["kpiConfig"]; ok { + item := v.(map[string]any) + item["enable"] = true + if kpiTimer, ok := para5GData["KPI_TIMER"]; ok && kpiTimer != "" { + item["timer"] = parse.Number(kpiTimer) + } + oamData["kpiConfig"] = item + } + if err := NewNeInfoImpl.NeConfOAMWirte(neInfo.NeType, neInfo.NeId, oamData, true); err != nil { + return "", fmt.Errorf("error wirte OAM file info") + } + // ========= 网元OAM配置文件 end =========== + } + + // 更新Version verInfo := NewNeVersionImpl.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) if verInfo.NeId == neVersion.NeId { curName := verInfo.Name From fa8e010271e3c01373f9972c5b0b1e2b38255cc9 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 7 May 2024 09:48:20 +0800 Subject: [PATCH 056/130] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85=E8=A1=A5=E5=85=85n3iwf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ne_version.impl.go | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 2d2b378f..74aaa763 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -435,6 +435,9 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp if neTypeLower == "mme" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/mme/default/mme.conf /usr/local/etc/mme/mme.conf \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/epsApn.yaml /usr/local/etc/udm/epsApn.yaml \n") + if amfIP, ok := para5GData["AMFIP"]; ok && amfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/mme/mme.conf \n", amfIP)) + } if smfIP, ok := para5GData["SMFIP"]; ok && smfIP != "" { cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/mme/mme.conf \n", smfIP)) } @@ -487,10 +490,38 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", nrfIP)) } if mcc, mccOk := para5GData["MCC"]; mccOk && mcc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", mcc)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", mcc)) } if mnc, mncOk := para5GData["MNC"]; mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", mnc)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", mnc)) + } + } + // N3IWF配置修改 + if neTypeLower == "n3iwf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/n3iwf/default/n3iwfcfg.yaml /usr/local/etc/n3iwf/n3iwfcfg.yaml \n") + if mcc, mccOk := para5GData["MCC"]; mccOk && mcc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC: 001/MCC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", mcc)) + } + if mnc, mncOk := para5GData["MNC"]; mncOk && mnc != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MNC: 01/MNC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", mnc)) + } + if n3iwfIP, ok := para5GData["N3IWFIP"]; ok && n3iwfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.230/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", n3iwfIP)) + } + if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", udmIP)) + } + if smfIP, ok := para5GData["SMFIP"]; ok && smfIP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", smfIP)) + } + if n2IP, ok := para5GData["N2IP"]; ok && n2IP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.120/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", n2IP)) + } + if n3IP, ok := para5GData["N3IP"]; ok && n3IP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", n3IP)) + } + if n6IP, ok := para5GData["N6IP"]; ok && n6IP != "" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", n6IP)) } } From fa316be3d482ee7d884dd475aa3e3dd3f9e6d3a3 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 7 May 2024 09:49:23 +0800 Subject: [PATCH 057/130] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=B8=8B=E5=8F=91nssf=E5=93=8D=E5=BA=94201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_direct_link.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/network_element/service/ne_direct_link.go b/src/modules/network_element/service/ne_direct_link.go index 7a4fa123..20cb1ec4 100644 --- a/src/modules/network_element/service/ne_direct_link.go +++ b/src/modules/network_element/service/ne_direct_link.go @@ -63,7 +63,7 @@ func NeConfigOMC(neInfo model.NeInfo) (map[string]any, error) { if err != nil { status := err.Error() logger.Warnf("NeConfigOMC %s", status) - if strings.HasPrefix(status, "204") { + if strings.HasPrefix(status, "201") || strings.HasPrefix(status, "204") { return resData, nil } return nil, err From 4568bba018caf2544adb1fde6e958d0fe1c0cd7d Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 7 May 2024 09:50:10 +0800 Subject: [PATCH 058/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83OAM=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=90=8C=E6=AD=A5=E6=96=87=E4=BB=B6=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_info.impl.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index ebe0bde1..49852ca1 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -598,7 +598,9 @@ func (r *NeInfoImpl) NeConfOAMWirte(neType, neId string, content any, sync bool) neFilePath := fmt.Sprintf("/usr/local/etc/%s/%s", neTypeLower, fileName) neFileDir := filepath.Dir(neFilePath) // 修改网元文件权限 - sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath)) + if _, err = sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath)); err != nil { + sshClient.RunCMD(fmt.Sprintf("sudo touch %s && sudo chmod o+w %s", neFilePath, neFilePath)) + } // 复制到网元进行覆盖 if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { return fmt.Errorf("please check if scp remote copy is allowed") From a2a876434d689bdf47eb0e6eb6c7f0c88537dc17 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 7 May 2024 09:51:35 +0800 Subject: [PATCH 059/130] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E9=92=88?= =?UTF-8?q?=E5=AF=B9=E6=88=90=E7=A0=94=E5=AE=9A=E5=88=B6=E7=9A=84=E7=BD=91?= =?UTF-8?q?=E5=85=83NEF/LMF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/repository/ne_info.impl.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/modules/network_element/repository/ne_info.impl.go b/src/modules/network_element/repository/ne_info.impl.go index cd06d84a..4880b9b1 100644 --- a/src/modules/network_element/repository/ne_info.impl.go +++ b/src/modules/network_element/repository/ne_info.impl.go @@ -27,8 +27,6 @@ var neListSort = []string{ "NSSF", "IMS", "N3IWF", - "NEF", - "LMF", "MOCNGW", } From 31589ce234bbf45d7e40d9c1ea9baa5e61f9ce54 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 7 May 2024 16:26:48 +0800 Subject: [PATCH 060/130] =?UTF-8?q?feat:=20=E7=B3=BB=E7=BB=9F=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=BC=95=E5=AF=BC=E4=BD=BF=E7=94=A8=E9=87=8D=E7=BD=AE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/constants/common/common.go | 3 + src/framework/utils/machine/launch.go | 11 +-- src/modules/common/common.go | 9 ++- .../controller/{launch.go => bootloader.go} | 79 +++++++++++++++---- src/modules/common/service/commont.impl.go | 9 ++- 5 files changed, 81 insertions(+), 30 deletions(-) rename src/modules/common/controller/{launch.go => bootloader.go} (52%) diff --git a/src/framework/constants/common/common.go b/src/framework/constants/common/common.go index 37861049..08e0bcbc 100644 --- a/src/framework/constants/common/common.go +++ b/src/framework/constants/common/common.go @@ -19,3 +19,6 @@ const STATUS_NO = "0" // 上下文信息-登录用户 const CTX_LOGIN_USER = "loginuser" + +// 启动-引导系统初始 +const LAUNCH_BOOTLOADER = "bootloader" diff --git a/src/framework/utils/machine/launch.go b/src/framework/utils/machine/launch.go index 6f6e2086..fd3c3e0e 100644 --- a/src/framework/utils/machine/launch.go +++ b/src/framework/utils/machine/launch.go @@ -8,6 +8,7 @@ import ( "runtime" "time" + "be.ems/src/framework/constants/common" "be.ems/src/framework/logger" "be.ems/src/framework/utils/crypto" "be.ems/src/framework/utils/parse" @@ -98,11 +99,11 @@ func Launch() { // 检查文件是否存在 if _, err := os.Stat(filePath()); err != nil { LaunchInfo = map[string]any{ - "code": Code, // 机器码 - "firstTime": time.Now().UnixMilli(), // 首次启动使用时间 + "code": Code, // 机器码 + "useTime": time.Now().UnixMilli(), // 首次使用时间 - "sysGuide": true, // 首次引导 - "sysGuideTime": 0, // 引导完成时间 + common.LAUNCH_BOOTLOADER: true, // 启动引导 + common.LAUNCH_BOOTLOADER + "Time": 0, // 引导完成时间 } codeFileWrite(LaunchInfo) } else { @@ -125,7 +126,7 @@ func SetLaunchInfo(info map[string]any) error { } // 固定值禁止变更 - constKeys := []string{"code", "firstTime"} + constKeys := []string{"code", "useTime"} for k, v := range info { constKey := false for _, ck := range constKeys { diff --git a/src/modules/common/common.go b/src/modules/common/common.go index d08e68c5..fcbf8a9e 100644 --- a/src/modules/common/common.go +++ b/src/modules/common/common.go @@ -25,11 +25,12 @@ func Setup(router *gin.Engine) { // 系统可暴露的配置信息 indexGroup.GET("/sys-conf", controller.NewCommont.SysConfig) - // 首次引导安装 - guideGroup := router.Group("/guide") + // 系统引导初始化 + guideGroup := router.Group("/bootloader") { - guideGroup.POST("", controller.NewLaunch.GuideStart) - guideGroup.PUT("", middleware.PreAuthorize(nil), controller.NewLaunch.GuideDone) + guideGroup.POST("", controller.NewBootloader.BootloaderStart) + guideGroup.PUT("", middleware.PreAuthorize(nil), controller.NewBootloader.BootloaderDone) + guideGroup.DELETE("", middleware.PreAuthorize(nil), controller.NewBootloader.BootloaderReset) } // 验证码操作处理 diff --git a/src/modules/common/controller/launch.go b/src/modules/common/controller/bootloader.go similarity index 52% rename from src/modules/common/controller/launch.go rename to src/modules/common/controller/bootloader.go index ed3d4523..37bdf217 100644 --- a/src/modules/common/controller/launch.go +++ b/src/modules/common/controller/bootloader.go @@ -1,10 +1,13 @@ package controller import ( + "runtime" "time" adminConstants "be.ems/src/framework/constants/admin" + "be.ems/src/framework/constants/common" tokenConstants "be.ems/src/framework/constants/token" + "be.ems/src/framework/utils/cmd" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/machine" tokenUtils "be.ems/src/framework/utils/token" @@ -15,34 +18,34 @@ import ( "github.com/gin-gonic/gin" ) -// 实例化控制层 LaunchController 结构体 -var NewLaunch = &LaunchController{ +// 实例化控制层 BootloaderController 结构体 +var NewBootloader = &BootloaderController{ accountService: commonService.NewAccountImpl, sysUserService: systemService.NewSysUserImpl, } -// 首次启动安装 +// 系统引导初始化 // -// PATH /launch -type LaunchController struct { +// PATH /bootloader +type BootloaderController struct { // 账号身份操作服务 accountService commonService.IAccount // 用户信息服务 sysUserService systemService.ISysUser } -// 首次引导安装开始 +// 首次引导开始 // -// POST /guide -func (s *LaunchController) GuideStart(c *gin.Context) { +// POST / +func (s *BootloaderController) BootloaderStart(c *gin.Context) { // 是否完成引导 launchInfo := machine.LaunchInfo if launchInfo == nil { c.JSON(200, result.Err(nil)) return } - if v, ok := launchInfo["sysGuide"]; ok && !v.(bool) { - c.JSON(200, result.ErrMsg("guide done")) + if v, ok := launchInfo[common.LAUNCH_BOOTLOADER]; ok && !v.(bool) { + c.JSON(200, result.ErrMsg("bootloader done")) return } @@ -79,25 +82,67 @@ func (s *LaunchController) GuideStart(c *gin.Context) { })) } -// 首次引导安装完成 +// 首次引导完成 // -// PUT /guide -func (s *LaunchController) GuideDone(c *gin.Context) { +// PUT / +func (s *BootloaderController) BootloaderDone(c *gin.Context) { // 是否完成引导 launchInfo := machine.LaunchInfo if launchInfo == nil { c.JSON(200, result.Err(nil)) return } - if v, ok := launchInfo["sysGuide"]; ok && !v.(bool) { - c.JSON(200, result.ErrMsg("guide done")) + if v, ok := launchInfo[common.LAUNCH_BOOTLOADER]; ok && !v.(bool) { + c.JSON(200, result.ErrMsg("bootloader done")) return } // 记录完成时间 err := machine.SetLaunchInfo(map[string]any{ - "sysGuide": false, // 首次引导 - "sysGuideTime": time.Now().UnixMilli(), // 引导完成时间 + common.LAUNCH_BOOTLOADER: false, // 启动引导 + common.LAUNCH_BOOTLOADER + "Time": time.Now().UnixMilli(), // 引导完成时间 + }) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + + // 清除授权信息 + tokenUtils.Remove(ctx.Authorization(c)) + c.JSON(200, result.Ok(nil)) +} + +// 引导系统数据重置 +// +// DELETE / +func (s *BootloaderController) BootloaderReset(c *gin.Context) { + // 是否完成引导 + launchInfo := machine.LaunchInfo + if launchInfo == nil { + c.JSON(200, result.Err(nil)) + return + } + if v, ok := launchInfo[common.LAUNCH_BOOTLOADER]; ok && v.(bool) { + c.JSON(200, result.ErrMsg("bootloader not done")) + return + } + + // 重置数据库 + if runtime.GOOS == "windows" { + c.JSON(200, result.ErrMsg("Does not support window operations")) + return + } else { + _, err := cmd.ExecWithCheck("sudo", "/usr/local/omc/bin/setomc.sh", "-m", "install") + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + } + + // 重置引导标记 + err := machine.SetLaunchInfo(map[string]any{ + "bootloader": true, // 启动引导 + "bootloaderTime": 0, // 引导完成时间 }) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) diff --git a/src/modules/common/service/commont.impl.go b/src/modules/common/service/commont.impl.go index fc94db06..10ad3f8c 100644 --- a/src/modules/common/service/commont.impl.go +++ b/src/modules/common/service/commont.impl.go @@ -5,6 +5,7 @@ import ( "be.ems/lib/global" "be.ems/src/framework/config" + "be.ems/src/framework/constants/common" "be.ems/src/framework/utils/machine" systemService "be.ems/src/modules/system/service" ) @@ -33,13 +34,13 @@ func (s *CommontImpl) SystemConfigInfo() map[string]string { // 系统首次使用标记 launchInfo := machine.LaunchInfo if launchInfo != nil { - if v, ok := launchInfo["sysGuide"]; ok { - infoMap["sysGuide"] = fmt.Sprint(v) + if v, ok := launchInfo[common.LAUNCH_BOOTLOADER]; ok { + infoMap[common.LAUNCH_BOOTLOADER] = fmt.Sprint(v) } else { - infoMap["sysGuide"] = "true" + infoMap[common.LAUNCH_BOOTLOADER] = "true" } } else { - infoMap["sysGuide"] = "true" + infoMap[common.LAUNCH_BOOTLOADER] = "true" } // 序列号 infoMap["serialNum"] = fmt.Sprint(config.Get("omc.sn")) From 7a1ce0faea60b7920605b4aaf53d66c377f3fcbf Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 7 May 2024 18:38:41 +0800 Subject: [PATCH 061/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=A1=A8=E7=BB=93=E6=9E=84=E5=8F=98=E6=9B=B4=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/cm/license.go | 62 ++++++++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/features/cm/license.go b/features/cm/license.go index 30b2e1f1..ffee447b 100644 --- a/features/cm/license.go +++ b/features/cm/license.go @@ -8,11 +8,13 @@ import ( "os/exec" "strings" + "be.ems/lib/core/utils/ctx" "be.ems/lib/dborm" "be.ems/lib/log" "be.ems/lib/services" "be.ems/restagent/config" - + neModel "be.ems/src/modules/network_element/model" + neService "be.ems/src/modules/network_element/service" "github.com/gorilla/mux" ) @@ -503,22 +505,54 @@ func UploadLicenseFileData(w http.ResponseWriter, r *http.Request) { } } */ - neLicense := dborm.NeLicense{ - NeType: neTypeUpper, - NeID: neId, - Status: "ACTIVE", - Path: licensePath, - FileName: licenseFileName, - Comment: comment, + + // neLicense := dborm.NeLicense{ + // NeType: neTypeUpper, + // NeID: neId, + // Status: "ACTIVE", + // Path: licensePath, + // FileName: licenseFileName, + // Comment: comment, + // } + + // log.Debug("neLicense:", neLicense) + // _, err = dborm.XormInsertTableOne("ne_license", neLicense) + // if err != nil { + // log.Error("Faile to XormInsertTableOne:", err) + // services.ResponseInternalServerError500ProcessError(w, err) + // } + + neLicense := neModel.NeLicense{ + NeType: neTypeUpper, + NeId: neId, + Status: "0", + LicensePath: neFilePath, + Remark: comment, } log.Debug("neLicense:", neLicense) - _, err = dborm.XormInsertTableOne("ne_license", neLicense) - if err != nil { - log.Error("Faile to XormInsertTableOne:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return + + // 检查是否存在授权记录 + neLicense2 := neService.NewNeLicenseImpl.SelectByNeTypeAndNeID(neTypeUpper, neId) + if neLicense2.NeId != neId { + // 读取授权码 + code, _ := neService.NewNeLicenseImpl.ReadLicenseInfo(neLicense) + neLicense.ActivationRequestCode = code + + neLicense.CreateBy = ctx.LoginUserToUserName(r) + insertId := neService.NewNeLicenseImpl.Insert(neLicense) + if insertId != "" { + services.ResponseStatusOK204NoContent(w) + return + } + } else { + neLicense2.UpdateBy = ctx.LoginUserToUserName(r) + upRows := neService.NewNeLicenseImpl.Update(neLicense2) + if upRows > 0 { + services.ResponseStatusOK204NoContent(w) + return + } } - services.ResponseStatusOK204NoContent(w) + services.ResponseInternalServerError500ProcessError(w, err) } From 1708b12bd1a656d63ae9e3c5a81f105cd1097f49 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 7 May 2024 18:39:20 +0800 Subject: [PATCH 062/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E8=A1=A8=E7=BB=93=E6=9E=84=E5=8F=98=E6=9B=B4=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/cm/software.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/features/cm/software.go b/features/cm/software.go index 19eacb36..2cb5f919 100644 --- a/features/cm/software.go +++ b/features/cm/software.go @@ -20,9 +20,9 @@ import ( ) const ( - SoftwareStatusUploaded = "Uploaded" - SoftwareStatusInactive = "Inactive" - SoftwareStatusActive = "Active" + SoftwareStatusUploaded = "3" + SoftwareStatusInactive = "3" + SoftwareStatusActive = "1" DigestsSignOkString = "digests signatures OK" SoftwareVerifiedOk = "Verified OK" ) @@ -419,7 +419,7 @@ func DownloadSoftwareFile(w http.ResponseWriter, r *http.Request) { return } - fileName := (*neSoftware)[0]["file_name"] + fileName := (*neSoftware)[0]["name"] path := (*neSoftware)[0]["path"] md5Sum := (*neSoftware)[0]["md5_sum"] @@ -473,7 +473,7 @@ func DeleteSoftwareFile(w http.ResponseWriter, r *http.Request) { return } - fileName := (*neSoftware)[0]["file_name"] + fileName := (*neSoftware)[0]["name"] path := (*neSoftware)[0]["path"] filePath := fmt.Sprintf("%s/%s", path, fileName) err = os.Remove(filePath) @@ -560,7 +560,7 @@ func DistributeSoftwareToNF(w http.ResponseWriter, r *http.Request) { return } - fileName := (*neSoftware)[0]["file_name"] + fileName := (*neSoftware)[0]["name"] path := (*neSoftware)[0]["path"] srcFile := fmt.Sprintf("%s/%s", path, fileName) From 9abfe9b30e524998d2dea85840cc3014e5cbb85d Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 7 May 2024 19:14:44 +0800 Subject: [PATCH 063/130] =?UTF-8?q?style:=20=E7=B3=BB=E7=BB=9F=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=BC=95=E5=AF=BC=E5=87=BD=E6=95=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/machine/launch.go | 28 +++++++++++++++++++ src/modules/common/controller/bootloader.go | 31 ++------------------- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/framework/utils/machine/launch.go b/src/framework/utils/machine/launch.go index fd3c3e0e..ffb75a63 100644 --- a/src/framework/utils/machine/launch.go +++ b/src/framework/utils/machine/launch.go @@ -10,6 +10,7 @@ import ( "be.ems/src/framework/constants/common" "be.ems/src/framework/logger" + "be.ems/src/framework/utils/cmd" "be.ems/src/framework/utils/crypto" "be.ems/src/framework/utils/parse" ) @@ -143,3 +144,30 @@ func SetLaunchInfo(info map[string]any) error { } return codeFileWrite(LaunchInfo) } + +// Bootloader 启动引导标记 +func Bootloader(flag bool) error { + return SetLaunchInfo(map[string]any{ + common.LAUNCH_BOOTLOADER: flag, // 启动引导 true开 false关 + common.LAUNCH_BOOTLOADER + "Time": time.Now().UnixMilli(), // 引导完成时间 + }) +} + +// Reset 引导数据重置 +func Reset() error { + // 重置数据库 + if runtime.GOOS == "windows" { + // return fmt.Errorf("not support window") + } else { + if _, err := cmd.ExecWithCheck("sudo", "/usr/local/omc/bin/setomc.sh", "-m", "install"); err != nil { + return err + } + } + + // 重置引导标记 + if err := Bootloader(true); err != nil { + return err + } + + return nil +} diff --git a/src/modules/common/controller/bootloader.go b/src/modules/common/controller/bootloader.go index 37bdf217..c2da6267 100644 --- a/src/modules/common/controller/bootloader.go +++ b/src/modules/common/controller/bootloader.go @@ -1,13 +1,9 @@ package controller import ( - "runtime" - "time" - adminConstants "be.ems/src/framework/constants/admin" "be.ems/src/framework/constants/common" tokenConstants "be.ems/src/framework/constants/token" - "be.ems/src/framework/utils/cmd" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/machine" tokenUtils "be.ems/src/framework/utils/token" @@ -97,12 +93,8 @@ func (s *BootloaderController) BootloaderDone(c *gin.Context) { return } - // 记录完成时间 - err := machine.SetLaunchInfo(map[string]any{ - common.LAUNCH_BOOTLOADER: false, // 启动引导 - common.LAUNCH_BOOTLOADER + "Time": time.Now().UnixMilli(), // 引导完成时间 - }) - if err != nil { + // 标记引导完成 + if err := machine.Bootloader(false); err != nil { c.JSON(200, result.ErrMsg(err.Error())) return } @@ -127,24 +119,7 @@ func (s *BootloaderController) BootloaderReset(c *gin.Context) { return } - // 重置数据库 - if runtime.GOOS == "windows" { - c.JSON(200, result.ErrMsg("Does not support window operations")) - return - } else { - _, err := cmd.ExecWithCheck("sudo", "/usr/local/omc/bin/setomc.sh", "-m", "install") - if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) - return - } - } - - // 重置引导标记 - err := machine.SetLaunchInfo(map[string]any{ - "bootloader": true, // 启动引导 - "bootloaderTime": 0, // 引导完成时间 - }) - if err != nil { + if err := machine.Reset(); err != nil { c.JSON(200, result.ErrMsg(err.Error())) return } From 3dab7ac6d45b7453df773a7b616c458edc10c39f Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 8 May 2024 10:59:12 +0800 Subject: [PATCH 064/130] =?UTF-8?q?feat:=20=E5=BC=95=E5=AF=BC=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E8=B4=A6=E5=8F=B7=E9=87=8D=E7=BD=AE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/common/common.go | 7 +-- src/modules/common/controller/bootloader.go | 57 +++++++++++++++++++-- 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/src/modules/common/common.go b/src/modules/common/common.go index fcbf8a9e..bb6c68b0 100644 --- a/src/modules/common/common.go +++ b/src/modules/common/common.go @@ -28,9 +28,10 @@ func Setup(router *gin.Engine) { // 系统引导初始化 guideGroup := router.Group("/bootloader") { - guideGroup.POST("", controller.NewBootloader.BootloaderStart) - guideGroup.PUT("", middleware.PreAuthorize(nil), controller.NewBootloader.BootloaderDone) - guideGroup.DELETE("", middleware.PreAuthorize(nil), controller.NewBootloader.BootloaderReset) + guideGroup.POST("", controller.NewBootloader.Start) + guideGroup.PUT("", middleware.PreAuthorize(nil), controller.NewBootloader.Done) + guideGroup.DELETE("", middleware.PreAuthorize(nil), controller.NewBootloader.Reset) + guideGroup.PUT("/account", middleware.PreAuthorize(nil), controller.NewBootloader.Account) } // 验证码操作处理 diff --git a/src/modules/common/controller/bootloader.go b/src/modules/common/controller/bootloader.go index c2da6267..daa12daa 100644 --- a/src/modules/common/controller/bootloader.go +++ b/src/modules/common/controller/bootloader.go @@ -4,8 +4,10 @@ import ( adminConstants "be.ems/src/framework/constants/admin" "be.ems/src/framework/constants/common" tokenConstants "be.ems/src/framework/constants/token" + "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/machine" + "be.ems/src/framework/utils/regular" tokenUtils "be.ems/src/framework/utils/token" "be.ems/src/framework/vo" "be.ems/src/framework/vo/result" @@ -33,7 +35,7 @@ type BootloaderController struct { // 首次引导开始 // // POST / -func (s *BootloaderController) BootloaderStart(c *gin.Context) { +func (s *BootloaderController) Start(c *gin.Context) { // 是否完成引导 launchInfo := machine.LaunchInfo if launchInfo == nil { @@ -81,7 +83,7 @@ func (s *BootloaderController) BootloaderStart(c *gin.Context) { // 首次引导完成 // // PUT / -func (s *BootloaderController) BootloaderDone(c *gin.Context) { +func (s *BootloaderController) Done(c *gin.Context) { // 是否完成引导 launchInfo := machine.LaunchInfo if launchInfo == nil { @@ -107,7 +109,7 @@ func (s *BootloaderController) BootloaderDone(c *gin.Context) { // 引导系统数据重置 // // DELETE / -func (s *BootloaderController) BootloaderReset(c *gin.Context) { +func (s *BootloaderController) Reset(c *gin.Context) { // 是否完成引导 launchInfo := machine.LaunchInfo if launchInfo == nil { @@ -128,3 +130,52 @@ func (s *BootloaderController) BootloaderReset(c *gin.Context) { tokenUtils.Remove(ctx.Authorization(c)) c.JSON(200, result.Ok(nil)) } + +// 账号变更 +// +// PUT /account +func (s *BootloaderController) Account(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + UserName string `json:"username" binding:"required"` + Password string `json:"password" binding:"required"` + } + if err := c.ShouldBindJSON(&body); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + if !regular.ValidPassword(body.Password) { + // 登录密码至少包含大小写字母、数字、特殊符号,且不少于6位 + c.JSON(200, result.ErrMsg(i18n.TKey(language, "user.errPasswd"))) + return + } + + // 是否完成引导 + launchInfo := machine.LaunchInfo + if launchInfo == nil { + c.JSON(200, result.Err(nil)) + return + } + if v, ok := launchInfo[common.LAUNCH_BOOTLOADER]; ok && !v.(bool) { + c.JSON(200, result.ErrMsg("bootloader done")) + return + } + + // 查询用户登录账号 + sysUser := s.sysUserService.SelectUserById("2") + if sysUser.UserID != "2" { + c.JSON(200, result.ErrMsg("not found user data")) + return + } + sysUser.UserName = body.UserName + sysUser.NickName = body.UserName + sysUser.Password = body.Password + sysUser.UpdateBy = ctx.LoginUserToUserName(c) + rows := s.sysUserService.UpdateUser(sysUser) + if rows > 0 { + c.JSON(200, result.Ok(nil)) + return + } + c.JSON(200, result.Err(nil)) +} From 035eecb2332c93884f9beb0e55cc9a22654ae442 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 8 May 2024 16:09:15 +0800 Subject: [PATCH 065/130] =?UTF-8?q?fix:=20=E5=BC=95=E5=AF=BC=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=87=8D=E7=BD=AE=E7=AD=89=E5=BE=853s=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E6=9C=8D=E5=8A=A1=E8=A6=86=E7=9B=96=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/machine/launch.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/framework/utils/machine/launch.go b/src/framework/utils/machine/launch.go index ffb75a63..28a420df 100644 --- a/src/framework/utils/machine/launch.go +++ b/src/framework/utils/machine/launch.go @@ -159,7 +159,8 @@ func Reset() error { if runtime.GOOS == "windows" { // return fmt.Errorf("not support window") } else { - if _, err := cmd.ExecWithCheck("sudo", "/usr/local/omc/bin/setomc.sh", "-m", "install"); err != nil { + cmdStr := "sudo /usr/local/omc/bin/omcsvc.sh stop && sudo /usr/local/omc/bin/setomc.sh -m install" + if _, err := cmd.Execf("nohup sh -c \"sleep 3s && %s\" > /dev/null 2>&1 &", cmdStr); err != nil { return err } } From 95de441828572dd07d916f6df8778525076d6380 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 9 May 2024 15:37:25 +0800 Subject: [PATCH 066/130] =?UTF-8?q?fix:=20=E6=B5=8B=E8=AF=95=E4=B8=BB?= =?UTF-8?q?=E6=9C=BAUPF=E8=BF=9E=E6=8E=A5telnet=E5=93=8D=E5=BA=94=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/controller/ne_host.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/network_element/controller/ne_host.go b/src/modules/network_element/controller/ne_host.go index d24ee3ae..b1700a11 100644 --- a/src/modules/network_element/controller/ne_host.go +++ b/src/modules/network_element/controller/ne_host.go @@ -203,7 +203,7 @@ func (s *NeHostController) Test(c *gin.Context) { return } defer client.Close() - if strings.HasSuffix(client.LastResult, "> ") { + if strings.HasSuffix(client.LastResult, "> ") || strings.HasSuffix(client.LastResult, "# ") { c.JSON(200, result.Ok(nil)) } else { // 连接主机失败,请检查连接参数后重试 From 077a3cfc649b1dad203f9f45fae032a8fcddd458 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 9 May 2024 15:38:27 +0800 Subject: [PATCH 067/130] =?UTF-8?q?style:=20=E7=BD=91=E5=85=83=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=88=97=E8=A1=A8=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/repository/ne_info.impl.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/modules/network_element/repository/ne_info.impl.go b/src/modules/network_element/repository/ne_info.impl.go index 4880b9b1..0d7c0e23 100644 --- a/src/modules/network_element/repository/ne_info.impl.go +++ b/src/modules/network_element/repository/ne_info.impl.go @@ -16,18 +16,19 @@ import ( // neListSort 网元列表预设排序 var neListSort = []string{ "OMC", - "MME", + "IMS", "AMF", "AUSF", "UDM", "SMF", "PCF", - "UPF", - "NRF", "NSSF", - "IMS", + "NRF", + "UPF", + "MME", "N3IWF", "MOCNGW", + "SMSC", } // 实例化数据层 NeInfoImpl 结构体 From 3d3f3e96343192304d3f8ec3a1bb8e63ed6ae164 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 9 May 2024 15:39:16 +0800 Subject: [PATCH 068/130] =?UTF-8?q?feat:=20=E8=BD=AC=E6=8D=A2IP=E4=BD=8D?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E5=9C=B0=E5=9D=80=E6=8E=A9=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/parse/parse.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/framework/utils/parse/parse.go b/src/framework/utils/parse/parse.go index 82f9ccba..76f535dc 100644 --- a/src/framework/utils/parse/parse.go +++ b/src/framework/utils/parse/parse.go @@ -170,6 +170,27 @@ func Color(colorStr string) *color.RGBA { } } +// ConvertIPMask 转换IP网络地址掩码 24 -> 255.255.255.0 +func ConvertIPMask(bits int64) string { + if bits < 0 || bits > 32 { + return "Invalid Mask Bits" + } + + // 构建一个32位的uint32类型掩码,指定前bits位为1,其余为0 + mask := uint32((1<>24), + fmt.Sprintf("%d", (mask>>16)&255), + fmt.Sprintf("%d", (mask>>8)&255), + fmt.Sprintf("%d", mask&255), + } + + // 将分组用点号连接起来形成掩码字符串 + return strings.Join(groups, ".") +} + // ConvertConfigToMap 将配置内容转换为Map结构数据 // // configType 类型支持:txt json yaml yml From 6ed635e6fd87d5ab745c6da72f53e3a0f6af8a47 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 9 May 2024 15:43:25 +0800 Subject: [PATCH 069/130] =?UTF-8?q?ref:=20=E7=BD=91=E5=85=83=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E9=85=8D=E7=BD=AE=E6=95=B0=E6=8D=AE=E8=BD=AC=E5=8C=96?= =?UTF-8?q?=E5=8F=96=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/service/ne_info.go | 3 + .../network_element/service/ne_info.impl.go | 78 +++- .../service/ne_version.impl.go | 401 +++++------------- 3 files changed, 188 insertions(+), 294 deletions(-) diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index 206c3989..ad265734 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -72,4 +72,7 @@ type INeInfo interface { // NeConfPara5GWirte 网元公共配置文件写入 content内容 syncNE同步到网元端NeType@NeId NeConfPara5GWirte(content map[string]any, syncNE []string) error + + // NeConfPara5GConvert 网元公共配置数据转化 content网元公共配置文件读取内容 + NeConfPara5GDataConvert(content map[string]any) map[string]string } diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 49852ca1..9956a87f 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -598,9 +598,7 @@ func (r *NeInfoImpl) NeConfOAMWirte(neType, neId string, content any, sync bool) neFilePath := fmt.Sprintf("/usr/local/etc/%s/%s", neTypeLower, fileName) neFileDir := filepath.Dir(neFilePath) // 修改网元文件权限 - if _, err = sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath)); err != nil { - sshClient.RunCMD(fmt.Sprintf("sudo touch %s && sudo chmod o+w %s", neFilePath, neFilePath)) - } + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo touch %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath, neFilePath)) // 复制到网元进行覆盖 if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { return fmt.Errorf("please check if scp remote copy is allowed") @@ -684,3 +682,77 @@ func (r *NeInfoImpl) NeConfPara5GWirte(content map[string]any, syncNE []string) return nil } + +// NeConfPara5GConvert 网元公共配置数据转化 content网元公共配置文件读取内容 +func (r *NeInfoImpl) NeConfPara5GDataConvert(content map[string]any) map[string]string { + basic := content["basic"].(map[string]any) + external := content["external"].(map[string]any) + sbi := content["sbi"].(map[string]any) + + mcc := "460" + mnc := "01" + if plmnId, plmnIdOk := basic["plmnId"].(map[string]any); plmnIdOk { + mcc = plmnId["mcc"].(string) + mnc = plmnId["mnc"].(string) + } + + sst := "1" + sd := "000001" + if plmnId, plmnIdOk := basic["snssai"].(map[string]any); plmnIdOk { + sst = plmnId["sst"].(string) + sd = plmnId["sd"].(string) + } + + n3IPAmdMask := external["upfn3_ip"].(string) + n3Arr := strings.Split(n3IPAmdMask, "/") + n3IP := n3Arr[0] + n3Mask := parse.ConvertIPMask(parse.Number(n3Arr[1])) + + n6IPAmdMask := external["upfn6_ip"].(string) + n6Arr := strings.Split(n6IPAmdMask, "/") + n6IP := n6Arr[0] + n6Mask := parse.ConvertIPMask(parse.Number(n6Arr[1])) + + ueIPAmdMask := external["ue_pool"].(string) + ueArr := strings.Split(ueIPAmdMask, "/") + ueIP := ueArr[0] + ueMask := parse.ConvertIPMask(parse.Number(ueArr[1])) + + return map[string]string{ + // basic + "TAC": basic["tac"].(string), + "MCC": mcc, + "MNC": mnc, + "SST": sst, + "SD": sd, + "DNN_DATA": basic["dnn_data"].(string), + "DNN_IMS": basic["dnn_ims"].(string), + + // external + "N2_IP": external["amfn2_ip"].(string), + "UE_POOL": external["ue_pool"].(string), + "UE_IP": ueIP, + "UE_MASK": ueMask, + "N3_IP": n3IP, + "N3_MASK": n3Mask, + "N3_GW": external["upfn3_gw"].(string), + "N6_IP": n6IP, + "N6_MASK": n6Mask, + "N6_GW": external["upfn6_gw"].(string), + + // sbi + "OMC_IP": sbi["omc_ip"].(string), + "IMS_IP": sbi["ims_ip"].(string), + "AMF_IP": sbi["amf_ip"].(string), + "AUSF_IP": sbi["ausf_ip"].(string), + "UDM_IP": sbi["udm_ip"].(string), + "ADB_IP": sbi["adb_ip"].(string), + "SMF_IP": sbi["smf_ip"].(string), + "PCF_IP": sbi["pcf_ip"].(string), + "NSSF_IP": sbi["nssf_ip"].(string), + "NRF_IP": sbi["nrf_ip"].(string), + "UPF_IP": sbi["upf_ip"].(string), + "MME_IP": sbi["mme_ip"].(string), + "N3IWF_IP": sbi["n3iwf_ip"].(string), + } +} diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 74aaa763..119154f3 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -143,16 +143,17 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp return "", fmt.Errorf("error uploading package") } - var para5GData map[string]any + var para5GData map[string]string if action == "install" { // ========= 网元公共配置文件 start ========= - para5GData, err = NewNeInfoImpl.NeConfPara5GRead() - if para5GData == nil || err != nil { + para5GMap, err := NewNeInfoImpl.NeConfPara5GRead() + if para5GMap == nil || err != nil { return "", fmt.Errorf("error read para5G file info") } - if err := NewNeInfoImpl.NeConfPara5GWirte(para5GData, []string{fmt.Sprintf("%s@%s", neInfo.NeType, neInfo.NeId)}); err != nil { + if err := NewNeInfoImpl.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neInfo.NeType, neInfo.NeId)}); err != nil { return "", fmt.Errorf("error wirte OAM file info") } + para5GData = NewNeInfoImpl.NeConfPara5GDataConvert(para5GMap) // ========= 网元公共配置文件 end =========== } @@ -185,24 +186,15 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp } if action == "install" { cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") - cmdStrArr = append(cmdStrArr, "sudo ims-stop || true && sudo ims-start") + cmdStrArr = append(cmdStrArr, "sudo ims-stop || true && sudo ims-start \n") // 公网 PLMN地址 - sipIP, sipIPOk := para5GData["SIPIP"] - mcc, mccOk := para5GData["MCC"] - mnc, mncOk := para5GData["MNC"] - if sipIPOk && sipIP != "" && mccOk && mcc != "" && mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", sipIP, mcc, mnc)) - } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", para5GData["N2_IP"], para5GData["MCC"], para5GData["MNC"])) // 内网 服务地址 - if imsIP, ok := para5GData["IMSIP"]; ok && imsIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", imsIP)) - } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", para5GData["IMS_IP"])) // IWF连接PCF服务 - if pcfIP, ok := para5GData["PCFIP"]; ok && pcfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", pcfIP)) - } - // 30s后停止服务 - cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", para5GData["PCF_IP"])) + // 5s后停止服务 + cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 5s && sudo ims-stop\" > /dev/null 2>&1 & \n") } else { cmdStrArr = append(cmdStrArr, "sudo ims-stop \n") cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") @@ -215,58 +207,26 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp // AMF配置修改 if neTypeLower == "amf" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/amf/default/amfcfg.yaml /usr/local/etc/amf/amfcfg.yaml \n") - if amfIP, ok := para5GData["AMFIP"]; ok && amfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", amfIP)) - } - if n2IP, ok := para5GData["N2IP"]; ok && n2IP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", n2IP)) - } - if mcc, ok := para5GData["MCC"]; ok && mcc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", mcc)) - } - if mnc, ok := para5GData["MNC"]; ok && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", mnc)) - } - if sst, ok := para5GData["SST"]; ok && sst != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", sst)) - } - if sd, ok := para5GData["SD"]; ok && sd != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", sd)) - } - if nrtac, ok := para5GData["NRTAC"]; ok && nrtac != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- 4388/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", nrtac)) - } - if ausfIP, ok := para5GData["AUSFIP"]; ok && ausfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", ausfIP)) - } - if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", udmIP)) - } - if smfIP, ok := para5GData["SMFIP"]; ok && smfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", smfIP)) - } - if pcfIP, ok := para5GData["PCFIP"]; ok && pcfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", pcfIP)) - } - if dnn, ok := para5GData["DNN"]; ok && dnn != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- internet/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", dnn)) - } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SST"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SD"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- 4388/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["TAC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AUSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- internet/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["DNN_DATA"])) } // AUSF配置修改 if neTypeLower == "ausf" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/ausf/default/ausfcfg.yaml /usr/local/etc/ausf/ausfcfg.yaml \n") - if ausfIP, ok := para5GData["AUSFIP"]; ok && ausfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", ausfIP)) - } - if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", udmIP)) - } - if mcc, ok := para5GData["MCC"]; ok && mcc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", mcc)) - } - if mnc, ok := para5GData["MNC"]; ok && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", mnc)) - } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["AUSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MNC"])) } // UDM配置修改 if neTypeLower == "udm" { @@ -277,257 +237,116 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/as.yaml /usr/local/etc/udm/as.yaml \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/dnn.yaml /usr/local/etc/udm/dnn.yaml \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/scscfSet.yaml /usr/local/etc/udm/scscfSet.yaml \n") - - if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", udmIP)) - } - if ausfIP, ok := para5GData["AUSFIP"]; ok && ausfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", ausfIP)) - } - if amfIP, ok := para5GData["AMFIP"]; ok && amfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", amfIP)) - } - mcc, mccOk := para5GData["MCC"] - mnc, mncOk := para5GData["MNC"] - if mccOk && mcc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", mcc)) - } - if mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", mnc)) - } - if mccOk && mcc != "" && mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", mnc, mcc)) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/as.yaml \n", mnc, mcc)) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/scscfSet.yaml \n", mnc, mcc)) - } - if sst, ok := para5GData["SST"]; ok && sst != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/nssai.yaml \n", sst)) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/snssai.yaml \n", sst)) - } - if sd, ok := para5GData["SD"]; ok && sd != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/nssai.yaml \n", sd)) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/snssai.yaml \n", sd)) - } - if dnn, ok := para5GData["DNN"]; ok && dnn != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/udm/snssai.yaml \n", dnn)) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/udm/dnn.yaml \n", dnn)) - } - if sipIP, ok := para5GData["SIPIP"]; ok && sipIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/udm/as.yaml \n", sipIP)) - } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AUSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["MNC"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/scscfSet.yaml \n", para5GData["MNC"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/nssai.yaml \n", para5GData["SST"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SST"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/nssai.yaml \n", para5GData["SD"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SD"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_IMS"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_IMS"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.18.81/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["N2_IP"])) } // SMF配置修改 if neTypeLower == "smf" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/smf/default/smf_conf.yaml /usr/local/etc/smf/smf_conf.yaml \n") - if sipIP, ok := para5GData["SIPIP"]; ok && sipIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", sipIP)) - } - if amfIP, ok := para5GData["AMFIP"]; ok && amfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", amfIP)) - } - if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", udmIP)) - } - if smfIP, ok := para5GData["SMFIP"]; ok && smfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", smfIP)) - } - if pcfIP, ok := para5GData["PCFIP"]; ok && pcfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", pcfIP)) - } - if upfIP, ok := para5GData["UPFIP"]; ok && upfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", upfIP)) - } - if dnn, ok := para5GData["DNN"]; ok && dnn != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", dnn)) - } - if ueIP, ok := para5GData["UEIP"]; ok && ueIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|10.2.1.0/24|%s/24|g\" /usr/local/etc/smf/smf_conf.yaml \n", ueIP)) - } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UPF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|10.2.1.0/24|%s|g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UE_POOL"])) } // PCF配置修改 if neTypeLower == "pcf" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/pcf/default/pcfcfg.yaml /usr/local/etc/pcf/pcfcfg.yaml \n") - if amfIP, ok := para5GData["AMFIP"]; ok && amfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", amfIP)) - } - if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", udmIP)) - } - if pcfIP, ok := para5GData["PCFIP"]; ok && pcfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", pcfIP)) - } - mcc, mccOk := para5GData["MCC"] - mnc, mncOk := para5GData["MNC"] - if mccOk && mcc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", mcc)) - } - if mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", mnc)) - } - if mccOk && mcc != "" && mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", mnc, mcc)) - } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC"], para5GData["MCC"])) } - // UPF配置修改-标准版 - if upfType, ok := para5GData["UPFType"]; ok && upfType == "Standard" && neTypeLower == "upf" { + // UPF配置修改 + if neTypeLower == "upf" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfcfg.yaml /usr/local/etc/upf/upfcfg.yaml \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n") - if upfIP, ok := para5GData["UPFIP"]; ok && upfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", upfIP)) - } - if n3IP, ok := para5GData["N3IP"]; ok && n3IP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", n3IP)) - } - if n3MAC, ok := para5GData["N3MAC"]; ok && n3MAC != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n3MAC)) - } - if n3PCI, ok := para5GData["N3PCI"]; ok && n3PCI != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n3PCI)) - } - if n3Mask, ok := para5GData["N3Mask"]; ok && n3Mask != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: \"255.255.240.0\"/s/ipv4Mask: \"255.255.240.0\"/ipv4Mask: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n3Mask)) - } - if nN3GW, ok := para5GData["nN3GW"]; ok && nN3GW != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", nN3GW)) - } - if n6IP, ok := para5GData["N6IP"]; ok && n6IP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", n6IP)) - } - if n6MAC, ok := para5GData["N6MAC"]; ok && n6MAC != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n6MAC)) - } - if n6PCI, ok := para5GData["N6PCI"]; ok && n6PCI != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n6PCI)) - } - if n6Mask, ok := para5GData["N6Mask"]; ok && n6Mask != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: \"255.255.240.0\"/s/ipv4Mask: \"255.255.240.0\"/ipv4Mask: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n6Mask)) - } - if nN6GW, ok := para5GData["nN6GW"]; ok && nN6GW != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", nN6GW)) - } - } - // UPF配置修改-轻量版 - if upfType, ok := para5GData["UPFType"]; ok && upfType == "Light" && neTypeLower == "upf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfcfg.yaml /usr/local/etc/upf/upfcfg.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n") - if upfIP, ok := para5GData["UPFIP"]; ok && upfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", upfIP)) - } - if n3IP, ok := para5GData["N3IP"]; ok && n3IP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", n3IP)) - } - if n3Mask, ok := para5GData["N3Mask"]; ok && n3Mask != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: \"255.255.240.0\"/s/ipv4Mask: \"255.255.240.0\"/ipv4Mask: \"'%s'\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", n3Mask)) - } - if ueIP, ok := para5GData["UEIP"]; ok && ueIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: '\"%s\"'/' /usr/local/etc/upf/upfForwarder_1.yaml \n", ueIP)) - } - if ueIPMask, ok := para5GData["UEIPMask"]; ok && ueIPMask != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: '\"%s\"'/' /usr/local/etc/upf/upfForwarder_1.yaml \n", ueIPMask)) - } - cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: \"vmxnet3\"/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", para5GData["UPF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/localhost/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MASK"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_GW"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s'/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s'/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"])) + // 轻量 + // cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") + // cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") + // cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: \"vmxnet3\"/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") } + // NRF配置修改 + if neTypeLower == "nrf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nssfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MNC"])) + } + // NSSF配置修改 + if neTypeLower == "nssf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nssf/default/nssfcfg.yaml /usr/local/etc/nssf/nssfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NSSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MNC"])) + } // MME配置修改 if neTypeLower == "mme" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/mme/default/mme.conf /usr/local/etc/mme/mme.conf \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/epsApn.yaml /usr/local/etc/udm/epsApn.yaml \n") - if amfIP, ok := para5GData["AMFIP"]; ok && amfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/mme/mme.conf \n", amfIP)) - } - if smfIP, ok := para5GData["SMFIP"]; ok && smfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/mme/mme.conf \n", smfIP)) - } - if mmeIPs1, ok := para5GData["S1_MMEIP"]; ok && mmeIPs1 != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220/20|%s|g\" /usr/local/etc/mme/mme.conf \n", mmeIPs1)) - } - if mmeIPs10, ok := para5GData["S20_MMEIP"]; ok && mmeIPs10 != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220/24|%s|g\" /usr/local/etc/mme/mme.conf \n", mmeIPs10)) - } - if mmeIPs11, ok := para5GData["S21_MMEIP"]; ok && mmeIPs11 != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.221/24|%s|g\" /usr/local/etc/mme/mme.conf \n", mmeIPs11)) - } - mcc, mccOk := para5GData["MCC"] - mnc, mncOk := para5GData["MNC"] - if mccOk && mcc != "" && mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/mme/mme.conf \n", mnc, mcc)) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/\"00101\"/\"%s%s\"/g\" /usr/local/etc/mme/mme.conf \n", mcc, mnc)) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC=\"001\" ; MNC=\"01\";/MCC=\"%s\" ; MNC=\"%s\";/g\" /usr/local/etc/mme/mme.conf \n", mcc, mnc)) - } - if ltetac, ok := para5GData["LTETAC"]; ok && ltetac != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = \"1\";/TAC = \"%s\";/g\" /usr/local/etc/mme/mme.conf \n", ltetac)) - } - if dnn, ok := para5GData["DNN"]; ok && dnn != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/udm/epsApn.yaml \n", dnn)) - } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["SMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220/20|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["MME_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.221/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["MME_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MNC"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/\"00101\"/\"%s%s\"/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC=\"001\" ; MNC=\"01\";/MCC=\"%s\" ; MNC=\"%s\";/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = \"1\";/TAC = \"%s\";/g\" /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/ims/%s/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"])) // SMF开启 cmdStrArr = append(cmdStrArr, "sudo sed -i \"/^ *gxcfg:/,/^ *[^ ]/{s/enable: false/enable: true/;b};\" /usr/local/etc/smf/smf_conf.yaml \n") } - - // NSSF配置修改 - if neTypeLower == "nssf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nssf/default/nssfcfg.yaml /usr/local/etc/nssf/nssfcfg.yaml \n") - if nssfIP, ok := para5GData["NSSFIP"]; ok && nssfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", nssfIP)) - } - if nrfIP, ok := para5GData["NRFIP"]; ok && nrfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", nrfIP)) - } - if mcc, mccOk := para5GData["MCC"]; mccOk && mcc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", mcc)) - } - if mnc, mncOk := para5GData["MNC"]; mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", mnc)) - } - } - // NRF配置修改 - if neTypeLower == "nrf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nssfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n") - if nrfIP, ok := para5GData["NRFIP"]; ok && nrfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", nrfIP)) - } - if mcc, mccOk := para5GData["MCC"]; mccOk && mcc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", mcc)) - } - if mnc, mncOk := para5GData["MNC"]; mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", mnc)) - } - } // N3IWF配置修改 if neTypeLower == "n3iwf" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/n3iwf/default/n3iwfcfg.yaml /usr/local/etc/n3iwf/n3iwfcfg.yaml \n") - if mcc, mccOk := para5GData["MCC"]; mccOk && mcc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC: 001/MCC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", mcc)) - } - if mnc, mncOk := para5GData["MNC"]; mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MNC: 01/MNC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", mnc)) - } - if n3iwfIP, ok := para5GData["N3IWFIP"]; ok && n3iwfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.230/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", n3iwfIP)) - } - if udmIP, ok := para5GData["UDMIP"]; ok && udmIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", udmIP)) - } - if smfIP, ok := para5GData["SMFIP"]; ok && smfIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", smfIP)) - } - if n2IP, ok := para5GData["N2IP"]; ok && n2IP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.120/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", n2IP)) - } - if n3IP, ok := para5GData["N3IP"]; ok && n3IP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", n3IP)) - } - if n6IP, ok := para5GData["N6IP"]; ok && n6IP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", n6IP)) - } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC: 001/MCC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MNC: 01/MNC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.27/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.239/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["SMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.22/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N6_IP"])) } cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) - // 30s后停止服务 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) + // 5s后停止服务 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 5s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) } else { cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s stop \n", neTypeLower)) cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") From a5d107e486dd8f98449adca9f2ef5f9a6e73d885 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 10 May 2024 09:46:41 +0800 Subject: [PATCH 070/130] =?UTF-8?q?del:=20=E7=A7=BB=E9=99=A4=E7=BD=91?= =?UTF-8?q?=E5=85=83=E8=BD=AF=E4=BB=B6=E5=AE=89=E8=A3=85=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_software.go | 41 ----- .../network_element/service/ne_software.go | 3 - .../service/ne_software.impl.go | 163 ------------------ 3 files changed, 207 deletions(-) diff --git a/src/modules/network_element/controller/ne_software.go b/src/modules/network_element/controller/ne_software.go index 1f372bfc..d5658d7c 100644 --- a/src/modules/network_element/controller/ne_software.go +++ b/src/modules/network_element/controller/ne_software.go @@ -191,44 +191,3 @@ func (s *NeSoftwareController) NewNeVersion(c *gin.Context) { } c.JSON(200, result.Err(nil)) } - -// 网元软件包安装 -// -// POST /install -func (s *NeSoftwareController) Install(c *gin.Context) { - language := ctx.AcceptLanguage(c) - var body struct { - Software model.NeSoftware `json:"software" binding:"required"` // 软件包信息 - Preinput map[string]string `json:"preinput" binding:"required"` // 预先输入参数 - } - err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.Software.NeId == "" { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - // 检查是否存在软件包记录 - neSoftwares := s.neSoftwareService.SelectList(model.NeSoftware{ - NeType: body.Software.NeType, - Name: body.Software.Name, - Version: body.Software.Version, - }) - if len(neSoftwares) <= 0 { - body.Software.CreateBy = ctx.LoginUserToUserName(c) - body.Software.ID = s.neSoftwareService.Insert(body.Software) - } else { - neSoftware := neSoftwares[0] - neSoftware.Path = body.Software.Path - neSoftware.Description = body.Software.Description - neSoftware.UpdateBy = ctx.LoginUserToUserName(c) - s.neSoftwareService.Update(neSoftware) - } - - // 进行安装 - output, err := s.neSoftwareService.InstallToNeHost(body.Software, body.Preinput) - if err != nil { - c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) - return - } - c.JSON(200, result.OkData(output)) -} diff --git a/src/modules/network_element/service/ne_software.go b/src/modules/network_element/service/ne_software.go index 2c18615d..37e9ad4a 100644 --- a/src/modules/network_element/service/ne_software.go +++ b/src/modules/network_element/service/ne_software.go @@ -27,7 +27,4 @@ type INeSoftware interface { // UpdateVersions 更新软件包对应网元的新版本 UpdateVersions(neSoftware model.NeSoftware, neVersion model.NeVersion) int64 - - // InstallToNeHost 安装包上传到网元主机执行安装命令 - InstallToNeHost(neSoftware model.NeSoftware, preinput map[string]string) (string, error) } diff --git a/src/modules/network_element/service/ne_software.impl.go b/src/modules/network_element/service/ne_software.impl.go index 3e4b3a40..8ac52094 100644 --- a/src/modules/network_element/service/ne_software.impl.go +++ b/src/modules/network_element/service/ne_software.impl.go @@ -3,9 +3,6 @@ package service import ( "fmt" "os" - "path/filepath" - "strings" - "time" "be.ems/src/framework/utils/file" "be.ems/src/modules/network_element/model" @@ -144,163 +141,3 @@ func (r *NeSoftwareImpl) UpdateVersions(neSoftware model.NeSoftware, neVersion m } return rows } - -// InstallToNeHost 安装包上传到网元主机执行安装命令 -func (r *NeSoftwareImpl) InstallToNeHost(neSoftware model.NeSoftware, preinput map[string]string) (string, error) { - // 检查文件是否存在 - localFilePath := file.ParseUploadFilePath(neSoftware.Path) - if _, err := os.Stat(localFilePath); err != nil { - return "", fmt.Errorf("file read failure") - } - fileName := filepath.Base(neSoftware.Path) - if strings.Contains(fileName, "*") { - fileName = strings.ReplaceAll(fileName, "*", "_") - } - nePath := "/tmp" - neFilePath := fmt.Sprintf("%s/%s", nePath, fileName) - - // 网元主机的SSH客户端 - sshClient, err := NewNeInfoImpl.NeRunSSHclient(neSoftware.NeType, neSoftware.NeId) - if err != nil { - return "", err - } - defer sshClient.Close() - // 网元主机的SSH客户端进行文件传输 - sftpClient, err := sshClient.NewClientSFTP() - if err != nil { - return "", err - } - defer sftpClient.Close() - - // 上传软件包到 /tmp - if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { - return "", fmt.Errorf("error uploading package") - } - - // ========= 安装命令 start ========= - - // 命令终止结束标记 - okFlagStr := fmt.Sprintf("%s software install successful!", neSoftware.NeType) - // 安装软件包 - pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s \n", neFilePath) - fileExt := filepath.Ext(strings.ToLower(fileName)) - if strings.HasSuffix(fileExt, "rpm") { - pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s \n", neFilePath) - } - - // 预先参数 - cmdStrArr := []string{pkgCmdStr} - if neSoftware.NeType == "IMS" { - if !strings.Contains(strings.ToLower(fileName), "ims") { - return "", fmt.Errorf("error file package not ims") - } - // P/I/S-CSCF Config 配置覆盖 - if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("%s \n", pisCSCF)) - } - // 公网 PLMN地址 - pubIP, pubIPOk := preinput["pubIP"] - mcc, mccOk := preinput["mcc"] - mnc, mncOk := preinput["mnc"] - if pubIPOk && pubIP != "" && mccOk && mcc != "" && mncOk && mnc != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", pubIP, mcc, mnc)) - } - // 内网 服务地址 - if priIP, ok := preinput["priIP"]; ok && priIP != "" { - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", priIP)) - } - cmdStrArr = append(cmdStrArr, "sudo ims-start") - // 10s后停止服务 - cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 15s && sudo ims-stop\" > /dev/null 2>&1 & \n") - } else if neSoftware.NeType == "OMC" { - cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart \n") - // 10s后停止服务 - cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 15s && sudo /usr/local/omc/bin/omcsvc.sh stop\" > /dev/null 2>&1 & \n") - } else { - neTypeLower := strings.ToLower(neSoftware.NeType) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) - // 10s后停止服务 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 15s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) - } - - // 删除软件包 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", neFilePath)) - // 结束 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) - // ========= 安装命令 end ========= - - // ssh连接会话 - clientSession, err := sshClient.NewClientSession(80, 24) - if err != nil { - return "", fmt.Errorf("neinfo ssh client session new err") - } - defer clientSession.Close() - - firstRead := true // 首次命令进行记录日志信息 - logMsg := "" // 日志信息 - done := make(chan bool) // 完成信号 - // 超时退出 30s - timeoutTicker := time.NewTicker(30 * time.Second) - defer timeoutTicker.Stop() - // 实时读取SSH消息直接输出 - msTicker := time.NewTicker(100 * time.Millisecond) - defer msTicker.Stop() - go func() { - for { - select { - case <-timeoutTicker.C: - done <- true - return - case <-msTicker.C: - outputByte := clientSession.Read() - if len(outputByte) > 0 { - outputStr := string(outputByte) - // 非首次进行记录命令 - if !firstRead { - logMsg += outputStr - } - // IMS预输入 - if neSoftware.NeType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? ") { - shiftElement := cmdStrArr[0] // 获取第一个元素 - cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除 - clientSession.Write(shiftElement) - continue - } - // 命令终止符后继续执行命令 - if len(cmdStrArr) > 0 && strings.LastIndex(outputStr, "~$ ") > 2 { - if firstRead { - firstRead = false - } - shiftElement := cmdStrArr[0] // 获取第一个元素 - cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除 - clientSession.Write(shiftElement) - continue - } - // 最后输出的退出标记 - if strings.LastIndex(outputStr, okFlagStr) > 5 { - done <- true - break - } - } - } - } - }() - // 等待写入协程完成 - <-done - - // 执行到最后语句的更新Version - if strings.LastIndex(logMsg, okFlagStr) > 5 { - verInfo := NewNeVersionImpl.SelectByNeTypeAndNeID(neSoftware.NeType, neSoftware.NeId) - if verInfo.NeId == neSoftware.NeId { - verInfo.Name = neSoftware.Name - verInfo.Version = neSoftware.Version - verInfo.Path = neSoftware.Path - verInfo.NewName = "-" - verInfo.NewVersion = "-" - verInfo.NewPath = "-" - verInfo.Status = "1" - NewNeVersionImpl.Update(verInfo) - } - } - return logMsg, nil -} From a9f0415b618e4f8671834146aeffac4bc4c70c13 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 10 May 2024 09:46:59 +0800 Subject: [PATCH 071/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E4=B8=BB?= =?UTF-8?q?=E6=9C=BAtelnet=E5=91=BD=E4=BB=A4=E8=BE=93=E5=85=A5=E7=AC=A6?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/controller/ne_host.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/network_element/controller/ne_host.go b/src/modules/network_element/controller/ne_host.go index b1700a11..9336733a 100644 --- a/src/modules/network_element/controller/ne_host.go +++ b/src/modules/network_element/controller/ne_host.go @@ -203,7 +203,7 @@ func (s *NeHostController) Test(c *gin.Context) { return } defer client.Close() - if strings.HasSuffix(client.LastResult, "> ") || strings.HasSuffix(client.LastResult, "# ") { + if strings.HasSuffix(client.LastResult, ">") || strings.HasSuffix(client.LastResult, "> ") || strings.HasSuffix(client.LastResult, "# ") { c.JSON(200, result.Ok(nil)) } else { // 连接主机失败,请检查连接参数后重试 From 0658203defcdaab4b74ac96e25df92c6d00b0f71 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 10 May 2024 10:02:31 +0800 Subject: [PATCH 072/130] =?UTF-8?q?del:=20=E7=A7=BB=E9=99=A4=E7=BD=91?= =?UTF-8?q?=E5=85=83=E6=8E=88=E6=9D=83=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_license.go | 100 ------------------ .../network_element/repository/ne_license.go | 3 - .../repository/ne_license.impl.go | 36 ------- .../network_element/service/ne_license.go | 3 - .../service/ne_license.impl.go | 12 --- 5 files changed, 154 deletions(-) diff --git a/src/modules/network_element/controller/ne_license.go b/src/modules/network_element/controller/ne_license.go index 14e2695b..64d60acb 100644 --- a/src/modules/network_element/controller/ne_license.go +++ b/src/modules/network_element/controller/ne_license.go @@ -2,11 +2,9 @@ package controller import ( "fmt" - "strings" "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" - "be.ems/src/framework/utils/parse" "be.ems/src/framework/vo/result" "be.ems/src/modules/network_element/model" neService "be.ems/src/modules/network_element/service" @@ -69,104 +67,6 @@ func (s *NeLicenseController) Info(c *gin.Context) { c.JSON(200, result.OkData(neLicense)) } -// 网元授权激活信息新增 -// -// POST / -func (s *NeLicenseController) Add(c *gin.Context) { - language := ctx.AcceptLanguage(c) - var body model.NeLicense - err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.ID != "" { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - // 检查属性值唯一 - uniqueInfo := s.neLicenseService.CheckUniqueTypeAndID(body.NeType, body.NeId, "") - if !uniqueInfo { - // 网元授权激活操作【%s】失败,网元类型信息已存在 - msg := i18n.TTemplate(language, "neLicense.errKeyExists", map[string]any{"name": body.NeType}) - c.JSON(200, result.ErrMsg(msg)) - return - } - - // 读取授权码 - code, _ := s.neLicenseService.ReadLicenseInfo(body) - body.ActivationRequestCode = code - - body.CreateBy = ctx.LoginUserToUserName(c) - insertId := s.neLicenseService.Insert(body) - if insertId != "" { - c.JSON(200, result.Ok(nil)) - return - } - c.JSON(200, result.Err(nil)) -} - -// 网元授权激活信息修改 -// -// PUT / -func (s *NeLicenseController) Edit(c *gin.Context) { - language := ctx.AcceptLanguage(c) - var body model.NeLicense - err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.ID == "" { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - // 检查属性值唯一 - uniqueInfo := s.neLicenseService.CheckUniqueTypeAndID(body.NeType, body.NeId, body.ID) - if !uniqueInfo { - // 网元授权激活操作【%s】失败,网元类型信息已存在 - msg := i18n.TTemplate(language, "neLicense.errKeyExists", map[string]any{"name": body.NeType}) - c.JSON(200, result.ErrMsg(msg)) - return - } - - // 检查是否存在 - neLicense := s.neLicenseService.SelectById(body.ID) - if neLicense.ID != body.ID { - // 没有可访问网元授权激活数据! - c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) - return - } - - body.UpdateBy = ctx.LoginUserToUserName(c) - rows := s.neLicenseService.Update(body) - if rows > 0 { - c.JSON(200, result.Ok(nil)) - return - } - c.JSON(200, result.Err(nil)) -} - -// 网元授权激活信息删除 -// -// DELETE /:licenseIds -func (s *NeLicenseController) Remove(c *gin.Context) { - language := ctx.AcceptLanguage(c) - licenseIds := c.Param("licenseIds") - if licenseIds == "" { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - // 处理字符转id数组后去重 - ids := strings.Split(licenseIds, ",") - uniqueIDs := parse.RemoveDuplicates(ids) - if len(uniqueIDs) <= 0 { - c.JSON(200, result.Err(nil)) - return - } - rows, err := s.neLicenseService.DeleteByIds(uniqueIDs) - if err != nil { - c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) - return - } - msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) - c.JSON(200, result.OkMsg(msg)) -} - // 网元neType和neID查询 // // GET /byTypeAndID diff --git a/src/modules/network_element/repository/ne_license.go b/src/modules/network_element/repository/ne_license.go index c185d67e..83cc42ac 100644 --- a/src/modules/network_element/repository/ne_license.go +++ b/src/modules/network_element/repository/ne_license.go @@ -21,7 +21,4 @@ type INeLicense interface { // DeleteByIds 批量删除信息 DeleteByIds(ids []string) int64 - - // CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一 - CheckUniqueTypeAndID(neLicense model.NeLicense) string } diff --git a/src/modules/network_element/repository/ne_license.impl.go b/src/modules/network_element/repository/ne_license.impl.go index fcbb1f0d..0daee946 100644 --- a/src/modules/network_element/repository/ne_license.impl.go +++ b/src/modules/network_element/repository/ne_license.impl.go @@ -1,7 +1,6 @@ package repository import ( - "fmt" "strings" "time" @@ -177,41 +176,6 @@ func (r *NeLicenseImpl) SelectByIds(cmdIds []string) []model.NeLicense { return r.convertResultRows(results) } -// CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一 -func (r *NeLicenseImpl) CheckUniqueTypeAndID(neLicense model.NeLicense) string { - // 查询条件拼接 - var conditions []string - var params []any - if neLicense.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, neLicense.NeType) - } - if neLicense.NeId != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, neLicense.NeId) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } else { - return "" - } - - // 查询数据 - querySql := "select id as 'str' from ne_license " + whereSql + " limit 1" - results, err := datasource.RawDB("", querySql, params) - if err != nil { - logger.Errorf("query err %v", err) - return "" - } - if len(results) > 0 { - return fmt.Sprint(results[0]["str"]) - } - return "" -} - // Insert 新增信息 func (r *NeLicenseImpl) Insert(neLicense model.NeLicense) string { // 参数拼接 diff --git a/src/modules/network_element/service/ne_license.go b/src/modules/network_element/service/ne_license.go index ab91a77a..ace554d1 100644 --- a/src/modules/network_element/service/ne_license.go +++ b/src/modules/network_element/service/ne_license.go @@ -22,9 +22,6 @@ type INeLicense interface { // DeleteByIds 批量删除信息 DeleteByIds(ids []string) (int64, error) - // CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一 - CheckUniqueTypeAndID(neType, neId, id string) bool - // SelectByNeTypeAndNeID 通过ne_type和ne_id查询信息 SelectByNeTypeAndNeID(neType, neId string) model.NeLicense diff --git a/src/modules/network_element/service/ne_license.impl.go b/src/modules/network_element/service/ne_license.impl.go index 9316f0cb..7425d103 100644 --- a/src/modules/network_element/service/ne_license.impl.go +++ b/src/modules/network_element/service/ne_license.impl.go @@ -84,18 +84,6 @@ func (r *NeLicenseImpl) SelectByTypeAndID(neType, neId string) model.NeLicense { return model.NeLicense{} } -// CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一 -func (r *NeLicenseImpl) CheckUniqueTypeAndID(neType, neId, id string) bool { - uniqueId := r.neLicenseRepository.CheckUniqueTypeAndID(model.NeLicense{ - NeType: neType, - NeId: neId, - }) - if uniqueId == id { - return true - } - return uniqueId == "" -} - // SelectByNeTypeAndNeID 通过ne_type和ne_id查询信息 func (r *NeLicenseImpl) SelectByNeTypeAndNeID(neType, neId string) model.NeLicense { neLicenses := r.neLicenseRepository.SelectList(model.NeLicense{ From ea548d0fdbe4405e67f3484090f87ee601c33ec1 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 10 May 2024 10:12:56 +0800 Subject: [PATCH 073/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96=EF=BC=8C=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E7=BD=91=E5=85=83=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=AF=BB=E5=86=99=EF=BC=8Coam=E6=96=87=E4=BB=B6=E8=AF=BB?= =?UTF-8?q?=E5=86=99=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_info.go | 133 +---------- .../network_element/service/ne_info.go | 20 +- .../network_element/service/ne_info.impl.go | 208 ++++++------------ 3 files changed, 77 insertions(+), 284 deletions(-) diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index 9c89d192..6ac3da24 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -144,119 +144,6 @@ func (s *NeInfoController) ListAll(c *gin.Context) { c.JSON(200, result.OkData(neList)) } -// 网元端配置文件读取 -// -// GET /configFile -func (s *NeInfoController) ConfigFileRead(c *gin.Context) { - language := ctx.AcceptLanguage(c) - var querys struct { - NeType string `form:"neType" binding:"required"` - NeID string `form:"neId" binding:"required"` - FilePath string `form:"filePath"` // 不带文件路径时进行复制覆盖本地网元配置目录 - FileType string `form:"fileType" binding:"oneof='' txt json yaml yml"` // 根据指定文件类型进行解析序列出map->json - } - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID) - if neInfo.NeId != querys.NeID || neInfo.IP == "" { - c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) - return - } - - data := s.neInfoService.NeConfigFileRead(neInfo, querys.FilePath, querys.FileType) - c.JSON(200, result.OkData(data)) -} - -// 网元端配置文件写入 -// -// PUT /configFile -func (s *NeInfoController) ConfigFileWrite(c *gin.Context) { - language := ctx.AcceptLanguage(c) - var body struct { - NeType string `json:"neType" binding:"required"` - NeID string `json:"neId" binding:"required"` - FilePath string `json:"filePath" binding:"required"` - FileType string `json:"fileType" binding:"oneof='' txt json yaml yml"` // 解析内容数据到对应文件类型 - Content any `json:"content" binding:"required"` // 内容 - Sync bool `json:"sync"` // 同步到网元 - } - if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeID) - if neInfo.NeId != body.NeID || neInfo.IP == "" { - c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) - return - } - - err := s.neInfoService.NeConfigFileWirte(neInfo, body.FilePath, body.FileType, body.Content, body.Sync) - if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) - return - } - c.JSON(200, result.Ok(nil)) -} - -// 网元端OAM配置文件读取 -// -// GET /oamFile -func (s *NeInfoController) OAMFileRead(c *gin.Context) { - language := ctx.AcceptLanguage(c) - var querys struct { - NeType string `form:"neType" binding:"required"` - NeID string `form:"neId" binding:"required"` - } - if err := c.ShouldBindQuery(&querys); err != nil { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - data, err := s.neInfoService.NeConfOAMRead(querys.NeType, querys.NeID) - if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) - return - } - c.JSON(200, result.OkData(data)) -} - -// 网元端OAM配置文件写入 -// -// PUT /oamFile -func (s *NeInfoController) OAMFileWrite(c *gin.Context) { - language := ctx.AcceptLanguage(c) - var body struct { - NeType string `json:"neType" binding:"required"` - NeID string `json:"neId" binding:"required"` - Content map[string]any `json:"content" binding:"required"` // 内容 - Sync bool `json:"sync"` // 同步到网元 - } - if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeID) - if neInfo.NeId != body.NeID || neInfo.IP == "" { - c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) - return - } - - err := s.neInfoService.NeConfOAMWirte(body.NeType, body.NeID, body.Content, body.Sync) - if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) - return - } - c.JSON(200, result.Ok(nil)) -} - // 网元端Para5G配置文件读取 // // GET /para5GFile @@ -412,8 +299,8 @@ func (s *NeInfoController) Edit(c *gin.Context) { } // 检查属性值唯一 - uniqueHostCmd := s.neInfoService.CheckUniqueNeTypeAndNeId(body.NeType, body.NeId, body.ID) - if !uniqueHostCmd { + uniqueInfo := s.neInfoService.CheckUniqueNeTypeAndNeId(body.NeType, body.NeId, body.ID) + if !uniqueInfo { // 网元信息操作【%s】失败,同类型下标识已存在 msg := i18n.TTemplate(language, "neInfo.errKeyExists", map[string]any{"key": body.NeId}) c.JSON(200, result.ErrMsg(msg)) @@ -462,18 +349,18 @@ func (s *NeInfoController) Edit(c *gin.Context) { } } - if neVersion.NeType != body.NeType || neVersion.NeId != body.NeId { - neVersion.NeType = body.NeType - neVersion.NeId = body.NeId - } if neVersion.ID != "" { + if neVersion.NeType != body.NeType || neVersion.NeId != body.NeId { + neVersion.NeType = body.NeType + neVersion.NeId = body.NeId + } s.neVersionService.Update(neVersion) } - if neLicense.NeType != body.NeType || neLicense.NeId != body.NeId { - neVersion.NeType = body.NeType - neVersion.NeId = body.NeId - } if neLicense.ID != "" { + if neLicense.NeType != body.NeType || neLicense.NeId != body.NeId { + neVersion.NeType = body.NeType + neVersion.NeId = body.NeId + } s.neLicenseService.Update(neLicense) } diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index ad265734..6209a290 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -45,7 +45,7 @@ type INeInfo interface { DeleteByIds(infoIds []string) (int64, error) // CheckUniqueNeTypeAndNeId 校验同类型下标识是否唯一 - CheckUniqueNeTypeAndNeId(neType, neId, infoId string) bool + CheckUniqueNeTypeAndNeId(neType, neId, id string) bool // NeRunSSHclient 网元主机的SSH客户端-为创建相关连接 NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) @@ -53,26 +53,12 @@ type INeInfo interface { // NeRunCMD 向网元发送cmd命令 NeRunCMD(neType, neId, cmd string) (string, error) - // NeConfigFileRead 网元配置文件读取 网元配置yaml文件复制到本地后通过filePath读取 - // - // 返回 string string[] map[string]any - NeConfigFileRead(neInfo model.NeInfo, filePath, fileType string) any - - // NeConfigFileWirte 网元配置文件写入 content内容 sync同步到网元端 - NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType string, content any, sync bool) error - - // NeConfOAMRead 网元OAM配置文件读取 - NeConfOAMRead(neType, neId string) (map[string]any, error) - - // NeConfOAMWirte 网元OAM配置文件写入 content内容 sync同步到网元端 - NeConfOAMWirte(neType, neId string, content any, sync bool) error + // NeConfOAMSync 网元OAM配置文件生成并同步 + NeConfOAMSync(neInfo model.NeInfo, sync bool) error // NeConfPara5GRead 网元公共配置文件读取 NeConfPara5GRead() (map[string]any, error) // NeConfPara5GWirte 网元公共配置文件写入 content内容 syncNE同步到网元端NeType@NeId NeConfPara5GWirte(content map[string]any, syncNE []string) error - - // NeConfPara5GConvert 网元公共配置数据转化 content网元公共配置文件读取内容 - NeConfPara5GDataConvert(content map[string]any) map[string]string } diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 9956a87f..883cd17f 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -20,12 +20,14 @@ import ( // 实例化服务层 NeInfoImpl 结构体 var NewNeInfoImpl = &NeInfoImpl{ neInfoRepository: repository.NewNeInfoImpl, + Para5GData: map[string]string{}, } // 网元信息 服务层处理 type NeInfoImpl struct { // 网元信息数据信息 neInfoRepository repository.INeInfo + Para5GData map[string]string } // SelectNeInfoByNeTypeAndNeID 通过ne_type和ne_id查询网元信息 @@ -262,8 +264,7 @@ func (r *NeInfoImpl) DeleteByIds(infoIds []string) (int64, error) { for _, v := range infos { // 主机信息删除 if v.HostIDs != "" { - hostIds := strings.Split(v.HostIDs, ",") - NewNeHostImpl.DeleteByIds(hostIds) + NewNeHostImpl.DeleteByIds(strings.Split(v.HostIDs, ",")) } // 删除License neLicense := NewNeLicenseImpl.SelectByNeTypeAndNeID(v.NeType, v.NeId) @@ -276,8 +277,7 @@ func (r *NeInfoImpl) DeleteByIds(infoIds []string) (int64, error) { NewNeVersionImpl.DeleteByIds([]string{neVersion.ID}) } // 缓存信息删除 - key := fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, v.NeType, v.NeId) - redis.Del("", key) + redis.Del("", fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, v.NeType, v.NeId)) } rows := r.neInfoRepository.DeleteByIds(infoIds) return rows, nil @@ -287,12 +287,12 @@ func (r *NeInfoImpl) DeleteByIds(infoIds []string) (int64, error) { } // CheckUniqueNeTypeAndNeId 校验同类型下标识是否唯一 -func (r *NeInfoImpl) CheckUniqueNeTypeAndNeId(neType, neId, infoId string) bool { +func (r *NeInfoImpl) CheckUniqueNeTypeAndNeId(neType, neId, id string) bool { uniqueId := r.neInfoRepository.CheckUniqueNeTypeAndNeId(model.NeInfo{ NeType: neType, NeId: neId, }) - if uniqueId == infoId { + if uniqueId == id { return true } return uniqueId == "" @@ -354,138 +354,6 @@ func (r *NeInfoImpl) NeRunCMD(neType, neId, cmd string) (string, error) { return output, nil } -// NeConfigFileRead 网元配置文件读取 网元配置yaml文件复制到本地后通过filePath读取 -// -// 返回 string string[] map[string]any -func (r *NeInfoImpl) NeConfigFileRead(neInfo model.NeInfo, filePath, fileType string) any { - neTypeLower := strings.ToLower(neInfo.NeType) - - // 网管本地路径 - omcPath := "/usr/local/etc/omc/ne_config" - if runtime.GOOS == "windows" { - omcPath = fmt.Sprintf("C:%s", omcPath) - } - omcPath = fmt.Sprintf("%s/%s/%s", omcPath, neTypeLower, neInfo.NeId) - - // 读取文件内容 - if filePath != "" { - bytes, err := os.ReadFile(fmt.Sprintf("%s/%s", omcPath, filePath)) - if err != nil { - logger.Warnf("NeConfigFile ReadFile => %s", err.Error()) - return "read file error" - } - content := string(bytes) - if fileType == "" || fileType == "txt" { - return content - } - // 序列化Map - mapData, err := parse.ConvertConfigToMap(fileType, content) - if err != nil { - logger.Warnf("NeConfigFile ConvertConfigToMap => %s", err.Error()) - return "content convert type error" - } - return mapData - } - - // 文件列表 - files := []string{} - // 删除原有配置文件 - // err := os.RemoveAll(omcPath) - // if err != nil { - // logger.Warnf("NeConfigFile Remove => %s", err.Error()) - // return files - // } - - // 网元端配置路径 - nePath := "/usr/local/etc" - nePath = fmt.Sprintf("%s/%s", nePath, neTypeLower) - - // 网元主机的SSH客户端 - sshClient, err := r.NeRunSSHclient(neInfo.NeType, neInfo.NeId) - if err != nil { - return err.Error() - } - defer sshClient.Close() - // 网元主机的SSH客户端进行文件传输 - sftpClient, err := sshClient.NewClientSFTP() - if err != nil { - return err.Error() - } - defer sftpClient.Close() - - // 各个网元与网管间约定配置文件 - if err = sftpClient.CopyFileRemoteToLocal(nePath+"/oam_manager.yaml", omcPath+"/oam_manager.yaml"); err == nil { - files = append(files, "oam_manager.yaml") - } - - // 根据情况复制网元特殊配置 - switch neTypeLower { - case "ausf": - cfgFile := "ausfcfg.yaml" - if err = sftpClient.CopyFileRemoteToLocal(fmt.Sprintf("%s/%s", nePath, cfgFile), fmt.Sprintf("%s/%s", omcPath, cfgFile)); err == nil { - files = append(files, cfgFile) - } - case "smf": - cfgFile := "smf_conf.yaml" - if err = sftpClient.CopyFileRemoteToLocal(fmt.Sprintf("%s/%s", nePath, cfgFile), fmt.Sprintf("%s/%s", omcPath, cfgFile)); err == nil { - files = append(files, cfgFile) - } - case "ims": - } - - return files -} - -// NeConfigFileWirte 网元配置文件写入 content内容 sync同步到网元端 -func (r *NeInfoImpl) NeConfigFileWirte(neInfo model.NeInfo, filePath, fileType string, content any, sync bool) error { - neTypeLower := strings.ToLower(neInfo.NeType) - - // 网管本地路径 - omcPath := "/usr/local/etc/omc/ne_config" - if runtime.GOOS == "windows" { - omcPath = fmt.Sprintf("C:%s", omcPath) - } - localFilePath := fmt.Sprintf("%s/%s/%s/%s", omcPath, neTypeLower, neInfo.NeId, filePath) - - var err error - if fileType == "" || fileType == "txt" { - err = parse.ConvertConfigToFile(fileType, localFilePath, content) - } - if fileType == "json" || fileType == "yaml" || fileType == "yml" { - err = parse.ConvertConfigToFile(fileType, localFilePath, content) - } - if err != nil { - return fmt.Errorf("please check if the file exists or write permissions") - } - - // 同步到网元端 - if sync { - // 网元主机的SSH客户端 - sshClient, err := r.NeRunSSHclient(neInfo.NeType, neInfo.NeId) - if err != nil { - return err - } - defer sshClient.Close() - // 网元主机的SSH客户端进行文件传输 - sftpClient, err := sshClient.NewClientSFTP() - if err != nil { - return err - } - defer sftpClient.Close() - - // 网元端配置路径 - neFilePath := fmt.Sprintf("/usr/local/etc/%s/%s", neTypeLower, filePath) - // 修改网元文件权限 - sshClient.RunCMD(fmt.Sprintf("sudo chmod o+w %s", neFilePath)) - // 复制到网元进行覆盖 - if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { - return fmt.Errorf("please check if scp remote copy is allowed") - } - } - - return nil -} - // neConfOAMData 网元OAM配置文件默认格式数据 func (r *NeInfoImpl) neConfOAMData() map[string]any { return map[string]any{ @@ -529,11 +397,12 @@ func (r *NeInfoImpl) neConfOAMData() map[string]any { // 必改 "timer": 60, }, + "pubConfigPath": "/usr/local/etc/conf/para5G.yaml", } } -// NeConfOAMRead 网元OAM配置文件读取 -func (r *NeInfoImpl) NeConfOAMRead(neType, neId string) (map[string]any, error) { +// neConfOAMRead 网元OAM配置文件读取 +func (r *NeInfoImpl) neConfOAMRead(neType, neId string) (map[string]any, error) { neTypeLower := strings.ToLower(neType) // 网管本地路径 omcPath := "/usr/local/etc/omc/ne_config" @@ -549,7 +418,7 @@ func (r *NeInfoImpl) NeConfOAMRead(neType, neId string) (map[string]any, error) // return nil, fmt.Errorf("read file error") // 无保留文件时返回默认文件数据 oamData := r.neConfOAMData() - r.NeConfOAMWirte(neType, neId, oamData, false) + r.neConfOAMWirte(neType, neId, oamData, false) return oamData, nil } content := string(bytes) @@ -563,8 +432,8 @@ func (r *NeInfoImpl) NeConfOAMRead(neType, neId string) (map[string]any, error) return mapData, nil } -// NeConfOAMWirte 网元OAM配置文件写入 content内容 sync同步到网元端 -func (r *NeInfoImpl) NeConfOAMWirte(neType, neId string, content any, sync bool) error { +// neConfOAMWirte 网元OAM配置文件写入 content内容 sync同步到网元端 +func (r *NeInfoImpl) neConfOAMWirte(neType, neId string, content any, sync bool) error { neTypeLower := strings.ToLower(neType) fileName := "oam_manager.yaml" // 网管本地路径 @@ -608,6 +477,55 @@ func (r *NeInfoImpl) NeConfOAMWirte(neType, neId string, content any, sync bool) return nil } +// NeConfOAMSync 网元OAM配置文件生成并同步 +func (r *NeInfoImpl) NeConfOAMSync(neInfo model.NeInfo, sync bool) error { + oamData, err := r.neConfOAMRead(neInfo.NeType, neInfo.NeId) + if oamData == nil || err != nil { + return fmt.Errorf("error read OAM file info") + } + // 网元HTTP服务 + if v, ok := oamData["httpManageCfg"]; ok { + item := v.(map[string]any) + item["ipv4"] = neInfo.IP + item["port"] = neInfo.Port + oamData["httpManageCfg"] = item + } + // 对网管HTTP配置 + if v, ok := oamData["oamConfig"]; ok { + item := v.(map[string]any) + item["enable"] = true + if omcIP, ok := r.Para5GData["OMCIP"]; ok && omcIP != "" { + item["ipv4"] = omcIP + } + item["neConfig"] = map[string]string{ + "neId": neInfo.NeId, + "rmUid": neInfo.RmUID, + "neName": neInfo.NeName, + "dn": neInfo.Dn, + "vendorName": neInfo.VendorName, + "province": neInfo.Province, + "pvFlag": neInfo.PvFlag, + } + oamData["oamConfig"] = item + } + // 对网管SNMP配置 + if v, ok := oamData["snmpConfig"]; ok { + item := v.(map[string]any) + item["ipv4"] = neInfo.IP + oamData["snmpConfig"] = item + } + // 对网管KPI上报配置 + if v, ok := oamData["kpiConfig"]; ok { + item := v.(map[string]any) + item["enable"] = true + oamData["kpiConfig"] = item + } + if err := NewNeInfoImpl.neConfOAMWirte(neInfo.NeType, neInfo.NeId, oamData, sync); err != nil { + return fmt.Errorf("error wirte OAM file info") + } + return nil +} + // NeConfPara5GRead 网元公共配置文件读取 func (r *NeInfoImpl) NeConfPara5GRead() (map[string]any, error) { // 网管本地路径 @@ -680,11 +598,13 @@ func (r *NeInfoImpl) NeConfPara5GWirte(content map[string]any, syncNE []string) } } + // 转换一份数据到全局 + r.Para5GData = r.neConfPara5GDataConvert(content) return nil } // NeConfPara5GConvert 网元公共配置数据转化 content网元公共配置文件读取内容 -func (r *NeInfoImpl) NeConfPara5GDataConvert(content map[string]any) map[string]string { +func (r *NeInfoImpl) neConfPara5GDataConvert(content map[string]any) map[string]string { basic := content["basic"].(map[string]any) external := content["external"].(map[string]any) sbi := content["sbi"].(map[string]any) From a4a31c9a16f65982f8c99eddc3d3e3305b1c57c5 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 10 May 2024 10:15:42 +0800 Subject: [PATCH 074/130] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96para5G?= =?UTF-8?q?=E5=8F=82=E6=95=B0,=E7=A7=BB=E9=99=A4=E7=BD=91=E5=85=83?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_version.go | 98 ------------------- .../network_element/network_element.go | 57 +---------- .../network_element/repository/ne_version.go | 3 - .../repository/ne_version.impl.go | 36 ------- .../network_element/service/ne_version.go | 3 - .../service/ne_version.impl.go | 67 +------------ 6 files changed, 9 insertions(+), 255 deletions(-) diff --git a/src/modules/network_element/controller/ne_version.go b/src/modules/network_element/controller/ne_version.go index d18a8bb1..94bc2d80 100644 --- a/src/modules/network_element/controller/ne_version.go +++ b/src/modules/network_element/controller/ne_version.go @@ -1,13 +1,9 @@ package controller import ( - "strings" - "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" - "be.ems/src/framework/utils/parse" "be.ems/src/framework/vo/result" - "be.ems/src/modules/network_element/model" neService "be.ems/src/modules/network_element/service" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" @@ -57,100 +53,6 @@ func (s *NeVersionController) Info(c *gin.Context) { c.JSON(200, result.OkData(neVersion)) } -// 网元版本信息新增 -// -// POST / -func (s *NeVersionController) Add(c *gin.Context) { - language := ctx.AcceptLanguage(c) - var body model.NeVersion - err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.ID != "" { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - // 检查属性值唯一 - uniqueInfo := s.neVersionService.CheckUniqueTypeAndID(body.NeType, body.NeId, "") - if !uniqueInfo { - // 网元版本操作【%s】失败,网元类型信息已存在 - msg := i18n.TTemplate(language, "neVersion.errKeyExists", map[string]any{"name": body.NeType}) - c.JSON(200, result.ErrMsg(msg)) - return - } - - body.CreateBy = ctx.LoginUserToUserName(c) - insertId := s.neVersionService.Insert(body) - if insertId != "" { - c.JSON(200, result.Ok(nil)) - return - } - c.JSON(200, result.Err(nil)) -} - -// 网元版本信息修改 -// -// PUT / -func (s *NeVersionController) Edit(c *gin.Context) { - language := ctx.AcceptLanguage(c) - var body model.NeVersion - err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.ID == "" { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - - // 检查属性值唯一 - uniqueInfo := s.neVersionService.CheckUniqueTypeAndID(body.NeType, body.NeId, body.ID) - if !uniqueInfo { - // 网元版本操作【%s】失败,网元类型信息已存在 - msg := i18n.TTemplate(language, "neVersion.errKeyExists", map[string]any{"name": body.NeType}) - c.JSON(200, result.ErrMsg(msg)) - return - } - - // 检查是否存在 - neVersion := s.neVersionService.SelectById(body.ID) - if neVersion.ID != body.ID { - // 没有可访问网元版本数据! - c.JSON(200, result.ErrMsg(i18n.TKey(language, "neVersion.noData"))) - return - } - - body.UpdateBy = ctx.LoginUserToUserName(c) - rows := s.neVersionService.Update(body) - if rows > 0 { - c.JSON(200, result.Ok(nil)) - return - } - c.JSON(200, result.Err(nil)) -} - -// 网元版本信息删除 -// -// DELETE /:versionIds -func (s *NeVersionController) Remove(c *gin.Context) { - language := ctx.AcceptLanguage(c) - versionIds := c.Param("versionIds") - if versionIds == "" { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - // 处理字符转id数组后去重 - ids := strings.Split(versionIds, ",") - uniqueIDs := parse.RemoveDuplicates(ids) - if len(uniqueIDs) <= 0 { - c.JSON(200, result.Err(nil)) - return - } - rows, err := s.neVersionService.DeleteByIds(uniqueIDs) - if err != nil { - c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) - return - } - msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) - c.JSON(200, result.OkMsg(msg)) -} - // 网元版本操作 // // POST /operate diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index 07bfa740..e9d45cce 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -58,24 +58,6 @@ func Setup(router *gin.Engine) { middleware.PreAuthorize(nil), controller.NewNeInfo.ListAll, ) - neInfoGroup.GET("/configFile", - middleware.PreAuthorize(nil), - controller.NewNeInfo.ConfigFileRead, - ) - neInfoGroup.PUT("/configFile", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewNeInfo.ConfigFileWrite, - ) - neInfoGroup.GET("/oamFile", - middleware.PreAuthorize(nil), - controller.NewNeInfo.OAMFileRead, - ) - neInfoGroup.PUT("/oamFile", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewNeInfo.OAMFileWrite, - ) neInfoGroup.GET("/para5GFile", middleware.PreAuthorize(nil), controller.NewNeInfo.Para5GFileRead, @@ -197,21 +179,6 @@ func Setup(router *gin.Engine) { middleware.PreAuthorize(nil), controller.NewNeVersion.Info, ) - neVersionGroup.POST("", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neVersion", collectlogs.BUSINESS_TYPE_INSERT)), - controller.NewNeVersion.Add, - ) - neVersionGroup.PUT("", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neVersion", collectlogs.BUSINESS_TYPE_UPDATE)), - controller.NewNeVersion.Edit, - ) - neVersionGroup.DELETE("/:versionIds", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neVersion", collectlogs.BUSINESS_TYPE_DELETE)), - controller.NewNeVersion.Remove, - ) neVersionGroup.POST("/operate", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neVersion", collectlogs.BUSINESS_TYPE_OTHER)), @@ -250,11 +217,6 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeSoftware.NewNeVersion, ) - neSoftwareGroup.POST("/install", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neSoftware", collectlogs.BUSINESS_TYPE_OTHER)), - controller.NewNeSoftware.Install, - ) } // 网元授权激活信息 @@ -268,21 +230,6 @@ func Setup(router *gin.Engine) { middleware.PreAuthorize(nil), controller.NewNeLicense.Info, ) - neLicenseGroup.POST("", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neLicense", collectlogs.BUSINESS_TYPE_INSERT)), - controller.NewNeLicense.Add, - ) - neLicenseGroup.PUT("", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neLicense", collectlogs.BUSINESS_TYPE_UPDATE)), - controller.NewNeLicense.Edit, - ) - neLicenseGroup.DELETE("/:licenseIds", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neLicense", collectlogs.BUSINESS_TYPE_DELETE)), - controller.NewNeLicense.Remove, - ) neLicenseGroup.GET("/byTypeAndID", middleware.PreAuthorize(nil), controller.NewNeLicense.NeTypeAndID, @@ -416,4 +363,8 @@ func InitLoad() { // 启动时,清除缓存-网元类型 service.NewNeInfoImpl.ClearNeCacheByNeType("*") service.NewNeInfoImpl.SelectNeInfoByRmuid("") + // 启动时,网元公共参数数据记录到全局变量 + if para5GMap, err := service.NewNeInfoImpl.NeConfPara5GRead(); para5GMap != nil && err == nil { + service.NewNeInfoImpl.NeConfPara5GWirte(para5GMap, nil) + } } diff --git a/src/modules/network_element/repository/ne_version.go b/src/modules/network_element/repository/ne_version.go index c6805531..6da08cc8 100644 --- a/src/modules/network_element/repository/ne_version.go +++ b/src/modules/network_element/repository/ne_version.go @@ -21,7 +21,4 @@ type INeVersion interface { // DeleteByIds 批量删除信息 DeleteByIds(ids []string) int64 - - // CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一 - CheckUniqueTypeAndID(neVersion model.NeVersion) string } diff --git a/src/modules/network_element/repository/ne_version.impl.go b/src/modules/network_element/repository/ne_version.impl.go index 0bcfe659..de883acb 100644 --- a/src/modules/network_element/repository/ne_version.impl.go +++ b/src/modules/network_element/repository/ne_version.impl.go @@ -1,7 +1,6 @@ package repository import ( - "fmt" "strings" "time" @@ -181,41 +180,6 @@ func (r *NeVersionImpl) SelectByIds(cmdIds []string) []model.NeVersion { return r.convertResultRows(results) } -// CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一 -func (r *NeVersionImpl) CheckUniqueTypeAndID(neVersion model.NeVersion) string { - // 查询条件拼接 - var conditions []string - var params []any - if neVersion.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, neVersion.NeType) - } - if neVersion.NeId != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, neVersion.NeId) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } else { - return "" - } - - // 查询数据 - querySql := "select id as 'str' from ne_version " + whereSql + " limit 1" - results, err := datasource.RawDB("", querySql, params) - if err != nil { - logger.Errorf("query err %v", err) - return "" - } - if len(results) > 0 { - return fmt.Sprint(results[0]["str"]) - } - return "" -} - // Insert 新增信息 func (r *NeVersionImpl) Insert(neVersion model.NeVersion) string { // 参数拼接 diff --git a/src/modules/network_element/service/ne_version.go b/src/modules/network_element/service/ne_version.go index ed04f0ed..f92a81be 100644 --- a/src/modules/network_element/service/ne_version.go +++ b/src/modules/network_element/service/ne_version.go @@ -25,9 +25,6 @@ type INeVersion interface { // SelectByNeTypeAndNeID 通过网元类型和网元ID查询 SelectByNeTypeAndNeID(neType, neId string) model.NeVersion - // CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一 - CheckUniqueTypeAndID(neType, neId, id string) bool - // Operate 操作版本上传到网元主机执行命令 // // action 安装行为:install upgrade rollback diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 119154f3..4676790f 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -7,7 +7,6 @@ import ( "strings" "time" - "be.ems/lib/core/utils/parse" "be.ems/src/framework/utils/file" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" @@ -84,18 +83,6 @@ func (r *NeVersionImpl) SelectByNeTypeAndNeID(neType, neId string) model.NeVersi return model.NeVersion{} } -// CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一 -func (r *NeVersionImpl) CheckUniqueTypeAndID(neType, neId, id string) bool { - uniqueId := r.neVersionRepository.CheckUniqueTypeAndID(model.NeVersion{ - NeType: neType, - NeId: neId, - }) - if uniqueId == id { - return true - } - return uniqueId == "" -} - // Operate 操作版本上传到网元主机执行命令 // // action 安装行为:install upgrade rollback @@ -143,7 +130,6 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp return "", fmt.Errorf("error uploading package") } - var para5GData map[string]string if action == "install" { // ========= 网元公共配置文件 start ========= para5GMap, err := NewNeInfoImpl.NeConfPara5GRead() @@ -153,7 +139,6 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp if err := NewNeInfoImpl.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neInfo.NeType, neInfo.NeId)}); err != nil { return "", fmt.Errorf("error wirte OAM file info") } - para5GData = NewNeInfoImpl.NeConfPara5GDataConvert(para5GMap) // ========= 网元公共配置文件 end =========== } @@ -185,6 +170,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp return "", fmt.Errorf("error file package not ims") } if action == "install" { + para5GData := NewNeInfoImpl.Para5GData cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") cmdStrArr = append(cmdStrArr, "sudo ims-stop || true && sudo ims-start \n") // 公网 PLMN地址 @@ -202,6 +188,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp } } else { if action == "install" { + para5GData := NewNeInfoImpl.Para5GData cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") // AMF配置修改 @@ -291,10 +278,10 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s'/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s'/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"])) - // 轻量 + // 轻量版 // cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") // cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") - // cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: \"vmxnet3\"/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") + // cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") } // NRF配置修改 @@ -425,51 +412,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp if strings.LastIndex(logMsg, okFlagStr) > 5 { if action == "install" { // ========= 网元OAM配置文件 start ========== - oamData, err := NewNeInfoImpl.NeConfOAMRead(neInfo.NeType, neInfo.NeId) - if oamData == nil || err != nil { - return "", fmt.Errorf("error read OAM file info") - } - // 网元HTTP服务 - if v, ok := oamData["httpManageCfg"]; ok { - item := v.(map[string]any) - item["ipv4"] = neInfo.IP - item["port"] = neInfo.Port - oamData["httpManageCfg"] = item - } - // 对网管HTTP配置 - if v, ok := oamData["oamConfig"]; ok { - item := v.(map[string]any) - item["enable"] = true - if omcIP, ok := para5GData["OMCIP"]; ok && omcIP != "" { - item["ipv4"] = omcIP - } - item["neConfig"] = map[string]string{ - "neId": neInfo.NeId, - "rmUid": neInfo.RmUID, - "neName": neInfo.NeName, - "dn": neInfo.Dn, - "vendorName": neInfo.VendorName, - "province": neInfo.Province, - "pvFlag": neInfo.PvFlag, - } - oamData["oamConfig"] = item - } - // 对网管SNMP配置 - if v, ok := oamData["snmpConfig"]; ok { - item := v.(map[string]any) - item["ipv4"] = neInfo.IP - oamData["snmpConfig"] = item - } - // 对网管KPI上报配置 - if v, ok := oamData["kpiConfig"]; ok { - item := v.(map[string]any) - item["enable"] = true - if kpiTimer, ok := para5GData["KPI_TIMER"]; ok && kpiTimer != "" { - item["timer"] = parse.Number(kpiTimer) - } - oamData["kpiConfig"] = item - } - if err := NewNeInfoImpl.NeConfOAMWirte(neInfo.NeType, neInfo.NeId, oamData, true); err != nil { + if err := NewNeInfoImpl.NeConfOAMSync(neInfo, true); err != nil { return "", fmt.Errorf("error wirte OAM file info") } // ========= 网元OAM配置文件 end =========== From 0db7f269dcf83ff88ba2e3ce6a21e41c63a1ce7b Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 10 May 2024 19:33:54 +0800 Subject: [PATCH 075/130] =?UTF-8?q?fix:=20=E6=A0=B9=E6=8D=AE=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=89=80=E7=BB=84ssh=E6=8E=88=E6=9D=83=E6=96=87?= =?UTF-8?q?=E4=BB=B6keys=E5=86=85=E5=AE=B9=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/ssh/ssh.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/framework/utils/ssh/ssh.go b/src/framework/utils/ssh/ssh.go index d25c686f..7c29d770 100644 --- a/src/framework/utils/ssh/ssh.go +++ b/src/framework/utils/ssh/ssh.go @@ -136,9 +136,9 @@ func (c *ConnSSH) SendToAuthorizedKeys() error { } authorizedKeysEntry := fmt.Sprintln(strings.TrimSpace(publicKey)) cmdStrArr := []string{ - fmt.Sprintf("sudo chown %s:%s /home/%s/.ssh && sudo chmod 700 /home/%s/.ssh", c.User, c.User, c.User, c.User), - fmt.Sprintf("sudo chown %s:%s /home/%s/.ssh/authorized_keys && sudo chmod 600 /home/%s/.ssh/authorized_keys", c.User, c.User, c.User, c.User), - fmt.Sprintf("sudo echo '%s' >> ~/.ssh/authorized_keys", authorizedKeysEntry), + fmt.Sprintf("sudo mkdir -p /home/%s/.ssh && sudo chown %s:%s /home/%s/.ssh && sudo chmod 700 /home/%s/.ssh", c.User, c.User, c.User, c.User, c.User), + fmt.Sprintf("sudo touch /home/%s/.ssh/authorized_keys && sudo chown %s:%s /home/%s/.ssh/authorized_keys && sudo chmod 600 /home/%s/.ssh/authorized_keys", c.User, c.User, c.User, c.User, c.User), + fmt.Sprintf("echo '%s' | sudo tee -a /home/%s/.ssh/authorized_keys", authorizedKeysEntry, c.User), } _, err = c.RunCMD(strings.Join(cmdStrArr, " && ")) if err != nil { From ab6d610daced0c60fa63cd867b4dff766e7d677f Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 10 May 2024 19:34:40 +0800 Subject: [PATCH 076/130] =?UTF-8?q?fix:=20=E8=A7=A3=E6=9E=90bool=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=9B=B4=E6=8E=A5=E8=BF=94=E5=9B=9E=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/parse/parse.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/framework/utils/parse/parse.go b/src/framework/utils/parse/parse.go index 76f535dc..937b58f7 100644 --- a/src/framework/utils/parse/parse.go +++ b/src/framework/utils/parse/parse.go @@ -55,6 +55,8 @@ func Boolean(str any) bool { case float32, float64: num := reflect.ValueOf(str).Float() return num != 0 + case bool: + return str default: return false } From 9357b40b880a46eee00facb05501bf589254bbd2 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 11 May 2024 10:03:17 +0800 Subject: [PATCH 077/130] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81OAM=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=BF=AE=E6=94=B9=E5=90=8C=E6=AD=A5=E5=88=B0=E7=BD=91?= =?UTF-8?q?=E5=85=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_info.go | 64 +++++++++++++- .../network_element/network_element.go | 9 ++ .../network_element/service/ne_info.go | 5 +- .../network_element/service/ne_info.impl.go | 85 ++++++++++++++----- .../service/ne_version.impl.go | 16 ++-- 5 files changed, 147 insertions(+), 32 deletions(-) diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index 6ac3da24..df5283d4 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -178,6 +178,59 @@ func (s *NeInfoController) Para5GFileWrite(c *gin.Context) { c.JSON(200, result.Ok(nil)) } +// 网元端OAM配置文件读取 +// +// GET /oamFile +func (s *NeInfoController) OAMFileRead(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var querys struct { + NeType string `form:"neType" binding:"required"` + NeID string `form:"neId" binding:"required"` + } + if err := c.ShouldBindQuery(&querys); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + data, err := s.neInfoService.NeConfOAMRead(querys.NeType, querys.NeID) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.JSON(200, result.OkData(data)) +} + +// 网元端OAM配置文件写入 +// +// PUT /oamFile +func (s *NeInfoController) OAMFileWrite(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + NeType string `json:"neType" binding:"required"` + NeID string `json:"neId" binding:"required"` + Content map[string]any `json:"content" binding:"required"` // 内容 + Sync bool `json:"sync"` // 同步到网元 + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + // 查询网元获取IP + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeID) + if neInfo.NeId != body.NeID || neInfo.IP == "" { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + + err := s.neInfoService.NeConfOAMSync(neInfo, body.Content, body.Sync) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.JSON(200, result.Ok(nil)) +} + // 网元信息列表 // // GET /list @@ -314,6 +367,13 @@ func (s *NeInfoController) Edit(c *gin.Context) { c.JSON(200, result.ErrMsg(i18n.TKey(language, "neInfo.noData"))) return } + // 赋予主机ID + if neInfo.HostIDs != "" && len(body.Hosts) > 0 { + hostIDs := strings.Split(neInfo.HostIDs, ",") + for index, id := range hostIDs { + body.Hosts[index].HostID = id + } + } // 获取网元状态是否正常 body.ServerState, err = neService.NeState(body) @@ -358,8 +418,8 @@ func (s *NeInfoController) Edit(c *gin.Context) { } if neLicense.ID != "" { if neLicense.NeType != body.NeType || neLicense.NeId != body.NeId { - neVersion.NeType = body.NeType - neVersion.NeId = body.NeId + neLicense.NeType = body.NeType + neLicense.NeId = body.NeId } s.neLicenseService.Update(neLicense) } diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index e9d45cce..e44c612a 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -67,6 +67,15 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewNeInfo.Para5GFileWrite, ) + neInfoGroup.GET("/oamFile", + middleware.PreAuthorize(nil), + controller.NewNeInfo.OAMFileRead, + ) + neInfoGroup.PUT("/oamFile", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewNeInfo.OAMFileWrite, + ) neInfoGroup.GET("/list", middleware.PreAuthorize(nil), controller.NewNeInfo.List, diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index 6209a290..5945fb3e 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -53,8 +53,11 @@ type INeInfo interface { // NeRunCMD 向网元发送cmd命令 NeRunCMD(neType, neId, cmd string) (string, error) + // neConfOAMRead 网元OAM配置文件读取 + NeConfOAMRead(neType, neId string) (map[string]any, error) + // NeConfOAMSync 网元OAM配置文件生成并同步 - NeConfOAMSync(neInfo model.NeInfo, sync bool) error + NeConfOAMSync(neInfo model.NeInfo, content map[string]any, sync bool) error // NeConfPara5GRead 网元公共配置文件读取 NeConfPara5GRead() (map[string]any, error) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 883cd17f..9006d95a 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -368,13 +368,11 @@ func (r *NeInfoImpl) neConfOAMData() map[string]any { "oamConfig": map[string]any{ "enable": true, "ipType": "ipv4", - // 必改 - "ipv4": "172.60.5.1", + "ipv4": "172.60.5.1", // 必改 "ipv6": "", "port": 33030, "scheme": "http", - // 必改 - "neConfig": map[string]any{ + "neConfig": map[string]any{ // 必改 "neId": "001", "rmUid": "4400HX1XXX001", "neName": "XXX_001", @@ -387,22 +385,20 @@ func (r *NeInfoImpl) neConfOAMData() map[string]any { "snmpConfig": map[string]any{ "enable": false, "ipType": "ipv4", - // 必改 - "ipv4": "172.60.5.2", - "ipv6": "", - "port": 4957, + "ipv4": "172.60.5.2", // 必改 + "ipv6": "", + "port": 4957, }, "kpiConfig": map[string]any{ "enable": true, - // 必改 - "timer": 60, + "timer": 60, // 必改 }, - "pubConfigPath": "/usr/local/etc/conf/para5G.yaml", + // "pubConfigPath": "/usr/local/etc/conf/para5G.yaml", } } // neConfOAMRead 网元OAM配置文件读取 -func (r *NeInfoImpl) neConfOAMRead(neType, neId string) (map[string]any, error) { +func (r *NeInfoImpl) NeConfOAMRead(neType, neId string) (map[string]any, error) { neTypeLower := strings.ToLower(neType) // 网管本地路径 omcPath := "/usr/local/etc/omc/ne_config" @@ -478,25 +474,29 @@ func (r *NeInfoImpl) neConfOAMWirte(neType, neId string, content any, sync bool) } // NeConfOAMSync 网元OAM配置文件生成并同步 -func (r *NeInfoImpl) NeConfOAMSync(neInfo model.NeInfo, sync bool) error { - oamData, err := r.neConfOAMRead(neInfo.NeType, neInfo.NeId) +func (r *NeInfoImpl) NeConfOAMSync(neInfo model.NeInfo, content map[string]any, sync bool) error { + oamData, err := r.NeConfOAMRead(neInfo.NeType, neInfo.NeId) if oamData == nil || err != nil { return fmt.Errorf("error read OAM file info") } // 网元HTTP服务 if v, ok := oamData["httpManageCfg"]; ok { item := v.(map[string]any) - item["ipv4"] = neInfo.IP item["port"] = neInfo.Port + if strings.Contains(neInfo.IP, ":") { + item["ipType"] = "ipv6" + item["ipv6"] = neInfo.IP + } + if strings.Contains(neInfo.IP, ".") { + item["ipType"] = "ipv4" + item["ipv4"] = neInfo.IP + } + oamData["httpManageCfg"] = item } // 对网管HTTP配置 if v, ok := oamData["oamConfig"]; ok { item := v.(map[string]any) - item["enable"] = true - if omcIP, ok := r.Para5GData["OMCIP"]; ok && omcIP != "" { - item["ipv4"] = omcIP - } item["neConfig"] = map[string]string{ "neId": neInfo.NeId, "rmUid": neInfo.RmUID, @@ -506,18 +506,59 @@ func (r *NeInfoImpl) NeConfOAMSync(neInfo model.NeInfo, sync bool) error { "province": neInfo.Province, "pvFlag": neInfo.PvFlag, } + + if omcIP, ok := r.Para5GData["OMC_IP"]; ok && omcIP != "" { + if strings.Contains(omcIP, ":") { + item["ipType"] = "ipv6" + item["ipv6"] = omcIP + } + if strings.Contains(omcIP, ".") { + item["ipType"] = "ipv4" + item["ipv4"] = omcIP + } + } + + if oamEnable, ok := content["oamEnable"]; ok && oamEnable != nil { + item["enable"] = parse.Boolean(oamEnable) + } + if oamPort, ok := content["oamPort"]; ok && oamPort != nil { + item["port"] = parse.Number(oamPort) + } oamData["oamConfig"] = item } // 对网管SNMP配置 if v, ok := oamData["snmpConfig"]; ok { item := v.(map[string]any) - item["ipv4"] = neInfo.IP + if strings.Contains(neInfo.IP, ":") { + item["ipType"] = "ipv6" + item["ipv6"] = neInfo.IP + } + if strings.Contains(neInfo.IP, ".") { + item["ipType"] = "ipv4" + item["ipv4"] = neInfo.IP + } + + if snmpEnable, ok := content["snmpEnable"]; ok && snmpEnable != nil { + item["enable"] = parse.Boolean(snmpEnable) + } + if snmpPort, ok := content["snmpPort"]; ok && snmpPort != nil { + item["port"] = parse.Number(snmpPort) + } oamData["snmpConfig"] = item } // 对网管KPI上报配置 if v, ok := oamData["kpiConfig"]; ok { item := v.(map[string]any) - item["enable"] = true + if neInfo.NeType == "UPF" { + item["timer"] = 5 + } + + if kpiEnable, ok := content["kpiEnable"]; ok && kpiEnable != nil { + item["enable"] = parse.Boolean(kpiEnable) + } + if kpiTimer, ok := content["kpiTimer"]; ok && kpiTimer != nil { + item["timer"] = parse.Number(kpiTimer) + } oamData["kpiConfig"] = item } if err := NewNeInfoImpl.neConfOAMWirte(neInfo.NeType, neInfo.NeId, oamData, sync); err != nil { @@ -586,7 +627,7 @@ func (r *NeInfoImpl) NeConfPara5GWirte(content map[string]any, syncNE []string) neFilePath := "/usr/local/etc/conf/para5G.yaml" neFileDir := filepath.ToSlash(filepath.Dir(neFilePath)) // 修改网元文件权限 - sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath)) + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo touch %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath, neFilePath)) // 复制到网元进行覆盖 if err = sftpClient.CopyFileLocalToRemote(omcFilePath, neFilePath); err != nil { errMsg = append(errMsg, fmt.Sprintf("%s : please check if scp remote copy is allowed", ti)) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 4676790f..dad93a81 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -179,8 +179,8 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", para5GData["IMS_IP"])) // IWF连接PCF服务 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", para5GData["PCF_IP"])) - // 5s后停止服务 - cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 5s && sudo ims-stop\" > /dev/null 2>&1 & \n") + // 30s后停止服务 + cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") } else { cmdStrArr = append(cmdStrArr, "sudo ims-stop \n") cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") @@ -270,14 +270,16 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", para5GData["UPF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/localhost/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_IP"])) + // UE N3 N6 根据版本修改 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MASK"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_GW"])) + // 标准版 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s'/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s'/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"])) // 轻量版 // cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") // cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") @@ -332,8 +334,8 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp } cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) - // 5s后停止服务 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 5s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) + // 30s后停止服务 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) } else { cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s stop \n", neTypeLower)) cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") @@ -412,7 +414,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp if strings.LastIndex(logMsg, okFlagStr) > 5 { if action == "install" { // ========= 网元OAM配置文件 start ========== - if err := NewNeInfoImpl.NeConfOAMSync(neInfo, true); err != nil { + if err := NewNeInfoImpl.NeConfOAMSync(neInfo, nil, true); err != nil { return "", fmt.Errorf("error wirte OAM file info") } // ========= 网元OAM配置文件 end =========== From 8210de9c605e56e0dafcdf01ba42d4a784d5eb58 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 11 May 2024 12:09:30 +0800 Subject: [PATCH 078/130] =?UTF-8?q?style:=20ne=5Flicense=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/model/ne_license.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/network_element/model/ne_license.go b/src/modules/network_element/model/ne_license.go index de0c36df..0a08802c 100644 --- a/src/modules/network_element/model/ne_license.go +++ b/src/modules/network_element/model/ne_license.go @@ -9,7 +9,7 @@ type NeLicense struct { LicensePath string `json:"licensePath" gorm:"license_path"` // 激活授权文件 SerialNum string `json:"serialNum" gorm:"serial_num"` // 序列号 ExpiryDate string `json:"expiryDate" gorm:"expiry_date"` // 许可证到期日期 - Status string `json:"status" gorm:"status"` // 状态 0无效 1有效 ''ACTIVE'',''INACTIVE'',''PENDING'' + Status string `json:"status" gorm:"status"` // 状态 0无效 1有效 Remark string `json:"remark" gorm:"remark"` // 备注 CreateBy string `json:"createBy" gorm:"create_by"` // 创建者 CreateTime int64 `json:"createTime" gorm:"create_time"` // 创建时间 From a54e357bd59fd26a7edef248efde1b9a0b1acdc6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 11 May 2024 15:41:45 +0800 Subject: [PATCH 079/130] =?UTF-8?q?style:=20ssh=E7=A7=81=E9=92=A5=E5=B9=B6?= =?UTF-8?q?=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/ssh/ssh.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/framework/utils/ssh/ssh.go b/src/framework/utils/ssh/ssh.go index 7c29d770..84265bc2 100644 --- a/src/framework/utils/ssh/ssh.go +++ b/src/framework/utils/ssh/ssh.go @@ -162,9 +162,8 @@ func (c *ConnSSH) CurrentUserRsaKey(publicKey bool) (string, error) { // 是否存在私钥并创建 keyPath := fmt.Sprintf("%s/.ssh/id_rsa", usr.HomeDir) if _, err := os.Stat(keyPath); err != nil { - _, err2 := cmd.ExecWithCheck("ssh-keygen", "-t", "rsa", "-P", "", "-f", keyPath) - if err2 != nil { - logger.Errorf("CurrentUserPrivateKey ssh-keygen [%s] rsa => %s", usr.Username, err2.Error()) + if _, err := cmd.ExecWithCheck("ssh-keygen", "-t", "rsa", "-P", "", "-f", keyPath); err != nil { + logger.Errorf("CurrentUserPrivateKey ssh-keygen [%s] rsa => %s", usr.Username, err.Error()) } } From d547914ab5e30ff240c5fda258af61f614573231 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 11 May 2024 15:58:19 +0800 Subject: [PATCH 080/130] =?UTF-8?q?style:=20=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/alarm_forward_log.sql | 33 +- database/install/measure_task.sql | 68 +-- database/install/monitor_base.sql | 22 +- database/install/monitor_io.sql | 20 +- database/install/monitor_network.sql | 16 +- database/install/ne_host.sql | 63 +++ database/install/ne_host_cmd.sql | 26 + database/install/ne_info.sql | 81 ++- database/install/ne_license.sql | 72 ++- database/install/ne_software.sql | 52 +- database/install/ne_state.sql | 45 +- database/install/ne_version.sql | 82 ++- database/install/sys_dept.sql | 4 +- database/install/sys_dict_data0.sql | 2 +- database/install/sys_dict_type.sql | 34 +- database/install/sys_job_log.sql | 2 +- database/install/sys_log_login.sql | 2 +- database/install/sys_log_operate.sql | 2 +- database/install/u_sub_user.sql | 2 +- database/install/user.sql | 69 --- database/install/zinstall.sql | 506 +----------------- database/upgrade/upg_monitor_base.sql | 48 ++ .../upg_monitor_io.sql} | 33 +- .../upg_monitor_network.sql} | 22 +- database/upgrade/upg_ne_host.sql | 41 +- database/upgrade/upg_ne_host_cmd.sql | 4 +- database/upgrade/upg_ne_info.sql | 50 +- database/upgrade/upg_ne_license.sql | 52 ++ database/upgrade/upg_ne_software.sql | 39 ++ database/upgrade/upg_ne_version.sql | 52 ++ database/upgrade/upg_sys_dept.sql | 34 +- database/upgrade/upg_sys_dict_data0.sql | 96 +--- .../upgrade/upg_sys_dict_data1_i18n_zh.sql | 15 +- .../upgrade/upg_sys_dict_data2_i18n_en.sql | 25 +- .../role.sql => upgrade/upg_sys_job_log.sql} | 23 +- .../upg_sys_log_login.sql} | 27 +- database/upgrade/upg_sys_log_operate.sql | 54 ++ database/upgrade/upg_u_sub_user.sql | 60 +++ database/upgrade/vue3_20231017.sql | 49 -- database/upgrade/vue3_20231028.sql | 92 ---- database/upgrade/zupgrade.sql | 87 +-- 41 files changed, 758 insertions(+), 1348 deletions(-) create mode 100644 database/install/ne_host.sql create mode 100644 database/install/ne_host_cmd.sql delete mode 100644 database/install/user.sql create mode 100644 database/upgrade/upg_monitor_base.sql rename database/{install/permission.sql => upgrade/upg_monitor_io.sql} (61%) rename database/{install/user_menu.sql => upgrade/upg_monitor_network.sql} (65%) create mode 100644 database/upgrade/upg_ne_license.sql create mode 100644 database/upgrade/upg_ne_software.sql create mode 100644 database/upgrade/upg_ne_version.sql rename database/{install/role.sql => upgrade/upg_sys_job_log.sql} (62%) rename database/{install/user_role.sql => upgrade/upg_sys_log_login.sql} (64%) create mode 100644 database/upgrade/upg_sys_log_operate.sql create mode 100644 database/upgrade/upg_u_sub_user.sql delete mode 100644 database/upgrade/vue3_20231017.sql delete mode 100644 database/upgrade/vue3_20231028.sql diff --git a/database/install/alarm_forward_log.sql b/database/install/alarm_forward_log.sql index 78852524..67a420af 100644 --- a/database/install/alarm_forward_log.sql +++ b/database/install/alarm_forward_log.sql @@ -1,28 +1,15 @@ -/* - Navicat Premium Data Transfer - - Source Server : local_mariadb - Source Server Type : MariaDB - Source Server Version : 100338 (10.3.38-MariaDB) - Source Host : localhost:33066 - Source Schema : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 23/04/2024 14:05:00 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; --- ---------------------------- --- Table structure for alarm_forward_log --- ---------------------------- +-- +-- Table structure for table `alarm_forward_log` +-- + + DROP TABLE IF EXISTS `alarm_forward_log`; + CREATE TABLE `alarm_forward_log` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `alarm_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, @@ -32,8 +19,8 @@ CREATE TABLE `alarm_forward_log` ( `interface` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `to_user` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `oper_result` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `log_time` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE CURRENT_TIMESTAMP, + `log_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 209149 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 209163 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; -SET FOREIGN_KEY_CHECKS = 1; +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/measure_task.sql b/database/install/measure_task.sql index e5b474a8..7661d7a0 100644 --- a/database/install/measure_task.sql +++ b/database/install/measure_task.sql @@ -1,54 +1,30 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; -- -- Table structure for table `measure_task` -- + DROP TABLE IF EXISTS `measure_task`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `measure_task` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(16) DEFAULT NULL, - `ne_ids` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `kpi_set` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `start_time` varchar(32) DEFAULT NULL, - `end_time` varchar(32) DEFAULT NULL, - `periods` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `schedule` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `granul_option` enum('15M','30M','60M','24H') NOT NULL DEFAULT '15M', - `status` enum('Inactive','Active','Suspend','Deleted') NOT NULL DEFAULT 'Inactive', - `account_id` varchar(32) DEFAULT NULL, - `comment` varchar(255) DEFAULT NULL, - `create_time` datetime DEFAULT current_timestamp(), - `update_time` datetime DEFAULT NULL, - `delete_time` datetime DEFAULT NULL, + +CREATE TABLE `measure_task` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ne_ids` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `kpi_set` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `start_time` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `end_time` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `periods` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `schedule` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `granul_option` enum('15M','30M','60M','24H') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '15M', + `status` enum('Inactive','Active','Suspend','Deleted') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'Inactive', + `account_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `comment` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` datetime NULL DEFAULT NULL, + `delete_time` datetime NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=84 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-03-06 17:26:55 +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/monitor_base.sql b/database/install/monitor_base.sql index 0899e3fb..8616fa05 100644 --- a/database/install/monitor_base.sql +++ b/database/install/monitor_base.sql @@ -23,18 +23,18 @@ DROP TABLE IF EXISTS `monitor_base`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `monitor_base` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', - `create_time` bigint(20) DEFAULT 0 COMMENT '创建时间', - `cpu` float DEFAULT 0 COMMENT 'cpu使用率', - `load_usage` float DEFAULT 0 COMMENT 'cpu平均使用率', - `cpu_load1` float DEFAULT 0 COMMENT 'cpu使用1分钟', - `cpu_load5` float DEFAULT 0 COMMENT 'cpu使用5分钟', - `cpu_load15` float DEFAULT 0 COMMENT 'cpu使用15分钟', - `memory` float DEFAULT 0 COMMENT '内存使用率', - `ne_type` varchar(32) DEFAULT NULL COMMENT '网元类型', - `ne_id` varchar(32) DEFAULT NULL COMMENT '网元ID', + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `cpu` float DEFAULT '0' COMMENT 'cpu使用率', + `load_usage` float DEFAULT '0' COMMENT 'cpu平均使用率', + `cpu_load1` float DEFAULT '0' COMMENT 'cpu使用1分钟', + `cpu_load5` float DEFAULT '0' COMMENT 'cpu使用5分钟', + `cpu_load15` float DEFAULT '0' COMMENT 'cpu使用15分钟', + `memory` float DEFAULT '0' COMMENT '内存使用率', + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元ID', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=108643 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='监控_基本信息'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='监控_基本信息'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/monitor_io.sql b/database/install/monitor_io.sql index c84e4690..fc2e3f87 100644 --- a/database/install/monitor_io.sql +++ b/database/install/monitor_io.sql @@ -23,17 +23,17 @@ DROP TABLE IF EXISTS `monitor_io`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `monitor_io` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', - `create_time` bigint(20) DEFAULT 0 COMMENT '创建时间', - `name` varchar(50) NOT NULL COMMENT '磁盘名', - `read` int(11) DEFAULT 0 COMMENT '读取K', - `write` int(11) DEFAULT 0 COMMENT '写入K', - `count` int(11) DEFAULT 0 COMMENT '读写次数', - `time` int(11) DEFAULT 0 COMMENT '读写延迟', - `ne_type` varchar(32) DEFAULT NULL COMMENT '网元类型', - `ne_id` varchar(32) DEFAULT NULL COMMENT '网元ID', + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '磁盘名', + `read` int DEFAULT '0' COMMENT '读取K', + `write` int DEFAULT '0' COMMENT '写入K', + `count` int DEFAULT '0' COMMENT '读写次数', + `time` int DEFAULT '0' COMMENT '读写延迟', + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元ID', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=201014 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='监控_磁盘IO'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='监控_磁盘IO'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/monitor_network.sql b/database/install/monitor_network.sql index 5348c74b..06d1f604 100644 --- a/database/install/monitor_network.sql +++ b/database/install/monitor_network.sql @@ -23,15 +23,15 @@ DROP TABLE IF EXISTS `monitor_network`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `monitor_network` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', - `create_time` bigint(20) DEFAULT 0 COMMENT '创建时间', - `name` varchar(50) NOT NULL COMMENT '网卡名', - `up` float DEFAULT 0 COMMENT '上行', - `down` float DEFAULT 0 COMMENT '下行', - `ne_type` varchar(32) DEFAULT NULL COMMENT '网元类型', - `ne_id` varchar(32) DEFAULT NULL COMMENT '网元ID', + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '网卡名', + `up` float DEFAULT '0' COMMENT '上行', + `down` float DEFAULT '0' COMMENT '下行', + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元ID', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=821562 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='监控_网络IO'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='监控_网络IO'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/ne_host.sql b/database/install/ne_host.sql new file mode 100644 index 00000000..fd057c3f --- /dev/null +++ b/database/install/ne_host.sql @@ -0,0 +1,63 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- +-- Table structure for table `ne_host` +-- + + +DROP TABLE IF EXISTS `ne_host`; + +CREATE TABLE `ne_host` ( + `host_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主机主键', + `host_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机类型 ssh telnet', + `group_id` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '分组(0默认 1网元 2系统)', + `title` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '标题名称', + `addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机地址', + `port` int NULL DEFAULT 22 COMMENT 'SSH端口', + `user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机用户名', + `auth_mode` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '认证模式(0密码 1主机私钥 2已免密)', + `password` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '认证密码', + `private_key` varchar(6000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '认证私钥', + `pass_phrase` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '认证私钥密码', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + PRIMARY KEY (`host_id`) USING BTREE, + UNIQUE INDEX `uk_type_group_title`(`host_type` ASC, `group_id` ASC, `title` ASC) USING BTREE COMMENT '同组内名称唯一' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元主机表' ROW_FORMAT = DYNAMIC; + +-- 初始数据对应网元 +INSERT INTO `ne_host` VALUES (1, 'ssh', '1', 'OMC_001_22', '172.16.5.100', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (2, 'telnet', '1', 'OMC_001_4100', '172.16.5.100', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (3, 'ssh', '1', 'IMS_001_22', '172.16.5.110', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708314682742, NULL, 0); +INSERT INTO `ne_host` VALUES (4, 'telnet', '1', 'IMS_001_4100', '172.16.5.110', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (5, 'ssh', '1', 'AMF_001_22', '172.16.5.120', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708314682742, NULL, 0); +INSERT INTO `ne_host` VALUES (6, 'telnet', '1', 'AMF_001_4100', '172.16.5.120', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (7, 'ssh', '1', 'AUSF_001_22', '172.16.5.130', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (8, 'telnet', '1', 'AUSF_001_4100', '172.16.5.130', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (9, 'ssh', '1', 'UDM_001_22', '172.16.5.140', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (10, 'telnet', '1', 'UDM_001_4100', '172.16.5.140', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (11, 'ssh', '1', 'SMF_001_22', '172.16.5.150', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (12, 'telnet', '1', 'SMF_001_4100', '172.16.5.150', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (13, 'ssh', '1', 'PCF_001_22', '172.16.5.160', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (14, 'telnet', '1', 'PCF_001_4100', '172.16.5.160', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (15, 'ssh', '1', 'NSSF_001_22', '172.16.5.170', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (16, 'telnet', '1', 'NSSF_001_4100', '172.16.5.170', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (17, 'ssh', '1', 'NRF_001_22', '172.16.5.180', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (18, 'telnet', '1', 'NRF_001_4100', '172.16.5.180', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (19, 'ssh', '1', 'UPF_001_22', '172.16.5.190', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (20, 'telnet', '1', 'UPF_001_4100', '172.16.5.190', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (21, 'telnet', '1', 'UPF_001_5002', '172.16.5.190', 5002, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (22, 'ssh', '1', 'LMF_001_22', '172.16.5.200', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (23, 'telnet', '1', 'LMF_001_4100', '172.16.5.200', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (24, 'ssh', '1', 'NEF_001_22', '172.16.5.210', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (25, 'telnet', '1', 'NEF_001_4100', '172.16.5.210', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (26, 'ssh', '1', 'MME_001_22', '172.16.5.220', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (27, 'telnet', '1', 'MME_001_4100', '172.16.5.220', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (28, 'ssh', '1', 'N3IWF_001_22', '172.16.5.230', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (29, 'telnet', '1', 'N3IWF_001_4100', '172.16.5.230', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); + +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/ne_host_cmd.sql b/database/install/ne_host_cmd.sql new file mode 100644 index 00000000..50b218f4 --- /dev/null +++ b/database/install/ne_host_cmd.sql @@ -0,0 +1,26 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- +-- Table structure for table `ne_host_cmd` +-- + + +DROP TABLE IF EXISTS `ne_host_cmd`; + +CREATE TABLE `ne_host_cmd` ( + `cmd_id` bigint NOT NULL AUTO_INCREMENT COMMENT '命令主键', + `cmd_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '命令类型', + `group_id` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '分组(0默认 1快速命令)', + `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '标题名称', + `command` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '命令字符串', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + PRIMARY KEY (`cmd_id`) USING BTREE, + UNIQUE INDEX `uk_type_group_title`(`cmd_type` ASC, `group_id` ASC, `title` ASC) USING BTREE COMMENT '同组内名称唯一' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元主机命令表' ROW_FORMAT = DYNAMIC; + +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/ne_info.sql b/database/install/ne_info.sql index 055144f4..67a79468 100644 --- a/database/install/ne_info.sql +++ b/database/install/ne_info.sql @@ -1,56 +1,49 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; -- -- Table structure for table `ne_info` -- + DROP TABLE IF EXISTS `ne_info`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `ne_info` ( + +CREATE TABLE `ne_info` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `rm_uid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', - `port` int DEFAULT NULL, - `pv_flag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'PNF' COMMENT '''PNF'',''VNF''', - `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '省份地域', - `vendor_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `dn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'MAC地址', - `status` int DEFAULT '0' COMMENT '0离线 1在线 2配置待下发', - `update_time` bigint DEFAULT '0' COMMENT '更新时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', - `host_ids` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '网元主机ID组 数据格式(ssh,telnet,telnet)', + `rm_uid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `port` int NULL DEFAULT NULL, + `pv_flag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'PNF' COMMENT '\'PNF\',\'VNF\'', + `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '省份地域', + `vendor_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'AGrandTech', + `dn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-', + `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'MAC地址', + `status` int NULL DEFAULT 0 COMMENT '0离线 1在线 2配置待下发', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `host_ids` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '网元主机ID组 数据格式(ssh,telnet,telnet)', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `idx_netype_neid` (`ne_type`,`ne_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元信息表'; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + UNIQUE INDEX `idx_netype_neid`(`ne_type` ASC, `ne_id` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元信息表 对应一个网元版本、网元授权、网元主机' ROW_FORMAT = DYNAMIC; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- 初始网元数据 +INSERT INTO `ne_info` VALUES (1, 'OMC', '001', '4400HX1OMC001', 'OMC_001', '172.16.5.100', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '1,2'); +INSERT INTO `ne_info` VALUES (2, 'IMS', '001', '4400HX1IMS001', 'IMS_001', '172.16.5.110', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '3,4'); +INSERT INTO `ne_info` VALUES (3, 'AMF', '001', '4400HX1AMF001', 'AMF_001', '172.16.5.120', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '5,6'); +INSERT INTO `ne_info` VALUES (4, 'AUSF', '001', '4400HX1AUF001', 'AUSF_001', '172.16.5.130', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '7,8'); +INSERT INTO `ne_info` VALUES (5, 'UDM', '001', '4400HX1UDM001', 'UDM_001', '172.16.5.140', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '9,10'); +INSERT INTO `ne_info` VALUES (6, 'SMF', '001', '4400HX1SMF001', 'SMF_001', '172.16.5.150', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '11,12'); +INSERT INTO `ne_info` VALUES (7, 'PCF', '001', '4400HX1PCF001', 'PCF_001', '172.16.5.160', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '13,14'); +INSERT INTO `ne_info` VALUES (8, 'NSSF', '001', '4400HX1NSF001', 'NSSF_001', '172.16.5.170', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '15,16'); +INSERT INTO `ne_info` VALUES (9, 'NRF', '001', '4400HX1NRF001', 'NRF_001', '172.16.5.180', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '17,18'); +INSERT INTO `ne_info` VALUES (10, 'UPF', '001', '4400HX1UPF001', 'UPF_001', '172.16.5.190', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '19,20,21'); +INSERT INTO `ne_info` VALUES (11, 'LMF', '001', '4400HX1LMF001', 'LMF_001', '172.16.5.200', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '22,23'); +INSERT INTO `ne_info` VALUES (12, 'NEF', '001', '4400HX1NEF001', 'NEF_001', '172.16.5.210', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '24,25'); +INSERT INTO `ne_info` VALUES (13, 'MME', '001', '4400HX1MME001', 'MME_001', '172.16.5.220', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '26,27'); +INSERT INTO `ne_info` VALUES (14, 'N3IWF', '001', '4400HX1IWF001', 'N3IWF_001', '172.16.5.230', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '28,29'); --- Dump completed on 2024-03-06 17:26:57 + +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/ne_license.sql b/database/install/ne_license.sql index 3eadb5cf..f3ef0310 100644 --- a/database/install/ne_license.sql +++ b/database/install/ne_license.sql @@ -1,53 +1,45 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; -- -- Table structure for table `ne_license` -- + DROP TABLE IF EXISTS `ne_license`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `ne_license` ( + +CREATE TABLE `ne_license` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', `activation_request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '激活申请代码', - `license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '激活授权文件', - `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '序列号', - `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '许可证到期日期', - `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '状态 ''ACTIVE'',''INACTIVE'',''PENDING''', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', - `create_by` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', - `create_time` bigint DEFAULT '0' COMMENT '创建时间', - `update_by` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', - `update_time` bigint DEFAULT '0' COMMENT '更新时间', + `license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '激活授权文件', + `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '序列号', + `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '许可证到期日期', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态 0无效 1有效', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_type_id` (`ne_type`,`ne_id`) USING BTREE COMMENT '唯一网元类型和网元ID' -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元授权激活信息'; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + UNIQUE INDEX `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和网元ID' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元授权激活信息' ROW_FORMAT = DYNAMIC; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- 初始数据对应网元 +INSERT INTO `ne_license` VALUES (1, 'OMC', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (2, 'IMS', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (3, 'AMF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (4, 'AUSF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (5, 'UDM', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (6, 'SMF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (7, 'PCF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (8, 'NSSF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (9, 'NRF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (10, 'UPF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (11, 'LMF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (12, 'NEF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (13, 'MME', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); +INSERT INTO `ne_license` VALUES (14, 'N3IWF', '001', '', '', '', '', '0', '', 'supervisor', 1713928436971, '', 0); --- Dump completed on 2024-03-06 17:26:57 +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/ne_software.sql b/database/install/ne_software.sql index d757a110..01f1d43d 100644 --- a/database/install/ne_software.sql +++ b/database/install/ne_software.sql @@ -1,50 +1,26 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; -- -- Table structure for table `ne_software` -- + DROP TABLE IF EXISTS `ne_software`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `ne_software` ( + +CREATE TABLE `ne_software` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包名称', - `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包路径', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包路径', `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本', - `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包说明', - `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', - `create_time` bigint DEFAULT '0' COMMENT '创建时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', - `update_time` bigint DEFAULT '0' COMMENT '更新时间', + `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包说明', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_type_name_version` (`ne_type`,`name`,`version`) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元软件包'; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + UNIQUE INDEX `uk_type_name_version`(`ne_type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元软件包' ROW_FORMAT = DYNAMIC; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-03-06 17:26:57 +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/ne_state.sql b/database/install/ne_state.sql index 6d8bdad3..c9cc4de7 100644 --- a/database/install/ne_state.sql +++ b/database/install/ne_state.sql @@ -1,41 +1,28 @@ -/* - Navicat Premium Data Transfer - - Source Server : local_mariadb - Source Server Type : MariaDB - Source Server Version : 100338 (10.3.38-MariaDB) - Source Host : localhost:33066 - Source Schema : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 16/04/2024 09:47:50 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; --- ---------------------------- --- Table structure for ne_state --- ---------------------------- +-- +-- Table structure for table `ne_state` +-- + + DROP TABLE IF EXISTS `ne_state`; -CREATE TABLE `ne_state` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + +CREATE TABLE `ne_state` ( + `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `version` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `capability` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `serial_num` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `expiry_date` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-', - `cpu_usage` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, - `mem_usage` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, - `disk_space` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, - `timestamp` datetime NULL DEFAULT current_timestamp(), + `cpu_usage` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `mem_usage` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `disk_space` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `timestamp` datetime NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_ne_type_id`(`ne_type`, `ne_id`) USING BTREE, - INDEX `idx_timestamp`(`timestamp`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 8551941 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + INDEX `idx_ne_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE, + INDEX `idx_timestamp`(`timestamp` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8551941 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; -SET FOREIGN_KEY_CHECKS = 1; +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/ne_version.sql b/database/install/ne_version.sql index acf1d5b8..55b16cae 100644 --- a/database/install/ne_version.sql +++ b/database/install/ne_version.sql @@ -1,57 +1,49 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; -- -- Table structure for table `ne_version` -- + DROP TABLE IF EXISTS `ne_version`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `ne_version` ( + +CREATE TABLE `ne_version` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', - `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '当前包名', - `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '当前版本', - `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '当前软件包', - `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上一版本包名', - `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '上一版本', - `pre_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '上一版本软件包', - `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '新版本报名', - `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '新版本', - `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '新版软件包', - `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '当前状态 1当前版本 2上一版本 3有新版本', - `create_by` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', - `create_time` bigint DEFAULT '0' COMMENT '创建时间', - `update_by` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', - `update_time` bigint DEFAULT '0' COMMENT '更新时间', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前包名', + `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前版本', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前软件包', + `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上一版本包名', + `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本', + `pre_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本软件包', + `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '新版本报名', + `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版本', + `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版软件包', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前状态 1当前版本 2上一版本 3有新版本', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_type_id` (`ne_type`,`ne_id`) USING BTREE COMMENT '唯一网元类型和ID' -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元版本信息'; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + UNIQUE INDEX `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和ID' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元版本信息' ROW_FORMAT = DYNAMIC; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- 初始数据对应网元 +INSERT INTO `ne_version` VALUES (1, 'OMC', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (2, 'IMS', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (3, 'AMF', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (4, 'AUSF', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (5, 'UDM', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (6, 'SMF', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (7, 'PCF', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (8, 'NSSF', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (9, 'NRF', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (10, 'UPF', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (11, 'LMF', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (12, 'NEF', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (13, 'MME', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); +INSERT INTO `ne_version` VALUES (14, 'N3IWF', '001', '', '', '', '', '', '', '', '', '', '0', 'supervisor', 1713928436957, '', 0); --- Dump completed on 2024-03-06 17:26:57 +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/sys_dept.sql b/database/install/sys_dept.sql index 02e785e2..9be7b0fa 100644 --- a/database/install/sys_dept.sql +++ b/database/install/sys_dept.sql @@ -38,7 +38,7 @@ CREATE TABLE `sys_dept` ( `update_by` varchar(50) DEFAULT '' COMMENT '更新者', `update_time` bigint(20) DEFAULT 0 COMMENT '更新时间', PRIMARY KEY (`dept_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门表'; +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门表'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -47,7 +47,7 @@ CREATE TABLE `sys_dept` ( LOCK TABLES `sys_dept` WRITE; /*!40000 ALTER TABLE `sys_dept` DISABLE KEYS */; -INSERT INTO `sys_dept` VALUES (100,0,'0','dept.root',0,'supervisor',NULL,NULL,'1','0','supervisor',1699348237468,NULL,0),(101,100,'0,100','dept.root.item1',1,'supervisor',NULL,NULL,'1','0','supervisor',1699348237468,NULL,0); +INSERT INTO `sys_dept` VALUES (1,0,'0','dept.root',0,'supervisor',NULL,NULL,'1','0','supervisor',1699348237468,NULL,0),(101,100,'0,100','dept.root.item1',1,'supervisor',NULL,NULL,'1','0','supervisor',1699348237468,NULL,0); /*!40000 ALTER TABLE `sys_dept` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/sys_dict_data0.sql b/database/install/sys_dict_data0.sql index abc72277..4e063cfd 100644 --- a/database/install/sys_dict_data0.sql +++ b/database/install/sys_dict_data0.sql @@ -36,7 +36,7 @@ CREATE TABLE `sys_dict_data` ( `update_time` bigint(20) NULL DEFAULT 0 COMMENT '更新时间', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', PRIMARY KEY (`dict_code`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 4130 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 10000 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_dict_data diff --git a/database/install/sys_dict_type.sql b/database/install/sys_dict_type.sql index 3059a67f..40a51233 100644 --- a/database/install/sys_dict_type.sql +++ b/database/install/sys_dict_type.sql @@ -43,7 +43,39 @@ CREATE TABLE `sys_dict_type` ( LOCK TABLES `sys_dict_type` WRITE; /*!40000 ALTER TABLE `sys_dict_type` DISABLE KEYS */; -INSERT INTO `sys_dict_type` VALUES (1,'dictType.sys_user_sex','sys_user_sex','1','supervisor',1699350000000,NULL,0,'dictType.sys_user_sex_remark'),(2,'dictType.sys_show_hide','sys_show_hide','1','supervisor',1699350000000,NULL,0,'dictType.sys_show_hide_remark'),(3,'dictType.sys_normal_disable','sys_normal_disable','1','supervisor',1699350000000,NULL,0,'dictType.sys_normal_disable_remark'),(4,'dictType.sys_job_status','sys_job_status','1','supervisor',1699350000000,NULL,0,'dictType.sys_job_status_remark'),(5,'dictType.sys_job_group','sys_job_group','1','supervisor',1699350000000,NULL,0,'dictType.sys_job_group_remark'),(6,'dictType.sys_yes_no','sys_yes_no','1','supervisor',1699350000000,NULL,0,'dictType.sys_yes_no_remark'),(9,'dictType.sys_oper_type','sys_oper_type','1','supervisor',1699350000000,NULL,0,'dictType.sys_oper_type_remark'),(10,'dictType.sys_common_status','sys_common_status','1','supervisor',1699350000000,NULL,0,'dictType.sys_common_status_remark'),(100,'dictType.trace_type','trace_type','1','supervisor',1699350000000,NULL,0,'dictType.trace_type_remark'),(101,'dictType.operation_log_type','operation_log_type','1','supervisor',1699350000000,NULL,0,'dictType.operation_log_type_remark'),(102,'dictType.alarm_status','alarm_status','1','supervisor',1699350000000,NULL,0,'dictType.alarm_status_remark'),(103,'dictType.security_log_type','security_log_type','1','supervisor',1699350000000,NULL,0,'dictType.security_log_type_remark'),(104,'dictType.ne_version_status','ne_version_status','1','supervisor',1699350000000,NULL,0,'dictType.ne_version_status_remark'),(105,'dictType.i18n_en','i18n_en','1','supervisor',1699350000000,NULL,0,'dictType.i18n_en_remark'),(106,'dictType.i18n_zh','i18n_zh','1','supervisor',1699350000000,NULL,0,'dictType.i18n_zh_remark'),(107,'dictType.sys_role_datascope','sys_role_datascope','1','supervisor',1699350000000,NULL,0,'dictType.sys_role_datascope_remark'),(108,'dictType.active_alarm_type','active_alarm_type','1','supervisor',1699350000000,NULL,0,'dictType.active_alarm_type_remark'),(109,'dictType.active_clear_type','active_clear_type','1','supervisor',1699350000000,NULL,0,'dictType.active_clear_type_remark'),(110,'dictType.active_ack_state','active_ack_state','1','supervisor',1699350000000,NULL,0,'dictType.active_ack_state_remark'),(111,'dictType.active_alarm_severity','active_alarm_severity','1','supervisor',1699350000000,NULL,0,'dictType.active_alarm_severity_remark'),(112,'dictType.index_status','index_status','1','supervisor',1702019398308,NULL,0,'dictType.index_status_remark'),(113,'dictType.cdr_sip_code','cdr_sip_code','1','supervisor',1706611609998,'supervisor',1706612186095,NULL),(114,'dictType.cdr_call_type','cdr_call_type','1','supervisor',1706612292095,NULL,0,NULL),(115,'dictType.ue_auth_code','ue_auth_code','1','supervisor',1706615964700,'supervisor',1706617253275,NULL),(116,'dictType.ue_event_type','ue_event_type','1','supervisor',1706617070548,'supervisor',1706617236965,NULL),(117,'dictType.ue_event_cm_state','ue_event_cm_state','1','supervisor',1706617070548,'supervisor',1706617236965,''),(118,'dictType.ne_host_type','ne_host_type','1','supervisor',1702020000000,'',0,''),(119,'dictType.ne_host_groupId','ne_host_groupId','1','supervisor',1702020000000,'',0,''),(120,'dictType.ne_host_authMode','ne_host_authMode','1','supervisor',1702020000000,'',0,''),(121,'dictType.ne_host_cmd_groupId','ne_host_cmd_groupId','1','supervisor',1702020000000,'',0,''),(122,'dictType.ne_info_status','ne_info_status','1','supervisor',1702020000000,'',0,''); +INSERT INTO `sys_dict_type` VALUES (1, 'dictType.sys_user_sex', 'sys_user_sex', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.sys_user_sex_remark'); +INSERT INTO `sys_dict_type` VALUES (2, 'dictType.sys_show_hide', 'sys_show_hide', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.sys_show_hide_remark'); +INSERT INTO `sys_dict_type` VALUES (3, 'dictType.sys_normal_disable', 'sys_normal_disable', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.sys_normal_disable_remark'); +INSERT INTO `sys_dict_type` VALUES (4, 'dictType.sys_job_status', 'sys_job_status', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.sys_job_status_remark'); +INSERT INTO `sys_dict_type` VALUES (5, 'dictType.sys_job_group', 'sys_job_group', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.sys_job_group_remark'); +INSERT INTO `sys_dict_type` VALUES (6, 'dictType.sys_yes_no', 'sys_yes_no', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.sys_yes_no_remark'); +INSERT INTO `sys_dict_type` VALUES (9, 'dictType.sys_oper_type', 'sys_oper_type', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.sys_oper_type_remark'); +INSERT INTO `sys_dict_type` VALUES (10, 'dictType.sys_common_status', 'sys_common_status', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.sys_common_status_remark'); +INSERT INTO `sys_dict_type` VALUES (100, 'dictType.trace_type', 'trace_type', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.trace_type_remark'); +INSERT INTO `sys_dict_type` VALUES (101, 'dictType.operation_log_type', 'operation_log_type', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.operation_log_type_remark'); +INSERT INTO `sys_dict_type` VALUES (102, 'dictType.alarm_status', 'alarm_status', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.alarm_status_remark'); +INSERT INTO `sys_dict_type` VALUES (103, 'dictType.security_log_type', 'security_log_type', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.security_log_type_remark'); +INSERT INTO `sys_dict_type` VALUES (104, 'dictType.ne_version_status', 'ne_version_status', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.ne_version_status_remark'); +INSERT INTO `sys_dict_type` VALUES (105, 'dictType.i18n_en', 'i18n_en', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.i18n_en_remark'); +INSERT INTO `sys_dict_type` VALUES (106, 'dictType.i18n_zh', 'i18n_zh', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.i18n_zh_remark'); +INSERT INTO `sys_dict_type` VALUES (107, 'dictType.sys_role_datascope', 'sys_role_datascope', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.sys_role_datascope_remark'); +INSERT INTO `sys_dict_type` VALUES (108, 'dictType.active_alarm_type', 'active_alarm_type', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.active_alarm_type_remark'); +INSERT INTO `sys_dict_type` VALUES (109, 'dictType.active_clear_type', 'active_clear_type', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.active_clear_type_remark'); +INSERT INTO `sys_dict_type` VALUES (110, 'dictType.active_ack_state', 'active_ack_state', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.active_ack_state_remark'); +INSERT INTO `sys_dict_type` VALUES (111, 'dictType.active_alarm_severity', 'active_alarm_severity', '1', 'supervisor', 1699350000000, NULL, 0, 'dictType.active_alarm_severity_remark'); +INSERT INTO `sys_dict_type` VALUES (112, 'dictType.index_status', 'index_status', '1', 'supervisor', 1702019398308, NULL, 0, 'dictType.index_status_remark'); +INSERT INTO `sys_dict_type` VALUES (113, 'dictType.cdr_sip_code', 'cdr_sip_code', '1', 'supervisor', 1706611609998, 'supervisor', 1706612186095, NULL); +INSERT INTO `sys_dict_type` VALUES (114, 'dictType.cdr_call_type', 'cdr_call_type', '1', 'supervisor', 1706612292095, NULL, 0, NULL); +INSERT INTO `sys_dict_type` VALUES (115, 'dictType.ue_auth_code', 'ue_auth_code', '1', 'supervisor', 1706615964700, 'supervisor', 1706617253275, NULL); +INSERT INTO `sys_dict_type` VALUES (116, 'dictType.ue_event_type', 'ue_event_type', '1', 'supervisor', 1706617070548, 'supervisor', 1706617236965, NULL); +INSERT INTO `sys_dict_type` VALUES (117, 'dictType.ue_event_cm_state', 'ue_event_cm_state', '1', 'supervisor', 1706617070548, 'supervisor', 1706617236965, ''); +INSERT INTO `sys_dict_type` VALUES (118, 'dictType.ne_host_type', 'ne_host_type', '1', 'supervisor', 1702020000000, '', 0, ''); +INSERT INTO `sys_dict_type` VALUES (119, 'dictType.ne_host_groupId', 'ne_host_groupId', '1', 'supervisor', 1702020000000, '', 0, ''); +INSERT INTO `sys_dict_type` VALUES (120, 'dictType.ne_host_authMode', 'ne_host_authMode', '1', 'supervisor', 1702020000000, '', 0, ''); +INSERT INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId', 'ne_host_cmd_groupId', '1', 'supervisor', 1702020000000, '', 0, ''); +INSERT INTO `sys_dict_type` VALUES (122, 'dictType.ne_info_status', 'ne_info_status', '1', 'supervisor', 1702020000000, '', 0, ''); +INSERT INTO `sys_dict_type` VALUES (123, 'dictType.ne_license_status', 'ne_license_status', '1', 'supervisor', 1702020000000, '', 0, ''); + /*!40000 ALTER TABLE `sys_dict_type` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/sys_job_log.sql b/database/install/sys_job_log.sql index 0718d72e..082d51cf 100644 --- a/database/install/sys_job_log.sql +++ b/database/install/sys_job_log.sql @@ -33,7 +33,7 @@ CREATE TABLE `sys_job_log` ( `create_time` bigint(20) DEFAULT 0 COMMENT '创建时间', `cost_time` bigint(20) DEFAULT 0 COMMENT '消耗时间(毫秒)', PRIMARY KEY (`job_log_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=763 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='调度任务调度日志表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='调度任务调度日志表'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/sys_log_login.sql b/database/install/sys_log_login.sql index f2c58b8c..2b8fa4a9 100644 --- a/database/install/sys_log_login.sql +++ b/database/install/sys_log_login.sql @@ -33,7 +33,7 @@ CREATE TABLE `sys_log_login` ( `msg` varchar(255) DEFAULT '' COMMENT '提示消息', `login_time` bigint(20) DEFAULT 0 COMMENT '登录时间', PRIMARY KEY (`login_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1177 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统登录日志表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统登录日志表'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/sys_log_operate.sql b/database/install/sys_log_operate.sql index 50916276..2c2130ac 100644 --- a/database/install/sys_log_operate.sql +++ b/database/install/sys_log_operate.sql @@ -40,7 +40,7 @@ CREATE TABLE `sys_log_operate` ( `oper_time` bigint(20) DEFAULT 0 COMMENT '操作时间', `cost_time` bigint(20) DEFAULT 0 COMMENT '消耗时间(毫秒)', PRIMARY KEY (`oper_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=4083 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统操作日志表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统操作日志表'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/u_sub_user.sql b/database/install/u_sub_user.sql index b4588afb..dc60d478 100644 --- a/database/install/u_sub_user.sql +++ b/database/install/u_sub_user.sql @@ -46,7 +46,7 @@ CREATE TABLE `u_sub_user` ( `static_ip` varchar(50) DEFAULT NULL COMMENT 'staticIpstatic_ip指给4G UE分配的静态IP,没有可不带此字段名', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `imsi_ne` (`imsi`,`ne_id`) USING BTREE COMMENT 'imsi_ne唯一索引' -) ENGINE=InnoDB AUTO_INCREMENT=12123 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='UDM签约用户'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='UDM签约用户'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/user.sql b/database/install/user.sql deleted file mode 100644 index d2a8df4e..00000000 --- a/database/install/user.sql +++ /dev/null @@ -1,69 +0,0 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `user` --- - -DROP TABLE IF EXISTS `user`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `account_id` varchar(32) NOT NULL, - `name` varchar(10) DEFAULT NULL, - `real_name` varchar(128) DEFAULT NULL, - `sn` varchar(128) DEFAULT NULL, - `gender` varchar(128) DEFAULT NULL, - `email` varchar(128) DEFAULT NULL, - `id_card_number` varchar(128) DEFAULT NULL, - `description` varchar(128) DEFAULT NULL, - `telephone_number` varchar(128) DEFAULT NULL, - `phone` varchar(128) DEFAULT NULL, - `mobile` varchar(128) DEFAULT NULL, - `employee_number` varchar(128) DEFAULT NULL, - `employee_type` varchar(128) DEFAULT NULL, - `organize` varchar(128) DEFAULT NULL, - `supporter_corp_name` varchar(128) DEFAULT NULL, - `start_time` varchar(128) DEFAULT NULL, - `end_time` varchar(128) DEFAULT NULL, - `password` varchar(256) DEFAULT NULL, - `password_sha512` varchar(1024) DEFAULT NULL, - `change_password_flag` tinyint(4) unsigned zerofill DEFAULT 0000, - `password_expiration` datetime DEFAULT NULL, - `status` enum('Active','Closed','Locked','Pending') DEFAULT 'Active', - `user_expiration` datetime DEFAULT NULL, - `group_name` varchar(16) DEFAULT 'omc', - `profile` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_time` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `update_time` datetime DEFAULT NULL, - `unit` varchar(128) DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `idx_uni_user_acc_id` (`account_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=202 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='del-旧前端使用'; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-03-06 17:26:59 diff --git a/database/install/zinstall.sql b/database/install/zinstall.sql index a0ee0ca8..f7cdc98a 100644 --- a/database/install/zinstall.sql +++ b/database/install/zinstall.sql @@ -1,509 +1,5 @@ SET FOREIGN_KEY_CHECKS=0; -INSERT - IGNORE INTO `omc_db`.`user` ( - `id`, - `account_id`, - `name`, - `real_name`, - `sn`, - `gender`, - `email`, - `id_card_number`, - `description`, - `telephone_number`, - `phone`, - `mobile`, - `employee_number`, - `employee_type`, - `organize`, - `supporter_corp_name`, - `start_time`, - `end_time`, - `password`, - `password_sha512`, - `change_password_flag`, - `password_expiration`, - `status`, - `user_expiration`, - `group_name`, - `profile` - ) -VALUES ( - 1, - 'admin', - 'admin', - 'administrator', - '', - '', - 'admin@aa.com', - NULL, - NULL, - NULL, - '312', - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', - '324584ab0b03a5af1899c1801485de8a455a114d5f6ee08a48dbdf7e8f1a047eaaa1789e881f9eb268113f6c6814fa20f43183ffa6e014765f2aa8733c526048', - 0000, - NULL, - 'Active', - NULL, - 'admin', - '{\"color\":{\"critical\":\"#e8994a\",\"event\":\"#c5d2dc\",\"major\":\"#494040\",\"minor\":\"#5f70a8\",\"sound\":\"custom\",\"warning\":\"#b9e1dd\"},\"sound\":\"custom\",\"custom\":\"hrxz.com-exz2s3uxhc47391.mp3\"}' - ); - --- add default ne info -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 1, - 'OMC', - '001', - '4400HX101', - 'OMC_001', - '172.16.5.100', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 2, - 'IMS', - '001', - '4400HX1IMS001', - 'IMS_001', - '172.16.5.110', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 3, - 'AMF', - '001', - '4400HX1AMF001', - 'AMF_001', - '172.16.5.120', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 4, - 'AUSF', - '001', - '4400HX1AUF001', - 'AUSF_001', - '172.16.5.130', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 5, - 'UDM', - '001', - '4400HX1UDM001', - 'UDM_001', - '172.16.5.140', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 6, - 'SMF', - '001', - '4400HX1SMF001', - 'SMF_001', - '172.16.5.150', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 7, - 'PCF', - '001', - '4400HX1PCF001', - 'PCF_001', - '172.16.5.160', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 8, - 'NSSF', - '001', - '4400HX1NSF001', - 'NSSF_001', - '172.16.5.170', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 9, - 'NRF', - '001', - '4400HX1NRF001', - 'NRF_001', - '172.16.5.180', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 10, - 'UPF', - '001', - '4400HX1UPF001', - 'UPF_001', - '172.16.5.190', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 11, - 'LMF', - '001', - '4400HX1LMF001', - 'LMF_001', - '172.16.5.200', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 12, - 'NEF', - '001', - '4400HX1NEF001', - 'NEF_001', - '172.16.5.210', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 13, - 'MME', - '001', - '4400HX1MME001', - 'MME_001', - '172.16.5.220', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); - -INSERT - IGNORE INTO `omc_db`.`ne_info` ( - `id`, - `ne_type`, - `ne_id`, - `rm_uid`, - `ne_name`, - `ip`, - `port`, - `pv_flag`, - `province`, - `vendor_name`, - `dn`, - `ne_address`, - `status` - ) -VALUES ( - 14, - 'N3IWF', - '001', - '4400HX1IWF001', - 'N3IWF_001', - '172.16.5.230', - 33030, - 'PNF', - '-', - '-', - '-', - '-', - 0 - ); +-- SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/database/upgrade/upg_monitor_base.sql b/database/upgrade/upg_monitor_base.sql new file mode 100644 index 00000000..842711ec --- /dev/null +++ b/database/upgrade/upg_monitor_base.sql @@ -0,0 +1,48 @@ +-- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: 192.168.2.219 Database: omc_db +-- ------------------------------------------------------ +-- Server version 10.3.38-MariaDB + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `monitor_base` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE IF NOT EXISTS `monitor_base` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `cpu` float DEFAULT '0' COMMENT 'cpu使用率', + `load_usage` float DEFAULT '0' COMMENT 'cpu平均使用率', + `cpu_load1` float DEFAULT '0' COMMENT 'cpu使用1分钟', + `cpu_load5` float DEFAULT '0' COMMENT 'cpu使用5分钟', + `cpu_load15` float DEFAULT '0' COMMENT 'cpu使用15分钟', + `memory` float DEFAULT '0' COMMENT '内存使用率', + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元ID', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='监控_基本信息'; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2024-03-06 17:26:56 diff --git a/database/install/permission.sql b/database/upgrade/upg_monitor_io.sql similarity index 61% rename from database/install/permission.sql rename to database/upgrade/upg_monitor_io.sql index cdd503c2..ff5914a2 100644 --- a/database/install/permission.sql +++ b/database/upgrade/upg_monitor_io.sql @@ -16,28 +16,23 @@ /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- --- Table structure for table `permission` +-- Table structure for table `monitor_io` -- -DROP TABLE IF EXISTS `permission`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `permission` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `permission_name` varchar(32) NOT NULL, - `method` varchar(10) DEFAULT '*', - `module` varchar(32) DEFAULT '*', - `management` varchar(32) DEFAULT '*', - `element` varchar(10) DEFAULT '*', - `object` varchar(16) DEFAULT '*', - `description` varchar(255) DEFAULT NULL, - `created_at` datetime DEFAULT current_timestamp(), - `updated_at` datetime DEFAULT NULL, - `deleted_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`,`permission_name`) USING BTREE, - UNIQUE KEY `id` (`id`) USING BTREE, - UNIQUE KEY `permission_name` (`permission_name`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='del-已使用sys_menu权限标识'; +CREATE TABLE IF NOT EXISTS `monitor_io` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '磁盘名', + `read` int DEFAULT '0' COMMENT '读取K', + `write` int DEFAULT '0' COMMENT '写入K', + `count` int DEFAULT '0' COMMENT '读写次数', + `time` int DEFAULT '0' COMMENT '读写延迟', + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元ID', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='监控_磁盘IO'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -49,4 +44,4 @@ CREATE TABLE `permission` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-03-06 17:26:57 +-- Dump completed on 2024-03-06 17:26:56 diff --git a/database/install/user_menu.sql b/database/upgrade/upg_monitor_network.sql similarity index 65% rename from database/install/user_menu.sql rename to database/upgrade/upg_monitor_network.sql index f809c71e..f08b89b4 100644 --- a/database/install/user_menu.sql +++ b/database/upgrade/upg_monitor_network.sql @@ -16,21 +16,21 @@ /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- --- Table structure for table `user_menu` +-- Table structure for table `monitor_network` -- -DROP TABLE IF EXISTS `user_menu`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user_menu` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `user_id` int(11) DEFAULT NULL, - `menu_tag` varchar(64) DEFAULT '', - `sort_id` int(11) DEFAULT NULL, - `lang_tag` varchar(16) DEFAULT NULL, - `menu_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, +CREATE TABLE IF NOT EXISTS `monitor_network` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '网卡名', + `up` float DEFAULT '0' COMMENT '上行', + `down` float DEFAULT '0' COMMENT '下行', + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网元ID', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='del-已使用sys_menu'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='监控_网络IO'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -42,4 +42,4 @@ CREATE TABLE `user_menu` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-03-06 17:26:59 +-- Dump completed on 2024-03-06 17:26:56 diff --git a/database/upgrade/upg_ne_host.sql b/database/upgrade/upg_ne_host.sql index 0c42833f..b391a74e 100644 --- a/database/upgrade/upg_ne_host.sql +++ b/database/upgrade/upg_ne_host.sql @@ -1,14 +1,14 @@ SET FOREIGN_KEY_CHECKS=0; -CREATE TABLE IF NOT EXISTS `omc_db`.`ne_host` ( +CREATE TABLE IF NOT EXISTS `ne_host` ( `host_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主机主键', `host_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机类型 ssh telnet', `group_id` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '分组(0默认 1网元 2系统)', - `title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '标题名称', + `title` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '标题名称', `addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机地址', `port` int NULL DEFAULT 22 COMMENT 'SSH端口', `user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机用户名', - `auth_mode` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '认证模式(0密码 1主机私钥)', + `auth_mode` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '认证模式(0密码 1主机私钥 2已免密)', `password` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '认证密码', `private_key` varchar(6000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '认证私钥', `pass_phrase` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '认证私钥密码', @@ -21,39 +21,4 @@ CREATE TABLE IF NOT EXISTS `omc_db`.`ne_host` ( UNIQUE INDEX `uk_type_group_title`(`host_type` ASC, `group_id` ASC, `title` ASC) USING BTREE COMMENT '同组内名称唯一' ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元主机表' ROW_FORMAT = DYNAMIC; - --- 初始记录 -INSERT IGNORE INTO `ne_host` VALUES (1, 'ssh', '1', 'OMC_001_22', '172.16.5.100', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (2, 'telnet', '1', 'OMC_001_4100', '172.16.5.100', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (3, 'ssh', '1', 'IMS_001_22', '172.16.5.110', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708314682742, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (4, 'telnet', '1', 'IMS_001_4100', '172.16.5.110', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (5, 'ssh', '1', 'AMF_001_22', '172.16.5.120', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708314682742, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (6, 'telnet', '1', 'AMF_001_4100', '172.16.5.120', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (7, 'ssh', '1', 'AUSF_001_22', '172.16.5.130', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (8, 'telnet', '1', 'AUSF_001_4100', '172.16.5.130', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (9, 'ssh', '1', 'UDM_001_22', '172.16.5.140', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (10, 'telnet', '1', 'UDM_001_4100', '172.16.5.140', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (11, 'ssh', '1', 'SMF_001_22', '172.16.5.150', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (12, 'telnet', '1', 'SMF_001_4100', '172.16.5.150', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (13, 'ssh', '1', 'PCF_001_22', '172.16.5.160', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (14, 'telnet', '1', 'PCF_001_4100', '172.16.5.160', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (15, 'ssh', '1', 'NSSF_001_22', '172.16.5.170', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (16, 'telnet', '1', 'NSSF_001_4100', '172.16.5.170', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (17, 'ssh', '1', 'NRF_001_22', '172.16.5.180', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (18, 'telnet', '1', 'NRF_001_4100', '172.16.5.180', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (19, 'ssh', '1', 'UPF_001_22', '172.16.5.190', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (20, 'telnet', '1', 'UPF_001_4100', '172.16.5.190', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (21, 'telnet', '1', 'UPF_001_5002', '172.16.5.190', 5002, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (22, 'ssh', '1', 'LMF_001_22', '172.16.5.200', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (23, 'telnet', '1', 'LMF_001_4100', '172.16.5.200', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (24, 'ssh', '1', 'NEF_001_22', '172.16.5.210', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (25, 'telnet', '1', 'NEF_001_4100', '172.16.5.210', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (26, 'ssh', '1', 'MME_001_22', '172.16.5.220', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (27, 'telnet', '1', 'MME_001_4100', '172.16.5.220', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (28, 'ssh', '1', 'N3IWF_001_22', '172.16.5.230', 22, 'agtuser', '0', '1I8tB3dTRd5IjVZWRp+m9ppxzQ323U6XJZUJE510hus=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); -INSERT IGNORE INTO `ne_host` VALUES (29, 'telnet', '1', 'N3IWF_001_4100', '172.16.5.230', 4100, 'admin', '0', 'YYxSAY9Zng3EuB3dngRqNoPIh8GK3GhesFqIznv5qAA=', NULL, NULL, NULL, 'admin', 1708333292882, NULL, 0); - --- 更新记录 - - SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/database/upgrade/upg_ne_host_cmd.sql b/database/upgrade/upg_ne_host_cmd.sql index 63e4e51c..53a0cf9c 100644 --- a/database/upgrade/upg_ne_host_cmd.sql +++ b/database/upgrade/upg_ne_host_cmd.sql @@ -1,6 +1,6 @@ SET FOREIGN_KEY_CHECKS=0; -CREATE TABLE IF NOT EXISTS `omc_db`.`ne_host_cmd` ( +CREATE TABLE IF NOT EXISTS `ne_host_cmd` ( `cmd_id` bigint NOT NULL AUTO_INCREMENT COMMENT '命令主键', `cmd_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '命令类型', `group_id` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '分组(0默认 1快速命令)', @@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS `omc_db`.`ne_host_cmd` ( `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', PRIMARY KEY (`cmd_id`) USING BTREE, UNIQUE INDEX `uk_type_group_title`(`cmd_type` ASC, `group_id` ASC, `title` ASC) USING BTREE COMMENT '同组内名称唯一' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元主机命令表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元主机命令表' ROW_FORMAT = DYNAMIC; -- 初始记录 diff --git a/database/upgrade/upg_ne_info.sql b/database/upgrade/upg_ne_info.sql index c881de3f..b8be038b 100644 --- a/database/upgrade/upg_ne_info.sql +++ b/database/upgrade/upg_ne_info.sql @@ -1,24 +1,36 @@ SET FOREIGN_KEY_CHECKS=0; -ALTER TABLE `omc_db`.`ne_info` COMMENT = '网元信息表'; +-- ---------------------------- +-- Table structure for ne_info +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `ne_info` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `rm_uid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `port` int NULL DEFAULT NULL, + `pv_flag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'PNF' COMMENT '\'PNF\',\'VNF\'', + `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '省份地域', + `vendor_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `dn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'MAC地址', + `status` int NULL DEFAULT 0 COMMENT '0离线 1在线 2配置待下发', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `host_ids` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '网元主机ID组 数据格式(ssh,telnet,telnet)', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `idx_netype_neid`(`ne_type` ASC, `ne_id` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元信息表 对应一个网元版本、网元授权、网元主机' ROW_FORMAT = DYNAMIC; -ALTER TABLE `omc_db`.`ne_info` ADD COLUMN IF NOT EXISTS `host_ids` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '网元主机ID组 数据格式(ssh,telnet,telnet)' AFTER `update_time`; - -ALTER TABLE `omc_db`.`ne_info` MODIFY COLUMN `status` int NULL DEFAULT 0 COMMENT '0: 在线 1: 下线 2: 备用 3: 待下发配置' AFTER `ne_address`; - --- 初始网元主机绑定 -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'OMC', `host_ids` = '1,2' WHERE `id` = 1; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'IMS', `host_ids` = '3,4' WHERE `id` = 2; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'AMF', `host_ids` = '5,6' WHERE `id` = 3; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'AUSF', `host_ids` = '7,8' WHERE `id` = 4; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'SMF', `host_ids` = '11,12' WHERE `id` = 6; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'PCF', `host_ids` = '13,14' WHERE `id` = 7; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'NSSF', `host_ids` = '15,16' WHERE `id` = 8; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'NRF', `host_ids` = '17,18' WHERE `id` = 9; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'UPF', `host_ids` = '19,20,21' WHERE `id` = 10; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'LMF', `host_ids` = '22,23' WHERE `id` = 11; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'NEF', `host_ids` = '24,25' WHERE `id` = 12; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'MME', `host_ids` = '26,27' WHERE `id` = 13; -UPDATE `omc_db`.`ne_info` SET `ne_type` = 'N3IWF', `host_ids` = '28,29' WHERE `id` = 14; +-- 20240511前旧表更新 +ALTER TABLE `ne_info` COMMENT = '网元信息表 对应一个网元版本、网元授权、网元主机'; +ALTER TABLE `ne_info` ADD COLUMN `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `update_time`; +ALTER TABLE `ne_info` MODIFY COLUMN `pv_flag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'PNF' COMMENT '\'PNF\',\'VNF\'' AFTER `port`; +ALTER TABLE `ne_info` MODIFY COLUMN `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '省份地域' AFTER `pv_flag`; +ALTER TABLE `ne_info` MODIFY COLUMN `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'MAC地址' AFTER `dn`; +ALTER TABLE `ne_info` MODIFY COLUMN `status` int NULL DEFAULT 0 COMMENT '0离线 1在线 2配置待下发' AFTER `ne_address`; +ALTER TABLE `ne_info` MODIFY COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `status`; SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_ne_license.sql b/database/upgrade/upg_ne_license.sql new file mode 100644 index 00000000..a01f81cb --- /dev/null +++ b/database/upgrade/upg_ne_license.sql @@ -0,0 +1,52 @@ +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for ne_license +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `ne_license` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', + `activation_request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '激活申请代码', + `license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '激活授权文件', + `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '序列号', + `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '许可证到期日期', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态 0无效 1有效', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和网元ID' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元授权激活信息' ROW_FORMAT = DYNAMIC; + +-- 20240511前旧表更新 +ALTER TABLE `ne_license` COMMENT = '网元授权激活信息'; +ALTER TABLE `ne_license` ADD COLUMN `activation_request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '激活申请代码' AFTER `ne_id`; +ALTER TABLE `ne_license` ADD COLUMN `license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '激活授权文件' AFTER `activation_request_code`; +ALTER TABLE `ne_license` ADD COLUMN `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '序列号' AFTER `license_path`; +ALTER TABLE `ne_license` ADD COLUMN `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '许可证到期日期' AFTER `serial_num`; +ALTER TABLE `ne_license` ADD COLUMN `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注' AFTER `status`; +ALTER TABLE `ne_license` ADD COLUMN `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `remark`; +ALTER TABLE `ne_license` ADD COLUMN `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; +ALTER TABLE `ne_license` ADD COLUMN `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; +ALTER TABLE `ne_license` ADD COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; +ALTER TABLE `ne_license` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型' AFTER `id`; +ALTER TABLE `ne_license` MODIFY COLUMN `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID' AFTER `ne_type`; +ALTER TABLE `ne_license` MODIFY COLUMN `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态 0无效 1有效' AFTER `expiry_date`; +ALTER TABLE `ne_license` DROP COLUMN `serial_no`; +ALTER TABLE `ne_license` DROP COLUMN `capcity`; +ALTER TABLE `ne_license` DROP COLUMN `used`; +ALTER TABLE `ne_license` DROP COLUMN `feature_enabled`; +ALTER TABLE `ne_license` DROP COLUMN `expiration_date`; +ALTER TABLE `ne_license` DROP COLUMN `path`; +ALTER TABLE `ne_license` DROP COLUMN `file_name`; +ALTER TABLE `ne_license` DROP COLUMN `comment`; +ALTER TABLE `ne_license` DROP COLUMN `created_at`; +ALTER TABLE `ne_license` DROP COLUMN `updated_at`; +ALTER TABLE `ne_license` DROP COLUMN `deleted_at`; +ALTER TABLE `ne_license` ADD UNIQUE INDEX `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和网元ID'; + + +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_ne_software.sql b/database/upgrade/upg_ne_software.sql new file mode 100644 index 00000000..0559735d --- /dev/null +++ b/database/upgrade/upg_ne_software.sql @@ -0,0 +1,39 @@ +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for ne_software +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `ne_software` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包名称', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包路径', + `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本', + `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包说明', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_type_name_version`(`ne_type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元软件包' ROW_FORMAT = DYNAMIC; + +-- 20240511前旧表更新 +ALTER TABLE `ne_software` COMMENT = '网元软件包'; +ALTER TABLE `ne_software` ADD COLUMN `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包名称' AFTER `ne_type`; +ALTER TABLE `ne_software` ADD COLUMN `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包说明' AFTER `version`; +ALTER TABLE `ne_software` ADD COLUMN `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `description`; +ALTER TABLE `ne_software` ADD COLUMN `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; +ALTER TABLE `ne_software` ADD COLUMN `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; +ALTER TABLE `ne_software` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型' AFTER `id`; +ALTER TABLE `ne_software` MODIFY COLUMN `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包路径' AFTER `name`; +ALTER TABLE `ne_software` MODIFY COLUMN `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本' AFTER `path`; +ALTER TABLE `ne_software` MODIFY COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; +ALTER TABLE `ne_software` DROP COLUMN `file_name`; +ALTER TABLE `ne_software` DROP COLUMN `md5_sum`; +ALTER TABLE `ne_software` DROP COLUMN `status`; +ALTER TABLE `ne_software` DROP COLUMN `comment`; +ALTER TABLE `ne_software` DROP COLUMN `patch_time`; +ALTER TABLE `ne_software` ADD UNIQUE INDEX `uk_type_name_version`(`ne_type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一'; + +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_ne_version.sql b/database/upgrade/upg_ne_version.sql new file mode 100644 index 00000000..2b63a459 --- /dev/null +++ b/database/upgrade/upg_ne_version.sql @@ -0,0 +1,52 @@ +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for ne_version +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `ne_version` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前包名', + `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前版本', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前软件包', + `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上一版本包名', + `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本', + `pre_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本软件包', + `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '新版本报名', + `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版本', + `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版软件包', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前状态 1当前版本 2上一版本 3有新版本', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和ID' +) ENGINE = InnoDB AUTO_INCREMENT = 61 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元版本信息' ROW_FORMAT = DYNAMIC; + +-- 20240511前旧表更新 +ALTER TABLE `ne_version` COMMENT = '网元版本信息'; +ALTER TABLE `ne_version` ADD COLUMN `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前包名' AFTER `ne_id`; +ALTER TABLE `ne_version` ADD COLUMN `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前软件包' AFTER `version`; +ALTER TABLE `ne_version` ADD COLUMN `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上一版本包名' AFTER `path`; +ALTER TABLE `ne_version` ADD COLUMN `pre_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本软件包' AFTER `pre_version`; +ALTER TABLE `ne_version` ADD COLUMN `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '新版本报名' AFTER `pre_path`; +ALTER TABLE `ne_version` ADD COLUMN `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版软件包' AFTER `new_version`; +ALTER TABLE `ne_version` ADD COLUMN `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `status`; +ALTER TABLE `ne_version` ADD COLUMN `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; +ALTER TABLE `ne_version` ADD COLUMN `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; +ALTER TABLE `ne_version` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型' AFTER `id`; +ALTER TABLE `ne_version` MODIFY COLUMN `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID' AFTER `ne_type`; +ALTER TABLE `ne_version` MODIFY COLUMN `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前版本' AFTER `name`; +ALTER TABLE `ne_version` MODIFY COLUMN `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本' AFTER `pre_name`; +ALTER TABLE `ne_version` MODIFY COLUMN `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版本' AFTER `new_name`; +ALTER TABLE `ne_version` MODIFY COLUMN `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前状态 1当前版本 2上一版本 3有新版本' AFTER `new_path`; +ALTER TABLE `ne_version` MODIFY COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; +ALTER TABLE `ne_version` DROP COLUMN `file_path`; +ALTER TABLE `ne_version` DROP COLUMN `pre_file`; +ALTER TABLE `ne_version` DROP COLUMN `new_file`; +ALTER TABLE `ne_version` ADD UNIQUE INDEX `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和ID'; + + +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_sys_dept.sql b/database/upgrade/upg_sys_dept.sql index 3459e6cd..2e2a0840 100644 --- a/database/upgrade/upg_sys_dept.sql +++ b/database/upgrade/upg_sys_dept.sql @@ -1,22 +1,22 @@ SET FOREIGN_KEY_CHECKS=0; -CREATE TABLE IF NOT EXISTS `omc_db`.`sys_dept` ( - `dept_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id', - `parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父部门id 默认0', - `ancestors` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '祖级列表', - `dept_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '部门名称', - `order_num` int(11) NULL DEFAULT 0 COMMENT '显示顺序', - `leader` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '负责人', - `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话', - `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', - `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '部门状态(0停用 1正常)', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', - `create_time` bigint(20) NULL DEFAULT 0 COMMENT '创建时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', - `update_time` bigint(20) NULL DEFAULT 0 COMMENT '更新时间', - PRIMARY KEY (`dept_id`) USING BTREE - ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic; +CREATE TABLE IF NOT EXISTS `sys_dept` ( + `dept_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id', + `parent_id` bigint(20) DEFAULT 0 COMMENT '父部门id 默认0', + `ancestors` varchar(50) DEFAULT '' COMMENT '祖级列表', + `dept_name` varchar(128) DEFAULT '' COMMENT '部门名称', + `order_num` int(11) DEFAULT 0 COMMENT '显示顺序', + `leader` varchar(20) DEFAULT NULL COMMENT '负责人', + `phone` varchar(11) DEFAULT NULL COMMENT '联系电话', + `email` varchar(50) DEFAULT NULL COMMENT '邮箱', + `status` char(1) DEFAULT '0' COMMENT '部门状态(0停用 1正常)', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', + `create_by` varchar(50) DEFAULT '' COMMENT '创建者', + `create_time` bigint(20) DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) DEFAULT '' COMMENT '更新者', + `update_time` bigint(20) DEFAULT 0 COMMENT '更新时间', + PRIMARY KEY (`dept_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门表'; -- -- add default dept diff --git a/database/upgrade/upg_sys_dict_data0.sql b/database/upgrade/upg_sys_dict_data0.sql index 14b983ea..47072717 100644 --- a/database/upgrade/upg_sys_dict_data0.sql +++ b/database/upgrade/upg_sys_dict_data0.sql @@ -37,7 +37,6 @@ CREATE TABLE IF NOT EXISTS `sys_dict_data` ( PRIMARY KEY (`dict_code`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 10000 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = Dynamic; -ALTER TABLE `sys_dict_data` AUTO_INCREMENT = 10000; -- ---------------------------- -- Records of sys_dict_data @@ -168,96 +167,9 @@ INSERT IGNORE INTO `sys_dict_data` VALUES (123, 1, 'ne_license_status.1', '1', ' INSERT IGNORE INTO `sys_dict_data` VALUES (124, 2, 'dictData.ne_host_authMode.2', '2', 'ne_host_authMode', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); -- 指定记录条件更新 - --- UPDATE `sys_dict_data` SET `dict_value` = 'Module Tracing' WHERE `dict_code` = 3425; - --- UPDATE `sys_dict_data` SET `dict_value` = 'Dictionary Number' WHERE `dict_code` = 3530; --- UPDATE `sys_dict_data` SET `dict_value` = 'Status' WHERE `dict_code` = 3533; - --- UPDATE `sys_dict_data` SET `dict_value` = 'Data Code' WHERE `dict_code` = 3456; --- UPDATE `sys_dict_data` SET `dict_value` = 'Data Sort' WHERE `dict_code` = 3457; --- UPDATE `sys_dict_data` SET `dict_value` = 'Data Key' WHERE `dict_code` = 3458; --- UPDATE `sys_dict_data` SET `dict_value` = 'Data Value' WHERE `dict_code` = 3459; --- UPDATE `sys_dict_data` SET `dict_value` = 'Data Type' WHERE `dict_code` = 3460; --- UPDATE `sys_dict_data` SET `dict_value` = 'Status' WHERE `dict_code` = 3461; - --- UPDATE `sys_dict_data` SET `dict_value` = 'ID' WHERE `dict_code` = 3654; --- UPDATE `sys_dict_data` SET `dict_value` = 'Config Name' WHERE `dict_code` = 3655; --- UPDATE `sys_dict_data` SET `dict_value` = 'Config Key' WHERE `dict_code` = 3656; --- UPDATE `sys_dict_data` SET `dict_value` = 'Config Value' WHERE `dict_code` = 3657; --- UPDATE `sys_dict_data` SET `dict_value` = 'Built In' WHERE `dict_code` = 3658; --- UPDATE `sys_dict_data` SET `dict_value` = 'Config Description' WHERE `dict_code` = 3659; - --- UPDATE `sys_dict_data` SET `dict_value` = 'Log ID' WHERE `dict_code` = 3928; --- UPDATE `sys_dict_data` SET `dict_value` = 'Login Account' WHERE `dict_code` = 3929; --- UPDATE `sys_dict_data` SET `dict_value` = 'Status' WHERE `dict_code` = 3930; --- UPDATE `sys_dict_data` SET `dict_value` = 'Login Address' WHERE `dict_code` = 3931; --- UPDATE `sys_dict_data` SET `dict_value` = 'Login Location' WHERE `dict_code` = 3932; --- UPDATE `sys_dict_data` SET `dict_value` = 'Browser' WHERE `dict_code` = 3933; --- UPDATE `sys_dict_data` SET `dict_value` = 'Operating System' WHERE `dict_code` = 3934; --- UPDATE `sys_dict_data` SET `dict_value` = 'Login Information' WHERE `dict_code` = 3935; --- UPDATE `sys_dict_data` SET `dict_value` = 'Login Time' WHERE `dict_code` = 3936; - --- UPDATE `sys_dict_data` SET `dict_value` = 'Log ID' WHERE `dict_code` = 3912; --- UPDATE `sys_dict_data` SET `dict_value` = 'Module Name' WHERE `dict_code` = 3913; --- UPDATE `sys_dict_data` SET `dict_value` = 'Business Type' WHERE `dict_code` = 3914; --- UPDATE `sys_dict_data` SET `dict_value` = 'Operation Method' WHERE `dict_code` = 3915; --- UPDATE `sys_dict_data` SET `dict_value` = 'Request Method' WHERE `dict_code` = 3916; --- UPDATE `sys_dict_data` SET `dict_value` = 'Operation Type' WHERE `dict_code` = 3917; --- UPDATE `sys_dict_data` SET `dict_value` = 'Operator' WHERE `dict_code` = 3918; --- UPDATE `sys_dict_data` SET `dict_value` = 'Operator Department Name' WHERE `dict_code` = 3919; --- UPDATE `sys_dict_data` SET `dict_value` = 'Request URL' WHERE `dict_code` = 3920; --- UPDATE `sys_dict_data` SET `dict_value` = 'Request Host' WHERE `dict_code` = 3921; --- UPDATE `sys_dict_data` SET `dict_value` = 'Request Address' WHERE `dict_code` = 3922; --- UPDATE `sys_dict_data` SET `dict_value` = 'Request Parameters' WHERE `dict_code` = 3923; --- UPDATE `sys_dict_data` SET `dict_value` = 'Operation Information' WHERE `dict_code` = 3924; --- UPDATE `sys_dict_data` SET `dict_value` = 'Status' WHERE `dict_code` = 3925; --- UPDATE `sys_dict_data` SET `dict_value` = 'Time Consumption (ms)' WHERE `dict_code` = 3926; --- UPDATE `sys_dict_data` SET `dict_value` = 'Time' WHERE `dict_code` = 3927; - --- UPDATE `sys_dict_data` SET `dict_value` = 'Position Number' WHERE `dict_code` = 3804; --- UPDATE `sys_dict_data` SET `dict_value` = 'Position Code' WHERE `dict_code` = 3805; --- UPDATE `sys_dict_data` SET `dict_value` = 'Position Name' WHERE `dict_code` = 3806; --- UPDATE `sys_dict_data` SET `dict_value` = 'Position Sort' WHERE `dict_code` = 3807; - --- UPDATE `sys_dict_data` SET `dict_value` = 'Role Number' WHERE `dict_code` = 3760; --- UPDATE `sys_dict_data` SET `dict_value` = 'Role Name' WHERE `dict_code` = 3761; --- UPDATE `sys_dict_data` SET `dict_value` = 'Role Key' WHERE `dict_code` = 3762; --- UPDATE `sys_dict_data` SET `dict_value` = 'Role Sort' WHERE `dict_code` = 3763; --- UPDATE `sys_dict_data` SET `dict_value` = 'Role Status' WHERE `dict_code` = 3765; - --- UPDATE `sys_dict_data` SET `dict_value` = 'User Number' WHERE `dict_code` = 3830; --- UPDATE `sys_dict_data` SET `dict_value` = 'Account' WHERE `dict_code` = 3831; --- UPDATE `sys_dict_data` SET `dict_value` = 'Nick Name' WHERE `dict_code` = 3832; --- UPDATE `sys_dict_data` SET `dict_value` = 'Department' WHERE `dict_code` = 3838; --- UPDATE `sys_dict_data` SET `dict_value` = 'Login Address' WHERE `dict_code` = 3840; --- UPDATE `sys_dict_data` SET `dict_value` = 'Login Time' WHERE `dict_code` = 3841; --- UPDATE `sys_dict_data` SET `dict_value` = 'Status' WHERE `dict_code` = 3836; --- UPDATE `sys_dict_data` SET `dict_value` = 'Role' WHERE `dict_code` = 4007; - --- UPDATE `sys_dict_data` SET `dict_value` = 'ID' WHERE `dict_code` = 3710; --- UPDATE `sys_dict_data` SET `dict_value` = 'Name' WHERE `dict_code` = 3711; --- UPDATE `sys_dict_data` SET `dict_value` = 'Group' WHERE `dict_code` = 3712; --- UPDATE `sys_dict_data` SET `dict_value` = 'Invoke' WHERE `dict_code` = 3713; --- UPDATE `sys_dict_data` SET `dict_value` = 'Incoming Parameters' WHERE `dict_code` = 3714; --- UPDATE `sys_dict_data` SET `dict_value` = 'Cron' WHERE `dict_code` = 3715; --- UPDATE `sys_dict_data` SET `dict_value` = 'Status' WHERE `dict_code` = 3716; --- UPDATE `sys_dict_data` SET `dict_value` = 'Description' WHERE `dict_code` = 3717; - --- UPDATE `sys_dict_data` SET `dict_value` = 'ID' WHERE `dict_code` = 3718; --- UPDATE `sys_dict_data` SET `dict_value` = 'Status' WHERE `dict_code` = 3719; --- UPDATE `sys_dict_data` SET `dict_value` = 'Time' WHERE `dict_code` = 3720; - -UPDATE `sys_dict_data` SET `dict_value` = '离线' WHERE `dict_code` = 2111; -UPDATE `sys_dict_data` SET `dict_value` = '在线' WHERE `dict_code` = 2112; -UPDATE `sys_dict_data` SET `dict_value` = '等待同步' WHERE `dict_code` = 2113; -UPDATE `sys_dict_data` SET `dict_value` = '-' WHERE `dict_code` = 2114; -UPDATE `sys_dict_data` SET `dict_value` = 'Offline' WHERE `dict_code` = 4111; -UPDATE `sys_dict_data` SET `dict_value` = 'Online' WHERE `dict_code` = 4112; -UPDATE `sys_dict_data` SET `dict_value` = 'Wait Sync' WHERE `dict_code` = 4113; -UPDATE `sys_dict_data` SET `dict_value` = '-' WHERE `dict_code` = 4114; - -UPDATE `sys_dict_data` SET `dict_value` = 'Password Auth Mode' WHERE `dict_code` = 4093; -UPDATE `sys_dict_data` SET `dict_value` = 'PrivateKey Auth Mode' WHERE `dict_code` = 4094; +UPDATE `sys_dict_data` SET `tag_type` = 'error' WHERE `dict_code` = 118; +UPDATE `sys_dict_data` SET `tag_type` = 'processing' WHERE `dict_code` = 119; +UPDATE `sys_dict_data` SET `tag_type` = 'warning' WHERE `dict_code` = 120; +UPDATE `sys_dict_data` SET `tag_type` = '' WHERE `dict_code` = 121; SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index fbf791bf..b380d7e3 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -107,25 +107,19 @@ REPLACE INTO `sys_dict_data` VALUES (1086, 1086, 'menu.trace.pcapRemark', '信 REPLACE INTO `sys_dict_data` VALUES (1087, 1087, 'menu.faultRemark', '故障管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1088, 1088, 'menu.fault.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1089, 1089, 'menu.log', '日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1090, 1090, 'menu.log.operatOld', '操作日志(旧)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1091, 1091, 'menu.log.mml', 'MML日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1092, 1092, 'menu.log.alarm', '告警日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1093, 1093, 'menu.log.securityOld', '安全日志(旧)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1094, 1094, 'menu.log.forwarding', '告警前转日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1095, 1095, 'menu.log.set', '日志设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1096, 1096, 'menu.monitor.sessionUser', '用户会话', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1097, 1097, 'menu.fault.history', '历史告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1098, 1098, 'menu.fault.set', '设置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1099, 1099, 'menu.perf', '性能', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1100, 1100, 'menu.fault.activemRemark', '活动告警菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1101, 1101, 'menu.logRemark', '日志管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1102, 1102, 'menu.log.operatOldRemark', '操作日志旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1103, 1103, 'menu.log.mmlRemark', '操作MML日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1104, 1104, 'menu.log.alarmRemark', '告警日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1105, 1105, 'menu.log.securityOldRemark', '安全日志旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1106, 1106, 'menu.log.forwardingRemark', '告警前转日志菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1107, 1107, 'menu.log.setRemark', '日志设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1108, 1108, 'menu.monitor.sessionUserRemark', '用户会话旧layui菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1109, 1109, 'menu.fault.historyRemark', '历史告警菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1110, 1110, 'menu.fault.setRemark', '故障通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1111, 1111, 'menu.perfRemark', '性能目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -631,10 +625,10 @@ REPLACE INTO `sys_dict_data` VALUES (2107, 2107, 'neInfo.errKeyExists', '网元 REPLACE INTO `sys_dict_data` VALUES (2108, 2108, 'log.operate.title.imsCDR', 'IMS-CDR会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2109, 2109, 'menu.dashboard.amfUE', '用户事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2110, 2110, 'log.operate.title.amfUE', 'AMF-UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '同步配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '等待同步', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2115, 2115, 'dictType.ne_info_status', '网元信息状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2116, 2116, 'menu.ne.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2117, 2117, 'log.operate.title.neConfig', '网元参数配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -652,5 +646,6 @@ REPLACE INTO `sys_dict_data` VALUES (2128, 2128, 'menu.monitor.cdr', '话单', ' REPLACE INTO `sys_dict_data` VALUES (2129, 2129, 'menu.monitor.event', '事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2130, 2130, 'post.export.time', '创建时间', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2131, 2131, 'role.export.time', '创建时间', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2132, 2132, 'dictData.ne_host_authMode.2', '免密认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 5fc28555..6aed8386 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -82,9 +82,7 @@ REPLACE INTO `sys_dict_data` VALUES (3061, 3061, 'menu.ueUser.subUDM', 'UDM Subs REPLACE INTO `sys_dict_data` VALUES (3062, 3062, 'menu.ueUser.authUDMRemark', 'UDM Authentication Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3063, 3063, 'menu.ueUser.subUDMRemark', 'UDM Subscriber Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3064, 3064, 'menu.config.neManage', 'NE Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3065, 3065, 'menu.config.configNE', 'Parameter Configuration Original', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3066, 3066, 'menu.config.neManageRemark', 'Network Element Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3067, 3067, 'menu.config.configNERemark', 'Parameter Configuration Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3068, 3068, 'menu.config.backupManage', 'Backup Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3069, 3069, 'menu.config.softwareManage', 'Software Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3070, 3070, 'menu.ueUser.onlineIMS', 'IMS Online Users', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -107,25 +105,19 @@ REPLACE INTO `sys_dict_data` VALUES (3086, 3086, 'menu.trace.pcapRemark', 'Signa REPLACE INTO `sys_dict_data` VALUES (3087, 3087, 'menu.faultRemark', 'Fault Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3088, 3088, 'menu.fault.active', 'Active Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3089, 3089, 'menu.log', 'Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3090, 3090, 'menu.log.operatOld', 'Operation Logs (old)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3091, 3091, 'menu.log.mml', 'MML Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3092, 3092, 'menu.log.alarm', 'Alarm Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3093, 3093, 'menu.log.securityOld', 'Security Logs (old)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3094, 3094, 'menu.log.forwarding', 'Alarm Forwarding Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3095, 3095, 'menu.log.set', 'Log Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3096, 3096, 'menu.monitor.sessionUser', 'User Sessions', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3097, 3097, 'menu.fault.history', 'Historical Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3098, 3098, 'menu.fault.set', 'Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3099, 3099, 'menu.perf', 'Performance', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3100, 3100, 'menu.fault.activemRemark', 'Active Alarm Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3101, 3101, 'menu.logRemark', 'Log Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3102, 3102, 'menu.log.operatOldRemark', 'Operation log old layui menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3103, 3103, 'menu.log.mmlRemark', 'Operation MML Log', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3104, 3104, 'menu.log.alarmRemark', 'Alarm Log Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3105, 3105, 'menu.log.securityOldRemark', 'Security Log Old Layui Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3106, 3106, 'menu.log.forwardingRemark', 'Alarm forward log menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3107, 3107, 'menu.log.setRemark', 'Log Settings menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3108, 3108, 'menu.monitor.sessionUserRemark', 'User Session Old Layui Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3109, 3109, 'menu.fault.historyRemark', 'Alarm history menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3110, 3110, 'menu.fault.setRemark', 'Fault General Setup Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3111, 3111, 'menu.perfRemark', 'Performance Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -157,15 +149,11 @@ REPLACE INTO `sys_dict_data` VALUES (3136, 3136, 'menu.config.licenseManage', 'L REPLACE INTO `sys_dict_data` VALUES (3137, 3137, 'menu.security', 'Security', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3138, 3138, 'menu.system.systemSet', 'System Settings', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3139, 3139, 'menu.system.systemResource', 'System Resources', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3140, 3140, 'menu.config.configNEForm', 'Parameter Configuration Form', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3141, 3141, 'menu.config.configNETree', 'Parameter Configuration Tree', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3142, 3142, 'menu.config.configNETreeTable', 'Parameter Configuration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3143, 3143, 'menu.config.licenseManageRemark', 'License Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3144, 3144, 'menu.securityRemark', 'Security Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3145, 3145, 'menu.system.systemSetRemark', 'System Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3146, 3146, 'menu.system.systemResourceRemark', 'System Resources cpu io network menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3147, 3147, 'menu.config.configNEFormRemark', 'Parameter Configuration Form Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3148, 3148, 'menu.config.configNETreeRemark', 'Parameter Configuration Tree Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3149, 3149, 'menu.config.configNETreeTableRemark', 'Configuring the TreeTable menu with parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3150, 3150, 'menu.noData', 'There is no accessible menu data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3151, 3151, 'menu.errNameExists', 'Failed to operate menu [{name}], menu name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -614,8 +602,8 @@ REPLACE INTO `sys_dict_data` VALUES (4089, 4089, 'dictData.ne_host_type.telnet', REPLACE INTO `sys_dict_data` VALUES (4090, 4090, 'dictData.ne_host_groupId.0', 'Other', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4091, 4091, 'dictData.ne_host_groupId.1', 'Network Elements', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4092, 4092, 'dictData.ne_host_groupId.2', 'System', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4093, 4093, 'dictData.ne_host_authMode.0', 'Password Authentication', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4094, 4094, 'dictData.ne_host_authMode.1', 'Private key authentication', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4093, 4093, 'dictData.ne_host_authMode.0', 'Password Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4094, 4094, 'dictData.ne_host_authMode.1', 'PrivateKey Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4095, 4095, 'menu.tools.terminal', 'NE Host Terminal', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4096, 4096, 'menu.config.neHost', 'NE Host', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4097, 4097, 'menu.config.neHostCommand', 'NE Host CMD', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -632,10 +620,10 @@ REPLACE INTO `sys_dict_data` VALUES (4107, 4107, 'neInfo.errKeyExists', 'NE info REPLACE INTO `sys_dict_data` VALUES (4108, 4108, 'log.operate.title.imsCDR', 'IMS-CDR session', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4109, 4109, 'menu.dashboard.amfUE', 'UE Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4110, 4110, 'log.operate.title.amfUE', 'AMF-UE event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', 'Sync Config', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', 'Wait Sync', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4115, 4115, 'dictType.ne_info_status', 'NE Info State', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4116, 4116, 'menu.ne.neQuickSetup', 'NE Quick Setup', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4117, 4117, 'log.operate.title.neConfig', 'NE Parameter Configuration', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -653,5 +641,6 @@ REPLACE INTO `sys_dict_data` VALUES (4128, 4128, 'menu.monitor.cdr', 'CDR', 'i18 REPLACE INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4130, 4130, 'post.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4131, 4131, 'role.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4132, 4132, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/role.sql b/database/upgrade/upg_sys_job_log.sql similarity index 62% rename from database/install/role.sql rename to database/upgrade/upg_sys_job_log.sql index fb71566e..b35d00e1 100644 --- a/database/install/role.sql +++ b/database/upgrade/upg_sys_job_log.sql @@ -16,20 +16,23 @@ /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- --- Table structure for table `role` +-- Table structure for table `sys_job_log` -- -DROP TABLE IF EXISTS `role`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `role` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `role_name` varchar(255) NOT NULL, - `description` varchar(255) DEFAULT NULL, - `create_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(), - PRIMARY KEY (`id`,`role_name`) USING BTREE, - KEY `role_name` (`role_name`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='del-已使用sys_role'; +CREATE TABLE IF NOT EXISTS `sys_job_log` ( + `job_log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务日志ID', + `job_name` varchar(64) NOT NULL COMMENT '任务名称', + `job_group` varchar(64) NOT NULL COMMENT '任务组名', + `invoke_target` varchar(64) NOT NULL COMMENT '调用目标字符串', + `target_params` varchar(500) DEFAULT '' COMMENT '调用目标传入参数', + `job_msg` varchar(500) DEFAULT '' COMMENT '日志信息', + `status` char(1) DEFAULT '0' COMMENT '执行状态(0失败 1正常)', + `create_time` bigint(20) DEFAULT 0 COMMENT '创建时间', + `cost_time` bigint(20) DEFAULT 0 COMMENT '消耗时间(毫秒)', + PRIMARY KEY (`job_log_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='调度任务调度日志表'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/user_role.sql b/database/upgrade/upg_sys_log_login.sql similarity index 64% rename from database/install/user_role.sql rename to database/upgrade/upg_sys_log_login.sql index 59a22523..c0ca3f10 100644 --- a/database/install/user_role.sql +++ b/database/upgrade/upg_sys_log_login.sql @@ -16,24 +16,23 @@ /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- --- Table structure for table `user_role` +-- Table structure for table `sys_log_login` -- -DROP TABLE IF EXISTS `user_role`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user_role` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `u_name` varchar(255) DEFAULT NULL, - `r_name` varchar(255) DEFAULT NULL, - `description` varchar(255) DEFAULT NULL, - `create_at` datetime DEFAULT current_timestamp(), - PRIMARY KEY (`id`) USING BTREE, - KEY `r_name` (`u_name`) USING BTREE, - KEY `p_name` (`r_name`) USING BTREE, - CONSTRAINT `user_role_rbfk1` FOREIGN KEY (`u_name`) REFERENCES `user` (`account_id`), - CONSTRAINT `user_role_rbfk2` FOREIGN KEY (`r_name`) REFERENCES `role` (`role_name`) -) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='del-已经使用sys_role_user'; +CREATE TABLE IF NOT EXISTS `sys_log_login` ( + `login_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '登录ID', + `user_name` varchar(50) DEFAULT '' COMMENT '用户账号', + `ipaddr` varchar(128) DEFAULT '' COMMENT '登录IP地址', + `login_location` varchar(50) DEFAULT '' COMMENT '登录地点', + `browser` varchar(50) DEFAULT '' COMMENT '浏览器类型', + `os` varchar(50) DEFAULT '' COMMENT '操作系统', + `status` char(1) DEFAULT '0' COMMENT '登录状态(0失败 1成功)', + `msg` varchar(255) DEFAULT '' COMMENT '提示消息', + `login_time` bigint(20) DEFAULT 0 COMMENT '登录时间', + PRIMARY KEY (`login_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统登录日志表'; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/upgrade/upg_sys_log_operate.sql b/database/upgrade/upg_sys_log_operate.sql new file mode 100644 index 00000000..13d73a0a --- /dev/null +++ b/database/upgrade/upg_sys_log_operate.sql @@ -0,0 +1,54 @@ +-- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: 192.168.2.219 Database: omc_db +-- ------------------------------------------------------ +-- Server version 10.3.38-MariaDB + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `sys_log_operate` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE IF NOT EXISTS `sys_log_operate` ( + `oper_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志主键', + `title` varchar(50) DEFAULT '' COMMENT '模块标题', + `business_type` char(1) DEFAULT '0' COMMENT '业务类型(0其它 1新增 2修改 3删除 4授权 5导出 6导入 7强退 8清空数据)', + `method` varchar(100) DEFAULT '' COMMENT '方法名称', + `request_method` varchar(10) DEFAULT '' COMMENT '请求方式', + `operator_type` char(1) DEFAULT '0' COMMENT '操作人员类别(0其它 1后台用户 2手机端用户)', + `oper_name` varchar(50) DEFAULT '' COMMENT '操作人员', + `dept_name` varchar(50) DEFAULT '' COMMENT '部门名称', + `oper_url` varchar(255) DEFAULT '' COMMENT '请求URL', + `oper_ip` varchar(128) DEFAULT '' COMMENT '主机地址', + `oper_location` varchar(255) DEFAULT '' COMMENT '操作地点', + `oper_param` varchar(2000) DEFAULT '' COMMENT '请求参数', + `oper_msg` varchar(2000) DEFAULT '' COMMENT '操作消息', + `status` char(1) DEFAULT '0' COMMENT '操作状态(0异常 1正常)', + `oper_time` bigint(20) DEFAULT 0 COMMENT '操作时间', + `cost_time` bigint(20) DEFAULT 0 COMMENT '消耗时间(毫秒)', + PRIMARY KEY (`oper_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统操作日志表'; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2024-03-06 17:26:59 diff --git a/database/upgrade/upg_u_sub_user.sql b/database/upgrade/upg_u_sub_user.sql new file mode 100644 index 00000000..c87abf29 --- /dev/null +++ b/database/upgrade/upg_u_sub_user.sql @@ -0,0 +1,60 @@ +-- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: 192.168.2.219 Database: omc_db +-- ------------------------------------------------------ +-- Server version 10.3.38-MariaDB + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `u_sub_user` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE IF NOT EXISTS `u_sub_user` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', + `msisdn` varchar(50) DEFAULT NULL COMMENT '相当手机号', + `imsi` varchar(50) DEFAULT NULL COMMENT 'SIM卡号', + `ambr` varchar(50) DEFAULT NULL COMMENT 'SubUeAMBRTemp', + `nssai` varchar(50) DEFAULT NULL COMMENT 'SubSNSSAITemp', + `rat` varchar(50) DEFAULT NULL COMMENT 'rat', + `arfb` varchar(50) DEFAULT NULL COMMENT 'forbiddenAreasTemp', + `sar` varchar(50) DEFAULT NULL COMMENT 'serviceAreaRestrictTemp', + `cn` varchar(50) DEFAULT NULL COMMENT 'cnType', + `sm_data` varchar(1500) DEFAULT NULL COMMENT 'smData', + `smf_sel` varchar(50) DEFAULT NULL COMMENT 'smfSel', + `eps_dat` varchar(1500) DEFAULT NULL COMMENT 'Eps', + `ne_id` varchar(50) DEFAULT '' COMMENT 'UDM网元标识-子系统', + `eps_flag` varchar(50) DEFAULT NULL COMMENT 'epsFlag', + `eps_odb` varchar(50) DEFAULT NULL COMMENT 'epsOdb', + `hplmn_odb` varchar(50) DEFAULT NULL COMMENT 'hplmnOdb', + `ard` varchar(50) DEFAULT NULL COMMENT 'Ard', + `epstpl` varchar(50) DEFAULT NULL COMMENT 'Epstpl', + `context_id` varchar(50) DEFAULT NULL COMMENT 'ContextId', + `apn_context` varchar(50) DEFAULT NULL COMMENT 'apnContext', + `static_ip` varchar(50) DEFAULT NULL COMMENT 'staticIpstatic_ip指给4G UE分配的静态IP,没有可不带此字段名', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `imsi_ne` (`imsi`,`ne_id`) USING BTREE COMMENT 'imsi_ne唯一索引' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='UDM签约用户'; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2024-03-06 17:26:59 diff --git a/database/upgrade/vue3_20231017.sql b/database/upgrade/vue3_20231017.sql deleted file mode 100644 index bd5193fe..00000000 --- a/database/upgrade/vue3_20231017.sql +++ /dev/null @@ -1,49 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -CREATE TABLE IF NOT EXISTS `omc_db`.`sys_job_log` ( - `job_log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务日志ID', - `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务名称', - `job_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务组名', - `invoke_target` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串', - `target_params` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '调用目标传入参数', - `job_msg` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '日志信息', - `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '执行状态(0失败 1正常)', - `create_time` bigint(20) NULL DEFAULT 0 COMMENT '创建时间', - `cost_time` bigint(20) NULL DEFAULT 0 COMMENT '消耗时间(毫秒)', - PRIMARY KEY (`job_log_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '调度任务调度日志表' ROW_FORMAT = Dynamic; - -CREATE TABLE IF NOT EXISTS `omc_db`.`sys_log_login` ( - `login_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '登录ID', - `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户账号', - `ipaddr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录IP地址', - `login_location` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录地点', - `browser` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '浏览器类型', - `os` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作系统', - `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '登录状态(0失败 1成功)', - `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '提示消息', - `login_time` bigint(20) NULL DEFAULT 0 COMMENT '登录时间', - PRIMARY KEY (`login_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统登录日志表' ROW_FORMAT = Dynamic; - -CREATE TABLE IF NOT EXISTS `omc_db`.`sys_log_operate` ( - `oper_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志主键', - `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '模块标题', - `business_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '业务类型(0其它 1新增 2修改 3删除 4授权 5导出 6导入 7强退 8清空数据)', - `method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '方法名称', - `request_method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求方式', - `operator_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '操作人员类别(0其它 1后台用户 2手机端用户)', - `oper_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作人员', - `dept_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '部门名称', - `oper_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求URL', - `oper_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机地址', - `oper_location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作地点', - `oper_param` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求参数', - `oper_msg` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作消息', - `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '操作状态(0异常 1正常)', - `oper_time` bigint(20) NULL DEFAULT 0 COMMENT '操作时间', - `cost_time` bigint(20) NULL DEFAULT 0 COMMENT '消耗时间(毫秒)', - PRIMARY KEY (`oper_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统操作日志表' ROW_FORMAT = Dynamic; - -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/database/upgrade/vue3_20231028.sql b/database/upgrade/vue3_20231028.sql deleted file mode 100644 index 477d4588..00000000 --- a/database/upgrade/vue3_20231028.sql +++ /dev/null @@ -1,92 +0,0 @@ - - --- 创建表 监控_基本信息 - -ALTER TABLE `omc_db`.`monitor_base` DROP COLUMN IF EXISTS `created_at`; -ALTER TABLE - `omc_db`.`monitor_base` DROP COLUMN IF EXISTS `updated_at`; -ALTER TABLE `omc_db`.`monitor_base` DROP COLUMN IF EXISTS `db_size`; -ALTER TABLE - `omc_db`.`monitor_base` MODIFY COLUMN `id` bigint(20) NOT NULL COMMENT 'id' FIRST; -ALTER TABLE - `omc_db`.`monitor_base` -ADD - COLUMN IF NOT EXISTS `create_time` bigint(20) NULL DEFAULT 0 COMMENT '创建时间' AFTER `id`; -ALTER TABLE - `omc_db`.`monitor_base` MODIFY COLUMN `cpu` float NULL DEFAULT 0 COMMENT 'cpu使用率' AFTER `create_time`; -ALTER TABLE - `omc_db`.`monitor_base` MODIFY COLUMN `load_usage` float NULL DEFAULT 0 COMMENT 'cpu平均使用率' AFTER `cpu`; -ALTER TABLE - `omc_db`.`monitor_base` MODIFY COLUMN `cpu_load1` float NULL DEFAULT 0 COMMENT 'cpu使用1分钟' AFTER `load_usage`; -ALTER TABLE - `omc_db`.`monitor_base` MODIFY COLUMN `cpu_load5` float NULL DEFAULT 0 COMMENT 'cpu使用5分钟' AFTER `cpu_load1`; -ALTER TABLE - `omc_db`.`monitor_base` MODIFY COLUMN `cpu_load15` float NULL DEFAULT 0 COMMENT 'cpu使用15分钟' AFTER `cpu_load5`; -ALTER TABLE - `omc_db`.`monitor_base` MODIFY COLUMN `memory` float NULL DEFAULT 0 COMMENT '内存使用率' AFTER `cpu_load15`; -ALTER TABLE - `omc_db`.`monitor_base` -ADD - COLUMN IF NOT EXISTS `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '网元类型' AFTER `memory`; -ALTER TABLE - `omc_db`.`monitor_base` -ADD - COLUMN IF NOT EXISTS `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '网元ID' AFTER `ne_type`; -ALTER TABLE - `omc_db`.`monitor_base` MODIFY COLUMN `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id'; - --- 创建表 监控_磁盘IO - -ALTER TABLE `omc_db`.`monitor_io` DROP COLUMN IF EXISTS `created_at`; -ALTER TABLE `omc_db`.`monitor_io` DROP COLUMN IF EXISTS `updated_at`; -ALTER TABLE - `omc_db`.`monitor_io` MODIFY COLUMN `id` bigint(20) NOT NULL COMMENT 'id' FIRST; -ALTER TABLE - `omc_db`.`monitor_io` -ADD - COLUMN IF NOT EXISTS `create_time` bigint(20) NULL DEFAULT 0 COMMENT '创建时间' AFTER `id`; -ALTER TABLE - `omc_db`.`monitor_io` MODIFY COLUMN `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '磁盘名' AFTER `create_time`; -ALTER TABLE - `omc_db`.`monitor_io` MODIFY COLUMN `read` int(11) NULL DEFAULT 0 COMMENT '读取K' AFTER `name`; -ALTER TABLE - `omc_db`.`monitor_io` MODIFY COLUMN `write` int(11) NULL DEFAULT 0 COMMENT '写入K' AFTER `read`; -ALTER TABLE `omc_db`.`monitor_io` MODIFY COLUMN `count` int NULL DEFAULT 0 COMMENT '读写次数' AFTER `write`; -ALTER TABLE `omc_db`.`monitor_io` MODIFY COLUMN `time` int NULL DEFAULT 0 COMMENT '读写延迟' AFTER `count`; -ALTER TABLE - `omc_db`.`monitor_io` -ADD - COLUMN IF NOT EXISTS `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '网元类型' AFTER `time`; -ALTER TABLE - `omc_db`.`monitor_io` -ADD - COLUMN IF NOT EXISTS `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '网元ID' AFTER `ne_type`; -ALTER TABLE - `omc_db`.`monitor_io` MODIFY COLUMN `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id'; - --- 创建表 监控_网络IO - -ALTER TABLE `omc_db`.`monitor_network` DROP COLUMN IF EXISTS `created_at`; -ALTER TABLE `omc_db`.`monitor_network` DROP COLUMN IF EXISTS `updated_at`; -ALTER TABLE - `omc_db`.`monitor_network` MODIFY COLUMN `id` bigint(20) NOT NULL COMMENT 'id' FIRST; -ALTER TABLE - `omc_db`.`monitor_network` -ADD - COLUMN IF NOT EXISTS `create_time` bigint(20) NULL DEFAULT 0 COMMENT '创建时间' AFTER `id`; -ALTER TABLE - `omc_db`.`monitor_network` MODIFY COLUMN `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '网卡名' AFTER `create_time`; -ALTER TABLE - `omc_db`.`monitor_network` MODIFY COLUMN `up` float NULL DEFAULT 0 COMMENT '上行' AFTER `name`; -ALTER TABLE - `omc_db`.`monitor_network` MODIFY COLUMN `down` float NULL DEFAULT 0 COMMENT '下行' AFTER `up`; -ALTER TABLE - `omc_db`.`monitor_network` -ADD - COLUMN IF NOT EXISTS `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '网元类型' AFTER `down`; -ALTER TABLE - `omc_db`.`monitor_network` -ADD - COLUMN IF NOT EXISTS `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '网元ID' AFTER `ne_type`; -ALTER TABLE - `omc_db`.`monitor_network` MODIFY COLUMN `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id'; diff --git a/database/upgrade/zupgrade.sql b/database/upgrade/zupgrade.sql index c7bb2138..a010a783 100644 --- a/database/upgrade/zupgrade.sql +++ b/database/upgrade/zupgrade.sql @@ -3,52 +3,22 @@ DROP TRIGGER IF EXISTS `tg_account_menu`; ALTER TABLE `omc_db`.`gold_kpi` MODIFY COLUMN `value` bigint NULL DEFAULT 0 AFTER `kpi_id`; -ALTER TABLE `omc_db`.`user` -DROP INDEX IF EXISTS `account_id`, -DROP INDEX IF EXISTS `idx_uni_user_acc_id`, -ADD UNIQUE INDEX `idx_uni_user_acc_id`(`account_id`) USING BTREE; - ALTER TABLE `omc_db`.`ne_link` DROP INDEX IF EXISTS `idx_netype_neid`; -ALTER TABLE `omc_db`.`user` -MODIFY COLUMN `password_expiration` date NULL DEFAULT NULL AFTER `change_password_flag`, -MODIFY COLUMN `user_expiration` date NULL DEFAULT NULL AFTER `status`; - ALTER TABLE `omc_db`.`config` ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `update_time`; ALTER TABLE `omc_db`.`nbi_operation_log` MODIFY COLUMN `created_at` datetime NULL DEFAULT NULL AFTER `log_time`; - -ALTER TABLE `omc_db`.`permission` -ADD COLUMN IF NOT EXISTS `management` varchar(32) NULL DEFAULT '*' AFTER `method`; - -ALTER TABLE `omc_db`.`permission` -CHANGE COLUMN IF EXISTS `create_at` `created_at` datetime NULL DEFAULT current_timestamp AFTER `description`, -MODIFY COLUMN `method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '*' AFTER `permission_name`, -MODIFY COLUMN `management` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '*' AFTER `method`, -MODIFY COLUMN `element` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '*' AFTER `management`, -MODIFY COLUMN `object` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '*' AFTER `element`, -ADD COLUMN IF NOT EXISTS `updated_at` datetime NULL AFTER `created_at`, -ADD COLUMN IF NOT EXISTS `deleted_at` datetime NULL AFTER `updated_at`; - -ALTER TABLE `omc_db`.`permission` -ADD UNIQUE INDEX IF NOT EXISTS `permission_name`(`permission_name`) USING BTREE; - + ALTER TABLE `omc_db`.`alarm_log` ADD COLUMN IF NOT EXISTS `alarm_seq` int NULL AFTER `ne_id`; -ALTER TABLE `omc_db`.`ne_software` -ADD COLUMN IF NOT EXISTS `patch_time` datetime NULL AFTER `update_time`; - ALTER TABLE `omc_db`.`nbi_alarm_log` ADD COLUMN IF NOT EXISTS `alarm_status` int NULL COMMENT '0/1: 清除告警/活动告警' AFTER `alarm_code`; ALTER TABLE `omc_db`.`cert_info` DROP INDEX IF EXISTS `idx_netype_neid`; -ALTER TABLE `omc_db`.`user` -MODIFY COLUMN `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL AFTER `account_id`; - ALTER TABLE `omc_db`.`measure_threshold` CHANGE COLUMN IF EXISTS `alarm_id` `alarm_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '10200' AFTER `orig_severity`; @@ -59,10 +29,7 @@ ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `account_id`; ALTER TABLE `omc_db`.`trace_task` ADD COLUMN IF NOT EXISTS `account_id` varchar(32) NULL AFTER `status`, ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `account_id`; - -ALTER TABLE `omc_db`.`u_auth_user` ENGINE = InnoDB; -ALTER TABLE `omc_db`.`u_sub_user` ENGINE = InnoDB; - + INSERT IGNORE INTO `omc_db`.`config` (`id`, `module_name`, `config_tag`, `title_json`, `value`, `value_json`, `comment`) VALUES ('37', 'System', 'logo', '{\"cn\":\"系统LOGO\",\"en\":\"System LOGO\"}', 'logo30.png', '', ''); @@ -78,32 +45,15 @@ MODIFY COLUMN `timestamp` bigint NULL DEFAULT NULL AFTER `msg_direct`; ALTER TABLE `omc_db`.`param_config` MODIFY COLUMN `method` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'method allow: \"get\", \"get,post,put\", \"delete\"' AFTER `top_display`; - -ALTER TABLE `omc_db`.`ne_license` -MODIFY COLUMN `status` enum('ACTIVE','INACTIVE','PENDING') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'ACTIVE' AFTER `expiration_date`, -ADD COLUMN IF NOT EXISTS `path` varchar(128) NULL AFTER `status`, -ADD COLUMN IF NOT EXISTS `file_name` varchar(64) NULL AFTER `path`, -ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `file_name`; - -DELETE FROM ne_license WHERE file_name IS NULL; - + ALTER TABLE `omc_db`.`trace_data` ADD COLUMN IF NOT EXISTS `length` int NULL AFTER `msg_direct`; - --- UDM签约存储长度不足 -ALTER TABLE `omc_db`.`u_sub_user` -MODIFY COLUMN `sm_data` varchar(1500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'smData' AFTER `cn`, -MODIFY COLUMN `eps_dat` varchar(1500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Eps' AFTER `smf_sel`; - + ALTER TABLE `omc_db`.`ne_backup` ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `md5_sum`; -ALTER TABLE - `omc_db`.`sys_dict_data` MODIFY COLUMN `dict_label` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典标签' AFTER `dict_sort`, - MODIFY COLUMN `dict_value` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典键值' AFTER `dict_label`; - ALTER TABLE `omc_db`.`mml_command` ADD @@ -129,28 +79,9 @@ ALTER TABLE ADD COLUMN IF NOT EXISTS `operation` varchar(16) NULL AFTER `process_id`; -UPDATE ne_info SET `province` = '-' WHERE `province` = 'GD'; - -UPDATE ne_info -SET - `vendor_name` = "AGrandTech" -WHERE `vendor_name` = "AGT"; - -UPDATE ne_info SET `dn` = "-" WHERE `dn` = "TN"; - -ALTER TABLE - `omc_db`.`sys_dept` MODIFY COLUMN `dept_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '部门名称' AFTER `ancestors`; - -ALTER TABLE `omc_db`.`sys_dict_data` -MODIFY COLUMN `dict_code` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典编码' FIRST; - ALTER TABLE `omc_db`.`gold_kpi` ADD COLUMN IF NOT EXISTS `granularity` tinyint NULL DEFAULT 60 COMMENT '时间颗粒度: 5/10/.../60/300 (秒)' AFTER `index`; - -ALTER TABLE `omc_db`.`ne_info` -DROP PRIMARY KEY, -ADD PRIMARY KEY (`id`) USING BTREE; - + ALTER TABLE `omc_db`.`gold_kpi` ADD INDEX IF NOT EXISTS `idx_kpiid` (`kpi_id`) USING BTREE, ADD INDEX IF NOT EXISTS `idx_timestamp` (`timestamp`) USING BTREE; @@ -170,13 +101,7 @@ ADD INDEX IF NOT EXISTS `idx_kpi_id` (`kpi_id`) USING BTREE; ALTER TABLE `omc_db`.`alarm` ADD UNIQUE INDEX IF NOT EXISTS `idx_pk_id` (`id`) USING BTREE; - -REPLACE INTO - `omc_db`.`sys_dict_data` -VALUES ( - 4034, 4034, 'menu.dashboard.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL - ); - + ALTER TABLE `omc_db`.`alarm` ADD INDEX IF NOT EXISTS `idx_severity_status` ( `alarm_status`, `orig_severity` From ba86fed0c5b08566ab243cc668f567c1cca6ac88 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 11 May 2024 16:34:14 +0800 Subject: [PATCH 081/130] =?UTF-8?q?style:=20=E7=B3=BB=E7=BB=9F=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=8D=87=E7=BA=A7=E6=B8=85=E5=BA=93=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_menu.sql | 7 +- database/upgrade/upg_sys_menu.sql | 1014 +---------------------------- database/upgvue3/upg_sys_menu.sql | 206 +++++- 3 files changed, 230 insertions(+), 997 deletions(-) diff --git a/database/install/sys_menu.sql b/database/install/sys_menu.sql index 2060fc99..ee7bbf19 100644 --- a/database/install/sys_menu.sql +++ b/database/install/sys_menu.sql @@ -41,7 +41,7 @@ CREATE TABLE `sys_menu` ( `update_time` bigint(20) NULL DEFAULT 0 COMMENT '更新时间', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', PRIMARY KEY (`menu_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2144 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_menu @@ -180,5 +180,10 @@ INSERT INTO `sys_menu` VALUES (2137, 'menu.config.neInfo', 4, 14, 'neInfo', 'ne/ INSERT INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); INSERT INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2087, 40, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', 'supervisor', 1711352709786, 'supervisor', 1712751135878, ''); INSERT INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2087, 50, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', 'supervisor', 1711352768797, 'supervisor', 1712751125648, ''); +INSERT INTO `sys_menu` VALUES (2142, 'menu.ne.neQuickSetup', 4, 10, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2143, 'menu.config.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2144, 'menu.config.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2145, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2146, 'menu.ne.neConfPara5G', 4, 8, 'neConfPara5G', 'ne/neConfPara5G/index', '1', '0', 'M', '1', '1', 'ne:neConfPara5G:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_menu.sql b/database/upgrade/upg_sys_menu.sql index a33bfc35..4f88b8ac 100644 --- a/database/upgrade/upg_sys_menu.sql +++ b/database/upgrade/upg_sys_menu.sql @@ -20,7 +20,7 @@ SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for sys_menu -- ---------------------------- - +DROP TABLE IF EXISTS `sys_menu`; CREATE TABLE IF NOT EXISTS `sys_menu` ( `menu_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单ID', `menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称', @@ -41,26 +41,14 @@ CREATE TABLE IF NOT EXISTS `sys_menu` ( `update_time` bigint(20) NULL DEFAULT 0 COMMENT '更新时间', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', PRIMARY KEY (`menu_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2134 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_menu -- ---------------------------- INSERT IGNORE INTO `sys_menu` VALUES (1, 'menu.system', 0, 16, 'system', NULL, '1', '1', 'D', '1', '1', NULL, 'icon-xiangmu', 'supervisor', 1700000000000, NULL, 0, 'menu.systemRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2, 'menu.monitor', 0, 2, 'monitor', NULL, '1', '1', 'D', '0', '0', NULL, 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.monitorRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (3, 'menu.tools', 0, 15, 'tool', NULL, '1', '1', 'D', '1', '1', NULL, 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.toolsRemark'); INSERT IGNORE INTO `sys_menu` VALUES (4, 'menu.config', 0, 3, 'configManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.configRemark'); INSERT IGNORE INTO `sys_menu` VALUES (5, 'menu.ueUser', 0, 7, 'neUser', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUserRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (6, '故障管理', 0, 50, 'page', NULL, '1', '0', 'D', '0', '1', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 1690000000000, '故障管理'); -INSERT IGNORE INTO `sys_menu` VALUES (7, '配置管理', 0, 550, 'page', NULL, '1', '0', 'D', '0', '1', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 0, '配置管理'); -INSERT IGNORE INTO `sys_menu` VALUES (8, '性能管理', 0, 551, 'page', NULL, '1', '0', 'D', '0', '1', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 0, '性能管理'); -INSERT IGNORE INTO `sys_menu` VALUES (9, '操作维护', 0, 552, 'page', NULL, '1', '0', 'D', '0', '1', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 0, '操作维护'); -INSERT IGNORE INTO `sys_menu` VALUES (10, '跟踪管理', 0, 553, 'page', NULL, '1', '0', 'D', '0', '1', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 1690000000000, '跟踪管理'); -INSERT IGNORE INTO `sys_menu` VALUES (11, '日志管理', 0, 554, 'page', NULL, '1', '0', 'D', '0', '1', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 0, '日志管理'); -INSERT IGNORE INTO `sys_menu` VALUES (12, '安全管理', 0, 555, 'page', NULL, '1', '0', 'D', '0', '1', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 0, '安全管理'); -INSERT IGNORE INTO `sys_menu` VALUES (13, '北向管理', 0, 556, 'page', NULL, '1', '0', 'D', '0', '0', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 1690000000000, '北向管理'); -INSERT IGNORE INTO `sys_menu` VALUES (14, '系统管理', 0, 557, 'page', NULL, '1', '0', 'D', '0', '1', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 0, '系统管理'); -INSERT IGNORE INTO `sys_menu` VALUES (15, '拓扑管理', 0, 558, 'page', NULL, '1', '0', 'D', '0', '0', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 0, '拓扑管理'); INSERT IGNORE INTO `sys_menu` VALUES (100, 'menu.security.user', 2113, 1, 'user', 'system/user/index', '1', '1', 'M', '1', '1', 'system:user:list', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.security.userRemark'); INSERT IGNORE INTO `sys_menu` VALUES (101, 'menu.security.role', 2113, 3, 'role', 'system/role/index', '1', '1', 'M', '1', '1', 'system:role:list', 'icon-anzhuo', 'supervisor', 1700000000000, NULL, 0, 'menu.security.roleRemark'); INSERT IGNORE INTO `sys_menu` VALUES (102, 'menu.security.roleUser', 2113, 3, 'role/inline/auth-user/:roleId', 'system/role/auth-user', '1', '1', 'M', '0', '1', 'system:role:auth', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.security.roleUserRemark'); @@ -77,7 +65,6 @@ INSERT IGNORE INTO `sys_menu` VALUES (114, 'menu.system.cache', 1, 3, 'cache', ' INSERT IGNORE INTO `sys_menu` VALUES (115, 'menu.security.onlineUser', 2113, 2, 'online', 'monitor/online/index', '1', '1', 'M', '1', '1', 'monitor:online:list', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.security.onlineUserRemark'); INSERT IGNORE INTO `sys_menu` VALUES (116, 'menu.system.job', 1, 1, 'job', 'monitor/job/index', '1', '1', 'M', '1', '1', 'monitor:job:list', 'icon-lishi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobRemark'); INSERT IGNORE INTO `sys_menu` VALUES (117, 'menu.system.jobLog', 1, 2, '/system/job/inline/log/:jobId', 'monitor/job/log', '1', '1', 'M', '0', '1', 'monitor:job:log', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobLogRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (118, 'menu.tools.help', 3, 1, 'help', 'tool/help/index', '1', '1', 'M', '1', '1', 'monitor:help:list', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.tools.helpRemark'); INSERT IGNORE INTO `sys_menu` VALUES (500, 'menu.log.operat', 2089, 1, 'operate', 'system/log/operate/index', '1', '1', 'M', '1', '1', 'system:log:operate:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.operatRemark'); INSERT IGNORE INTO `sys_menu` VALUES (501, 'menu.log.login', 2089, 2, 'login', 'system/log/login/index', '1', '1', 'M', '1', '1', 'system:log:login:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.loginRemark'); INSERT IGNORE INTO `sys_menu` VALUES (1000, 'menu.common.query', 100, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -135,109 +122,42 @@ INSERT IGNORE INTO `sys_menu` VALUES (1055, 'menu.common.edit', 116, 5, '#', NUL INSERT IGNORE INTO `sys_menu` VALUES (1056, 'menu.common.export', 116, 6, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2009, 'menu.ueUser.authUDM', 5, 1, 'auth', 'neUser/auth/index', '1', '1', 'M', '1', '1', 'neUser:auth:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.authUDMRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2010, 'menu.ueUser.subUDM', 5, 2, 'sub', 'neUser/sub/index', '1', '1', 'M', '1', '1', 'neUser:sub:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.subUDMRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2011, '活动告警', 6, 1, NULL, 'page/alarm/alarmListDown.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '活动告警'); -INSERT IGNORE INTO `sys_menu` VALUES (2012, '历史告警', 6, 2, NULL, 'page/alarm/AlarmListHistory.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '历史告警'); -INSERT IGNORE INTO `sys_menu` VALUES (2013, '故障通用设置', 6, 3, NULL, 'page/alarm/alarmInfoConfig.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '故障通用设置'); -INSERT IGNORE INTO `sys_menu` VALUES (2014, '定时同步设置', 6, 4, NULL, 'page/alarm/synchronous.html', '1', '0', 'M', '1', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '定时同步设置'); -INSERT IGNORE INTO `sys_menu` VALUES (2015, '健康状态检查', 6, 5, NULL, 'page/alarm/healthCheck.html', '1', '0', 'M', '1', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '健康状态检查'); -INSERT IGNORE INTO `sys_menu` VALUES (2016, '告警前转', 6, 6, NULL, 'page/alarm/alarmForwarding.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '告警前转'); -INSERT IGNORE INTO `sys_menu` VALUES (2017, '网元管理', 7, 1, NULL, 'page/nfManage/list.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '网元管理'); -INSERT IGNORE INTO `sys_menu` VALUES (2018, '参数配置', 7, 2, NULL, 'page/configParam/list.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '参数配置'); -INSERT IGNORE INTO `sys_menu` VALUES (2019, '软件管理', 7, 3, NULL, 'page/softwareManage/softwareManage.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '软件管理'); -INSERT IGNORE INTO `sys_menu` VALUES (2020, '备份管理', 7, 5, NULL, 'page/softwareManage/backupManage.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '备份管理'); -INSERT IGNORE INTO `sys_menu` VALUES (2021, '配置参数设置', 7, 6, NULL, 'page/configParam/configParamSet.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '配置参数设置'); -INSERT IGNORE INTO `sys_menu` VALUES (2022, '任务管理', 8, 1, NULL, 'page/task/list.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '任务管理'); -INSERT IGNORE INTO `sys_menu` VALUES (2023, '性能数据', 8, 2, NULL, 'page/repair/list.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '性能数据'); -INSERT IGNORE INTO `sys_menu` VALUES (2024, '性能报表', 8, 3, NULL, 'page/task/perfReport.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '性能报表'); -INSERT IGNORE INTO `sys_menu` VALUES (2025, '性能门限', 8, 4, NULL, 'page/task/threshold.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '性能门限'); -INSERT IGNORE INTO `sys_menu` VALUES (2026, '黄金指标', 8, 5, NULL, 'page/gold/list.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '黄金指标'); -INSERT IGNORE INTO `sys_menu` VALUES (2027, '性能通用设置', 8, 7, NULL, 'page/task/perfReportSet.html', '1', '0', 'M', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 0, '性能通用设置'); -INSERT IGNORE INTO `sys_menu` VALUES (2028, '自定义指标', 8, 8, NULL, 'page/indicators/list.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '自定义指标'); -INSERT IGNORE INTO `sys_menu` VALUES (2029, '对象模板', 8, 8, NULL, 'page/objectTemplate/list.html', '1', '0', 'M', '1', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '对象模板'); -INSERT IGNORE INTO `sys_menu` VALUES (2030, '自定义测量数据', 8, 9, NULL, 'page/indicators/measuringData.html', '1', '0', 'M', '1', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '自定义测量数据'); -INSERT IGNORE INTO `sys_menu` VALUES (2031, '拓扑视图', 15, 1, NULL, 'page/topology/topologyList.html', '1', '0', 'M', '1', '0', 'page', '#', 'admin', 1690000000000, 'admin', 0, '拓扑视图'); -INSERT IGNORE INTO `sys_menu` VALUES (2032, '系统维护', 14, 1, NULL, 'page/systemManage/systemOperation.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '系统维护'); -INSERT IGNORE INTO `sys_menu` VALUES (2033, '稳定性事件列表', 14, 2, NULL, 'page/systemManage/stabilityEvents.html', '1', '0', 'M', '1', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '稳定性事件列表'); -INSERT IGNORE INTO `sys_menu` VALUES (2034, '稳定性统计报告', 14, 3, NULL, 'page/systemManage/stabilityReports.html', '1', '0', 'M', '1', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '稳定性统计报告'); -INSERT IGNORE INTO `sys_menu` VALUES (2035, '系统备份', 14, 4, NULL, 'page/systemManage/systemBackup.html', '1', '0', 'M', '1', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '系统备份'); -INSERT IGNORE INTO `sys_menu` VALUES (2036, '系统可扩展', 14, 5, NULL, 'page/systemManage/systemExtended.html', '1', '0', 'M', '1', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '\"系统可扩展'); -INSERT IGNORE INTO `sys_menu` VALUES (2037, '证书管理', 14, 6, NULL, 'page/systemManage/certificateManage.html', '1', '0', 'M', '1', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '证书管理'); -INSERT IGNORE INTO `sys_menu` VALUES (2038, '北向操作日志', 13, 0, NULL, 'page/log/nbiOperLogList.html', '1', '0', 'M', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 0, '北向操作日志'); -INSERT IGNORE INTO `sys_menu` VALUES (2039, '北向告警日志', 13, 2, NULL, 'page/log/nbiAlarmLog.html', '1', '0', 'M', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '北向告警日志'); -INSERT IGNORE INTO `sys_menu` VALUES (2040, '北向通用设置', 13, 3, NULL, 'page/log/nbiSet.html', '1', '0', 'M', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 0, '北向通用设置'); -INSERT IGNORE INTO `sys_menu` VALUES (2041, '用户管理', 12, 1, NULL, 'page/user/list.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '用户管理'); -INSERT IGNORE INTO `sys_menu` VALUES (2042, '在线状态', 12, 2, NULL, 'page/user/online.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '在线状态'); -INSERT IGNORE INTO `sys_menu` VALUES (2043, '用户组管理', 12, 2, NULL, 'page/group/list.html', '1', '0', 'M', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '用户组管理'); -INSERT IGNORE INTO `sys_menu` VALUES (2044, '安全策略', 12, 3, NULL, 'page/user/securityPolicy.html', '1', '0', 'M', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '安全策略'); -INSERT IGNORE INTO `sys_menu` VALUES (2045, '操作日志', 11, 1, NULL, 'page/log/operLogList.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '操作日志'); -INSERT IGNORE INTO `sys_menu` VALUES (2046, 'mml操作日志', 11, 2, NULL, 'page/log/mmlOperLogList.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, 'mml操作日志'); -INSERT IGNORE INTO `sys_menu` VALUES (2047, '告警日志', 11, 3, NULL, 'page/log/alarmLogList.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '告警日志'); -INSERT IGNORE INTO `sys_menu` VALUES (2048, '安全日志', 11, 4, NULL, 'page/log/securityLogList.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '安全日志'); -INSERT IGNORE INTO `sys_menu` VALUES (2049, '告警前转日志', 11, 7, NULL, 'page/log/forwardingLog.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '告警前转日志'); -INSERT IGNORE INTO `sys_menu` VALUES (2050, '日志通用管理', 11, 8, NULL, 'page/log/logSet.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '日志通用管理'); -INSERT IGNORE INTO `sys_menu` VALUES (2051, '系统日志', 11, 9, NULL, 'page/log/systemLog.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '系统日志'); -INSERT IGNORE INTO `sys_menu` VALUES (2052, '跟踪任务', 10, 1, NULL, 'page/trace/taskList.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '跟踪任务'); -INSERT IGNORE INTO `sys_menu` VALUES (2053, '信令分析', 10, 2, NULL, 'page/trace/traceShow.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '信令分析'); -INSERT IGNORE INTO `sys_menu` VALUES (2054, '核心网池', 9, 0, NULL, 'page/mml/poolList.html', '1', '0', 'M', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, '核心网池'); -INSERT IGNORE INTO `sys_menu` VALUES (2055, '操作维护MML', 9, 1, NULL, 'page/mml/omcList.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '操作维护MML'); -INSERT IGNORE INTO `sys_menu` VALUES (2056, '网元操作MML', 9, 3, NULL, 'page/mml/list.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '网元操作MML'); -INSERT IGNORE INTO `sys_menu` VALUES (2057, '用户数据MML', 9, 4, NULL, 'page/mml/udmList.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '用户数据MML'); -INSERT IGNORE INTO `sys_menu` VALUES (2058, '操作维护设置', 9, 5, NULL, 'page/mml/mmlSet.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '操作维护设置'); -INSERT IGNORE INTO `sys_menu` VALUES (2059, '角色管理', 12, 6, NULL, 'page/role/list.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '角色管理'); -INSERT IGNORE INTO `sys_menu` VALUES (2060, '菜单管理', 12, 7, NULL, 'page/menu/list.html', '1', '0', 'M', '0', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, '菜单管理'); -INSERT IGNORE INTO `sys_menu` VALUES (2065, '数据库URL查询', 0, 10011, NULL, NULL, '1', '1', 'B', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 0, '数据库查询操作'); -INSERT IGNORE INTO `sys_menu` VALUES (2066, '数据库URL新增', 0, 10012, NULL, NULL, '1', '1', 'B', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 0, '数据库URL新增'); -INSERT IGNORE INTO `sys_menu` VALUES (2067, '数据库URL更新', 0, 10013, NULL, NULL, '1', '1', 'B', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 0, '数据库URL更新'); -INSERT IGNORE INTO `sys_menu` VALUES (2068, '数据库URL删除', 0, 10014, NULL, NULL, '1', '1', 'B', '0', '0', 'page', '#', 'admin', 1690000000000, 'admin', 0, '数据库URL删除'); -INSERT IGNORE INTO `sys_menu` VALUES (2069, '用户信息', 0, 559, 'page', NULL, '1', '0', 'D', '0', '1', 'page', 'fa fa-home', 'admin', 1690000000000, 'admin', 1690000000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2070, 'UDM鉴权用户', 2069, 1, NULL, 'page/nfUserInfo/authList.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2071, '5G基站信息', 2069, 4, NULL, 'page/nfUserInfo/5gBase.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2072, 'IMS在线用户', 2069, 3, NULL, 'page/baseInfo/imsOnline.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2073, 'UDM签约用户', 2069, 2, NULL, 'page/nfUserInfo/subsList.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2074, 'UE在线信息', 2069, 4, NULL, 'page/baseInfo/ueInfoList.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 1690000000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2075, 'menu.config.neManage', 4, 1, 'neManage', 'configManage/neManage/index', '1', '1', 'M', '1', '1', 'configManage:neManage:index', 'icon-biaoqing', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neManageRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2076, 'menu.config.configNE', 4, 2, 'configParam', 'configManage/configParam/index', '1', '1', 'M', '1', '1', 'configManage:configParam:index', 'icon-piliang', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNERemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2077, '信令抓包', 10, 3, NULL, 'page/trace/pcap.html', '1', '0', 'M', '1', '1', 'page', '#', 'admin', 1690000000000, 'admin', 0, 'tcpdump抓包pcap文件'); -INSERT IGNORE INTO `sys_menu` VALUES (2078, 'menu.config.backupManage', 4, 3, 'backupManage', 'configManage/backupManage/index', '1', '1', 'M', '1', '1', 'configManage:backupManage:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.config.backupManageRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2079, 'menu.config.softwareManage', 4, 4, 'softwareManage', 'configManage/softwareManage/index', '1', '1', 'M', '1', '1', 'configManage:softwareManage:index', 'icon-huidingbu', 'supervisor', 1700000000000, NULL, 0, 'menu.config.softwareManageRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neUser/ims/index', '1', '1', 'M', '1', '1', 'neUser:ims:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineIMSRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser/ue/index', '1', '1', 'M', '1', '1', 'neUser:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineUERemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '1', 'M', '1', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2075, 'menu.config.neManage', 4, 1, 'neManage', 'configManage/neManage/index', '1', '0', 'M', '1', '1', 'configManage:neManage:index', 'icon-biaoqing', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neManageRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2078, 'menu.config.backupManage', 4, 3, 'backupManage', 'configManage/backupManage/index', '1', '0', 'M', '1', '1', 'configManage:backupManage:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.config.backupManageRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2079, 'menu.config.softwareManage', 4, 4, 'softwareManage', 'configManage/softwareManage/index', '1', '0', 'M', '1', '1', 'configManage:softwareManage:index', 'icon-huidingbu', 'supervisor', 1700000000000, NULL, 0, 'menu.config.softwareManageRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neUser/ims/index', '1', '0', 'M', '1', '1', 'neUser:ims:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineIMSRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser/ue/index', '1', '0', 'M', '1', '1', 'neUser:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineUERemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '1', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.traceRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '1', 'M', '1', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.taskRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 2, 'analysis', 'traceManage/analysis/index', '1', '1', 'M', '1', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.analysisRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '0', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1713176976458, 'menu.trace.taskRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 2, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 3, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1700000000000, NULL, 0, 'menu.faultRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.activemRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2089, 'menu.log', 0, 9, 'logManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.logRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2090, 'menu.log.operatOld', 2089, 1, 'operation', 'logManage/operation/index', '1', '0', 'M', '0', '0', 'logManage:operation:index', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.operatOldRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2091, 'menu.log.mml', 2089, 2, 'mml', 'logManage/mml/index', '1', '1', 'M', '1', '1', 'logManage:mml:index', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.log.mmlRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2092, 'menu.log.alarm', 2089, 3, 'alarm-log', 'logManage/alarm/index', '1', '1', 'M', '1', '1', 'logManage:alarm:index', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.alarmRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2093, 'menu.log.securityOld', 2089, 6, 'security-log', 'logManage/security/index', '1', '0', 'M', '0', '0', 'logManage/security/index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.log.securityOldRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2092, 'menu.log.alarm', 2089, 3, 'alarm-log', 'logManage/alarm/index', '1', '0', 'M', '1', '1', 'logManage:alarm:index', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.alarmRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2094, 'menu.log.forwarding', 2089, 7, 'forwarding', 'logManage/forwarding/index', '1', '0', 'M', '1', '1', 'logManage:forwarding:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.log.forwardingRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2095, 'menu.log.set', 2089, 15, 'logSet', 'logManage/logSet/index', '1', '0', 'M', '1', '1', 'logManage:logSet:index', 'icon-you', 'supervisor', 1700000000000, NULL, 0, 'menu.log.setRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2096, 'menu.monitor.sessionUser', 2, 10, 'session', 'monitor/session/index', '1', '0', 'M', '0', '0', 'monitor:session:index', 'icon-gerenzhanghu', 'supervisor', 1700000000000, NULL, 0, 'menu.monitor.sessionUserRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2095, 'menu.log.set', 2089, 15, 'logSet', 'logManage/logSet/index', '1', '0', 'M', '0', '0', 'logManage:logSet:index', 'icon-you', 'supervisor', 1700000000000, 'supervisor', 1715332370830, 'menu.log.setRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2097, 'menu.fault.history', 2129, 2, 'history-alarm', 'faultManage/history-alarm/index', '1', '1', 'M', '1', '1', 'faultManage/history-alarm/index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.historyRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2098, 'menu.fault.set', 2129, 100, 'fault-setting', 'faultManage/fault-setting/index', '1', '0', 'M', '1', '1', 'faultManage/fault-setting/index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.setRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2099, 'menu.perf', 0, 5, 'perfManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.perfRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2100, 'menu.perf.task', 2099, 1, 'taskManage', 'perfManage/taskManage/index', '1', '1', 'M', '1', '1', 'perfManage:taskManage:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.taskRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2101, 'menu.perf.data', 2099, 2, 'perfData', 'perfManage/perfData/index', '1', '1', 'M', '1', '1', 'perfManage:perfData:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.dataRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2100, 'menu.perf.task', 2099, 1, 'taskManage', 'perfManage/taskManage/index', '1', '1', 'M', '0', '1', 'perfManage:taskManage:index', 'icon-wofaqi', 'supervisor', 1700000000000, 'admin', 1713177036412, 'menu.perf.taskRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2101, 'menu.perf.data', 2099, 2, 'perfData', 'perfManage/perfData/index', '1', '1', 'M', '0', '1', 'perfManage:perfData:index', 'icon-soutubiao', 'supervisor', 1700000000000, 'admin', 1713177042915, 'menu.perf.dataRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2102, 'menu.perf.report', 2099, 3, 'perfReport', 'perfManage/perfReport/index', '1', '0', 'M', '0', '0', 'perfManage:perfReport:index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.reportRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2103, 'menu.perf.threshold', 2099, 4, 'perfThreshold', 'perfManage/perfThreshold/index', '1', '0', 'M', '1', '1', 'perfManage:perfThreshold:index', 'icon-zhuanrang', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.thresholdRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2103, 'menu.perf.threshold', 2099, 4, 'perfThreshold', 'perfManage/perfThreshold/index', '1', '0', 'M', '1', '1', 'perfManage:perfThreshold:index', 'icon-zhuanrang', 'supervisor', 1700000000000, 'admin', 1712807935215, 'menu.perf.thresholdRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2104, 'menu.perf.kpi', 2099, 5, 'goldTarget', 'perfManage/goldTarget/index', '1', '1', 'M', '1', '1', 'perfManage:goldTarget:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.kpiRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2105, 'menu.perf.customTarget', 2099, 6, 'customTarget', 'perfManage/customTarget/index', '1', '1', 'M', '0', '0', 'perfManage:customTarget:index', 'icon-fanhui1', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.customTargetRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2105, 'menu.perf.customTarget', 2099, 6, 'customTarget', 'perfManage/customTarget/index', '1', '1', 'M', '0', '0', 'perfManage:customTarget:index', 'icon-fanhui1', 'supervisor', 1700000000000, 'admin', 1712807948673, 'menu.perf.customTargetRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2106, 'menu.perf.set', 2099, 7, 'perfSet', 'perfManage/perfSet/index', '1', '0', 'M', '0', '0', 'perfManage:perfSet:index', 'icon-gonggao', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.setRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2107, 'menu.mml', 0, 8, 'mmlManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-zhizuoliucheng', 'supervisor', 1700000000000, NULL, 0, 'menu.mmlRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2108, 'menu.mml.ne', 2107, 1, 'neOperate', 'mmlManage/neOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:neOperate:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.neRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2109, 'menu.mml.udm', 2107, 2, 'udmOperate', 'mmlManage/udmOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:udmOperate:index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.udmRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '1', 'M', '1', '1', 'mmlManage:mmlSet:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.setRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '1', '1', 'mmlManage:mmlSet:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.setRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:omcOperate:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.omcRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2112, 'menu.config.licenseManage', 4, 5, 'license', 'configManage/license/index', '1', '1', 'M', '1', '1', 'configManage/license/index', 'icon-shang', 'supervisor', 1700000000000, NULL, 0, 'menu.config.licenseManageRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2113, 'menu.security', 0, 14, 'security', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-suofang', 'supervisor', 1700000000000, NULL, 0, 'menu.securityRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 12, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemSetRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2115, 'menu.system.systemResource', 1, 13, 'monitor', 'monitor/monitor/index', '1', '1', 'M', '1', '1', 'monitor:monitor:info', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemResourceRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2116, 'menu.config.configNEForm', 4, 2, 'configParamForm', 'configManage/configParamForm/index', '1', '0', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNEFormRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2117, 'menu.config.configNETree', 4, 2, 'configParamTree', 'configManage/configParamTree/index', '1', '0', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2118, 'menu.config.configNETreeTable', 4, 2, 'configNETreeTable', 'configManage/configParamTreeTable/index', '1', '1', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeTableRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2119, 'menu.ueUser.n3iwf', 5, 8, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '0', '1', 'neUser:n3iwf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2120, 'menu.ueUser.pcf', 5, 9, 'pcf', 'neUser/pcf/index', '1', '0', 'M', '1', '1', 'neUser:pcf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -253,899 +173,19 @@ INSERT IGNORE INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 10, 'alarm', NUL INSERT IGNORE INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 20, 'topology', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-anzhuo', 'supervisor', 1704800000000, 'supervisor', 1704847055540, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 0, 'dashboard', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1705550000000, 'supervisor', 1705550000000, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2131, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2133, 'menu.dashboard.cdr', 2131, 3, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2134, 'menu.tools.terminal', 3, 3, 'terminal', 'tool/terminal/index', '1', '1', 'M', '1', '1', 'tool:terminal:index', 'icon-pcduan', 'supervisor', 1708481172778, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2133, 'menu.dashboard.cdr', 2140, 40, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); INSERT IGNORE INTO `sys_menu` VALUES (2135, 'menu.config.neHost', 4, 15, 'neHost', 'ne/neHost/index', '1', '1', 'M', '1', '1', 'ne:neHost:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2136, 'menu.config.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '1', 'ne:neHostCommand:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2137, 'menu.config.neInfo', 4, 14, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2131, 6, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2139, 'menu.ne.neQuickSetup', 4, 10, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2140, 'menu.config.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2141, 'menu.config.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2142, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2143, 'menu.dashboard.mocn', 2131, 9, 'mocn', 'dashboard/mocn/index', '1', '0', 'M', '1', '1', 'dashboard:mocn:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2144, 'menu.ne.neConfPara5G', 4, 11, 'neConfPara5G', 'ne/neConfPara5G/index', '1', '0', 'M', '1', '1', 'ne:neConfPara5G:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); - +INSERT IGNORE INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2087, 40, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', 'supervisor', 1711352709786, 'supervisor', 1712751135878, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2087, 50, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', 'supervisor', 1711352768797, 'supervisor', 1712751125648, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2142, 'menu.ne.neQuickSetup', 4, 10, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2143, 'menu.config.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2144, 'menu.config.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2145, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2146, 'menu.ne.neConfPara5G', 4, 8, 'neConfPara5G', 'ne/neConfPara5G/index', '1', '0', 'M', '1', '1', 'ne:neConfPara5G:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); + -- 指定记录条件更新 -UPDATE `omc_db`.`sys_menu` SET `is_cache` = '1' WHERE `menu_id` = 2118; -UPDATE `omc_db`.`sys_menu` SET `is_cache` = '1' WHERE `menu_id` = 2134; -UPDATE `omc_db`.`sys_menu` SET `path` = 'imsCDR', `component` = 'dashboard/imsCDR/index' WHERE `menu_id` = 2133; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2142; -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2143; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.system.cacheInfo', - `parent_id` = 1, - `menu_sort` = 2, - `path` = 'cache-info', - `component` = 'monitor/cache/info', - `is_frame` = '1', - `is_cache` = '1', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'monitor:cache:info', - `icon` = 'icon-gongnengjieshao', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.system.cacheInfoRemark' -WHERE - `menu_id` = 113; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.system.cache', - `parent_id` = 1, - `menu_sort` = 3, - `path` = 'cache', - `component` = 'monitor/cache/index', - `is_frame` = '1', - `is_cache` = '1', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'monitor:cache:list', - `icon` = 'icon-tubiaoku', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.system.cacheRemark' -WHERE - `menu_id` = 114; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.ueUser.authUDM', - `parent_id` = 5, - `menu_sort` = 1, - `path` = 'auth', - `component` = 'neUser/auth/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'neUser:auth:index', - `icon` = 'icon-xiangmuchengyuan', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.ueUser.authUDMRemark' -WHERE - `menu_id` = 2009; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.ueUser.subUDM', - `parent_id` = 5, - `menu_sort` = 2, - `path` = 'sub', - `component` = 'neUser/sub/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'neUser:sub:index', - `icon` = 'icon-xiangmuchengyuan', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.ueUser.subUDMRemark' -WHERE - `menu_id` = 2010; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.ueUser.onlineIMS', - `parent_id` = 5, - `menu_sort` = 4, - `path` = 'ims', - `component` = 'neUser/ims/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'neUser:ims:index', - `icon` = 'icon-xiangmuchengyuan', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.ueUser.onlineIMSRemark' -WHERE - `menu_id` = 2080; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.ueUser.onlineUE', - `parent_id` = 5, - `menu_sort` = 6, - `path` = 'ue', - `component` = 'neUser/ue/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'neUser:ue:index', - `icon` = 'icon-xiangmuchengyuan', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.ueUser.onlineUERemark' -WHERE - `menu_id` = 2081; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.ueUser.base5G', - `parent_id` = 5, - `menu_sort` = 7, - `path` = 'base5G', - `component` = 'neUser/base5G/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'neUser:base5G:index', - `icon` = 'icon-paixu', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = 'admin', - `update_time` = 1708508177149, - `remark` = 'menu.ueUser.base5GRemark' -WHERE - `menu_id` = 2082; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.perf.customTarget', - `parent_id` = 2099, - `menu_sort` = 6, - `path` = 'customTarget', - `component` = 'perfManage/customTarget/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '0', - `status` = '0', - `perms` = 'perfManage:customTarget:index', - `icon` = 'icon-fanhui1', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.perf.customTargetRemark' -WHERE - `menu_id` = 2105; - - - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.tools.help', - `parent_id` = 3, - `menu_sort` = 1, - `path` = 'help', - `component` = 'tool/help/index', - `is_frame` = '1', - `is_cache` = '1', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'tool:help:list', - `icon` = '#', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = 'supervisor', - `update_time` = 1708480983482, - `remark` = 'menu.tools.helpRemark' -WHERE - `menu_id` = 118; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.ueUser.authUDM', - `parent_id` = 5, - `menu_sort` = 1, - `path` = 'auth', - `component` = 'neUser/auth/index', - `is_frame` = '1', - `is_cache` = '1', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'neUser:auth:index', - `icon` = 'icon-xiangmuchengyuan', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.ueUser.authUDMRemark' -WHERE - `menu_id` = 2009; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.ueUser.subUDM', - `parent_id` = 5, - `menu_sort` = 2, - `path` = 'sub', - `component` = 'neUser/sub/index', - `is_frame` = '1', - `is_cache` = '1', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'neUser:sub:index', - `icon` = 'icon-xiangmuchengyuan', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.ueUser.subUDMRemark' -WHERE - `menu_id` = 2010; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.config.neManage', - `parent_id` = 4, - `menu_sort` = 1, - `path` = 'neManage', - `component` = 'configManage/neManage/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'configManage:neManage:index', - `icon` = 'icon-biaoqing', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.config.neManageRemark' -WHERE - `menu_id` = 2075; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.config.configNE', - `parent_id` = 4, - `menu_sort` = 2, - `path` = 'configParam', - `component` = 'configManage/configParam/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'configManage:configParam:index', - `icon` = 'icon-piliang', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.config.configNERemark' -WHERE - `menu_id` = 2076; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.config.backupManage', - `parent_id` = 4, - `menu_sort` = 3, - `path` = 'backupManage', - `component` = 'configManage/backupManage/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'configManage:backupManage:index', - `icon` = 'icon-soutubiao', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.config.backupManageRemark' -WHERE - `menu_id` = 2078; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.config.softwareManage', - `parent_id` = 4, - `menu_sort` = 4, - `path` = 'softwareManage', - `component` = 'configManage/softwareManage/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'configManage:softwareManage:index', - `icon` = 'icon-huidingbu', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.config.softwareManageRemark' -WHERE - `menu_id` = 2079; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.ueUser.base5G', - `parent_id` = 5, - `menu_sort` = 7, - `path` = 'base5G', - `component` = 'neUser/base5G/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'neUser:base5G:index', - `icon` = 'icon-paixu', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.ueUser.base5GRemark' -WHERE - `menu_id` = 2082; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.trace.task', - `parent_id` = 2083, - `menu_sort` = 1, - `path` = 'task', - `component` = 'traceManage/task/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '0', - `status` = '1', - `perms` = 'traceManage:task:index', - `icon` = 'icon-chexiao', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = 'admin', - `update_time` = 1712807894783, - `remark` = 'menu.trace.taskRemark' -WHERE - `menu_id` = 2084; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.trace.analysis', - `parent_id` = 2083, - `menu_sort` = 2, - `path` = 'analysis', - `component` = 'traceManage/analysis/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '0', - `status` = '1', - `perms` = 'traceManage:analysis:index', - `icon` = 'icon-gongnengjieshao', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = 'supervisor', - `update_time` = 1712751454668, - `remark` = 'menu.trace.analysisRemark' -WHERE - `menu_id` = 2085; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.log.alarm', - `parent_id` = 2089, - `menu_sort` = 3, - `path` = 'alarm-log', - `component` = 'logManage/alarm/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'logManage:alarm:index', - `icon` = 'icon-fuzhidaima', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.log.alarmRemark' -WHERE - `menu_id` = 2092; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.perf.task', - `parent_id` = 2099, - `menu_sort` = 1, - `path` = 'taskManage', - `component` = 'perfManage/taskManage/index', - `is_frame` = '1', - `is_cache` = '1', - `menu_type` = 'M', - `visible` = '0', - `status` = '1', - `perms` = 'perfManage:taskManage:index', - `icon` = 'icon-wofaqi', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = 'admin', - `update_time` = 1712807912947, - `remark` = 'menu.perf.taskRemark' -WHERE - `menu_id` = 2100; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.perf.data', - `parent_id` = 2099, - `menu_sort` = 2, - `path` = 'perfData', - `component` = 'perfManage/perfData/index', - `is_frame` = '1', - `is_cache` = '1', - `menu_type` = 'M', - `visible` = '0', - `status` = '1', - `perms` = 'perfManage:perfData:index', - `icon` = 'icon-soutubiao', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = 'admin', - `update_time` = 1712807920148, - `remark` = 'menu.perf.dataRemark' -WHERE - `menu_id` = 2101; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.perf.threshold', - `parent_id` = 2099, - `menu_sort` = 4, - `path` = 'perfThreshold', - `component` = 'perfManage/perfThreshold/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '0', - `status` = '1', - `perms` = 'perfManage:perfThreshold:index', - `icon` = 'icon-zhuanrang', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = 'admin', - `update_time` = 1712807935215, - `remark` = 'menu.perf.thresholdRemark' -WHERE - `menu_id` = 2103; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.perf.customTarget', - `parent_id` = 2099, - `menu_sort` = 6, - `path` = 'customTarget', - `component` = 'perfManage/customTarget/index', - `is_frame` = '1', - `is_cache` = '1', - `menu_type` = 'M', - `visible` = '0', - `status` = '0', - `perms` = 'perfManage:customTarget:index', - `icon` = 'icon-fanhui1', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = 'admin', - `update_time` = 1712807948673, - `remark` = 'menu.perf.customTargetRemark' -WHERE - `menu_id` = 2105; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.mml.set', - `parent_id` = 2107, - `menu_sort` = 4, - `path` = 'mmlSet', - `component` = 'mmlManage/mmlSet/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'mmlManage:mmlSet:index', - `icon` = 'icon-wofaqi', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'menu.mml.setRemark' -WHERE - `menu_id` = 2110; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.system.setting.i18n', - `parent_id` = 2114, - `menu_sort` = 1, - `path` = NULL, - `component` = NULL, - `is_frame` = '1', - `is_cache` = '1', - `menu_type` = 'B', - `visible` = '1', - `status` = '1', - `perms` = 'system:setting:i18n', - `icon` = '#', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = 'supervisor', - `update_time` = 1700000000000, - `remark` = 'menu.system.setting.i18nRemark' -WHERE - `menu_id` = 2122; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.dashboard.cdr', - `parent_id` = 2140, - `menu_sort` = 40, - `path` = 'imsCDR', - `component` = 'dashboard/imsCDR/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'dashboard:cdr:index', - `icon` = 'icon-paixu', - `create_by` = 'supervisor', - `create_time` = 1705550000000, - `update_by` = 'supervisor', - `update_time` = 1712751038982, - `remark` = '' -WHERE - `menu_id` = 2133; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.config.neHost', - `parent_id` = 4, - `menu_sort` = 15, - `path` = 'neHost', - `component` = 'ne/neHost/index', - `is_frame` = '1', - `is_cache` = '1', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'ne:neHost:list', - `icon` = 'icon-fuzhidaima', - `create_by` = 'supervisor', - `create_time` = 1708583596871, - `update_by` = '', - `update_time` = 0, - `remark` = '' -WHERE - `menu_id` = 2135; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.dashboard.amfUE', - `parent_id` = 2141, - `menu_sort` = 1, - `path` = 'amfUE', - `component` = 'dashboard/amfUE/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '1', - `status` = '1', - `perms` = 'dashboard:amfUE:index', - `icon` = 'icon-paixu', - `create_by` = 'supervisor', - `create_time` = 1705550000000, - `update_by` = 'supervisor', - `update_time` = 1711354049893, - `remark` = '' -WHERE - `menu_id` = 2138; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.logs.log', - `parent_id` = 2089, - `menu_sort` = 0, - `path` = 'log', - `component` = '', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'D', - `visible` = '0', - `status` = '1', - `perms` = '', - `icon` = 'icon-wenjian', - `create_by` = 'supervisor', - `create_time` = 1711352535855, - `update_by` = 'supervisor', - `update_time` = 1712751078161, - `remark` = '' -WHERE - `menu_id` = 2139; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.monitor.cdr', - `parent_id` = 2087, - `menu_sort` = 40, - `path` = 'cdr', - `component` = '', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'D', - `visible` = '1', - `status` = '1', - `perms` = '', - `icon` = 'icon-tubiaoku', - `create_by` = 'supervisor', - `create_time` = 1711352709786, - `update_by` = 'supervisor', - `update_time` = 1712751135878, - `remark` = '' -WHERE - `menu_id` = 2140; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.monitor.event', - `parent_id` = 2087, - `menu_sort` = 50, - `path` = 'event', - `component` = '', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'D', - `visible` = '1', - `status` = '1', - `perms` = '', - `icon` = 'icon-gengduo', - `create_by` = 'supervisor', - `create_time` = 1711352768797, - `update_by` = 'supervisor', - `update_time` = 1712751125648, - `remark` = '' -WHERE - `menu_id` = 2141; - --- begin: remove some excess old menus at 2024/05/10, r2.2405.1 -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 3; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 6; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 7; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 8; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 9; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 10; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 11; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 12; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 13; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 14; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 15; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 118; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2011; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2012; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2013; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2014; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2015; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2016; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2017; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2018; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2019; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2020; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2021; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2022; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2023; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2024; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2025; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2026; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2027; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2028; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2029; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2030; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2031; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2032; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2033; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2034; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2035; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2036; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2037; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2038; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2039; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2040; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2041; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2042; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2043; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2044; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2045; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2046; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2047; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2048; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2049; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2050; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2051; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2052; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2053; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2054; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2055; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2056; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2057; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2058; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2059; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2060; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2065; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2066; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2067; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2068; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2069; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2070; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2071; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2072; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2073; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2074; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2076; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2077; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2090; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2093; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2096; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2116; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2117; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2134; - -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2139; - -UPDATE `omc_db`.`sys_menu` -SET - `menu_name` = 'menu.log.set', - `parent_id` = 2089, - `menu_sort` = 15, - `path` = 'logSet', - `component` = 'logManage/logSet/index', - `is_frame` = '1', - `is_cache` = '0', - `menu_type` = 'M', - `visible` = '0', - `status` = '0', - `perms` = 'logManage:logSet:index', - `icon` = 'icon-you', - `create_by` = 'supervisor', - `create_time` = 1700000000000, - `update_by` = 'supervisor', - `update_time` = 1715332370830, - `remark` = 'menu.log.setRemark' -WHERE - `menu_id` = 2095; - --- end: remove - SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgvue3/upg_sys_menu.sql b/database/upgvue3/upg_sys_menu.sql index 2342253d..a629987a 100644 --- a/database/upgvue3/upg_sys_menu.sql +++ b/database/upgvue3/upg_sys_menu.sql @@ -255,15 +255,13 @@ INSERT IGNORE INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 0, 'dashboar INSERT IGNORE INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2131, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2133, 'menu.dashboard.cdr', 2131, 3, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2134, 'menu.tools.terminal', 3, 3, 'terminal', 'tool/terminal/index', '1', '1', 'M', '1', '1', 'tool:terminal:index', 'icon-pcduan', 'supervisor', 1708481172778, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2135, 'menu.config.neHost', 4, 15, 'neHost', 'ne/neHost/index', '1', '0', 'M', '1', '1', 'ne:neHost:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2135, 'menu.config.neHost', 4, 15, 'neHost', 'ne/neHost/index', '1', '1', 'M', '1', '1', 'ne:neHost:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2136, 'menu.config.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '1', 'ne:neHostCommand:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2137, 'menu.config.neInfo', 4, 14, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2131, 6, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2139, 'menu.tools.neQuickSetup', 3, 6, 'neQuickSetup', 'tool/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neHost:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2140, 'menu.config.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2141, 'menu.config.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2142, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2143, 'menu.dashboard.mocn', 2131, 9, 'mocn', 'dashboard/mocn/index', '1', '0', 'M', '1', '1', 'dashboard:mocn:index', 'icon-paixu', 'supervisor', 1705550000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2139, 'menu.logs.log', 2089, 0, 'log', '', '1', '0', 'D', '0', '1', '', 'icon-wenjian', 'supervisor', 1711352535855, 'supervisor', 1712751078161, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2087, 40, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', 'supervisor', 1711352709786, 'supervisor', 1712751135878, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2087, 50, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', 'supervisor', 1711352768797, 'supervisor', 1712751125648, ''); -- 指定记录条件更新 @@ -271,6 +269,9 @@ UPDATE `omc_db`.`sys_menu` SET `is_cache` = '1' WHERE `menu_id` = 2118; UPDATE `omc_db`.`sys_menu` SET `is_cache` = '1' WHERE `menu_id` = 2134; UPDATE `omc_db`.`sys_menu` SET `path` = 'imsCDR', `component` = 'dashboard/imsCDR/index' WHERE `menu_id` = 2133; +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2142; +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2143; + UPDATE `omc_db`.`sys_menu` SET `menu_name` = 'menu.system.cacheInfo', @@ -447,9 +448,7 @@ SET WHERE `menu_id` = 2105; -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2142; -DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2143; UPDATE `omc_db`.`sys_menu` SET @@ -957,4 +956,193 @@ SET WHERE `menu_id` = 2141; +-- begin: remove some excess old menus at 2024/05/10, r2.2405.1 +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 3; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 6; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 7; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 8; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 9; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 10; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 11; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 12; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 13; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 14; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 15; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 118; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2011; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2012; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2013; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2014; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2015; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2016; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2017; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2018; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2019; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2020; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2021; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2022; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2023; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2024; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2025; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2026; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2027; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2028; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2029; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2030; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2031; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2032; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2033; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2034; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2035; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2036; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2037; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2038; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2039; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2040; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2041; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2042; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2043; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2044; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2045; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2046; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2047; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2048; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2049; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2050; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2051; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2052; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2053; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2054; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2055; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2056; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2057; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2058; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2059; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2060; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2065; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2066; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2067; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2068; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2069; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2070; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2071; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2072; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2073; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2074; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2076; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2077; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2090; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2093; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2096; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2116; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2117; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2134; + +DELETE FROM `omc_db`.`sys_menu` WHERE `menu_id` = 2139; + +UPDATE `omc_db`.`sys_menu` +SET + `menu_name` = 'menu.log.set', + `parent_id` = 2089, + `menu_sort` = 15, + `path` = 'logSet', + `component` = 'logManage/logSet/index', + `is_frame` = '1', + `is_cache` = '0', + `menu_type` = 'M', + `visible` = '0', + `status` = '0', + `perms` = 'logManage:logSet:index', + `icon` = 'icon-you', + `create_by` = 'supervisor', + `create_time` = 1700000000000, + `update_by` = 'supervisor', + `update_time` = 1715332370830, + `remark` = 'menu.log.setRemark' +WHERE + `menu_id` = 2095; + +-- end: remove + SET FOREIGN_KEY_CHECKS = 1; From 9522e6f8795d524a1d139eb400f38deb54edfc64 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 11 May 2024 19:00:52 +0800 Subject: [PATCH 082/130] =?UTF-8?q?del:=20=E5=88=A0=E9=99=A4vs=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/extensions.json | 5 ----- .vscode/settings.json | 13 ------------- 2 files changed, 18 deletions(-) delete mode 100644 .vscode/extensions.json delete mode 100644 .vscode/settings.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 52c6bebc..00000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "recommendations": [ - "codium.codium" - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index ee29ecad..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "go.toolsEnvVars": { - "GOARCH": "amd64", - "GOOS": "windows" - }, - "go.testEnvVars": { - "GOARCH": "wasm", - "GOOS": "js" - }, - "commentTranslate.hover.enabled": true, - "CodeGPT.apiKey": "OpenAI", - "CodeGPT.Autocomplete.enabled": true -} \ No newline at end of file From cf11242699cf243f6d8b925f942a5753ad69683c Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 13 May 2024 09:40:50 +0800 Subject: [PATCH 083/130] =?UTF-8?q?fix:=20=E6=96=87=E4=BB=B6=E8=B7=AF?= =?UTF-8?q?=E5=BE=84ToSlash=E5=8E=BB=E9=99=A4=E5=A4=9A=E6=96=9C=E6=9D=A0?= =?UTF-8?q?=E8=BD=AC=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/file/file.go | 4 ++-- src/modules/common/controller/file.go | 2 +- src/modules/network_element/service/ne_info.impl.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/features/file/file.go b/features/file/file.go index 7abfe87d..7162b3f8 100644 --- a/features/file/file.go +++ b/features/file/file.go @@ -72,13 +72,13 @@ func UploadFile(w http.ResponseWriter, r *http.Request) { fileName = fileNamePath } else { path = config.GetYamlConfig().OMC.FrontUpload - fileName, err := services.HandleUploadFile(r, path, fileName) + fileNamePath, err := services.HandleUploadFile(r, path, fileName) if err != nil { log.Error("Faile to HandleUploadFile:", err) services.ResponseInternalServerError500ProcessError(w, err) return } - fileName = fileName + fileName = fileNamePath } log.Debugf("upload file=%s to path=%s", fileName, path) diff --git a/src/modules/common/controller/file.go b/src/modules/common/controller/file.go index c251c2ed..6dc67b7d 100644 --- a/src/modules/common/controller/file.go +++ b/src/modules/common/controller/file.go @@ -220,7 +220,7 @@ func (s *CommontController) TransferStaticFile(c *gin.Context) { delPrefix := strings.Replace(body.StaticPath, static["prefix"].(string), "", 1) staticPath := strings.Replace(delPrefix, "{language}", lang, 1) - newFile := fmt.Sprintf("%s%s", dir, staticPath) + newFile := filepath.ToSlash(fmt.Sprintf("%s%s", dir, staticPath)) err = file.CopyUploadFile(body.UploadPath, newFile) if err != nil { diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 9006d95a..92adcdda 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -461,7 +461,7 @@ func (r *NeInfoImpl) neConfOAMWirte(neType, neId string, content any, sync bool) // 网元端配置路径 neFilePath := fmt.Sprintf("/usr/local/etc/%s/%s", neTypeLower, fileName) - neFileDir := filepath.Dir(neFilePath) + neFileDir := filepath.ToSlash(filepath.Dir(neFilePath)) // 修改网元文件权限 sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo touch %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath, neFilePath)) // 复制到网元进行覆盖 From 475a4ad136cb92ea3f3f81a0b2bb2a8b46cd1279 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 13 May 2024 11:38:42 +0800 Subject: [PATCH 084/130] =?UTF-8?q?fix:=20sql=E7=B3=BB=E7=BB=9F=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E5=88=9D=E5=A7=8B=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dept.sql | 8 +-- database/upgrade/upg_sys_dept.sql | 107 +----------------------------- 2 files changed, 5 insertions(+), 110 deletions(-) diff --git a/database/install/sys_dept.sql b/database/install/sys_dept.sql index 9be7b0fa..ba68541a 100644 --- a/database/install/sys_dept.sql +++ b/database/install/sys_dept.sql @@ -45,12 +45,8 @@ CREATE TABLE `sys_dept` ( -- Dumping data for table `sys_dept` -- -LOCK TABLES `sys_dept` WRITE; -/*!40000 ALTER TABLE `sys_dept` DISABLE KEYS */; -INSERT INTO `sys_dept` VALUES (1,0,'0','dept.root',0,'supervisor',NULL,NULL,'1','0','supervisor',1699348237468,NULL,0),(101,100,'0,100','dept.root.item1',1,'supervisor',NULL,NULL,'1','0','supervisor',1699348237468,NULL,0); -/*!40000 ALTER TABLE `sys_dept` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +INSERT INTO `sys_dept` VALUES (1, 0, '0', 'dept.root', 0, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, NULL, 0); +INSERT INTO `sys_dept` VALUES (2, 1, '0,1', 'dept.root.item1', 1, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, 'supervisor', 1715570736053); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; diff --git a/database/upgrade/upg_sys_dept.sql b/database/upgrade/upg_sys_dept.sql index 2e2a0840..d7878af8 100644 --- a/database/upgrade/upg_sys_dept.sql +++ b/database/upgrade/upg_sys_dept.sql @@ -1,5 +1,6 @@ SET FOREIGN_KEY_CHECKS=0; +DROP TABLE IF EXISTS `sys_menu`; CREATE TABLE IF NOT EXISTS `sys_dept` ( `dept_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id', `parent_id` bigint(20) DEFAULT 0 COMMENT '父部门id 默认0', @@ -18,109 +19,7 @@ CREATE TABLE IF NOT EXISTS `sys_dept` ( PRIMARY KEY (`dept_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门表'; --- -- add default dept - -INSERT - IGNORE INTO `omc_db`.`sys_dept` ( - `dept_id`, - `parent_id`, - `ancestors`, - `dept_name`, - `order_num`, - `leader`, - `phone`, - `email`, - `status`, - `del_flag`, - `create_by`, - `create_time`, - `update_by`, - `update_time` - ) -VALUES ( - 100, - 0, - '0', - '系统维护部', - 0, - 'admin', - '', - '', - '1', - '0', - 'admin', - 1697091866188, - '', - NULL - ); - -INSERT - IGNORE INTO `omc_db`.`sys_dept` ( - `dept_id`, - `parent_id`, - `ancestors`, - `dept_name`, - `order_num`, - `leader`, - `phone`, - `email`, - `status`, - `del_flag`, - `create_by`, - `create_time`, - `update_by`, - `update_time` - ) -VALUES ( - 101, - 100, - '0,100', - '运维一部', - 1, - 'admin', - '', - '', - '1', - '0', - 'admin', - 1697091866192, - '', - NULL - ); - --- for cn/en locale -UPDATE `omc_db`.`sys_dept` -SET - `parent_id` = 0, - `ancestors` = '0', - `dept_name` = 'dept.root', - `order_num` = 0, - `leader` = 'supervisor', - `phone` = NULL, - `email` = NULL, - `status` = '1', - `del_flag` = '0', - `create_by` = 'supervisor', - `create_time` = 1699348237468, - `update_by` = NULL, - `update_time` = 0 -WHERE `dept_id` = 100; - -UPDATE `omc_db`.`sys_dept` -SET - `parent_id` = 100, - `ancestors` = '0,100', - `dept_name` = 'dept.root.item1', - `order_num` = 1, - `leader` = 'supervisor', - `phone` = NULL, - `email` = NULL, - `status` = '1', - `del_flag` = '0', - `create_by` = 'supervisor', - `create_time` = 1699348237468, - `update_by` = NULL, - `update_time` = 0 -WHERE `dept_id` = 101; +INSERT IGNORE INTO `sys_dept` VALUES (1, 0, '0', 'dept.root', 0, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, NULL, 0); +INSERT IGNORE INTO `sys_dept` VALUES (2, 1, '0,1', 'dept.root.item1', 1, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, 'supervisor', 1715570736053); SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file From 7f5acaf56af0b1bcb7138498c507eab4f509ef79 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 13 May 2024 11:39:32 +0800 Subject: [PATCH 085/130] =?UTF-8?q?fix:=20sql=E5=88=9D=E5=A7=8B=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E5=A4=9A=E8=AF=AD=E8=A8=80=E8=8F=9C=E5=8D=95=E7=BD=91?= =?UTF-8?q?=E5=85=83=E5=BF=AB=E9=80=9F=E5=AE=89=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 2 +- database/install/sys_dict_data2_i18n_en.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index c455755e..076b2635 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -639,7 +639,7 @@ INSERT INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', ' INSERT INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '同步配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2115, 2115, 'dictType.ne_info_status', '网元信息状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2116, 2116, 'menu.tools.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2116, 2116, 'menu.ne.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2117, 2117, 'log.operate.title.neConfig', '网元参数配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2118, 2118, 'menu.config.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2119, 2119, 'log.operate.title.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index afba5cef..b4d7140c 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -639,7 +639,7 @@ INSERT INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Of INSERT INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', 'Sync Config', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4115, 4115, 'dictType.ne_info_status', 'NE Info State', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4116, 4116, 'menu.tools.neQuickSetup', 'NE Quick Setup', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4116, 4116, 'menu.ne.neQuickSetup', 'NE Quick Setup', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4117, 4117, 'log.operate.title.neConfig', 'NE Parameter Configuration', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4118, 4118, 'menu.config.neLicense', 'NE License', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4119, 4119, 'log.operate.title.neLicense', 'NE License', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); From a1a080b0cb358ce8d8c4756e8a3b65fa5596faa8 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 13 May 2024 11:40:20 +0800 Subject: [PATCH 086/130] =?UTF-8?q?fix:=20sq=E5=8D=87=E7=BA=A7=E8=A1=A8?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E4=BD=93=E6=9B=B4=E6=96=B0=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9A=84=E5=BC=82=E5=B8=B8=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/upgrade/upg_ne_info.sql | 2 +- database/upgrade/upg_ne_license.sql | 42 ++++++++++++++-------------- database/upgrade/upg_ne_software.sql | 22 +++++++-------- database/upgrade/upg_ne_version.sql | 27 +++++++++--------- 4 files changed, 46 insertions(+), 47 deletions(-) diff --git a/database/upgrade/upg_ne_info.sql b/database/upgrade/upg_ne_info.sql index b8be038b..8bf0da87 100644 --- a/database/upgrade/upg_ne_info.sql +++ b/database/upgrade/upg_ne_info.sql @@ -26,7 +26,7 @@ CREATE TABLE IF NOT EXISTS `ne_info` ( -- 20240511前旧表更新 ALTER TABLE `ne_info` COMMENT = '网元信息表 对应一个网元版本、网元授权、网元主机'; -ALTER TABLE `ne_info` ADD COLUMN `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `update_time`; +ALTER TABLE `ne_info` ADD COLUMN IF NOT EXISTS `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `update_time`; ALTER TABLE `ne_info` MODIFY COLUMN `pv_flag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'PNF' COMMENT '\'PNF\',\'VNF\'' AFTER `port`; ALTER TABLE `ne_info` MODIFY COLUMN `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '省份地域' AFTER `pv_flag`; ALTER TABLE `ne_info` MODIFY COLUMN `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'MAC地址' AFTER `dn`; diff --git a/database/upgrade/upg_ne_license.sql b/database/upgrade/upg_ne_license.sql index a01f81cb..6e3aad74 100644 --- a/database/upgrade/upg_ne_license.sql +++ b/database/upgrade/upg_ne_license.sql @@ -23,30 +23,30 @@ CREATE TABLE IF NOT EXISTS `ne_license` ( -- 20240511前旧表更新 ALTER TABLE `ne_license` COMMENT = '网元授权激活信息'; -ALTER TABLE `ne_license` ADD COLUMN `activation_request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '激活申请代码' AFTER `ne_id`; -ALTER TABLE `ne_license` ADD COLUMN `license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '激活授权文件' AFTER `activation_request_code`; -ALTER TABLE `ne_license` ADD COLUMN `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '序列号' AFTER `license_path`; -ALTER TABLE `ne_license` ADD COLUMN `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '许可证到期日期' AFTER `serial_num`; -ALTER TABLE `ne_license` ADD COLUMN `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注' AFTER `status`; -ALTER TABLE `ne_license` ADD COLUMN `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `remark`; -ALTER TABLE `ne_license` ADD COLUMN `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; -ALTER TABLE `ne_license` ADD COLUMN `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; -ALTER TABLE `ne_license` ADD COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `activation_request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '激活申请代码' AFTER `ne_id`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '激活授权文件' AFTER `activation_request_code`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '序列号' AFTER `license_path`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '许可证到期日期' AFTER `serial_num`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注' AFTER `status`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `remark`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; ALTER TABLE `ne_license` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型' AFTER `id`; ALTER TABLE `ne_license` MODIFY COLUMN `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID' AFTER `ne_type`; ALTER TABLE `ne_license` MODIFY COLUMN `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态 0无效 1有效' AFTER `expiry_date`; -ALTER TABLE `ne_license` DROP COLUMN `serial_no`; -ALTER TABLE `ne_license` DROP COLUMN `capcity`; -ALTER TABLE `ne_license` DROP COLUMN `used`; -ALTER TABLE `ne_license` DROP COLUMN `feature_enabled`; -ALTER TABLE `ne_license` DROP COLUMN `expiration_date`; -ALTER TABLE `ne_license` DROP COLUMN `path`; -ALTER TABLE `ne_license` DROP COLUMN `file_name`; -ALTER TABLE `ne_license` DROP COLUMN `comment`; -ALTER TABLE `ne_license` DROP COLUMN `created_at`; -ALTER TABLE `ne_license` DROP COLUMN `updated_at`; -ALTER TABLE `ne_license` DROP COLUMN `deleted_at`; -ALTER TABLE `ne_license` ADD UNIQUE INDEX `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和网元ID'; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `serial_no`; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `capcity`; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `used`; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `feature_enabled`; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `expiration_date`; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `path`; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `file_name`; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `comment`; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `created_at`; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `updated_at`; +ALTER TABLE `ne_license` DROP COLUMN IF EXISTS `deleted_at`; +ALTER TABLE `ne_license` ADD UNIQUE INDEX IF NOT EXISTS `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和网元ID'; SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_ne_software.sql b/database/upgrade/upg_ne_software.sql index 0559735d..fed4d7b7 100644 --- a/database/upgrade/upg_ne_software.sql +++ b/database/upgrade/upg_ne_software.sql @@ -20,20 +20,20 @@ CREATE TABLE IF NOT EXISTS `ne_software` ( -- 20240511前旧表更新 ALTER TABLE `ne_software` COMMENT = '网元软件包'; -ALTER TABLE `ne_software` ADD COLUMN `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包名称' AFTER `ne_type`; -ALTER TABLE `ne_software` ADD COLUMN `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包说明' AFTER `version`; -ALTER TABLE `ne_software` ADD COLUMN `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `description`; -ALTER TABLE `ne_software` ADD COLUMN `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; -ALTER TABLE `ne_software` ADD COLUMN `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; +ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包名称' AFTER `ne_type`; +ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包说明' AFTER `version`; +ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `description`; +ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; +ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; ALTER TABLE `ne_software` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型' AFTER `id`; ALTER TABLE `ne_software` MODIFY COLUMN `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包路径' AFTER `name`; ALTER TABLE `ne_software` MODIFY COLUMN `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本' AFTER `path`; ALTER TABLE `ne_software` MODIFY COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; -ALTER TABLE `ne_software` DROP COLUMN `file_name`; -ALTER TABLE `ne_software` DROP COLUMN `md5_sum`; -ALTER TABLE `ne_software` DROP COLUMN `status`; -ALTER TABLE `ne_software` DROP COLUMN `comment`; -ALTER TABLE `ne_software` DROP COLUMN `patch_time`; -ALTER TABLE `ne_software` ADD UNIQUE INDEX `uk_type_name_version`(`ne_type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一'; +ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `file_name`; +ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `md5_sum`; +ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `status`; +ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `comment`; +ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `patch_time`; +ALTER TABLE `ne_software` ADD UNIQUE INDEX IF NOT EXISTS `uk_type_name_version`(`ne_type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一'; SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_ne_version.sql b/database/upgrade/upg_ne_version.sql index 2b63a459..29eb4b9e 100644 --- a/database/upgrade/upg_ne_version.sql +++ b/database/upgrade/upg_ne_version.sql @@ -27,15 +27,15 @@ CREATE TABLE IF NOT EXISTS `ne_version` ( -- 20240511前旧表更新 ALTER TABLE `ne_version` COMMENT = '网元版本信息'; -ALTER TABLE `ne_version` ADD COLUMN `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前包名' AFTER `ne_id`; -ALTER TABLE `ne_version` ADD COLUMN `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前软件包' AFTER `version`; -ALTER TABLE `ne_version` ADD COLUMN `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上一版本包名' AFTER `path`; -ALTER TABLE `ne_version` ADD COLUMN `pre_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本软件包' AFTER `pre_version`; -ALTER TABLE `ne_version` ADD COLUMN `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '新版本报名' AFTER `pre_path`; -ALTER TABLE `ne_version` ADD COLUMN `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版软件包' AFTER `new_version`; -ALTER TABLE `ne_version` ADD COLUMN `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `status`; -ALTER TABLE `ne_version` ADD COLUMN `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; -ALTER TABLE `ne_version` ADD COLUMN `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前包名' AFTER `ne_id`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前软件包' AFTER `version`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上一版本包名' AFTER `path`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `pre_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本软件包' AFTER `pre_version`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '新版本报名' AFTER `pre_path`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版软件包' AFTER `new_version`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `status`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; ALTER TABLE `ne_version` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型' AFTER `id`; ALTER TABLE `ne_version` MODIFY COLUMN `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID' AFTER `ne_type`; ALTER TABLE `ne_version` MODIFY COLUMN `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前版本' AFTER `name`; @@ -43,10 +43,9 @@ ALTER TABLE `ne_version` MODIFY COLUMN `pre_version` varchar(64) CHARACTER SET u ALTER TABLE `ne_version` MODIFY COLUMN `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版本' AFTER `new_name`; ALTER TABLE `ne_version` MODIFY COLUMN `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前状态 1当前版本 2上一版本 3有新版本' AFTER `new_path`; ALTER TABLE `ne_version` MODIFY COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; -ALTER TABLE `ne_version` DROP COLUMN `file_path`; -ALTER TABLE `ne_version` DROP COLUMN `pre_file`; -ALTER TABLE `ne_version` DROP COLUMN `new_file`; -ALTER TABLE `ne_version` ADD UNIQUE INDEX `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和ID'; - +ALTER TABLE `ne_version` DROP COLUMN IF EXISTS `file_path`; +ALTER TABLE `ne_version` DROP COLUMN IF EXISTS `pre_file`; +ALTER TABLE `ne_version` DROP COLUMN IF EXISTS `new_file`; +ALTER TABLE `ne_version` ADD UNIQUE INDEX IF NOT EXISTS `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和ID'; SET FOREIGN_KEY_CHECKS=1; From 3f489c7bfcf6534e7a256e948015a57bd30a77aa Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 14 May 2024 15:04:02 +0800 Subject: [PATCH 087/130] =?UTF-8?q?fix:=20=E5=BC=95=E5=AF=BC=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=87=8D=E7=BD=AE=E6=95=B0=E6=8D=AE=E5=BA=93=E9=87=8D?= =?UTF-8?q?=E5=90=AF=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/machine/launch.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/framework/utils/machine/launch.go b/src/framework/utils/machine/launch.go index 28a420df..ab680b41 100644 --- a/src/framework/utils/machine/launch.go +++ b/src/framework/utils/machine/launch.go @@ -159,8 +159,12 @@ func Reset() error { if runtime.GOOS == "windows" { // return fmt.Errorf("not support window") } else { - cmdStr := "sudo /usr/local/omc/bin/omcsvc.sh stop && sudo /usr/local/omc/bin/setomc.sh -m install" - if _, err := cmd.Execf("nohup sh -c \"sleep 3s && %s\" > /dev/null 2>&1 &", cmdStr); err != nil { + // 重置数据库 + if _, err := cmd.Execf("sudo /usr/local/omc/bin/setomc.sh -m install"); err != nil { + return err + } + // 重启服务 + if _, err := cmd.Execf("nohup sh -c \"sleep 1s && %s\" > /dev/null 2>&1 &", "sudo systemctl restart restagent"); err != nil { return err } } From 7e3ab83f18dd59eaddb3aafc5af7697e665c092a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 14 May 2024 17:25:44 +0800 Subject: [PATCH 088/130] =?UTF-8?q?fix:=20=E8=BF=9C=E7=A8=8B=E7=BD=91?= =?UTF-8?q?=E5=85=83=E6=96=87=E4=BB=B6=E7=9B=AE=E5=BD=95=E6=9D=83=E9=99=90?= =?UTF-8?q?775?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_info.impl.go | 4 ++-- src/modules/network_element/service/ne_license.impl.go | 2 +- src/modules/network_element/service/ne_version.impl.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 92adcdda..0c91200f 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -463,7 +463,7 @@ func (r *NeInfoImpl) neConfOAMWirte(neType, neId string, content any, sync bool) neFilePath := fmt.Sprintf("/usr/local/etc/%s/%s", neTypeLower, fileName) neFileDir := filepath.ToSlash(filepath.Dir(neFilePath)) // 修改网元文件权限 - sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo touch %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath, neFilePath)) + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod 775 %s && sudo touch %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath, neFilePath)) // 复制到网元进行覆盖 if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { return fmt.Errorf("please check if scp remote copy is allowed") @@ -627,7 +627,7 @@ func (r *NeInfoImpl) NeConfPara5GWirte(content map[string]any, syncNE []string) neFilePath := "/usr/local/etc/conf/para5G.yaml" neFileDir := filepath.ToSlash(filepath.Dir(neFilePath)) // 修改网元文件权限 - sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo touch %s && sudo chmod o+w %s", neFileDir, neFileDir, neFilePath, neFilePath)) + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod 775 %s && sudo touch %s && sudo chmod o+rw %s", neFileDir, neFileDir, neFilePath, neFilePath)) // 复制到网元进行覆盖 if err = sftpClient.CopyFileLocalToRemote(omcFilePath, neFilePath); err != nil { errMsg = append(errMsg, fmt.Sprintf("%s : please check if scp remote copy is allowed", ti)) diff --git a/src/modules/network_element/service/ne_license.impl.go b/src/modules/network_element/service/ne_license.impl.go index 7425d103..9fd455ad 100644 --- a/src/modules/network_element/service/ne_license.impl.go +++ b/src/modules/network_element/service/ne_license.impl.go @@ -166,7 +166,7 @@ func (r *NeLicenseImpl) UploadLicense(neLicense model.NeLicense) error { neLicensePath := fmt.Sprintf("/usr/local/etc/%s/license/system.ini", neTypeLower) neLicenseDir := filepath.ToSlash(filepath.Dir(neLicensePath)) // 修改网元文件权限 - sshClient.RunCMD(fmt.Sprintf("sudo chmod o+w %s && sudo chmod o+w %s", neLicenseDir, neLicensePath)) + sshClient.RunCMD(fmt.Sprintf("sudo chmod 775 %s && sudo chmod o+w %s", neLicenseDir, neLicensePath)) // 尝试备份授权文件 neLicensePathBack := fmt.Sprintf("%s/system_%s.ini", neLicensePath, time.Now().Format("20060102_150405")) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index dad93a81..a9ea2ea7 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -137,7 +137,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp return "", fmt.Errorf("error read para5G file info") } if err := NewNeInfoImpl.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neInfo.NeType, neInfo.NeId)}); err != nil { - return "", fmt.Errorf("error wirte OAM file info") + return "", fmt.Errorf("error wirte para5G file info") } // ========= 网元公共配置文件 end =========== } From 396f2c1c06ec5463577c2bfec1791f557ea48f3f Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 14 May 2024 17:26:12 +0800 Subject: [PATCH 089/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=B9?= =?UTF-8?q?=E5=AE=9A=E6=8E=92=E5=BA=8F=E8=A1=A5=E5=85=85NEF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/repository/ne_info.impl.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/modules/network_element/repository/ne_info.impl.go b/src/modules/network_element/repository/ne_info.impl.go index 0d7c0e23..aced0060 100644 --- a/src/modules/network_element/repository/ne_info.impl.go +++ b/src/modules/network_element/repository/ne_info.impl.go @@ -25,6 +25,8 @@ var neListSort = []string{ "NSSF", "NRF", "UPF", + "LMF", + "NEF", "MME", "N3IWF", "MOCNGW", From 4a54b8adb8da0a86b35e3a7587bc4e6d27c1dbaa Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 14 May 2024 17:27:14 +0800 Subject: [PATCH 090/130] =?UTF-8?q?style:=20SQL=E5=AE=89=E8=A3=85=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 8 +- database/install/sys_dict_data2_i18n_en.sql | 8 +- database/install/sys_post.sql | 5 +- database/install/sys_role_menu.sql | 242 +++++++++++++++++++- database/install/sys_user.sql | 5 +- database/upgrade/upg_sys_config.sql | 10 +- 6 files changed, 262 insertions(+), 16 deletions(-) diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index 076b2635..0c884a65 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -634,10 +634,10 @@ INSERT INTO `sys_dict_data` VALUES (2107, 2107, 'neInfo.errKeyExists', '网元 INSERT INTO `sys_dict_data` VALUES (2108, 2108, 'log.operate.title.imsCDR', 'IMS-CDR会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2109, 2109, 'menu.dashboard.amfUE', '用户事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2110, 2110, 'log.operate.title.amfUE', 'AMF-UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '同步配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '等待同步', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '-', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2115, 2115, 'dictType.ne_info_status', '网元信息状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2116, 2116, 'menu.ne.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2117, 2117, 'log.operate.title.neConfig', '网元参数配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index b4d7140c..31820cdb 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -634,10 +634,10 @@ INSERT INTO `sys_dict_data` VALUES (4107, 4107, 'neInfo.errKeyExists', 'NE info INSERT INTO `sys_dict_data` VALUES (4108, 4108, 'log.operate.title.imsCDR', 'IMS-CDR session', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4109, 4109, 'menu.dashboard.amfUE', 'UE Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4110, 4110, 'log.operate.title.amfUE', 'AMF-UE event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', 'Sync Config', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', 'Wait Sync', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4114, 4114, 'dictData.ne_info_status.3', '-', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4115, 4115, 'dictType.ne_info_status', 'NE Info State', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4116, 4116, 'menu.ne.neQuickSetup', 'NE Quick Setup', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4117, 4117, 'log.operate.title.neConfig', 'NE Parameter Configuration', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); diff --git a/database/install/sys_post.sql b/database/install/sys_post.sql index 0f283851..3a1a4d79 100644 --- a/database/install/sys_post.sql +++ b/database/install/sys_post.sql @@ -43,7 +43,10 @@ CREATE TABLE `sys_post` ( LOCK TABLES `sys_post` WRITE; /*!40000 ALTER TABLE `sys_post` DISABLE KEYS */; -INSERT INTO `sys_post` VALUES (1,'administator','post.admin',1,'1','supervisor',1697110106499,NULL,0,NULL),(2,'operator','post.operator',2,'1','supervisor',1697110106499,NULL,0,NULL),(3,'monitor','post.monitor',3,'1','supervisor',1697110106499,NULL,0,NULL),(4,'visitor','post.visitor',4,'1','supervisor',1697110106499,NULL,0,NULL),(5,'111','test1',7,'0','admin',1701766022383,'',0,'remark'); +INSERT INTO `sys_post` VALUES (1, 'administator', 'post.admin', 1, '1', 'supervisor', 1697110106499, NULL, 0, NULL); +INSERT INTO `sys_post` VALUES (2, 'operator', 'post.operator', 2, '1', 'supervisor', 1697110106499, NULL, 0, NULL); +INSERT INTO `sys_post` VALUES (3, 'monitor', 'post.monitor', 3, '1', 'supervisor', 1697110106499, NULL, 0, NULL); +INSERT INTO `sys_post` VALUES (4, 'visitor', 'post.visitor', 4, '1', 'supervisor', 1697110106499, NULL, 0, NULL); /*!40000 ALTER TABLE `sys_post` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/sys_role_menu.sql b/database/install/sys_role_menu.sql index 13e52801..09f1e10d 100644 --- a/database/install/sys_role_menu.sql +++ b/database/install/sys_role_menu.sql @@ -35,7 +35,247 @@ CREATE TABLE `sys_role_menu` ( LOCK TABLES `sys_role_menu` WRITE; /*!40000 ALTER TABLE `sys_role_menu` DISABLE KEYS */; -INSERT INTO `sys_role_menu` VALUES (2,1),(2,4),(2,5),(2,100),(2,101),(2,102),(2,103),(2,104),(2,105),(2,108),(2,111),(2,112),(2,115),(2,116),(2,117),(2,500),(2,501),(2,1000),(2,1001),(2,1002),(2,1003),(2,1004),(2,1005),(2,1006),(2,1007),(2,1008),(2,1009),(2,1010),(2,1011),(2,1012),(2,1013),(2,1014),(2,1015),(2,1016),(2,1017),(2,1018),(2,1019),(2,1020),(2,1021),(2,1022),(2,1023),(2,1024),(2,1030),(2,1031),(2,1032),(2,1033),(2,1034),(2,1039),(2,1040),(2,1041),(2,1042),(2,1043),(2,1044),(2,1045),(2,1048),(2,1049),(2,1050),(2,1051),(2,1052),(2,1053),(2,1054),(2,1055),(2,1056),(2,2009),(2,2010),(2,2075),(2,2078),(2,2079),(2,2080),(2,2081),(2,2082),(2,2083),(2,2084),(2,2085),(2,2086),(2,2087),(2,2088),(2,2089),(2,2091),(2,2092),(2,2094),(2,2097),(2,2098),(2,2099),(2,2100),(2,2101),(2,2102),(2,2103),(2,2104),(2,2105),(2,2106),(2,2107),(2,2108),(2,2109),(2,2111),(2,2112),(2,2113),(2,2114),(2,2118),(2,2119),(2,2120),(2,2121),(2,2122),(2,2123),(2,2124),(2,2125),(2,2126),(2,2128),(2,2129),(2,2130),(2,2131),(2,2132),(2,2133),(2,2138),(2,2140),(2,2141),(3,1),(3,4),(3,5),(3,108),(3,112),(3,115),(3,500),(3,501),(3,1030),(3,1031),(3,1032),(3,1034),(3,1039),(3,1042),(3,1048),(3,2009),(3,2010),(3,2075),(3,2078),(3,2080),(3,2081),(3,2082),(3,2083),(3,2084),(3,2085),(3,2086),(3,2087),(3,2088),(3,2089),(3,2091),(3,2092),(3,2094),(3,2097),(3,2098),(3,2099),(3,2100),(3,2101),(3,2102),(3,2103),(3,2104),(3,2105),(3,2106),(3,2107),(3,2108),(3,2109),(3,2111),(3,2112),(3,2113),(3,2118),(3,2119),(3,2120),(3,2123),(3,2124),(3,2125),(3,2126),(3,2127),(3,2128),(3,2129),(3,2130),(3,2131),(3,2132),(3,2133),(3,2138),(3,2140),(3,2141),(4,1),(4,5),(4,112),(4,115),(4,500),(4,501),(4,1039),(4,1041),(4,1042),(4,1044),(4,1048),(4,2080),(4,2081),(4,2082),(4,2083),(4,2084),(4,2085),(4,2086),(4,2087),(4,2088),(4,2089),(4,2091),(4,2092),(4,2094),(4,2097),(4,2098),(4,2099),(4,2101),(4,2104),(4,2113),(4,2119),(4,2120),(4,2124),(4,2125),(4,2126),(4,2127),(4,2128),(4,2129),(4,2130),(4,2131),(4,2132),(4,2133),(4,2138),(4,2140),(4,2141),(5,1),(5,5),(5,112),(5,2080),(5,2081),(5,2082),(5,2087),(5,2131),(5,2132),(100,1),(100,100),(100,1000); +INSERT INTO `sys_role_menu` VALUES (2, 1); +INSERT INTO `sys_role_menu` VALUES (2, 4); +INSERT INTO `sys_role_menu` VALUES (2, 5); +INSERT INTO `sys_role_menu` VALUES (2, 100); +INSERT INTO `sys_role_menu` VALUES (2, 101); +INSERT INTO `sys_role_menu` VALUES (2, 102); +INSERT INTO `sys_role_menu` VALUES (2, 103); +INSERT INTO `sys_role_menu` VALUES (2, 104); +INSERT INTO `sys_role_menu` VALUES (2, 105); +INSERT INTO `sys_role_menu` VALUES (2, 108); +INSERT INTO `sys_role_menu` VALUES (2, 111); +INSERT INTO `sys_role_menu` VALUES (2, 112); +INSERT INTO `sys_role_menu` VALUES (2, 115); +INSERT INTO `sys_role_menu` VALUES (2, 116); +INSERT INTO `sys_role_menu` VALUES (2, 117); +INSERT INTO `sys_role_menu` VALUES (2, 500); +INSERT INTO `sys_role_menu` VALUES (2, 501); +INSERT INTO `sys_role_menu` VALUES (2, 1000); +INSERT INTO `sys_role_menu` VALUES (2, 1001); +INSERT INTO `sys_role_menu` VALUES (2, 1002); +INSERT INTO `sys_role_menu` VALUES (2, 1003); +INSERT INTO `sys_role_menu` VALUES (2, 1004); +INSERT INTO `sys_role_menu` VALUES (2, 1005); +INSERT INTO `sys_role_menu` VALUES (2, 1006); +INSERT INTO `sys_role_menu` VALUES (2, 1007); +INSERT INTO `sys_role_menu` VALUES (2, 1008); +INSERT INTO `sys_role_menu` VALUES (2, 1009); +INSERT INTO `sys_role_menu` VALUES (2, 1010); +INSERT INTO `sys_role_menu` VALUES (2, 1011); +INSERT INTO `sys_role_menu` VALUES (2, 1012); +INSERT INTO `sys_role_menu` VALUES (2, 1013); +INSERT INTO `sys_role_menu` VALUES (2, 1014); +INSERT INTO `sys_role_menu` VALUES (2, 1015); +INSERT INTO `sys_role_menu` VALUES (2, 1016); +INSERT INTO `sys_role_menu` VALUES (2, 1017); +INSERT INTO `sys_role_menu` VALUES (2, 1018); +INSERT INTO `sys_role_menu` VALUES (2, 1019); +INSERT INTO `sys_role_menu` VALUES (2, 1020); +INSERT INTO `sys_role_menu` VALUES (2, 1021); +INSERT INTO `sys_role_menu` VALUES (2, 1022); +INSERT INTO `sys_role_menu` VALUES (2, 1023); +INSERT INTO `sys_role_menu` VALUES (2, 1024); +INSERT INTO `sys_role_menu` VALUES (2, 1030); +INSERT INTO `sys_role_menu` VALUES (2, 1031); +INSERT INTO `sys_role_menu` VALUES (2, 1032); +INSERT INTO `sys_role_menu` VALUES (2, 1033); +INSERT INTO `sys_role_menu` VALUES (2, 1034); +INSERT INTO `sys_role_menu` VALUES (2, 1039); +INSERT INTO `sys_role_menu` VALUES (2, 1040); +INSERT INTO `sys_role_menu` VALUES (2, 1041); +INSERT INTO `sys_role_menu` VALUES (2, 1042); +INSERT INTO `sys_role_menu` VALUES (2, 1043); +INSERT INTO `sys_role_menu` VALUES (2, 1044); +INSERT INTO `sys_role_menu` VALUES (2, 1045); +INSERT INTO `sys_role_menu` VALUES (2, 1048); +INSERT INTO `sys_role_menu` VALUES (2, 1049); +INSERT INTO `sys_role_menu` VALUES (2, 1050); +INSERT INTO `sys_role_menu` VALUES (2, 1051); +INSERT INTO `sys_role_menu` VALUES (2, 1052); +INSERT INTO `sys_role_menu` VALUES (2, 1053); +INSERT INTO `sys_role_menu` VALUES (2, 1054); +INSERT INTO `sys_role_menu` VALUES (2, 1055); +INSERT INTO `sys_role_menu` VALUES (2, 1056); +INSERT INTO `sys_role_menu` VALUES (2, 2009); +INSERT INTO `sys_role_menu` VALUES (2, 2010); +INSERT INTO `sys_role_menu` VALUES (2, 2075); +INSERT INTO `sys_role_menu` VALUES (2, 2078); +INSERT INTO `sys_role_menu` VALUES (2, 2079); +INSERT INTO `sys_role_menu` VALUES (2, 2080); +INSERT INTO `sys_role_menu` VALUES (2, 2081); +INSERT INTO `sys_role_menu` VALUES (2, 2082); +INSERT INTO `sys_role_menu` VALUES (2, 2083); +INSERT INTO `sys_role_menu` VALUES (2, 2084); +INSERT INTO `sys_role_menu` VALUES (2, 2085); +INSERT INTO `sys_role_menu` VALUES (2, 2086); +INSERT INTO `sys_role_menu` VALUES (2, 2087); +INSERT INTO `sys_role_menu` VALUES (2, 2088); +INSERT INTO `sys_role_menu` VALUES (2, 2089); +INSERT INTO `sys_role_menu` VALUES (2, 2091); +INSERT INTO `sys_role_menu` VALUES (2, 2092); +INSERT INTO `sys_role_menu` VALUES (2, 2094); +INSERT INTO `sys_role_menu` VALUES (2, 2097); +INSERT INTO `sys_role_menu` VALUES (2, 2098); +INSERT INTO `sys_role_menu` VALUES (2, 2099); +INSERT INTO `sys_role_menu` VALUES (2, 2100); +INSERT INTO `sys_role_menu` VALUES (2, 2101); +INSERT INTO `sys_role_menu` VALUES (2, 2102); +INSERT INTO `sys_role_menu` VALUES (2, 2103); +INSERT INTO `sys_role_menu` VALUES (2, 2104); +INSERT INTO `sys_role_menu` VALUES (2, 2105); +INSERT INTO `sys_role_menu` VALUES (2, 2106); +INSERT INTO `sys_role_menu` VALUES (2, 2107); +INSERT INTO `sys_role_menu` VALUES (2, 2108); +INSERT INTO `sys_role_menu` VALUES (2, 2109); +INSERT INTO `sys_role_menu` VALUES (2, 2111); +INSERT INTO `sys_role_menu` VALUES (2, 2112); +INSERT INTO `sys_role_menu` VALUES (2, 2113); +INSERT INTO `sys_role_menu` VALUES (2, 2114); +INSERT INTO `sys_role_menu` VALUES (2, 2118); +INSERT INTO `sys_role_menu` VALUES (2, 2119); +INSERT INTO `sys_role_menu` VALUES (2, 2120); +INSERT INTO `sys_role_menu` VALUES (2, 2121); +INSERT INTO `sys_role_menu` VALUES (2, 2122); +INSERT INTO `sys_role_menu` VALUES (2, 2123); +INSERT INTO `sys_role_menu` VALUES (2, 2124); +INSERT INTO `sys_role_menu` VALUES (2, 2125); +INSERT INTO `sys_role_menu` VALUES (2, 2126); +INSERT INTO `sys_role_menu` VALUES (2, 2128); +INSERT INTO `sys_role_menu` VALUES (2, 2129); +INSERT INTO `sys_role_menu` VALUES (2, 2130); +INSERT INTO `sys_role_menu` VALUES (2, 2131); +INSERT INTO `sys_role_menu` VALUES (2, 2132); +INSERT INTO `sys_role_menu` VALUES (2, 2133); +INSERT INTO `sys_role_menu` VALUES (2, 2137); +INSERT INTO `sys_role_menu` VALUES (2, 2138); +INSERT INTO `sys_role_menu` VALUES (2, 2140); +INSERT INTO `sys_role_menu` VALUES (2, 2141); +INSERT INTO `sys_role_menu` VALUES (2, 2142); +INSERT INTO `sys_role_menu` VALUES (2, 2143); +INSERT INTO `sys_role_menu` VALUES (2, 2144); +INSERT INTO `sys_role_menu` VALUES (2, 2145); +INSERT INTO `sys_role_menu` VALUES (2, 2146); +INSERT INTO `sys_role_menu` VALUES (3, 1); +INSERT INTO `sys_role_menu` VALUES (3, 4); +INSERT INTO `sys_role_menu` VALUES (3, 5); +INSERT INTO `sys_role_menu` VALUES (3, 108); +INSERT INTO `sys_role_menu` VALUES (3, 112); +INSERT INTO `sys_role_menu` VALUES (3, 115); +INSERT INTO `sys_role_menu` VALUES (3, 500); +INSERT INTO `sys_role_menu` VALUES (3, 501); +INSERT INTO `sys_role_menu` VALUES (3, 1030); +INSERT INTO `sys_role_menu` VALUES (3, 1031); +INSERT INTO `sys_role_menu` VALUES (3, 1032); +INSERT INTO `sys_role_menu` VALUES (3, 1034); +INSERT INTO `sys_role_menu` VALUES (3, 1039); +INSERT INTO `sys_role_menu` VALUES (3, 1042); +INSERT INTO `sys_role_menu` VALUES (3, 1048); +INSERT INTO `sys_role_menu` VALUES (3, 2009); +INSERT INTO `sys_role_menu` VALUES (3, 2010); +INSERT INTO `sys_role_menu` VALUES (3, 2075); +INSERT INTO `sys_role_menu` VALUES (3, 2078); +INSERT INTO `sys_role_menu` VALUES (3, 2080); +INSERT INTO `sys_role_menu` VALUES (3, 2081); +INSERT INTO `sys_role_menu` VALUES (3, 2082); +INSERT INTO `sys_role_menu` VALUES (3, 2083); +INSERT INTO `sys_role_menu` VALUES (3, 2084); +INSERT INTO `sys_role_menu` VALUES (3, 2085); +INSERT INTO `sys_role_menu` VALUES (3, 2086); +INSERT INTO `sys_role_menu` VALUES (3, 2087); +INSERT INTO `sys_role_menu` VALUES (3, 2088); +INSERT INTO `sys_role_menu` VALUES (3, 2089); +INSERT INTO `sys_role_menu` VALUES (3, 2091); +INSERT INTO `sys_role_menu` VALUES (3, 2092); +INSERT INTO `sys_role_menu` VALUES (3, 2094); +INSERT INTO `sys_role_menu` VALUES (3, 2097); +INSERT INTO `sys_role_menu` VALUES (3, 2098); +INSERT INTO `sys_role_menu` VALUES (3, 2099); +INSERT INTO `sys_role_menu` VALUES (3, 2100); +INSERT INTO `sys_role_menu` VALUES (3, 2101); +INSERT INTO `sys_role_menu` VALUES (3, 2102); +INSERT INTO `sys_role_menu` VALUES (3, 2103); +INSERT INTO `sys_role_menu` VALUES (3, 2104); +INSERT INTO `sys_role_menu` VALUES (3, 2105); +INSERT INTO `sys_role_menu` VALUES (3, 2106); +INSERT INTO `sys_role_menu` VALUES (3, 2107); +INSERT INTO `sys_role_menu` VALUES (3, 2108); +INSERT INTO `sys_role_menu` VALUES (3, 2109); +INSERT INTO `sys_role_menu` VALUES (3, 2111); +INSERT INTO `sys_role_menu` VALUES (3, 2112); +INSERT INTO `sys_role_menu` VALUES (3, 2113); +INSERT INTO `sys_role_menu` VALUES (3, 2118); +INSERT INTO `sys_role_menu` VALUES (3, 2119); +INSERT INTO `sys_role_menu` VALUES (3, 2120); +INSERT INTO `sys_role_menu` VALUES (3, 2123); +INSERT INTO `sys_role_menu` VALUES (3, 2124); +INSERT INTO `sys_role_menu` VALUES (3, 2125); +INSERT INTO `sys_role_menu` VALUES (3, 2126); +INSERT INTO `sys_role_menu` VALUES (3, 2127); +INSERT INTO `sys_role_menu` VALUES (3, 2128); +INSERT INTO `sys_role_menu` VALUES (3, 2129); +INSERT INTO `sys_role_menu` VALUES (3, 2130); +INSERT INTO `sys_role_menu` VALUES (3, 2131); +INSERT INTO `sys_role_menu` VALUES (3, 2132); +INSERT INTO `sys_role_menu` VALUES (3, 2133); +INSERT INTO `sys_role_menu` VALUES (3, 2138); +INSERT INTO `sys_role_menu` VALUES (3, 2140); +INSERT INTO `sys_role_menu` VALUES (3, 2141); +INSERT INTO `sys_role_menu` VALUES (4, 1); +INSERT INTO `sys_role_menu` VALUES (4, 5); +INSERT INTO `sys_role_menu` VALUES (4, 112); +INSERT INTO `sys_role_menu` VALUES (4, 115); +INSERT INTO `sys_role_menu` VALUES (4, 500); +INSERT INTO `sys_role_menu` VALUES (4, 501); +INSERT INTO `sys_role_menu` VALUES (4, 1039); +INSERT INTO `sys_role_menu` VALUES (4, 1041); +INSERT INTO `sys_role_menu` VALUES (4, 1042); +INSERT INTO `sys_role_menu` VALUES (4, 1044); +INSERT INTO `sys_role_menu` VALUES (4, 1048); +INSERT INTO `sys_role_menu` VALUES (4, 2080); +INSERT INTO `sys_role_menu` VALUES (4, 2081); +INSERT INTO `sys_role_menu` VALUES (4, 2082); +INSERT INTO `sys_role_menu` VALUES (4, 2083); +INSERT INTO `sys_role_menu` VALUES (4, 2084); +INSERT INTO `sys_role_menu` VALUES (4, 2085); +INSERT INTO `sys_role_menu` VALUES (4, 2086); +INSERT INTO `sys_role_menu` VALUES (4, 2087); +INSERT INTO `sys_role_menu` VALUES (4, 2088); +INSERT INTO `sys_role_menu` VALUES (4, 2089); +INSERT INTO `sys_role_menu` VALUES (4, 2091); +INSERT INTO `sys_role_menu` VALUES (4, 2092); +INSERT INTO `sys_role_menu` VALUES (4, 2094); +INSERT INTO `sys_role_menu` VALUES (4, 2097); +INSERT INTO `sys_role_menu` VALUES (4, 2098); +INSERT INTO `sys_role_menu` VALUES (4, 2099); +INSERT INTO `sys_role_menu` VALUES (4, 2101); +INSERT INTO `sys_role_menu` VALUES (4, 2104); +INSERT INTO `sys_role_menu` VALUES (4, 2113); +INSERT INTO `sys_role_menu` VALUES (4, 2119); +INSERT INTO `sys_role_menu` VALUES (4, 2120); +INSERT INTO `sys_role_menu` VALUES (4, 2124); +INSERT INTO `sys_role_menu` VALUES (4, 2125); +INSERT INTO `sys_role_menu` VALUES (4, 2126); +INSERT INTO `sys_role_menu` VALUES (4, 2127); +INSERT INTO `sys_role_menu` VALUES (4, 2128); +INSERT INTO `sys_role_menu` VALUES (4, 2129); +INSERT INTO `sys_role_menu` VALUES (4, 2130); +INSERT INTO `sys_role_menu` VALUES (4, 2131); +INSERT INTO `sys_role_menu` VALUES (4, 2132); +INSERT INTO `sys_role_menu` VALUES (4, 2133); +INSERT INTO `sys_role_menu` VALUES (4, 2138); +INSERT INTO `sys_role_menu` VALUES (4, 2140); +INSERT INTO `sys_role_menu` VALUES (4, 2141); +INSERT INTO `sys_role_menu` VALUES (5, 1); +INSERT INTO `sys_role_menu` VALUES (5, 5); +INSERT INTO `sys_role_menu` VALUES (5, 112); +INSERT INTO `sys_role_menu` VALUES (5, 2080); +INSERT INTO `sys_role_menu` VALUES (5, 2081); +INSERT INTO `sys_role_menu` VALUES (5, 2082); +INSERT INTO `sys_role_menu` VALUES (5, 2087); +INSERT INTO `sys_role_menu` VALUES (5, 2131); +INSERT INTO `sys_role_menu` VALUES (5, 2132); /*!40000 ALTER TABLE `sys_role_menu` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/install/sys_user.sql b/database/install/sys_user.sql index 5d34f7a1..d671e18f 100644 --- a/database/install/sys_user.sql +++ b/database/install/sys_user.sql @@ -52,7 +52,10 @@ CREATE TABLE `sys_user` ( LOCK TABLES `sys_user` WRITE; /*!40000 ALTER TABLE `sys_user` DISABLE KEYS */; -INSERT INTO `sys_user` VALUES (1,NULL,'supervisor','supervisor','sys','','','','','$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq','1','0','192.168.5.58',1709631361655,'admin',1697091656500,'supervisor',1709631361656,''),(2,NULL,'admin','admin','sys','','','','','$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq','1','0','192.168.2.219',1709713306413,'admin',1697091656500,'admin',1709713306416,''),(103,NULL,'manager','manager','sys','','','','','$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2','1','0','192.168.2.219',1701425631740,'admin',1698661521780,'manager',1701425631741,''),(104,NULL,'monitor','monitor','sys','','','','','$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy','1','0','192.168.2.219',1699345510602,'admin',1698661684898,'monitor',1699345510603,''),(106,100,'admin1','admin1','sys','','','1','','$2a$10$HmaZLRdHqWJ.PFanzQoBiOVWcjy.gIj4o6C6KE49FO.AM4f/U6YP.','0','0','',0,'admin',1701424142061,'',0,NULL); +INSERT INTO `sys_user` VALUES (1, NULL, 'supervisor', 'supervisor', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '192.168.5.58', 1715658376835, 'admin', 1697091656500, 'supervisor', 1715658376846, ''); +INSERT INTO `sys_user` VALUES (2, NULL, 'admin', 'admin', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '192.168.2.219', 1709713306413, 'admin', 1697091656500, 'admin', 1709713306416, ''); +INSERT INTO `sys_user` VALUES (103, NULL, 'manager', 'manager', 'sys', '', '', '', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', '192.168.2.219', 1701425631740, 'admin', 1698661521780, 'manager', 1701425631741, ''); +INSERT INTO `sys_user` VALUES (104, NULL, 'monitor', 'monitor', 'sys', '', '', '', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', '192.168.2.219', 1699345510602, 'admin', 1698661684898, 'monitor', 1699345510603, ''); /*!40000 ALTER TABLE `sys_user` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/database/upgrade/upg_sys_config.sql b/database/upgrade/upg_sys_config.sql index 061d5a79..67004282 100644 --- a/database/upgrade/upg_sys_config.sql +++ b/database/upgrade/upg_sys_config.sql @@ -23,7 +23,7 @@ INSERT IGNORE INTO `sys_config` VALUES (2, 'config.sys.account.captchaEnabled', INSERT IGNORE INTO `sys_config` VALUES (3, 'config.sys.account.registerUser', 'sys.account.registerUser', 'false', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.account.registerUserRemark'); INSERT IGNORE INTO `sys_config` VALUES (4, 'config.sys.user.maxRetryCount', 'sys.user.maxRetryCount', '5', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.user.maxRetryCountRemark'); INSERT IGNORE INTO `sys_config` VALUES (5, 'config.sys.user.lockTime', 'sys.user.lockTime', '10', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.user.lockTimeRemark'); -INSERT IGNORE INTO `sys_config` VALUES (6, 'config.sys.officialUrl', 'sys.officialUrl', 'https://www.agrandtech.com', 'Y', 'supervisor', 1698110000000, 'admin', 1700809804330, 'config.sys.officialUrlRemark'); +INSERT IGNORE INTO `sys_config` VALUES (6, 'config.sys.officialUrl', 'sys.officialUrl', '#', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.officialUrlRemark'); INSERT IGNORE INTO `sys_config` VALUES (7, 'config.sys.helpDoc', 'sys.helpDoc', '/static/helpDoc/{language}_doc.pdf', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.helpDocRemark'); INSERT IGNORE INTO `sys_config` VALUES (8, 'sys.account.captchaType', 'sys.account.captchaType', 'math', 'Y', 'supervisor', 1705410000000, NULL, 0, 'sys.account.captchaTypeRemark'); INSERT IGNORE INTO `sys_config` VALUES (10, 'config.monitor.sysResource.storeDays', 'monitor.sysResource.storeDays', '30', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.monitor.sysResource.storeDaysRemark'); @@ -31,10 +31,10 @@ INSERT IGNORE INTO `sys_config` VALUES (102, 'config.sys.logo.type', 'sys.logo.t INSERT IGNORE INTO `sys_config` VALUES (103, 'config.sys.logo.filePathIcon', 'sys.logo.filePathIcon', '/static/logo/{language}_icon.png', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.logo.filePathIconRemark'); INSERT IGNORE INTO `sys_config` VALUES (104, 'config.sys.logo.filePathBrand', 'sys.logo.filePathBrand', '/static/logo/{language}_brand.png', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.logo.filePathBrandRemark'); INSERT IGNORE INTO `sys_config` VALUES (105, 'config.sys.loginBackground', 'sys.loginBackground', '#', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.loginBackgroundRemark'); -INSERT IGNORE INTO `sys_config` VALUES (106, 'config.sys.title', 'sys.title', 'config.sys.titleValue', 'Y', 'supervisor', 1698110000000, NULL, 0, 'config.sys.titleRemark'); -INSERT IGNORE INTO `sys_config` VALUES (107, 'config.sys.copyright', 'sys.copyright', 'config.sys.copyrightValue', 'Y', 'supervisor', 1698110000000, NULL, 0, 'config.sys.copyrightRemark'); -INSERT IGNORE INTO `sys_config` VALUES (108, 'config.sys.i18nOpen', 'sys.i18n.open', 'false', 'Y', 'supervisor', 1698110000000, NULL, 0, 'config.sys.i18nOpenRemark'); -INSERT IGNORE INTO `sys_config` VALUES (109, 'Internationalization Default Language', 'sys.i18n.default', 'en_US', 'Y', 'supervisor', 1698110000000, 'supervisor', 1702632906566, 'config.sys.i18nDefaultRemark'); +INSERT IGNORE INTO `sys_config` VALUES (106, 'config.sys.title', 'sys.title', 'config.sys.titleValue', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.titleRemark'); +INSERT IGNORE INTO `sys_config` VALUES (107, 'config.sys.copyright', 'sys.copyright', 'config.sys.copyrightValue', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.copyrightRemark'); +INSERT IGNORE INTO `sys_config` VALUES (108, 'config.sys.i18nOpen', 'sys.i18n.open', 'true', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.i18nOpenRemark'); +INSERT IGNORE INTO `sys_config` VALUES (109, 'config.sys.i18nDefault', 'sys.i18n.default', 'en_US', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.i18nDefaultRemark'); INSERT IGNORE INTO `sys_config` VALUES (110, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.lockTimeRemark'); SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file From f49d62a1607f3632f9d1ee3562d81851fa67233c Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 15 May 2024 09:41:31 +0800 Subject: [PATCH 091/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E5=AE=89?= =?UTF-8?q?=E8=A3=85NRF=E9=85=8D=E7=BD=AE=E5=A4=8D=E5=88=B6=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_version.impl.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index a9ea2ea7..a50011ef 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -288,7 +288,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp // NRF配置修改 if neTypeLower == "nrf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nssfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nrfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["NRF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MNC"])) @@ -360,7 +360,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp logMsg := "" // 日志信息 done := make(chan bool) // 完成信号 // 超时退出 30s - timeoutTicker := time.NewTicker(30 * time.Second) + timeoutTicker := time.NewTicker(60 * time.Second) defer timeoutTicker.Stop() // 实时读取SSH消息直接输出 msTicker := time.NewTicker(100 * time.Millisecond) From f88100542b4b556543a4b0569b75e5549b2197df Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 15 May 2024 09:42:02 +0800 Subject: [PATCH 092/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E6=96=87=E4=BB=B6=E7=9B=AE=E5=BD=95=E6=9D=83=E9=99=90?= =?UTF-8?q?=E4=BF=AE=E6=94=B9775?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_license.impl.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/network_element/service/ne_license.impl.go b/src/modules/network_element/service/ne_license.impl.go index 9fd455ad..d6f684ee 100644 --- a/src/modules/network_element/service/ne_license.impl.go +++ b/src/modules/network_element/service/ne_license.impl.go @@ -166,7 +166,7 @@ func (r *NeLicenseImpl) UploadLicense(neLicense model.NeLicense) error { neLicensePath := fmt.Sprintf("/usr/local/etc/%s/license/system.ini", neTypeLower) neLicenseDir := filepath.ToSlash(filepath.Dir(neLicensePath)) // 修改网元文件权限 - sshClient.RunCMD(fmt.Sprintf("sudo chmod 775 %s && sudo chmod o+w %s", neLicenseDir, neLicensePath)) + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod 775 %s && sudo touch %s && sudo chmod o+rw %s", neLicenseDir, neLicenseDir, neLicensePath, neLicensePath)) // 尝试备份授权文件 neLicensePathBack := fmt.Sprintf("%s/system_%s.ini", neLicensePath, time.Now().Format("20060102_150405")) From cd3c009b343c8636f28351d537575f6aa8961433 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 15 May 2024 09:42:44 +0800 Subject: [PATCH 093/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=AD=97=E5=85=B8=E5=AE=9A=E4=B9=89Tag=E9=A2=9C?= =?UTF-8?q?=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data0.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/database/install/sys_dict_data0.sql b/database/install/sys_dict_data0.sql index eebce7e7..f93f366e 100644 --- a/database/install/sys_dict_data0.sql +++ b/database/install/sys_dict_data0.sql @@ -158,10 +158,10 @@ INSERT INTO `sys_dict_data` VALUES (114, 0, 'dictData.ne_host_authMode.0', '0', INSERT INTO `sys_dict_data` VALUES (115, 1, 'dictData.ne_host_authMode.1', '1', 'ne_host_authMode', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (116, 0, 'dictData.ne_host_cmd_groupId.0', '0', 'ne_host_cmd_groupId', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (117, 1, 'dictData.ne_host_cmd_groupId.1', '1', 'ne_host_cmd_groupId', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (118, 0, 'dictData.ne_info_status.0', '0', 'ne_info_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1709642157849, ''); -INSERT INTO `sys_dict_data` VALUES (119, 1, 'dictData.ne_info_status.1', '1', 'ne_info_status', '', 'error', '1', 'supervisor', 1706620000000, 'supervisor', 1709642164831, ''); -INSERT INTO `sys_dict_data` VALUES (120, 2, 'dictData.ne_info_status.2', '2', 'ne_info_status', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (121, 3, 'dictData.ne_info_status.3', '3', 'ne_info_status', '', 'warning', '1', 'supervisor', 1706620000000, 'supervisor', 1709642169871, ''); +INSERT INTO `sys_dict_data` VALUES (118, 0, 'dictData.ne_info_status.0', '0', 'ne_info_status', '', 'error', '1', 'supervisor', 1706620000000, 'supervisor', 1709642157849, ''); +INSERT INTO `sys_dict_data` VALUES (119, 1, 'dictData.ne_info_status.1', '1', 'ne_info_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1709642164831, ''); +INSERT INTO `sys_dict_data` VALUES (120, 2, 'dictData.ne_info_status.2', '2', 'ne_info_status', '', 'warning', '1', 'supervisor', 1706620000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (121, 3, 'dictData.ne_info_status.3', '3', 'ne_info_status', '', '', '1', 'supervisor', 1706620000000, 'supervisor', 1709642169871, ''); INSERT INTO `sys_dict_data` VALUES (122, 0, 'ne_license_status.0', '0', 'ne_license_status', '', 'warning', '1', 'supervisor', 1706620000000, 'supervisor', 1712720196537, ''); INSERT INTO `sys_dict_data` VALUES (123, 1, 'ne_license_status.1', '1', 'ne_license_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); INSERT INTO `sys_dict_data` VALUES (124, 2, 'dictData.ne_host_authMode.2', '2', 'ne_host_authMode', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); From 522c2632d3f7ce4c3956d46eb7637d966c13c4ab Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 15 May 2024 11:16:46 +0800 Subject: [PATCH 094/130] =?UTF-8?q?style:=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E6=95=B0=E6=8D=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/role_permission.sql | 48 --------------------------- database/install/rs_subscribe.sql | 49 ---------------------------- database/install/security_log.sql | 47 -------------------------- database/install/session.sql | 49 ---------------------------- database/install/sys_backup.sql | 49 ---------------------------- database/install/sys_config.sql | 19 ++++++++++- 6 files changed, 18 insertions(+), 243 deletions(-) delete mode 100644 database/install/role_permission.sql delete mode 100644 database/install/rs_subscribe.sql delete mode 100644 database/install/security_log.sql delete mode 100644 database/install/session.sql delete mode 100644 database/install/sys_backup.sql diff --git a/database/install/role_permission.sql b/database/install/role_permission.sql deleted file mode 100644 index faa27a1e..00000000 --- a/database/install/role_permission.sql +++ /dev/null @@ -1,48 +0,0 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `role_permission` --- - -DROP TABLE IF EXISTS `role_permission`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `role_permission` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `r_name` varchar(255) DEFAULT NULL, - `p_name` varchar(255) DEFAULT NULL, - `description` varchar(255) DEFAULT NULL, - `create_at` datetime DEFAULT current_timestamp(), - PRIMARY KEY (`id`) USING BTREE, - KEY `r_name` (`r_name`) USING BTREE, - KEY `role_permission_ibfk_2` (`p_name`) USING BTREE, - CONSTRAINT `role_permission_ibfk_1` FOREIGN KEY (`r_name`) REFERENCES `role` (`role_name`), - CONSTRAINT `role_permission_ibfk_2` FOREIGN KEY (`p_name`) REFERENCES `permission` (`permission_name`) -) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='del-已使用sys_menu菜单权限标识'; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-03-06 17:26:58 diff --git a/database/install/rs_subscribe.sql b/database/install/rs_subscribe.sql deleted file mode 100644 index 287bafd2..00000000 --- a/database/install/rs_subscribe.sql +++ /dev/null @@ -1,49 +0,0 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `rs_subscribe` --- - -DROP TABLE IF EXISTS `rs_subscribe`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `rs_subscribe` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `created_at` datetime(3) DEFAULT NULL, - `updated_at` datetime(3) DEFAULT NULL, - `deleted_at` datetime(3) DEFAULT NULL, - `user` varchar(64) DEFAULT NULL, - `event_type` varchar(255) DEFAULT NULL, - `ne_type` varchar(64) DEFAULT NULL, - `object_type` varchar(64) DEFAULT NULL, - `callback_url` varchar(255) DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_rs_subscribe_deleted_at` (`deleted_at`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-03-06 17:26:58 diff --git a/database/install/security_log.sql b/database/install/security_log.sql deleted file mode 100644 index f3e9436b..00000000 --- a/database/install/security_log.sql +++ /dev/null @@ -1,47 +0,0 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `security_log` --- - -DROP TABLE IF EXISTS `security_log`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `security_log` ( - `id` int(10) NOT NULL AUTO_INCREMENT, - `account_name` varchar(32) NOT NULL, - `account_type` varchar(16) NOT NULL COMMENT 'group_name', - `op_ip` varchar(64) DEFAULT NULL, - `op_type` tinyint(4) DEFAULT NULL COMMENT '// 0-Login 1-Logout 2-Add 3-Update 4-Delete 5-Lock 6-Unlock', - `op_content` text DEFAULT NULL, - `op_result` tinyint(4) DEFAULT NULL, - `op_time` datetime DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=646 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-03-06 17:26:58 diff --git a/database/install/session.sql b/database/install/session.sql deleted file mode 100644 index a9e19714..00000000 --- a/database/install/session.sql +++ /dev/null @@ -1,49 +0,0 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `session` --- - -DROP TABLE IF EXISTS `session`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `session` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `account_id` varchar(32) DEFAULT NULL, - `name` varchar(32) DEFAULT NULL, - `host` varchar(32) DEFAULT NULL, - `access_token` varchar(255) DEFAULT NULL, - `expires` int(11) DEFAULT NULL, - `status` enum('online','offline') DEFAULT 'online', - `login_time` datetime DEFAULT current_timestamp(), - `shake_time` datetime DEFAULT NULL, - `logout_time` datetime DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1194 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-03-06 17:26:58 diff --git a/database/install/sys_backup.sql b/database/install/sys_backup.sql deleted file mode 100644 index 0a9d1765..00000000 --- a/database/install/sys_backup.sql +++ /dev/null @@ -1,49 +0,0 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `sys_backup` --- - -DROP TABLE IF EXISTS `sys_backup`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `sys_backup` ( - `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', - `created_at` datetime DEFAULT NULL COMMENT '创建时间', - `updated_at` datetime DEFAULT NULL COMMENT '更新时间', - `backup_type` varchar(50) DEFAULT NULL COMMENT '备份类型 0文件资源 1数据库', - `backup_way` varchar(50) DEFAULT NULL COMMENT '备份方式 0手动备份 1周期备份', - `name` varchar(50) DEFAULT NULL COMMENT '文件名', - `path` varchar(200) DEFAULT NULL COMMENT '文件路径', - `backup_time` datetime DEFAULT NULL COMMENT '备份时间', - `backup_medium` varchar(200) DEFAULT NULL COMMENT '备份介质', - `backup_value` varchar(50) DEFAULT NULL COMMENT '备份内容', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='del-旧前端使用的系统文件数据备份'; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-03-06 17:26:58 diff --git a/database/install/sys_config.sql b/database/install/sys_config.sql index ca1a6776..ac1551ee 100644 --- a/database/install/sys_config.sql +++ b/database/install/sys_config.sql @@ -43,7 +43,24 @@ CREATE TABLE `sys_config` ( LOCK TABLES `sys_config` WRITE; /*!40000 ALTER TABLE `sys_config` DISABLE KEYS */; -INSERT INTO `sys_config` VALUES (1,'config.sys.user.initPassword','sys.user.initPassword','Abcd@1234..','Y','supervisor',1700000000000,NULL,0,'config.sys.user.initPasswordRemark'),(2,'config.sys.account.captchaEnabled','sys.account.captchaEnabled','false','Y','supervisor',1700000000000,NULL,0,'config.sys.account.captchaEnabledRemark'),(3,'config.sys.account.registerUser','sys.account.registerUser','false','Y','supervisor',1700000000000,NULL,0,'config.sys.account.registerUserRemark'),(4,'config.sys.user.maxRetryCount','sys.user.maxRetryCount','5','Y','supervisor',1700000000000,NULL,0,'config.sys.user.maxRetryCountRemark'),(5,'config.sys.user.lockTime','sys.user.lockTime','10','Y','supervisor',1700000000000,NULL,0,'config.sys.user.lockTimeRemark'),(6,'config.sys.officialUrl','sys.officialUrl','#','Y','supervisor',1700000000000,NULL,0,'config.sys.officialUrlRemark'),(7,'config.sys.helpDoc','sys.helpDoc','/static/helpDoc/{language}_doc.pdf','Y','supervisor',1700000000000,NULL,0,'config.sys.helpDocRemark'),(8,'sys.account.captchaType','sys.account.captchaType','math','Y','supervisor',1705410000000,NULL,0,'sys.account.captchaTypeRemark'),(10,'config.monitor.sysResource.storeDays','monitor.sysResource.storeDays','30','Y','supervisor',1700000000000,NULL,0,'config.monitor.sysResource.storeDaysRemark'),(102,'config.sys.logo.type','sys.logo.type','icon','Y','supervisor',1700000000000,NULL,0,'config.sys.logo.typeRemark'),(103,'config.sys.logo.filePathIcon','sys.logo.filePathIcon','/static/logo/{language}_icon.png','Y','supervisor',1700000000000,NULL,0,'config.sys.logo.filePathIconRemark'),(104,'config.sys.logo.filePathBrand','sys.logo.filePathBrand','/static/logo/{language}_brand.png','Y','supervisor',1700000000000,NULL,0,'config.sys.logo.filePathBrandRemark'),(105,'config.sys.loginBackground','sys.loginBackground','#','Y','supervisor',1700000000000,NULL,0,'config.sys.loginBackgroundRemark'),(106,'config.sys.title','sys.title','config.sys.titleValue','Y','supervisor',1700000000000,NULL,0,'config.sys.titleRemark'),(107,'config.sys.copyright','sys.copyright','config.sys.copyrightValue','Y','supervisor',1700000000000,NULL,0,'config.sys.copyrightRemark'),(108,'config.sys.i18nOpen','sys.i18n.open','true','Y','supervisor',1700000000000,NULL,0,'config.sys.i18nOpenRemark'),(109,'config.sys.i18nDefault','sys.i18n.default','en_US','Y','supervisor',1700000000000,NULL,0,'config.sys.i18nDefaultRemark'),(110,'config.sys.lockTime','sys.lockTime','0','Y','supervisor',1704960008300,'admin',1706838764703,'config.sys.lockTimeRemark'); +INSERT INTO `sys_config` VALUES (1, 'config.sys.user.initPassword', 'sys.user.initPassword', 'Abcd@1234..', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.user.initPasswordRemark'); +INSERT INTO `sys_config` VALUES (2, 'config.sys.account.captchaEnabled', 'sys.account.captchaEnabled', 'false', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.account.captchaEnabledRemark'); +INSERT INTO `sys_config` VALUES (3, 'config.sys.account.registerUser', 'sys.account.registerUser', 'false', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.account.registerUserRemark'); +INSERT INTO `sys_config` VALUES (4, 'config.sys.user.maxRetryCount', 'sys.user.maxRetryCount', '5', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.user.maxRetryCountRemark'); +INSERT INTO `sys_config` VALUES (5, 'config.sys.user.lockTime', 'sys.user.lockTime', '10', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.user.lockTimeRemark'); +INSERT INTO `sys_config` VALUES (6, 'config.sys.officialUrl', 'sys.officialUrl', '#', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.officialUrlRemark'); +INSERT INTO `sys_config` VALUES (7, 'config.sys.helpDoc', 'sys.helpDoc', '/static/helpDoc/{language}_doc.pdf', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.helpDocRemark'); +INSERT INTO `sys_config` VALUES (8, 'sys.account.captchaType', 'sys.account.captchaType', 'math', 'Y', 'supervisor', 1705410000000, NULL, 0, 'sys.account.captchaTypeRemark'); +INSERT INTO `sys_config` VALUES (10, 'config.monitor.sysResource.storeDays', 'monitor.sysResource.storeDays', '30', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.monitor.sysResource.storeDaysRemark'); +INSERT INTO `sys_config` VALUES (102, 'config.sys.logo.type', 'sys.logo.type', 'icon', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.logo.typeRemark'); +INSERT INTO `sys_config` VALUES (103, 'config.sys.logo.filePathIcon', 'sys.logo.filePathIcon', '/static/logo/{language}_icon.png', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.logo.filePathIconRemark'); +INSERT INTO `sys_config` VALUES (104, 'config.sys.logo.filePathBrand', 'sys.logo.filePathBrand', '/static/logo/{language}_brand.png', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.logo.filePathBrandRemark'); +INSERT INTO `sys_config` VALUES (105, 'config.sys.loginBackground', 'sys.loginBackground', '#', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.loginBackgroundRemark'); +INSERT INTO `sys_config` VALUES (106, 'config.sys.title', 'sys.title', 'config.sys.titleValue', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.titleRemark'); +INSERT INTO `sys_config` VALUES (107, 'config.sys.copyright', 'sys.copyright', 'config.sys.copyrightValue', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.copyrightRemark'); +INSERT INTO `sys_config` VALUES (108, 'config.sys.i18nOpen', 'sys.i18n.open', 'true', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.i18nOpenRemark'); +INSERT INTO `sys_config` VALUES (109, 'config.sys.i18nDefault', 'sys.i18n.default', 'en_US', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.i18nDefaultRemark'); +INSERT INTO `sys_config` VALUES (110, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.lockTimeRemark'); /*!40000 ALTER TABLE `sys_config` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; From 27be6e1be49fec38c9dffb6aee4c64c8c665d364 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 16 May 2024 09:57:15 +0800 Subject: [PATCH 095/130] =?UTF-8?q?style:=20SQL=E7=BD=91=E5=85=83=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E8=BD=AF=E4=BB=B6=E7=89=88=E6=9C=AC=E7=BC=BA=E7=9C=81?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/ne_info.sql | 54 ++++++++++++++++------------- database/install/ne_license.sql | 4 +-- database/install/ne_version.sql | 14 ++++---- database/upgrade/upg_ne_info.sql | 35 +++++++++++-------- database/upgrade/upg_ne_license.sql | 4 +-- database/upgrade/upg_ne_version.sql | 28 +++++++-------- 6 files changed, 75 insertions(+), 64 deletions(-) diff --git a/database/install/ne_info.sql b/database/install/ne_info.sql index 67a79468..539b910f 100644 --- a/database/install/ne_info.sql +++ b/database/install/ne_info.sql @@ -8,42 +8,46 @@ SET FOREIGN_KEY_CHECKS = 0; DROP TABLE IF EXISTS `ne_info`; -CREATE TABLE `ne_info` ( +CREATE TABLE `ne_info` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `rm_uid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `rm_uid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', `ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', - `port` int NULL DEFAULT NULL, + `port` int NULL DEFAULT 0 COMMENT '端口', `pv_flag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'PNF' COMMENT '\'PNF\',\'VNF\'', `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '省份地域', - `vendor_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'AGrandTech', - `dn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-', - `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'MAC地址', - `status` int NULL DEFAULT 0 COMMENT '0离线 1在线 2配置待下发', - `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `vendor_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-', + `dn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'MAC地址', `host_ids` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '网元主机ID组 数据格式(ssh,telnet,telnet)', + `status` int NULL DEFAULT 0 COMMENT '0离线 1在线 2配置待下发', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `idx_netype_neid`(`ne_type` ASC, `ne_id` ASC) USING BTREE + UNIQUE INDEX `ux_netype_neid`(`ne_type` ASC, `ne_id` ASC) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元信息表 对应一个网元版本、网元授权、网元主机' ROW_FORMAT = DYNAMIC; -- 初始网元数据 -INSERT INTO `ne_info` VALUES (1, 'OMC', '001', '4400HX1OMC001', 'OMC_001', '172.16.5.100', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '1,2'); -INSERT INTO `ne_info` VALUES (2, 'IMS', '001', '4400HX1IMS001', 'IMS_001', '172.16.5.110', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '3,4'); -INSERT INTO `ne_info` VALUES (3, 'AMF', '001', '4400HX1AMF001', 'AMF_001', '172.16.5.120', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '5,6'); -INSERT INTO `ne_info` VALUES (4, 'AUSF', '001', '4400HX1AUF001', 'AUSF_001', '172.16.5.130', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '7,8'); -INSERT INTO `ne_info` VALUES (5, 'UDM', '001', '4400HX1UDM001', 'UDM_001', '172.16.5.140', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '9,10'); -INSERT INTO `ne_info` VALUES (6, 'SMF', '001', '4400HX1SMF001', 'SMF_001', '172.16.5.150', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '11,12'); -INSERT INTO `ne_info` VALUES (7, 'PCF', '001', '4400HX1PCF001', 'PCF_001', '172.16.5.160', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '13,14'); -INSERT INTO `ne_info` VALUES (8, 'NSSF', '001', '4400HX1NSF001', 'NSSF_001', '172.16.5.170', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '15,16'); -INSERT INTO `ne_info` VALUES (9, 'NRF', '001', '4400HX1NRF001', 'NRF_001', '172.16.5.180', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '17,18'); -INSERT INTO `ne_info` VALUES (10, 'UPF', '001', '4400HX1UPF001', 'UPF_001', '172.16.5.190', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '19,20,21'); -INSERT INTO `ne_info` VALUES (11, 'LMF', '001', '4400HX1LMF001', 'LMF_001', '172.16.5.200', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '22,23'); -INSERT INTO `ne_info` VALUES (12, 'NEF', '001', '4400HX1NEF001', 'NEF_001', '172.16.5.210', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '24,25'); -INSERT INTO `ne_info` VALUES (13, 'MME', '001', '4400HX1MME001', 'MME_001', '172.16.5.220', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '26,27'); -INSERT INTO `ne_info` VALUES (14, 'N3IWF', '001', '4400HX1IWF001', 'N3IWF_001', '172.16.5.230', 33030, 'PNF', '-', '-', '-', '-', 1, 0, '', '28,29'); +INSERT INTO `ne_info` VALUES (1, 'OMC', '001', '4400HX1OMC001', 'OMC_001', '172.16.5.100', 33030, 'PNF', '-', '-', '-', '-', '1,2', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (2, 'IMS', '001', '4400HXIMS001', 'IMS_001', '172.16.5.110', 33030, 'PNF', '-', '-', '-', '-', '3,4', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (3, 'AMF', '001', '4400HXAMF001', 'AMF_001', '172.16.5.120', 33030, 'PNF', '-', '-', '-', '', '5,6', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (4, 'AUSF', '001', '4400HXAUSF001', 'AUSF_001', '172.16.5.130', 33030, 'PNF', '-', '-', '-', '', '7,8', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (5, 'UDM', '001', '4400HX1UDM001', 'UDM_001', '172.16.5.140', 33030, 'PNF', '-', '-', '-', '-', '9,10', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (6, 'SMF', '001', '4400HX1SMF001', 'SMF_001', '172.16.5.150', 33030, 'PNF', '-', '-', '-', '-', '11,12', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (7, 'PCF', '001', '4400HX1PCF001', 'PCF_001', '172.16.5.160', 33030, 'PNF', '-', '-', '-', '-', '13,14', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (8, 'NSSF', '001', '4400HX1NSF001', 'NSSF_001', '172.16.5.170', 33030, 'PNF', '-', '-', '-', '-', '15,16', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (9, 'NRF', '001', '4400HX1NRF001', 'NRF_001', '172.16.5.180', 33030, 'PNF', '-', '-', '-', '-', '17,18', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (10, 'UPF', '001', '4400HXUPF001', 'UPF_001', '172.16.5.190', 33030, 'PNF', '-', '-', '-', '', '19,20,21', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (11, 'LMF', '001', '4400HX1LMF001', 'LMF_001', '172.16.5.200', 33030, 'PNF', '-', '-', '-', '-', '22,23', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (12, 'NEF', '001', '4400HX1NEF001', 'NEF_001', '172.16.5.210', 33030, 'PNF', '-', '-', '-', '-', '24,25', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (13, 'MME', '001', '4400HXMME001', 'MME_001', '172.16.5.220', 33030, 'PNF', '-', '-', '-', '', '26,27', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (14, 'N3IWF', '001', '4400HXN3IWF001', 'N3IWF_001', '172.16.5.230', 33030, 'PNF', '-', '-', '-', '', '28,29', 0, '', '', 0, '', 0); + SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/ne_license.sql b/database/install/ne_license.sql index f3ef0310..058d3a5a 100644 --- a/database/install/ne_license.sql +++ b/database/install/ne_license.sql @@ -14,8 +14,8 @@ CREATE TABLE `ne_license` ( `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', `activation_request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '激活申请代码', `license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '激活授权文件', - `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '序列号', - `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '许可证到期日期', + `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '序列号', + `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '许可证到期日期', `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态 0无效 1有效', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', diff --git a/database/install/ne_version.sql b/database/install/ne_version.sql index 55b16cae..a3d64bd4 100644 --- a/database/install/ne_version.sql +++ b/database/install/ne_version.sql @@ -12,16 +12,16 @@ CREATE TABLE `ne_version` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', - `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前包名', - `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前版本', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '当前包名', + `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '当前版本', `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前软件包', - `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上一版本包名', - `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本', + `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '上一版本包名', + `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '上一版本', `pre_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本软件包', - `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '新版本报名', - `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版本', + `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '新版本报名', + `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '新版本', `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版软件包', - `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前状态 1当前版本 2上一版本 3有新版本', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '无0 当前状态 1当前版本 2上一版本 3有新版本', `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', diff --git a/database/upgrade/upg_ne_info.sql b/database/upgrade/upg_ne_info.sql index 8bf0da87..0647b3d8 100644 --- a/database/upgrade/upg_ne_info.sql +++ b/database/upgrade/upg_ne_info.sql @@ -7,30 +7,37 @@ CREATE TABLE IF NOT EXISTS `ne_info` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `rm_uid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `rm_uid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', `ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', - `port` int NULL DEFAULT NULL, + `port` int NULL DEFAULT 0 COMMENT '端口', `pv_flag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'PNF' COMMENT '\'PNF\',\'VNF\'', - `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '省份地域', - `vendor_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `dn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'MAC地址', - `status` int NULL DEFAULT 0 COMMENT '0离线 1在线 2配置待下发', - `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '省份地域', + `vendor_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-', + `dn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'MAC地址', `host_ids` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '网元主机ID组 数据格式(ssh,telnet,telnet)', + `status` int NULL DEFAULT 0 COMMENT '0离线 1在线 2配置待下发', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `idx_netype_neid`(`ne_type` ASC, `ne_id` ASC) USING BTREE + UNIQUE INDEX `ux_netype_neid`(`ne_type` ASC, `ne_id` ASC) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元信息表 对应一个网元版本、网元授权、网元主机' ROW_FORMAT = DYNAMIC; -- 20240511前旧表更新 ALTER TABLE `ne_info` COMMENT = '网元信息表 对应一个网元版本、网元授权、网元主机'; -ALTER TABLE `ne_info` ADD COLUMN IF NOT EXISTS `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `update_time`; +ALTER TABLE `ne_info` ADD COLUMN IF NOT EXISTS `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注' AFTER `status`; +ALTER TABLE `ne_info` ADD COLUMN IF NOT EXISTS `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `remark`; +ALTER TABLE `ne_info` ADD COLUMN IF NOT EXISTS `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; +ALTER TABLE `ne_info` ADD COLUMN IF NOT EXISTS `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; ALTER TABLE `ne_info` MODIFY COLUMN `pv_flag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'PNF' COMMENT '\'PNF\',\'VNF\'' AFTER `port`; ALTER TABLE `ne_info` MODIFY COLUMN `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '省份地域' AFTER `pv_flag`; ALTER TABLE `ne_info` MODIFY COLUMN `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'MAC地址' AFTER `dn`; -ALTER TABLE `ne_info` MODIFY COLUMN `status` int NULL DEFAULT 0 COMMENT '0离线 1在线 2配置待下发' AFTER `ne_address`; -ALTER TABLE `ne_info` MODIFY COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `status`; +ALTER TABLE `ne_info` MODIFY COLUMN `host_ids` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '网元主机ID组 数据格式(ssh,telnet,telnet)' AFTER `ne_address`; +ALTER TABLE `ne_info` MODIFY COLUMN `status` int NULL DEFAULT 0 COMMENT '0离线 1在线 2配置待下发' AFTER `host_ids`; +ALTER TABLE `ne_info` MODIFY COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_ne_license.sql b/database/upgrade/upg_ne_license.sql index 6e3aad74..a7f4f2ec 100644 --- a/database/upgrade/upg_ne_license.sql +++ b/database/upgrade/upg_ne_license.sql @@ -25,8 +25,8 @@ CREATE TABLE IF NOT EXISTS `ne_license` ( ALTER TABLE `ne_license` COMMENT = '网元授权激活信息'; ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `activation_request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '激活申请代码' AFTER `ne_id`; ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `license_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '激活授权文件' AFTER `activation_request_code`; -ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '序列号' AFTER `license_path`; -ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '许可证到期日期' AFTER `serial_num`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `serial_num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '序列号' AFTER `license_path`; +ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `expiry_date` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '许可证到期日期' AFTER `serial_num`; ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注' AFTER `status`; ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `remark`; ALTER TABLE `ne_license` ADD COLUMN IF NOT EXISTS `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; diff --git a/database/upgrade/upg_ne_version.sql b/database/upgrade/upg_ne_version.sql index 29eb4b9e..5aec8c5e 100644 --- a/database/upgrade/upg_ne_version.sql +++ b/database/upgrade/upg_ne_version.sql @@ -7,40 +7,40 @@ CREATE TABLE IF NOT EXISTS `ne_version` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', - `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前包名', - `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前版本', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '当前包名', + `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '当前版本', `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前软件包', - `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上一版本包名', - `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本', + `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '上一版本包名', + `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '上一版本', `pre_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本软件包', - `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '新版本报名', - `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版本', + `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '新版本报名', + `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '新版本', `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版软件包', - `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前状态 1当前版本 2上一版本 3有新版本', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '无0 当前状态 1当前版本 2上一版本 3有新版本', `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_type_id`(`ne_type` ASC, `ne_id` ASC) USING BTREE COMMENT '唯一网元类型和ID' -) ENGINE = InnoDB AUTO_INCREMENT = 61 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元版本信息' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元版本信息' ROW_FORMAT = DYNAMIC; -- 20240511前旧表更新 ALTER TABLE `ne_version` COMMENT = '网元版本信息'; -ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前包名' AFTER `ne_id`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '当前包名' AFTER `ne_id`; ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前软件包' AFTER `version`; -ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上一版本包名' AFTER `path`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `pre_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '上一版本包名' AFTER `path`; ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `pre_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本软件包' AFTER `pre_version`; -ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '新版本报名' AFTER `pre_path`; +ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '新版本报名' AFTER `pre_path`; ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版软件包' AFTER `new_version`; ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `status`; ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; ALTER TABLE `ne_version` ADD COLUMN IF NOT EXISTS `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; ALTER TABLE `ne_version` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型' AFTER `id`; ALTER TABLE `ne_version` MODIFY COLUMN `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID' AFTER `ne_type`; -ALTER TABLE `ne_version` MODIFY COLUMN `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前版本' AFTER `name`; -ALTER TABLE `ne_version` MODIFY COLUMN `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '上一版本' AFTER `pre_name`; -ALTER TABLE `ne_version` MODIFY COLUMN `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版本' AFTER `new_name`; +ALTER TABLE `ne_version` MODIFY COLUMN `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '当前版本' AFTER `name`; +ALTER TABLE `ne_version` MODIFY COLUMN `pre_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '上一版本' AFTER `pre_name`; +ALTER TABLE `ne_version` MODIFY COLUMN `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '新版本' AFTER `new_name`; ALTER TABLE `ne_version` MODIFY COLUMN `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '当前状态 1当前版本 2上一版本 3有新版本' AFTER `new_path`; ALTER TABLE `ne_version` MODIFY COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; ALTER TABLE `ne_version` DROP COLUMN IF EXISTS `file_path`; From 87efab9e78c9f49bc6d5f9fad3c0d96b64b0c245 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 16 May 2024 09:57:58 +0800 Subject: [PATCH 096/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E7=8A=B6=E6=80=81=E6=A3=80=E6=9F=A5=E6=97=A0=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E6=97=B6=E6=95=B0=E6=8D=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_license.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/modules/network_element/controller/ne_license.go b/src/modules/network_element/controller/ne_license.go index 64d60acb..9c171e8e 100644 --- a/src/modules/network_element/controller/ne_license.go +++ b/src/modules/network_element/controller/ne_license.go @@ -191,7 +191,6 @@ func (s *NeLicenseController) State(c *gin.Context) { c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) return } - neLicense.Status = "0" // 查询网元获取IP获取网元状态 neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neLicense.NeType, neLicense.NeId) @@ -203,15 +202,20 @@ func (s *NeLicenseController) State(c *gin.Context) { neLicense.SerialNum = fmt.Sprint(neState["sn"]) neLicense.ExpiryDate = fmt.Sprint(neState["expire"]) neLicense.Status = "1" + } else { + neLicense.SerialNum = "-" + neLicense.ExpiryDate = "-" + neLicense.Status = "0" } - // 在线时更新授权信息 + // 更新授权信息 + code, licensePath := s.neLicenseService.ReadLicenseInfo(neLicense) + neLicense.ActivationRequestCode = code + neLicense.LicensePath = licensePath + neLicense.UpdateBy = ctx.LoginUserToUserName(c) + s.neLicenseService.Update(neLicense) + if neLicense.Status == "1" { - code, licensePath := s.neLicenseService.ReadLicenseInfo(neLicense) - neLicense.ActivationRequestCode = code - neLicense.LicensePath = licensePath - neLicense.UpdateBy = ctx.LoginUserToUserName(c) - s.neLicenseService.Update(neLicense) c.JSON(200, result.OkData(map[string]string{ "sn": neLicense.SerialNum, "expire": neLicense.ExpiryDate, From 562238a936ad6e11b122d9f47694b4969b7e2675 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 16 May 2024 14:48:20 +0800 Subject: [PATCH 097/130] =?UTF-8?q?style:=20SQL=E8=84=9A=E6=9C=AC=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E7=BD=91=E5=85=83=E7=89=88=E6=9C=AC=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=AD=97=E5=85=B8=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/ne_version.sql | 2 +- database/install/sys_dict_data0.sql | 8 ++++++-- database/install/sys_dict_data1_i18n_zh.sql | 10 +++++++--- database/install/sys_dict_data2_i18n_en.sql | 9 +++++++-- database/install/sys_dict_type.sql | 1 + database/upgrade/upg_ne_version.sql | 2 +- database/upgrade/upg_sys_dict_data0.sql | 8 ++++++-- database/upgrade/upg_sys_dict_data1_i18n_zh.sql | 9 +++++++-- database/upgrade/upg_sys_dict_data2_i18n_en.sql | 9 +++++++-- database/upgrade/upg_sys_dict_type.sql | 1 + 10 files changed, 44 insertions(+), 15 deletions(-) diff --git a/database/install/ne_version.sql b/database/install/ne_version.sql index a3d64bd4..d3895665 100644 --- a/database/install/ne_version.sql +++ b/database/install/ne_version.sql @@ -21,7 +21,7 @@ CREATE TABLE `ne_version` ( `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '新版本报名', `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '新版本', `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版软件包', - `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '无0 当前状态 1当前版本 2上一版本 3有新版本', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '当前状态 0无 1当前版本 2上一版本 3有新版本', `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', diff --git a/database/install/sys_dict_data0.sql b/database/install/sys_dict_data0.sql index f93f366e..a0602501 100644 --- a/database/install/sys_dict_data0.sql +++ b/database/install/sys_dict_data0.sql @@ -162,8 +162,12 @@ INSERT INTO `sys_dict_data` VALUES (118, 0, 'dictData.ne_info_status.0', '0', 'n INSERT INTO `sys_dict_data` VALUES (119, 1, 'dictData.ne_info_status.1', '1', 'ne_info_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1709642164831, ''); INSERT INTO `sys_dict_data` VALUES (120, 2, 'dictData.ne_info_status.2', '2', 'ne_info_status', '', 'warning', '1', 'supervisor', 1706620000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (121, 3, 'dictData.ne_info_status.3', '3', 'ne_info_status', '', '', '1', 'supervisor', 1706620000000, 'supervisor', 1709642169871, ''); -INSERT INTO `sys_dict_data` VALUES (122, 0, 'ne_license_status.0', '0', 'ne_license_status', '', 'warning', '1', 'supervisor', 1706620000000, 'supervisor', 1712720196537, ''); -INSERT INTO `sys_dict_data` VALUES (123, 1, 'ne_license_status.1', '1', 'ne_license_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); +INSERT INTO `sys_dict_data` VALUES (122, 0, 'dictData.ne_license_status.0', '0', 'ne_license_status', '', 'warning', '1', 'supervisor', 1706620000000, 'supervisor', 1712720196537, ''); +INSERT INTO `sys_dict_data` VALUES (123, 1, 'dictData.ne_license_status.1', '1', 'ne_license_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); INSERT INTO `sys_dict_data` VALUES (124, 2, 'dictData.ne_host_authMode.2', '2', 'ne_host_authMode', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (125, 0, 'dictData.ne_version_status.0', '0', 'ne_version_status', '', 'default', '1', 'supervisor', 1706620000000, 'supervisor', 1712720196537, ''); +INSERT INTO `sys_dict_data` VALUES (126, 1, 'dictData.ne_version_status.1', '1', 'ne_version_status', '', 'success', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); +INSERT INTO `sys_dict_data` VALUES (127, 1, 'dictData.ne_version_status.2', '2', 'ne_version_status', '', 'purple', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); +INSERT INTO `sys_dict_data` VALUES (128, 1, 'dictData.ne_version_status.3', '3', 'ne_version_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index 0c884a65..66378ac8 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -648,8 +648,8 @@ INSERT INTO `sys_dict_data` VALUES (2121, 2121, 'log.operate.title.neSoftware', INSERT INTO `sys_dict_data` VALUES (2122, 2122, 'log.operate.title.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2123, 2123, 'menu.config.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2124, 2124, 'dictType.ne_license_status', '网元授权状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2125, 2125, 'ne_license_status.0', '无效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2126, 2126, 'ne_license_status.1', '有效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2125, 2125, 'dictData.ne_license_status.0', '无效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2126, 2126, 'dictData.ne_license_status.1', '有效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2127, 2127, 'menu.dashboard.mocn', 'MOCN', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2128, 2128, 'menu.monitor.cdr', '话单', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2129, 2129, 'menu.monitor.event', '事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -657,6 +657,10 @@ INSERT INTO `sys_dict_data` VALUES (2130, 2130, 'post.export.time', '创建时 INSERT INTO `sys_dict_data` VALUES (2131, 2131, 'role.export.time', '创建时间', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2132, 2132, 'dictData.ne_host_authMode.2', '免密认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2133, 2133, 'menu.ne.neConfPara5G', '网元公共配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); - +INSERT INTO `sys_dict_data` VALUES (2134, 2134, 'dictType.ne_version_status', '网元版本状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.0', '无', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2136, 2136, 'dictData.ne_version_status.1', '当前版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2137, 2137, 'dictData.ne_version_status.2', '上一版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2138, 2138, 'dictData.ne_version_status.3', '有新版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index 31820cdb..b9e9617d 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -648,8 +648,8 @@ INSERT INTO `sys_dict_data` VALUES (4121, 4121, 'log.operate.title.neSoftware', INSERT INTO `sys_dict_data` VALUES (4122, 4122, 'menu.config.neVersion', 'Ne Version', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4123, 4123, 'log.operate.title.neVersion', 'Ne Version', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4124, 4124, 'dictType.ne_license_status', 'NE License Status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4125, 4125, 'ne_license_status.0', 'Invalid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4126, 4126, 'ne_license_status.1', 'Valid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4125, 4125, 'dictData.ne_license_status.0', 'Invalid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4126, 4126, 'dictData.ne_license_status.1', 'Valid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4127, 4127, 'menu.dashboard.mocn', 'MOCN', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4128, 4128, 'menu.monitor.cdr', 'CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -657,5 +657,10 @@ INSERT INTO `sys_dict_data` VALUES (4130, 4130, 'post.export.time', 'Creation Ti INSERT INTO `sys_dict_data` VALUES (4131, 4131, 'role.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4132, 4132, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4133, 4133, 'menu.ne.neConfPara5G', 'NE Config Public 5G', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4134, 4134, 'dictType.ne_version_status', 'Network element version status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.0', 'Nothing', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4136, 4136, 'dictData.ne_version_status.1', 'Current', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4137, 4137, 'dictData.ne_version_status.2', 'Previous', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4138, 4138, 'dictData.ne_version_status.3', 'Has New', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_type.sql b/database/install/sys_dict_type.sql index 40a51233..62f0b9e4 100644 --- a/database/install/sys_dict_type.sql +++ b/database/install/sys_dict_type.sql @@ -75,6 +75,7 @@ INSERT INTO `sys_dict_type` VALUES (120, 'dictType.ne_host_authMode', 'ne_host_a INSERT INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId', 'ne_host_cmd_groupId', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT INTO `sys_dict_type` VALUES (122, 'dictType.ne_info_status', 'ne_info_status', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT INTO `sys_dict_type` VALUES (123, 'dictType.ne_license_status', 'ne_license_status', '1', 'supervisor', 1702020000000, '', 0, ''); +INSERT INTO `sys_dict_type` VALUES (124, 'dictType.ne_version_status', 'ne_version_status', '1', 'supervisor', 1702020000000, '', 0, ''); /*!40000 ALTER TABLE `sys_dict_type` ENABLE KEYS */; UNLOCK TABLES; diff --git a/database/upgrade/upg_ne_version.sql b/database/upgrade/upg_ne_version.sql index 5aec8c5e..6189fdff 100644 --- a/database/upgrade/upg_ne_version.sql +++ b/database/upgrade/upg_ne_version.sql @@ -16,7 +16,7 @@ CREATE TABLE IF NOT EXISTS `ne_version` ( `new_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '新版本报名', `new_version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '-' COMMENT '新版本', `new_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '新版软件包', - `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '无0 当前状态 1当前版本 2上一版本 3有新版本', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '当前状态 0无 1当前版本 2上一版本 3有新版本', `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', diff --git a/database/upgrade/upg_sys_dict_data0.sql b/database/upgrade/upg_sys_dict_data0.sql index 47072717..9f84fa5d 100644 --- a/database/upgrade/upg_sys_dict_data0.sql +++ b/database/upgrade/upg_sys_dict_data0.sql @@ -162,9 +162,13 @@ INSERT IGNORE INTO `sys_dict_data` VALUES (118, 0, 'dictData.ne_info_status.0', INSERT IGNORE INTO `sys_dict_data` VALUES (119, 1, 'dictData.ne_info_status.1', '1', 'ne_info_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1709642164831, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (120, 2, 'dictData.ne_info_status.2', '2', 'ne_info_status', '', 'warning', '1', 'supervisor', 1706620000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (121, 3, 'dictData.ne_info_status.3', '3', 'ne_info_status', '', '', '1', 'supervisor', 1706620000000, 'supervisor', 1709642169871, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (122, 0, 'ne_license_status.0', '0', 'ne_license_status', '', 'warning', '1', 'supervisor', 1706620000000, 'supervisor', 1712720196537, ''); -INSERT IGNORE INTO `sys_dict_data` VALUES (123, 1, 'ne_license_status.1', '1', 'ne_license_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (122, 0, 'dictData.ne_license_status.0', '0', 'ne_license_status', '', 'warning', '1', 'supervisor', 1706620000000, 'supervisor', 1712720196537, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (123, 1, 'dictData.ne_license_status.1', '1', 'ne_license_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (124, 2, 'dictData.ne_host_authMode.2', '2', 'ne_host_authMode', '', '', '1', 'supervisor', 1706620000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (125, 0, 'dictData.ne_version_status.0', '0', 'ne_version_status', '', 'default', '1', 'supervisor', 1706620000000, 'supervisor', 1712720196537, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (126, 1, 'dictData.ne_version_status.1', '1', 'ne_version_status', '', 'success', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (127, 1, 'dictData.ne_version_status.2', '2', 'ne_version_status', '', 'purple', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (128, 1, 'dictData.ne_version_status.3', '3', 'ne_version_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); -- 指定记录条件更新 UPDATE `sys_dict_data` SET `tag_type` = 'error' WHERE `dict_code` = 118; diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index dfa2dbc1..a7000d16 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -639,8 +639,8 @@ REPLACE INTO `sys_dict_data` VALUES (2121, 2121, 'log.operate.title.neSoftware', REPLACE INTO `sys_dict_data` VALUES (2122, 2122, 'log.operate.title.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2123, 2123, 'menu.config.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2124, 2124, 'dictType.ne_license_status', '网元授权状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2125, 2125, 'ne_license_status.0', '无效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2126, 2126, 'ne_license_status.1', '有效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2125, 2125, 'dictData.ne_license_status.0', '无效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2126, 2126, 'dictData.ne_license_status.1', '有效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2127, 2127, 'menu.dashboard.mocn', 'MOCN', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2128, 2128, 'menu.monitor.cdr', '话单', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2129, 2129, 'menu.monitor.event', '事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -648,5 +648,10 @@ REPLACE INTO `sys_dict_data` VALUES (2130, 2130, 'post.export.time', '创建时 REPLACE INTO `sys_dict_data` VALUES (2131, 2131, 'role.export.time', '创建时间', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2132, 2132, 'dictData.ne_host_authMode.2', '免密认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2133, 2133, 'menu.ne.neConfPara5G', '网元公共配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2134, 2134, 'dictType.ne_version_status', '网元版本状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.0', '无', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2136, 2136, 'dictData.ne_version_status.1', '当前版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2137, 2137, 'dictData.ne_version_status.2', '上一版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2138, 2138, 'dictData.ne_version_status.3', '有新版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 6aed8386..75bd94bc 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -634,13 +634,18 @@ REPLACE INTO `sys_dict_data` VALUES (4121, 4121, 'log.operate.title.neSoftware', REPLACE INTO `sys_dict_data` VALUES (4122, 4122, 'menu.config.neVersion', 'Ne Version', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4123, 4123, 'log.operate.title.neVersion', 'Ne Version', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4124, 4124, 'dictType.ne_license_status', 'NE License Status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4125, 4125, 'ne_license_status.0', 'Invalid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4126, 4126, 'ne_license_status.1', 'Valid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4125, 4125, 'dictData.ne_license_status.0', 'Invalid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4126, 4126, 'dictData.ne_license_status.1', 'Valid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4127, 4127, 'menu.dashboard.mocn', 'MOCN', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4128, 4128, 'menu.monitor.cdr', 'CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4130, 4130, 'post.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4131, 4131, 'role.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4132, 4132, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4134, 4134, 'dictType.ne_version_status', 'Network element version status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.0', 'Nothing', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4136, 4136, 'dictData.ne_version_status.1', 'Current', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4137, 4137, 'dictData.ne_version_status.2', 'Previous', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4138, 4138, 'dictData.ne_version_status.3', 'Has New', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_type.sql b/database/upgrade/upg_sys_dict_type.sql index d67c2c94..31667960 100644 --- a/database/upgrade/upg_sys_dict_type.sql +++ b/database/upgrade/upg_sys_dict_type.sql @@ -69,5 +69,6 @@ INSERT IGNORE INTO `sys_dict_type` VALUES (120, 'dictType.ne_host_authMode', 'ne INSERT IGNORE INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId', 'ne_host_cmd_groupId', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_type` VALUES (122, 'dictType.ne_info_status', 'ne_info_status', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_type` VALUES (123, 'dictType.ne_license_status', 'ne_license_status', '1', 'supervisor', 1702020000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_type` VALUES (124, 'dictType.ne_version_status', 'ne_version_status', '1', 'supervisor', 1702020000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; From 12f7eaa16dadb1e49e1dce0ca0f64a5f90fbb287 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 16 May 2024 14:50:36 +0800 Subject: [PATCH 098/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E8=A1=A8=E7=BB=93=E6=9E=84=E4=BD=93=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_info.go | 2 +- src/modules/network_element/model/ne_info.go | 35 ++++++++++--------- .../repository/ne_info.impl.go | 31 +++++++++------- 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index df5283d4..177a19b2 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -330,7 +330,7 @@ func (s *NeInfoController) Add(c *gin.Context) { s.neVersionService.Insert(neVersion) s.neLicenseService.Insert(neLicense) - body.UpdateBy = loginUserName + body.CreateBy = loginUserName insertId := s.neInfoService.Insert(body) if insertId != "" { c.JSON(200, result.OkData(insertId)) diff --git a/src/modules/network_element/model/ne_info.go b/src/modules/network_element/model/ne_info.go index 59ce4b71..373df591 100644 --- a/src/modules/network_element/model/ne_info.go +++ b/src/modules/network_element/model/ne_info.go @@ -2,22 +2,25 @@ package model // NeInfo 网元信息对象 ne_info type NeInfo struct { - ID string `json:"id"` - NeType string `json:"neType" binding:"required"` - NeId string `json:"neId" binding:"required"` - RmUID string `json:"rmUid"` - NeName string `json:"neName"` - IP string `json:"ip" binding:"required"` - Port int64 `json:"port" binding:"required,number,max=65535,min=1"` - PvFlag string `json:"pvFlag" binding:"oneof=PNF VNF"` // enum('PNF','VNF') - Province string `json:"province"` // 省份地域 - VendorName string `json:"vendorName"` - Dn string `json:"dn"` - NeAddress string `json:"neAddress"` // MAC地址 - Status string `json:"status"` // 0离线 1在线 2配置待下发 - UpdateBy string `json:"updateBy"` // 更新者 - UpdateTime string `json:"updateTime"` // 更新时间 - HostIDs string `json:"hostIds"` // 网元主机ID组 数据格式(ssh,telnet,telnet) + ID string `json:"id" gorm:"id"` + NeType string `json:"neType" gorm:"ne_type" binding:"required"` + NeId string `json:"neId" gorm:"ne_id" binding:"required"` + RmUID string `json:"rmUid" gorm:"rm_uid"` + NeName string `json:"neName" gorm:"ne_name"` + IP string `json:"ip" gorm:"ip" binding:"required"` + Port int64 `json:"port" gorm:"port" binding:"required,number,max=65535,min=1"` + PvFlag string `json:"pvFlag" gorm:"pv_flag" binding:"oneof=PNF VNF"` // ''PNF'',''VNF'' + Province string `json:"province" gorm:"province"` // 省份地域 + VendorName string `json:"vendorName" gorm:"vendor_name"` + Dn string `json:"dn" gorm:"dn"` + NeAddress string `json:"neAddress" gorm:"ne_address"` // MAC地址 + HostIDs string `json:"hostIds" gorm:"host_ids"` // 网元主机ID组 数据格式(ssh,telnet,telnet) + Status string `json:"status" gorm:"status"` // 0离线 1在线 2配置待下发 + Remark string `json:"remark" gorm:"remark"` // 备注 + CreateBy string `json:"createBy" gorm:"create_by"` // 创建者 + CreateTime int64 `json:"createTime" gorm:"create_time"` // 创建时间 + UpdateBy string `json:"updateBy" gorm:"update_by"` // 更新者 + UpdateTime int64 `json:"updateTime" gorm:"update_time"` // 更新时间 // ====== 非数据库字段属性 ====== diff --git a/src/modules/network_element/repository/ne_info.impl.go b/src/modules/network_element/repository/ne_info.impl.go index aced0060..631a7e6a 100644 --- a/src/modules/network_element/repository/ne_info.impl.go +++ b/src/modules/network_element/repository/ne_info.impl.go @@ -35,7 +35,7 @@ var neListSort = []string{ // 实例化数据层 NeInfoImpl 结构体 var NewNeInfoImpl = &NeInfoImpl{ - selectSql: `select id, ne_type, ne_id, rm_uid, ne_name, ip, port, pv_flag, province, vendor_name, dn, ne_address, status, update_time, update_by, host_ids from ne_info`, + selectSql: `select id, ne_type, ne_id, rm_uid, ne_name, ip, port, pv_flag, province, vendor_name, dn, ne_address, host_ids, status, remark, create_by, create_time, update_by, update_time from ne_info`, resultMap: map[string]string{ "id": "ID", @@ -50,10 +50,13 @@ var NewNeInfoImpl = &NeInfoImpl{ "vendor_name": "VendorName", "dn": "Dn", "ne_address": "NeAddress", - "status": "Status", - "update_time": "UpdateTime", - "update_by": "UpdateBy", "host_ids": "HostIDs", + "status": "Status", + "remark": "Remark", + "create_by": "CreateBy", + "create_time": "CreateTime", + "update_by": "UpdateBy", + "update_time": "UpdateTime", }, } @@ -300,15 +303,18 @@ func (r *NeInfoImpl) Insert(neInfo model.NeInfo) string { if neInfo.NeAddress != "" { params["ne_address"] = neInfo.NeAddress } + if neInfo.HostIDs != "" { + params["host_ids"] = neInfo.HostIDs + } if neInfo.Status != "" { params["status"] = neInfo.Status } - if neInfo.UpdateBy != "" { - params["update_by"] = neInfo.UpdateBy - params["update_time"] = time.Now().UnixMilli() + if neInfo.Remark != "" { + params["remark"] = neInfo.Remark } - if neInfo.HostIDs != "" { - params["host_ids"] = neInfo.HostIDs + if neInfo.CreateBy != "" { + params["create_by"] = neInfo.CreateBy + params["create_time"] = time.Now().UnixMilli() } // 构建执行语句 @@ -367,6 +373,10 @@ func (r *NeInfoImpl) Update(neInfo model.NeInfo) int64 { params["vendor_name"] = neInfo.VendorName params["dn"] = neInfo.Dn params["ne_address"] = neInfo.NeAddress + if neInfo.HostIDs != "" { + params["host_ids"] = neInfo.HostIDs + } + params["remark"] = neInfo.Remark if neInfo.Status != "" { params["status"] = neInfo.Status } @@ -374,9 +384,6 @@ func (r *NeInfoImpl) Update(neInfo model.NeInfo) int64 { params["update_by"] = neInfo.UpdateBy params["update_time"] = time.Now().UnixMilli() } - if neInfo.HostIDs != "" { - params["host_ids"] = neInfo.HostIDs - } // 构建执行语句 keys, values := repo.KeyValueByUpdate(params) From 9c7f7efb177c9b0b5fd452ac64f2977354a12371 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 16 May 2024 14:51:30 +0800 Subject: [PATCH 099/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85UPf=E9=BB=98=E8=AE=A4=E8=BD=BB?= =?UTF-8?q?=E9=87=8F=E7=89=88=EF=BC=88=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/service/ne_info.impl.go | 2 +- .../network_element/service/ne_version.impl.go | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 0c91200f..b81f0c0b 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -393,7 +393,7 @@ func (r *NeInfoImpl) neConfOAMData() map[string]any { "enable": true, "timer": 60, // 必改 }, - // "pubConfigPath": "/usr/local/etc/conf/para5G.yaml", + // "pubConfigPath": "/usr/local/etc/conf/para5G.yaml", // 网元只会读一次后续会置空,建议不放 } } diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index a50011ef..022614e9 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -277,13 +277,13 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MASK"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_GW"])) // 标准版 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) + // cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"])) + // cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) + // cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) // 轻量版 - // cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") - // cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") - // cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") } // NRF配置修改 @@ -324,7 +324,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/n3iwf/default/n3iwfcfg.yaml /usr/local/etc/n3iwf/n3iwfcfg.yaml \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC: 001/MCC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MNC: 01/MNC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.27/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["UDM_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.239/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["SMF_IP"])) From b1f6a34d471dcc7b747b13339b3ce99a6e4226ce Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 16 May 2024 18:55:25 +0800 Subject: [PATCH 100/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85NRF=5FIP=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_info.impl.go | 2 ++ src/modules/network_element/service/ne_version.impl.go | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index b81f0c0b..99ff0574 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -713,6 +713,8 @@ func (r *NeInfoImpl) neConfPara5GDataConvert(content map[string]any) map[string] "NSSF_IP": sbi["nssf_ip"].(string), "NRF_IP": sbi["nrf_ip"].(string), "UPF_IP": sbi["upf_ip"].(string), + "LMF_IP": sbi["lmf_ip"].(string), + "NEF_IP": sbi["nef_ip"].(string), "MME_IP": sbi["mme_ip"].(string), "N3IWF_IP": sbi["n3iwf_ip"].(string), } diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 022614e9..d331ce4b 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -205,6 +205,9 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["UDM_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.200/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["LMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NEF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- internet/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["DNN_DATA"])) } // AUSF配置修改 @@ -212,6 +215,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/ausf/default/ausfcfg.yaml /usr/local/etc/ausf/ausfcfg.yaml \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["AUSF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["NRF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MNC"])) } @@ -224,6 +228,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/as.yaml /usr/local/etc/udm/as.yaml \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/dnn.yaml /usr/local/etc/udm/dnn.yaml \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/scscfSet.yaml /usr/local/etc/udm/scscfSet.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["NRF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["UDM_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AUSF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AMF_IP"])) @@ -250,6 +255,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UDM_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["NRF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UPF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|10.2.1.0/24|%s|g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UE_POOL"])) } @@ -259,6 +265,8 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["AMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["UDM_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NEF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC"], para5GData["MCC"])) From 371a244013fd6c51bd1637495a4fa2284e55cc65 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 16 May 2024 19:19:59 +0800 Subject: [PATCH 101/130] =?UTF-8?q?style:=20SQL=E5=AD=97=E5=85=B8=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E9=87=8D=E5=A4=8D=E5=AE=9A=E4=B9=89ne=5Fversion=5Fsta?= =?UTF-8?q?tus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 9 ++++----- database/install/sys_dict_data2_i18n_en.sql | 9 ++++----- database/install/sys_dict_type.sql | 3 +-- database/upgrade/upg_sys_dict_data1_i18n_zh.sql | 9 ++++----- database/upgrade/upg_sys_dict_data2_i18n_en.sql | 10 +++++----- database/upgrade/upg_sys_dict_type.sql | 3 +-- database/upgrade/zupgrade.sql | 3 --- 7 files changed, 19 insertions(+), 27 deletions(-) diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index 66378ac8..dc08f664 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -657,10 +657,9 @@ INSERT INTO `sys_dict_data` VALUES (2130, 2130, 'post.export.time', '创建时 INSERT INTO `sys_dict_data` VALUES (2131, 2131, 'role.export.time', '创建时间', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2132, 2132, 'dictData.ne_host_authMode.2', '免密认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2133, 2133, 'menu.ne.neConfPara5G', '网元公共配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2134, 2134, 'dictType.ne_version_status', '网元版本状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.0', '无', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2136, 2136, 'dictData.ne_version_status.1', '当前版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2137, 2137, 'dictData.ne_version_status.2', '上一版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2138, 2138, 'dictData.ne_version_status.3', '有新版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2134, 2134, 'dictData.ne_version_status.0', '无', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.1', '当前版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2136, 2136, 'dictData.ne_version_status.2', '上一版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2137, 2137, 'dictData.ne_version_status.3', '有新版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index b9e9617d..29889435 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -657,10 +657,9 @@ INSERT INTO `sys_dict_data` VALUES (4130, 4130, 'post.export.time', 'Creation Ti INSERT INTO `sys_dict_data` VALUES (4131, 4131, 'role.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4132, 4132, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4133, 4133, 'menu.ne.neConfPara5G', 'NE Config Public 5G', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4134, 4134, 'dictType.ne_version_status', 'Network element version status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.0', 'Nothing', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4136, 4136, 'dictData.ne_version_status.1', 'Current', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4137, 4137, 'dictData.ne_version_status.2', 'Previous', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4138, 4138, 'dictData.ne_version_status.3', 'Has New', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4134, 4134, 'dictData.ne_version_status.0', 'Nothing', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.1', 'Current', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4136, 4136, 'dictData.ne_version_status.2', 'Previous', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4137, 4137, 'dictData.ne_version_status.3', 'Has New', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_type.sql b/database/install/sys_dict_type.sql index 62f0b9e4..fa2d8339 100644 --- a/database/install/sys_dict_type.sql +++ b/database/install/sys_dict_type.sql @@ -34,7 +34,7 @@ CREATE TABLE `sys_dict_type` ( `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`dict_id`) USING BTREE, UNIQUE KEY `dict_type` (`dict_type`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=123 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='字典类型表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='字典类型表'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -75,7 +75,6 @@ INSERT INTO `sys_dict_type` VALUES (120, 'dictType.ne_host_authMode', 'ne_host_a INSERT INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId', 'ne_host_cmd_groupId', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT INTO `sys_dict_type` VALUES (122, 'dictType.ne_info_status', 'ne_info_status', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT INTO `sys_dict_type` VALUES (123, 'dictType.ne_license_status', 'ne_license_status', '1', 'supervisor', 1702020000000, '', 0, ''); -INSERT INTO `sys_dict_type` VALUES (124, 'dictType.ne_version_status', 'ne_version_status', '1', 'supervisor', 1702020000000, '', 0, ''); /*!40000 ALTER TABLE `sys_dict_type` ENABLE KEYS */; UNLOCK TABLES; diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index a7000d16..e7b0b9c8 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -648,10 +648,9 @@ REPLACE INTO `sys_dict_data` VALUES (2130, 2130, 'post.export.time', '创建时 REPLACE INTO `sys_dict_data` VALUES (2131, 2131, 'role.export.time', '创建时间', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2132, 2132, 'dictData.ne_host_authMode.2', '免密认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2133, 2133, 'menu.ne.neConfPara5G', '网元公共配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2134, 2134, 'dictType.ne_version_status', '网元版本状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.0', '无', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2136, 2136, 'dictData.ne_version_status.1', '当前版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2137, 2137, 'dictData.ne_version_status.2', '上一版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2138, 2138, 'dictData.ne_version_status.3', '有新版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2134, 2134, 'dictData.ne_version_status.0', '无', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.1', '当前版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2136, 2136, 'dictData.ne_version_status.2', '上一版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2137, 2137, 'dictData.ne_version_status.3', '有新版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 75bd94bc..7ef5bdd0 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -642,10 +642,10 @@ REPLACE INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Event', REPLACE INTO `sys_dict_data` VALUES (4130, 4130, 'post.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4131, 4131, 'role.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4132, 4132, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4134, 4134, 'dictType.ne_version_status', 'Network element version status', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.0', 'Nothing', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4136, 4136, 'dictData.ne_version_status.1', 'Current', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4137, 4137, 'dictData.ne_version_status.2', 'Previous', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4138, 4138, 'dictData.ne_version_status.3', 'Has New', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4133, 4133, 'menu.ne.neConfPara5G', 'NE Config Public 5G', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4134, 4134, 'dictData.ne_version_status.0', 'Nothing', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.1', 'Current', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4136, 4136, 'dictData.ne_version_status.2', 'Previous', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4137, 4137, 'dictData.ne_version_status.3', 'Has New', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_type.sql b/database/upgrade/upg_sys_dict_type.sql index 31667960..a8ab8669 100644 --- a/database/upgrade/upg_sys_dict_type.sql +++ b/database/upgrade/upg_sys_dict_type.sql @@ -32,7 +32,7 @@ CREATE TABLE IF NOT EXISTS `sys_dict_type` ( `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', PRIMARY KEY (`dict_id`) USING BTREE, UNIQUE INDEX `dict_type`(`dict_type`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 115 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典类型表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典类型表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_dict_type @@ -69,6 +69,5 @@ INSERT IGNORE INTO `sys_dict_type` VALUES (120, 'dictType.ne_host_authMode', 'ne INSERT IGNORE INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId', 'ne_host_cmd_groupId', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_type` VALUES (122, 'dictType.ne_info_status', 'ne_info_status', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_type` VALUES (123, 'dictType.ne_license_status', 'ne_license_status', '1', 'supervisor', 1702020000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_type` VALUES (124, 'dictType.ne_version_status', 'ne_version_status', '1', 'supervisor', 1702020000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/zupgrade.sql b/database/upgrade/zupgrade.sql index a010a783..9602307e 100644 --- a/database/upgrade/zupgrade.sql +++ b/database/upgrade/zupgrade.sql @@ -33,9 +33,6 @@ ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `account_id`; INSERT IGNORE INTO `omc_db`.`config` (`id`, `module_name`, `config_tag`, `title_json`, `value`, `value_json`, `comment`) VALUES ('37', 'System', 'logo', '{\"cn\":\"系统LOGO\",\"en\":\"System LOGO\"}', 'logo30.png', '', ''); -ALTER TABLE `omc_db`.`security_log` -MODIFY COLUMN `id` int(10) NOT NULL AUTO_INCREMENT FIRST; - ALTER TABLE `omc_db`.`param_config` ADD COLUMN IF NOT EXISTS `method` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '*' COMMENT 'method allow: \"get\", \"get,post,put\", \"*\"' AFTER `top_display`; From 8b64dfa10d57e43655435ca1703a830dec788629 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 17 May 2024 10:51:27 +0800 Subject: [PATCH 102/130] =?UTF-8?q?del:=20=E7=A7=BB=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E7=9A=84mux=E8=B7=AF=E7=94=B1=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/maintenance/maintenance.go | 313 ----- features/monitor/monitor/model.go | 55 - features/monitor/monitor/monitor.go | 162 --- features/monitor/monitor/task.go | 233 ---- features/monitor/psnet/psnet.go | 93 -- features/security/account.go | 226 +-- features/security/service/service_account.go | 56 - features/sys_config/api_sys_config.go | 230 ---- features/sys_config/model/sys_config.go | 25 - .../sys_config/service/repo_sys_config.go | 336 ----- .../sys_config/service/service_sys_config.go | 155 --- features/sys_dict_data/api_sys_dict_data.go | 247 ---- features/sys_dict_data/model/sys_dict_data.go | 31 - .../sys_dict_data/repo/repo_sys_dict_data.go | 369 ----- .../service/service_sys_dict_data.go | 111 -- features/sys_dict_type/api_sys_dict_type.go | 253 ---- features/sys_dict_type/model/sys_dict_type.go | 23 - .../sys_dict_type/repo/repo_sys_dict_type.go | 330 ----- .../service/service_sys_dict_type.go | 211 --- features/sys_menu/api_sys_menu.go | 354 ----- features/sys_menu/consts/consts_menu.go | 24 - features/sys_menu/model/sys_menu.go | 46 - features/sys_menu/service/repo_sys_menu.go | 475 ------- features/sys_menu/service/service_sys_menu.go | 408 ------ features/sys_role/api_sys_role.go | 368 ----- features/sys_role/model/sys_role.go | 38 - features/sys_role/service/repo_sys_role.go | 362 ----- features/sys_role/service/service_sys_role.go | 165 --- features/sys_role_menu/model_sys_role_menu.go | 15 - features/sys_role_menu/repo_sys_role_menu.go | 86 -- features/sys_user/api_sys_user.go | 323 ----- features/sys_user/model/sys_user.go | 42 - features/sys_user/service/repo_sys_user.go | 578 -------- features/sys_user/service/service_sys_user.go | 150 -- features/sys_user_role/model_sys_user_role.go | 15 - features/sys_user_role/repo_sys_user_role.go | 87 -- features/trace/tcpdump.go | 339 ----- features/udm_user/api_udm_user.go | 1211 ----------------- features/udm_user/model/udm_auth_user.go | 13 - features/udm_user/model/udm_sub_user.go | 29 - features/udm_user/repo/repo_udm_auth_user.go | 276 ---- features/udm_user/repo/repo_udm_sub_user.go | 450 ------ .../udm_user/service/service_redis_data.go | 119 -- .../udm_user/service/service_udm_auth_user.go | 151 -- .../udm_user/service/service_udm_sub_user.go | 231 ---- lib/core/account/account.go | 54 - lib/dborm/dborm.go | 2 +- lib/midware/arrow_ip_addr.go | 1 + lib/midware/authorize.go | 1 + lib/midware/cors.go | 1 + lib/midware/operate_log.go | 10 +- lib/routes/routes.go | 82 +- 52 files changed, 9 insertions(+), 9956 deletions(-) delete mode 100644 features/maintenance/maintenance.go delete mode 100644 features/monitor/monitor/model.go delete mode 100644 features/monitor/monitor/monitor.go delete mode 100644 features/monitor/monitor/task.go delete mode 100644 features/monitor/psnet/psnet.go delete mode 100644 features/security/service/service_account.go delete mode 100644 features/sys_config/api_sys_config.go delete mode 100644 features/sys_config/model/sys_config.go delete mode 100644 features/sys_config/service/repo_sys_config.go delete mode 100644 features/sys_config/service/service_sys_config.go delete mode 100644 features/sys_dict_data/api_sys_dict_data.go delete mode 100644 features/sys_dict_data/model/sys_dict_data.go delete mode 100644 features/sys_dict_data/repo/repo_sys_dict_data.go delete mode 100644 features/sys_dict_data/service/service_sys_dict_data.go delete mode 100644 features/sys_dict_type/api_sys_dict_type.go delete mode 100644 features/sys_dict_type/model/sys_dict_type.go delete mode 100644 features/sys_dict_type/repo/repo_sys_dict_type.go delete mode 100644 features/sys_dict_type/service/service_sys_dict_type.go delete mode 100644 features/sys_menu/api_sys_menu.go delete mode 100644 features/sys_menu/consts/consts_menu.go delete mode 100644 features/sys_menu/model/sys_menu.go delete mode 100644 features/sys_menu/service/repo_sys_menu.go delete mode 100644 features/sys_menu/service/service_sys_menu.go delete mode 100644 features/sys_role/api_sys_role.go delete mode 100644 features/sys_role/model/sys_role.go delete mode 100644 features/sys_role/service/repo_sys_role.go delete mode 100644 features/sys_role/service/service_sys_role.go delete mode 100644 features/sys_role_menu/model_sys_role_menu.go delete mode 100644 features/sys_role_menu/repo_sys_role_menu.go delete mode 100644 features/sys_user/api_sys_user.go delete mode 100644 features/sys_user/model/sys_user.go delete mode 100644 features/sys_user/service/repo_sys_user.go delete mode 100644 features/sys_user/service/service_sys_user.go delete mode 100644 features/sys_user_role/model_sys_user_role.go delete mode 100644 features/sys_user_role/repo_sys_user_role.go delete mode 100644 features/trace/tcpdump.go delete mode 100644 features/udm_user/api_udm_user.go delete mode 100644 features/udm_user/model/udm_auth_user.go delete mode 100644 features/udm_user/model/udm_sub_user.go delete mode 100644 features/udm_user/repo/repo_udm_auth_user.go delete mode 100644 features/udm_user/repo/repo_udm_sub_user.go delete mode 100644 features/udm_user/service/service_redis_data.go delete mode 100644 features/udm_user/service/service_udm_auth_user.go delete mode 100644 features/udm_user/service/service_udm_sub_user.go delete mode 100644 lib/core/account/account.go diff --git a/features/maintenance/maintenance.go b/features/maintenance/maintenance.go deleted file mode 100644 index 2ee014a6..00000000 --- a/features/maintenance/maintenance.go +++ /dev/null @@ -1,313 +0,0 @@ -package maintenance - -import ( - "encoding/json" - "fmt" - "net/http" - "os" - "os/exec" - "path" - "runtime" - "time" - - "be.ems/lib/core/utils/ctx" - "be.ems/lib/dborm" - "be.ems/lib/log" - "be.ems/lib/services" - "be.ems/restagent/config" - "github.com/shirou/gopsutil/cpu" - "github.com/shirou/gopsutil/disk" - "github.com/shirou/gopsutil/mem" -) - -// (1) OMC能够对相关的文件系统资源、内存、CPU资源、数据存储空间、数据库空间等系统指标进行监控管理; -// 对于虚拟化部署OMC系统,能够对虚机内存、虚机CPU、虚拟存储空间、文件系统资源、数据库空间等指标进行监控,提供界面截图 ; - -// (2) 系统监控指标的采样时间和阈值可由用户设定,超过阈值将产生不同级别的告警,提供界面截图 ; - -// (3) OMC能够方便的查询数据库连接情况;并可手工干预数据库的连接,能方便的终结非法的数据库连接 ; - -// (4) 用户能方便的查询系统进程、应用进程等的进程名、进程类型、开始时间、运行主机等信息,提供界面截图 -// (5) 用户能方便的对系统进程、应用进程等做中断或者启动操作,提供界面截图 - -// (6) 对于文件系统资源、内存、CPU资源、数据存储空间、数据库空间等系统指标数据,要求OMC能够保存至少3个月,提供界面截图 ; -// (7) 用户可以按照需求自定义报表模板并生成OMC系统维护数据报表,提供界面截图 ; - -// (8) OMC具备自身告警管理功能,对于传统OMC系统,如:服务器单电源告警,存储硬盘告警、OMC系统软件故障等; -// 对于虚拟化OMC系统,如虚机告警、虚拟硬盘告警等,提供界面截图 。 - -var ( - // parameter config management - Uri = config.UriPrefix + "/maintenance/{apiVersion}/zz" - - // (1) OMC能够对相关的文件系统资源、内存、CPU资源、数据存储空间、数据库空间等系统指标进行监控管理; - UriPref = config.UriPrefix + "/maintenance/{apiVersion}/pref" - - // (6) 对于文件系统资源、内存、CPU资源、数据存储空间、数据库空间等系统指标数据,要求OMC能够保存至少3个月,提供界面截图 ; - UriPrefLog = config.UriPrefix + "/maintenance/{apiVersion}/prefLog" - - // (2) 系统监控指标的采样时间和阈值可由用户设定,超过阈值将产生不同级别的告警,提供界面截图 ; - UriConfig = config.UriPrefix + "/maintenance/{apiVersion}/config" - - // (3) OMC能够方便的查询数据库连接情况;并可手工干预数据库的连接,能方便的终结非法的数据库连接 - UriSqlClient = config.UriPrefix + "/maintenance/{apiVersion}/sqlClient" - - // (4) 用户能方便的查询系统进程、应用进程等的进程名、进程类型、开始时间、运行主机等信息,提供界面截图 - // (5) 用户能方便的对系统进程、应用进程等做中断或者启动操作,提供界面截图 - UriTop = config.UriPrefix + "/maintenance/{apiVersion}/top" -) - -func init() { - // 定時收集 TODO - prefLogSave("") -} - -func List(w http.ResponseWriter, r *http.Request) { - fmt.Println("zz List") - services.ResponseStatusOK200Null(w) -} - -// 性能指標 -func prefInfo(dirName string) map[string]any { - data := make(map[string]any) - - // 显示文件資源目录 - dirPath := "D://" - if runtime.GOOS == "linux" { - dirPath = "/home" - } - // 訪問下級 - if dirName != "" { - dirPath = path.Join(dirPath, dirName) - } - dir_list, e := os.ReadDir(dirPath) - if e != nil { - log.Error(e) - } - list := make([]map[string]any, 0) - for _, v := range dir_list { - o, err := v.Info() - if err != nil { - continue - } - list = append(list, map[string]any{ - "name": o.Name(), - "size": o.Size(), - "mode": o.Mode().String(), - "modTime": o.ModTime().Format("2006-01-02 15:04:05"), - "isDir": o.IsDir(), - }) - } - data["dirList"] = list - - // 文件資源使用率 - u, _ := disk.Usage(dirPath) - usedGB := int(u.Used) / (1024 * 1024 * 1024 * 1) - data["dirUse"] = fmt.Sprintf("%d", usedGB) - - // CPU使用率 - percent, err := cpu.Percent(time.Second, false) - if err != nil { - log.Error(err) - } - data["cpuUse"] = fmt.Sprintf("%.2f", percent[0]) - - // 内存使用率 - memInfo, err := mem.VirtualMemory() - if err != nil { - log.Error(err) - } - data["memUse"] = memInfo.UsedPercent - - // 獲取數據庫占用空間 - if dborm.DbClient.XEngine != nil { - conf := config.GetYamlConfig() - result, err := dborm.DbClient.XEngine.QueryString(`SELECT - CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size, - CONCAT(TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size, - CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free, - CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size - FROM information_schema.tables WHERE TABLE_SCHEMA = ?; - `, conf.Database.Name) - if err == nil { - data["dbInfo"] = result[0] - } else { - data["dbInfo"] = map[string]string{} - } - } - return data -} - -// 性能指標存入數據庫 -func prefLogSave(dirName string) { - if dborm.DbClient.XEngine != nil { - data := prefInfo(dirName) - - dirListByte, err := json.Marshal(data["dirList"]) - if err != nil { - log.Error(err) - } - dbInfoByte, err := json.Marshal(data["dbInfo"]) - if err != nil { - log.Error(err) - } - rse, err := dborm.DbClient.XEngine.Exec(`INSERT INTO sys_perf_data - (id, create_time, dir_used, dir_list, db_info, mem_used, cpu_used) - VALUES(NULL, NOW(), ?, ?, ?, ?, ?); - `, data["dirUse"], string(dirListByte), string(dbInfoByte), data["memUse"], data["cpuUse"]) - if err != nil { - log.Error(err) - } - fmt.Println(rse.LastInsertId()) - } -} - -// GET http://192.168.21.183:3040/api/rest/maintenance/v1/pref?dir=true -func Pref(w http.ResponseWriter, r *http.Request) { - // 知道下級文件資源目录 - dirName := r.URL.Query().Get("dirName") - data := prefInfo(dirName) - services.ResponseWithJson(w, http.StatusOK, data) -} - -// POST http://192.168.21.183:3040/api/rest/maintenance/v1/config -func Config(w http.ResponseWriter, r *http.Request) { - // json 請求參數獲取 - var bodyArgs struct { - Key string `json:"key"` - Value string `json:"value"` - } - err := ctx.ShouldBindJSON(r, &bodyArgs) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - - // 進行值更新 - if dborm.DbClient.XEngine != nil { - result, err := dborm.DbClient.XEngine.QueryString("SELECT * FROM information_schema.processlist") - if err != nil { - fmt.Println(err) - } - fmt.Println(result) - rse, err := dborm.DbClient.XEngine.Exec("UPDATE sys_config SET value = ? where id = ?", "true", 100) - if err != nil { - fmt.Println(err) - } - fmt.Println(rse) - } - - services.ResponseStatusOK200Null(w) -} - -// http://192.168.21.183:3040/api/rest/maintenance/v1/sqlClient?type=close -// http://192.168.21.183:3040/api/rest/maintenance/v1/sqlClient?type=connet -// http://192.168.21.183:3040/api/rest/maintenance/v1/sqlClient?type=user -func SqlClient(w http.ResponseWriter, r *http.Request) { - // 关闭 - isClose := r.URL.Query().Get("type") - if isClose == "close" && dborm.DbClient.XEngine != nil { - dborm.DbClient.XEngine.Close() - } - - // 重连 - isConnet := r.URL.Query().Get("type") - if isConnet == "connet" && dborm.DbClient.XEngine == nil { - conf := config.GetYamlConfig() - err := dborm.InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password, - conf.Database.Host, conf.Database.Port, conf.Database.Name, conf.Database.ConnParam) - if err != nil { - fmt.Println("dborm.initDbClient err:", err) - services.ResponseInternalServerError500DatabaseOperationFailed(w) - return - } - } - - // 查询实例 - isUser := r.URL.Query().Get("type") - if isUser == "user" && dborm.DbClient.XEngine != nil { - result, err := dborm.DbClient.XEngine.QueryString("SELECT * FROM information_schema.processlist") - if err != nil { - fmt.Println(err) - } - fmt.Println(result) - rse, err := dborm.DbClient.XEngine.Exec("KILL CONNECTION CONNECTION_ID()") - if err != nil { - fmt.Println(err) - } - fmt.Println(rse) - } - - // 进行连接测试 - err := dborm.DbClient.XEngine.Ping() - if err != nil { - fmt.Println(err) - } - services.ResponseStatusOK200Null(w) -} - -// GET http://192.168.21.183:3040/api/rest/maintenance/v1/top?grep= -func Top(w http.ResponseWriter, r *http.Request) { - // 過濾命令 - grep := r.URL.Query().Get("grep") - // 命令拼接 - var cmd *exec.Cmd - switch runtime.GOOS { - case "linux": - command := "ps -ef " - if grep != "" { - command += grep - } - cmd = exec.Command(command) - case "windows": - command := "wmic process list brief " - if grep != "" { - command += grep - } - cmd = exec.Command("cmd", "/C", command) - } - - out, err := cmd.CombinedOutput() - fmt.Println(string(out)) - if err != nil { - fmt.Println(err) - } - services.ResponseWithJson(w, http.StatusOK, string(out)) -} - -// PATCH http://192.168.21.183:3040/api/rest/maintenance/v1/top?ops=&name= -func TopOps(w http.ResponseWriter, r *http.Request) { - // json 請求參數獲取 - var bodyArgs struct { - Ops string `json:"ops"` - Pid string `json:"pid"` - } - err := ctx.ShouldBindJSON(r, &bodyArgs) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseNotFound404UriNotExist(w, r) - return - } - // 命令拼接 - var cmd *exec.Cmd - switch runtime.GOOS { - case "linux": - switch bodyArgs.Ops { - case "kill": - cmd = exec.Command("kill", "-9", bodyArgs.Pid) - } - case "windows": - switch bodyArgs.Ops { - case "kill": - cmd = exec.Command("cmd", "/C", "taskkill", "-PID", bodyArgs.Pid, "-F") - } - } - - out, err := cmd.CombinedOutput() - fmt.Println(string(out)) - if err != nil { - fmt.Println(err) - } - services.ResponseWithJson(w, http.StatusOK, string(out)) -} diff --git a/features/monitor/monitor/model.go b/features/monitor/monitor/model.go deleted file mode 100644 index 8997a226..00000000 --- a/features/monitor/monitor/model.go +++ /dev/null @@ -1,55 +0,0 @@ -package monitor - -import "time" - -type MonitorBase struct { - ID uint `xorm:"id" json:"id"` - CreatedAt time.Time `xorm:"created_at" json:"createdAt"` - UpdatedAt time.Time `xorm:"updated_at" json:"updatedAt"` - - Cpu float64 `xorm:"cpu" json:"cpu"` - - LoadUsage float64 `xorm:"load_usage" json:"loadUsage"` - CpuLoad1 float64 `xorm:"cpu_load1" json:"cpuLoad1"` - CpuLoad5 float64 `xorm:"cpu_load5" json:"cpuLoad5"` - CpuLoad15 float64 `xorm:"cpu_load15" json:"cpuLoad15"` - - Memory float64 `xorm:"memory" json:"memory"` - - DbSize uint `xorm:"db_size" json:"dbSize"` -} - -type MonitorIO struct { - ID uint `xorm:"id" json:"id"` - CreatedAt time.Time `xorm:"created_at" json:"createdAt"` - UpdatedAt time.Time `xorm:"updated_at" json:"updatedAt"` - - Name string `xorm:"name" json:"name"` - Read uint64 `xorm:"read" json:"read"` - Write uint64 `xorm:"write" json:"write"` - Count uint64 `xorm:"count" json:"count"` - Time uint64 `xorm:"time" json:"time"` -} - -type MonitorNetwork struct { - ID uint `xorm:"id" json:"id"` - CreatedAt time.Time `xorm:"created_at" json:"createdAt"` - UpdatedAt time.Time `xorm:"updated_at" json:"updatedAt"` - - Name string `xorm:"name" json:"name"` - Up float64 `xorm:"up" json:"up"` - Down float64 `xorm:"down" json:"down"` -} - -type MonitorSearch struct { - Param string `json:"param" validate:"required,oneof=all cpu memory load io network"` - Info string `json:"info"` - StartTime time.Time `json:"startTime"` - EndTime time.Time `json:"endTime"` -} - -type MonitorData struct { - Param string `json:"param" validate:"required,oneof=cpu memory load io network"` - Date []time.Time `json:"date"` - Value []interface{} `json:"value"` -} diff --git a/features/monitor/monitor/monitor.go b/features/monitor/monitor/monitor.go deleted file mode 100644 index 4409e7dc..00000000 --- a/features/monitor/monitor/monitor.go +++ /dev/null @@ -1,162 +0,0 @@ -package monitor - -import ( - "net/http" - "sort" - "strings" - "time" - - "be.ems/lib/core/utils/ctx" - "be.ems/lib/dborm" - "be.ems/lib/services" - "be.ems/restagent/config" - "github.com/shirou/gopsutil/disk" - "github.com/shirou/gopsutil/net" -) - -// 点击【主机 - 监控】菜单,进入监控报表,直观的了解服务器的运行状态,包含【平均负载】、【CPU性能监控】、【内存使用监控】、【磁盘IO监控】、【网络IO监控】 - -// 可以查看昨天,今天,最近7天,最近30天,自定义时间的监控指标情况。 -// 默认监控是开启的,可以在【面板设置 - 监控】页面中根据需求对监控进行开启和关闭。 -// 监控数据默认保存30天,可以自行修改,也可手动清理该日志。 - -var ( - // IP地址 - UriIPAddr = config.DefaultUriPrefix + "/monitor/{apiVersion}/monitor/ipaddr" - // 可选网络 - UriNetOpt = config.DefaultUriPrefix + "/monitor/{apiVersion}/monitor/netoptions" - // 可选磁盘 - UriIoOpt = config.DefaultUriPrefix + "/monitor/{apiVersion}/monitor/iooptions" - // 加载 - UriLoad = config.DefaultUriPrefix + "/monitor/{apiVersion}/monitor/load" - - // IP地址 - UriIPAddrOAM = config.UriPrefix + "/monitor/{apiVersion}/monitor/ipaddr" - // 可选网络 - UriNetOptOAM = config.UriPrefix + "/monitor/{apiVersion}/monitor/netoptions" - // 可选磁盘 - UriIoOptOAM = config.UriPrefix + "/monitor/{apiVersion}/monitor/iooptions" - // 加载 - UriLoadOAM = config.UriPrefix + "/monitor/{apiVersion}/monitor/load" -) - -// IPAddr IP地址 -func IPAddr(w http.ResponseWriter, r *http.Request) { - ipAddrs := []map[string]string{} - interfaces, err := net.Interfaces() - if err == nil { - for _, iface := range interfaces { - addrs := map[string]string{} - for _, v := range iface.Addrs { - prefix := strings.Split(v.Addr, "/")[0] - if strings.Contains(prefix, "::") { - addrs["IPv6"] = prefix - } - if strings.Contains(prefix, ".") { - addrs["IPv4"] = prefix - } - } - ipAddrs = append(ipAddrs, addrs) - } - } - services.ResponseWithJson(w, 200, ipAddrs) -} - -// Netoptions 可选网络 -func Netoptions(w http.ResponseWriter, r *http.Request) { - netStat, _ := net.IOCounters(true) - var options []string - options = append(options, "all") - for _, net := range netStat { - options = append(options, net.Name) - } - sort.Strings(options) - services.ResponseWithJson(w, 200, options) -} - -// Iooptions 可选磁盘 -func Iooptions(w http.ResponseWriter, r *http.Request) { - diskStat, _ := disk.IOCounters() - var options []string - options = append(options, "all") - for _, net := range diskStat { - options = append(options, net.Name) - } - sort.Strings(options) - services.ResponseWithJson(w, 200, options) -} - -// LoadMonitor 载入监控 -func LoadMonitor(w http.ResponseWriter, r *http.Request) { - // json 請求參數獲取 - var bodyArgs MonitorSearch - err := ctx.ShouldBindJSON(r, &bodyArgs) - if err != nil || dborm.DbClient.XEngine == nil { - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - - loc := time.Now().Location() - bodyArgs.StartTime = bodyArgs.StartTime.In(loc) - bodyArgs.EndTime = bodyArgs.EndTime.In(loc) - - var backdatas []MonitorData - if bodyArgs.Param == "all" || bodyArgs.Param == "cpu" || bodyArgs.Param == "memory" || bodyArgs.Param == "load" { - var bases []MonitorBase - err := dborm.DbClient.XEngine.Table("monitor_base"). - Where("created_at > ? AND created_at < ?", bodyArgs.StartTime, bodyArgs.EndTime). - Desc("created_at"). - Find(&bases) - if err != nil { - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - - var itemData MonitorData - itemData.Param = "base" - for _, base := range bases { - itemData.Date = append(itemData.Date, base.CreatedAt) - itemData.Value = append(itemData.Value, base) - } - backdatas = append(backdatas, itemData) - } - if bodyArgs.Param == "all" || bodyArgs.Param == "io" { - var bases []MonitorIO - err := dborm.DbClient.XEngine.Table("monitor_io"). - Where("created_at > ? AND created_at < ?", bodyArgs.StartTime, bodyArgs.EndTime). - Desc("created_at"). - Find(&bases) - if err != nil { - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - - var itemData MonitorData - itemData.Param = "io" - for _, base := range bases { - itemData.Date = append(itemData.Date, base.CreatedAt) - itemData.Value = append(itemData.Value, base) - } - backdatas = append(backdatas, itemData) - } - if bodyArgs.Param == "all" || bodyArgs.Param == "network" { - var bases []MonitorNetwork - err := dborm.DbClient.XEngine.Table("monitor_network"). - Where("name = ? AND created_at > ? AND created_at < ?", bodyArgs.Info, bodyArgs.StartTime, bodyArgs.EndTime). - Desc("created_at"). - Find(&bases) - if err != nil { - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - - var itemData MonitorData - itemData.Param = "network" - for _, base := range bases { - itemData.Date = append(itemData.Date, base.CreatedAt) - itemData.Value = append(itemData.Value, base) - } - backdatas = append(backdatas, itemData) - } - services.ResponseWithJson(w, 200, backdatas) -} diff --git a/features/monitor/monitor/task.go b/features/monitor/monitor/task.go deleted file mode 100644 index a30521a4..00000000 --- a/features/monitor/monitor/task.go +++ /dev/null @@ -1,233 +0,0 @@ -package monitor - -import ( - "encoding/json" - "fmt" - "strconv" - "time" - - "be.ems/lib/dborm" - "be.ems/lib/log" - "be.ems/restagent/config" - "github.com/robfig/cron/v3" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/disk" - "github.com/shirou/gopsutil/v3/load" - "github.com/shirou/gopsutil/v3/mem" - "github.com/shirou/gopsutil/v3/net" -) - -type MonitorService struct{} - -type IMonitorService interface { - Run() -} - -func NewIMonitorService() IMonitorService { - return &MonitorService{} -} - -func (m *MonitorService) Run() { - // monitorStatus, _ := dborm.XormGetConfig("SystemMonitor", "MonitorStatus") - // if monitorStatus["value"] == "disable" { - // return - // } - var itemModel MonitorBase - itemModel.CreatedAt = time.Now() - itemModel.UpdatedAt = time.Now() - - totalPercent, _ := cpu.Percent(3*time.Second, false) - if len(totalPercent) == 1 { - itemModel.Cpu = totalPercent[0] - } - cpuCount, _ := cpu.Counts(false) - - loadInfo, _ := load.Avg() - itemModel.CpuLoad1 = loadInfo.Load1 - itemModel.CpuLoad5 = loadInfo.Load5 - itemModel.CpuLoad15 = loadInfo.Load15 - itemModel.LoadUsage = loadInfo.Load1 / (float64(cpuCount*2) * 0.75) * 100 - - memoryInfo, _ := mem.VirtualMemory() - itemModel.Memory = memoryInfo.UsedPercent - - var dataSize int - conf := config.GetYamlConfig() - result, err := dborm.DbClient.XEngine.QueryString("SELECT SUM(data_length) AS data_size FROM information_schema.tables WHERE TABLE_SCHEMA = ?;", conf.Database.Name) - if err != nil { - dataSize = 0 - } else { - v, _ := strconv.Atoi(result[0]["data_size"]) - dataSize = v - } - itemModel.DbSize = uint(dataSize) - - _, errx := dborm.DbClient.XEngine.Table("monitor_base").Insert(itemModel) - if errx != nil { - log.Errorf("Insert basic monitoring data failed, err: %v", err) - } - - go loadDiskIO() - go loadNetIO() - - // 删除保留的记录 - // monitorStoreDays, _ := dborm.XormGetConfig("SystemMonitor", "MonitorStoreDays") - // if monitorStoreDays["value"] != "" { - // return - // } - // storeDays, err := strconv.Atoi(MonitorStoreDays.Value) - // if err != nil { - // timeForDelete := time.Now().AddDate(0, 0, -storeDays) - // DelMonitorBase(timeForDelete) - // DelMonitorIO(timeForDelete) - // DelMonitorNet(timeForDelete) - // } - -} - -func loadDiskIO() { - ioStat, _ := disk.IOCounters() - - time.Sleep(60 * time.Second) - - ioStat2, _ := disk.IOCounters() - var ioList []MonitorIO - for _, io2 := range ioStat2 { - for _, io1 := range ioStat { - if io2.Name == io1.Name { - var itemIO MonitorIO - itemIO.CreatedAt = time.Now() - itemIO.UpdatedAt = time.Now() - - itemIO.Name = io1.Name - if io2.ReadBytes != 0 && io1.ReadBytes != 0 && io2.ReadBytes > io1.ReadBytes { - itemIO.Read = uint64(float64(io2.ReadBytes-io1.ReadBytes) / 60) - } - if io2.WriteBytes != 0 && io1.WriteBytes != 0 && io2.WriteBytes > io1.WriteBytes { - itemIO.Write = uint64(float64(io2.WriteBytes-io1.WriteBytes) / 60) - } - - if io2.ReadCount != 0 && io1.ReadCount != 0 && io2.ReadCount > io1.ReadCount { - itemIO.Count = uint64(float64(io2.ReadCount-io1.ReadCount) / 60) - } - writeCount := uint64(0) - if io2.WriteCount != 0 && io1.WriteCount != 0 && io2.WriteCount > io1.WriteCount { - writeCount = uint64(float64(io2.WriteCount-io1.WriteCount) / 60) - } - if writeCount > itemIO.Count { - itemIO.Count = writeCount - } - - if io2.ReadTime != 0 && io1.ReadTime != 0 && io2.ReadTime > io1.ReadTime { - itemIO.Time = uint64(float64(io2.ReadTime-io1.ReadTime) / 60) - } - writeTime := uint64(0) - if io2.WriteTime != 0 && io1.WriteTime != 0 && io2.WriteTime > io1.WriteTime { - writeTime = uint64(float64(io2.WriteTime-io1.WriteTime) / 60) - } - if writeTime > itemIO.Time { - itemIO.Time = writeTime - } - ioList = append(ioList, itemIO) - break - } - } - } - _, err := dborm.DbClient.XEngine.Table("monitor_io").Insert(ioList) - if err != nil { - log.Errorf("Insert io monitoring data failed, err: %v", err) - } -} - -func loadNetIO() { - netStat, _ := net.IOCounters(true) - netStatAll, _ := net.IOCounters(false) - - time.Sleep(60 * time.Second) - - netStat2, _ := net.IOCounters(true) - var netList []MonitorNetwork - for _, net2 := range netStat2 { - for _, net1 := range netStat { - if net2.Name == net1.Name { - var itemNet MonitorNetwork - itemNet.CreatedAt = time.Now() - itemNet.UpdatedAt = time.Now() - - itemNet.Name = net1.Name - - if net2.BytesSent != 0 && net1.BytesSent != 0 && net2.BytesSent > net1.BytesSent { - itemNet.Up = float64(net2.BytesSent-net1.BytesSent) / 1024 / 60 - } - if net2.BytesRecv != 0 && net1.BytesRecv != 0 && net2.BytesRecv > net1.BytesRecv { - itemNet.Down = float64(net2.BytesRecv-net1.BytesRecv) / 1024 / 60 - } - netList = append(netList, itemNet) - break - } - } - } - netStatAll2, _ := net.IOCounters(false) - for _, net2 := range netStatAll2 { - for _, net1 := range netStatAll { - if net2.Name == net1.Name { - var itemNet MonitorNetwork - itemNet.Name = net1.Name - if net2.BytesSent != 0 && net1.BytesSent != 0 && net2.BytesSent > net1.BytesSent { - itemNet.Up = float64(net2.BytesSent-net1.BytesSent) / 1024 / 60 - } - - if net2.BytesRecv != 0 && net1.BytesRecv != 0 && net2.BytesRecv > net1.BytesRecv { - itemNet.Down = float64(net2.BytesRecv-net1.BytesRecv) / 1024 / 60 - } - netList = append(netList, itemNet) - break - } - } - } - - _, err := dborm.DbClient.XEngine.Table("monitor_network").Insert(netList) - if err != nil { - log.Errorf("Insert network monitoring data failed, err: %v", err) - } -} - -var c *cron.Cron -var monitorCronID int - -func init() { - c = cron.New() - c.Start() - monitorCronID = 0 -} - -// StartMonitor 开始监控任务 removeBefore删除上次任务,间隔interval分钟 -func StartMonitor(removeBefore bool, interval string) error { - if removeBefore { - c.Remove(cron.EntryID(monitorCronID)) - } - - // 读取配置 - if interval == "" { - v, err := dborm.XormGetConfig("SystemMonitor", "sampleTime") - if err != nil { - return err - } - data := make(map[string]any) - err = json.Unmarshal([]byte(v["value_json"].(string)), &data) - if err != nil { - log.Error("json StartMonitor:%s", err.Error()) - return err - } - interval = data["sampleTime"].(string) - } - - imservice := NewIMonitorService() - monitorID, err := c.AddJob(fmt.Sprintf("@every %sm", interval), imservice) - if err != nil { - return err - } - imservice.Run() - monitorCronID = int(monitorID) - return nil -} diff --git a/features/monitor/psnet/psnet.go b/features/monitor/psnet/psnet.go deleted file mode 100644 index fa0ca827..00000000 --- a/features/monitor/psnet/psnet.go +++ /dev/null @@ -1,93 +0,0 @@ -package psnet - -import ( - "fmt" - "net" - "net/http" - "time" - - "be.ems/lib/core/utils/ctx" - "be.ems/lib/log" - "be.ems/lib/services" - "be.ems/lib/wsinfo" - "be.ems/restagent/config" - "github.com/gorilla/websocket" - "github.com/shirou/gopsutil/process" -) - -var ( - // websockte通信 - UriWs = config.DefaultUriPrefix + "/monitor/{apiVersion}/psnet/ws" - // 停止进程 - UriStop = config.DefaultUriPrefix + "/monitor/{apiVersion}/psnet/stop" - - // 检查ip端口请求 - UriPing = config.DefaultUriPrefix + "/monitor/{apiVersion}/psnet/ping" -) - -// 进程管理 -var wsUpgrade = websocket.Upgrader{ - CheckOrigin: func(r *http.Request) bool { - return true - }, -} - -// ProcessWs -func ProcessWs(w http.ResponseWriter, r *http.Request) { - ws, err := wsUpgrade.Upgrade(w, r, nil) - if err != nil { - return - } - wsClient := wsinfo.NewWsClient("processClient", ws) - go wsClient.Read() - go wsClient.Write() -} - -// 停止进程 {"PID":30040} -func StopProcess(w http.ResponseWriter, r *http.Request) { - // json 請求參數獲取 - var bodyArgs struct { - PID int32 `json:"PID" validate:"required"` - } - err := ctx.ShouldBindJSON(r, &bodyArgs) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - - proc, err := process.NewProcess(bodyArgs.PID) - if err != nil { - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - if err := proc.Kill(); err != nil { - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - services.ResponseStatusOK200Null(w) -} - -// 检查ip端口请求 -func Ping(w http.ResponseWriter, r *http.Request) { - // json 請求參數獲取 - var bodyArgs struct { - Host string `json:"host" validate:"required"` - Port string `json:"port" validate:"required"` - } - err := ctx.ShouldBindJSON(r, &bodyArgs) - if err != nil { - log.Error("io.ReadAll is failed:", err) - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - - conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%s", bodyArgs.Host, bodyArgs.Port), 3*time.Second) - if err != nil { - services.ResponseErrorWithJson(w, 400, err.Error()) - return - } - defer conn.Close() - services.ResponseStatusOK200Null(w) - -} diff --git a/features/security/account.go b/features/security/account.go index c1190fc3..9440aba9 100644 --- a/features/security/account.go +++ b/features/security/account.go @@ -2,30 +2,16 @@ package security import ( "encoding/json" - "fmt" - "image/color" "io" "net/http" - "strconv" "strings" - "time" - "be.ems/features/security/service" - sysConfigService "be.ems/features/sys_config/service" - "be.ems/lib/core/account" - "be.ems/lib/core/cache" - "be.ems/lib/core/constants/cachekey" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/vo/result" "be.ems/lib/dborm" "be.ems/lib/global" "be.ems/lib/log" "be.ems/lib/oauth" "be.ems/lib/services" "be.ems/restagent/config" - srcConfig "be.ems/src/framework/config" - "be.ems/src/framework/redis" - "github.com/mojocn/base64Captcha" ) var ( @@ -34,22 +20,6 @@ var ( CustomUriOauthToken = config.UriPrefix + "/securityManagement/{apiVersion}/{elementTypeValue}/token" CustomUriOauthHandshake = config.UriPrefix + "/securityManagement/{apiVersion}/{elementTypeValue}/handshake" - - // 系统登录 - UriLogin = config.DefaultUriPrefix + "/securityManagement/{apiVersion}/login" - CustomUriLogin = config.UriPrefix + "/securityManagement/{apiVersion}/login" - - // 获取验证码 - UriCaptchaImage = config.DefaultUriPrefix + "/securityManagement/{apiVersion}/captchaImage" - CustomUriCaptchaImage = config.UriPrefix + "/securityManagement/{apiVersion}/captchaImage" - - // 登录用户信息 - UriUserInfo = config.DefaultUriPrefix + "/securityManagement/{apiVersion}/getUserInfo" - CustomUriUserInfo = config.UriPrefix + "/securityManagement/{apiVersion}/getUserInfo" - - // 登录用户路由信息 - UriRouters = config.DefaultUriPrefix + "/securityManagement/{apiVersion}/getRouters" - CustomUriRouters = config.UriPrefix + "/securityManagement/{apiVersion}/getRouters" ) func LoginFromOMC(w http.ResponseWriter, r *http.Request) { @@ -134,14 +104,8 @@ func LoginFromOMC(w http.ResponseWriter, r *http.Request) { } if user != nil { - // 缓存用户信息 - account.CacheLoginUser(user) - redis.SetByExpire("", "session_token", token, time.Second*1800) - // 角色权限集合,管理员拥有所有权限 - userId := fmt.Sprint(user.Id) - isAdmin := srcConfig.IsAdmin(userId) - roles, perms := service.NewServiceAccount.RoleAndMenuPerms(userId, isAdmin) - services.ResponseStatusOK200LoginWhitRP(w, token, user, roles, perms) + empty := []string{} + services.ResponseStatusOK200LoginWhitRP(w, token, user, empty, empty) return } services.ResponseBadRequest400IncorrectLogin(w) @@ -223,189 +187,3 @@ func HandshakeFromOMC(w http.ResponseWriter, r *http.Request) { } services.ResponseStatusOK200Null(w) } - -// 系统登录 -// -// POST /login -func LoginOMC(w http.ResponseWriter, r *http.Request) { - log.Info("LoginOMC processing... ") - var body struct { - Username string `json:"username" binding:"required"` // Username 用户名 - Password string `json:"password" binding:"required"` // Password 用户密码 - Code string `json:"code"` // Code 验证码 - UUID string `json:"uuid"` // UUID 验证码唯一标识 - } - err := ctx.ShouldBindJSON(r, &body) - if err != nil { - log.Error("Invalid Json Format") - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - // response 400-5 - if body.Username == "" || body.Password == "" { - log.Error("Wrong parameter value") - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 校验验证码 - // 从数据库配置获取验证码开关 true开启,false关闭 - captchaEnabledStr := sysConfigService.NewServiceSysConfig.SelectConfigValueByKey("sys.account.captchaEnabled") - captchaEnabled, err := strconv.ParseBool(captchaEnabledStr) - if err != nil { - captchaEnabled = false - } - if captchaEnabled { - if body.Code == "" || body.UUID == "" { - log.Error("Authentication failed, mismatch captcha") - ctx.JSON(w, 400, result.CodeMsg(400, "Verification code information error")) - return - } - verifyKey := cachekey.CAPTCHA_CODE_KEY + body.UUID - captcha, ok := cache.GetLocalTTL(verifyKey) - if captcha == nil || !ok { - log.Error("Authentication failed, captcha emtry") - ctx.JSON(w, 400, result.CodeMsg(400, "The verification code has expired")) - return - } - cache.DeleteLocalTTL(verifyKey) - if captcha.(string) != body.Code { - log.Error("Authentication failed, not match captcha") - ctx.JSON(w, 400, result.CodeMsg(400, "Verification code error")) - return - } - } - - validUser, user, err := dborm.XormCheckLoginUser(body.Username, body.Password, config.GetYamlConfig().Auth.Crypt) - if !validUser || err != nil { - // response 400-4 - log.Error("Authentication failed, mismatch user or password") - ctx.JSON(w, 400, result.CodeMsg(400, err.Error())) - return - } - - token := oauth.GenRandToken("omc") // Generate new token to session ID - sourceAddr := r.RemoteAddr[:strings.Index(r.RemoteAddr, ":")] - affected, err := dborm.XormInsertSession(body.Username, sourceAddr, token, - config.GetExpiresFromConfig(), config.GetYamlConfig().Auth.Session) - if err != nil { - log.Error("Failed to XormInsertSession:", err) - if affected == -1 { - services.ResponseForbidden403MultiLoginNotAllowed(w) - } else { - services.ResponseBadRequest400IncorrectLogin(w) - } - - return - } - - if user != nil { - // 缓存用户信息 - account.CacheLoginUser(user) - redis.SetByExpire("", "session_token", token, time.Second*1800) - ctx.JSON(w, 200, result.OkData(map[string]any{ - "accessToken": token, - })) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 获取验证码 -// -// GET /captchaImage -func CaptchaImage(w http.ResponseWriter, r *http.Request) { - configService := sysConfigService.NewServiceSysConfig - - // 从数据库配置获取验证码开关 true开启,false关闭 - captchaEnabledStr := configService.SelectConfigValueByKey("sys.account.captchaEnabled") - captchaEnabled, err := strconv.ParseBool(captchaEnabledStr) - if err != nil { - captchaEnabled = false - } - if !captchaEnabled { - ctx.JSON(w, 200, result.Ok(map[string]any{ - "captchaEnabled": captchaEnabled, - })) - return - } - - // 生成唯一标识 - verifyKey := "" - data := map[string]any{ - "captchaEnabled": captchaEnabled, - "uuid": "", - "img": "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", - } - - // char 字符验证 - driverCaptcha := &base64Captcha.DriverString{ - //Height png height in pixel. - Height: 40, - // Width Captcha png width in pixel. - Width: 120, - //NoiseCount text noise count. - NoiseCount: 4, - //Length random string length. - Length: 4, - //Source is a unicode which is the rand string from. - Source: "023456789abcdefghjkmnprstuvwxyz", - //ShowLineOptions := OptionShowHollowLine | OptionShowSlimeLine | OptionShowSineLine . - ShowLineOptions: base64Captcha.OptionShowHollowLine, - //BgColor captcha image background color (optional) - BgColor: &color.RGBA{ - R: 250, - G: 250, - B: 250, - A: 255, // 不透明 - }, - } - // 验证码生成 - id, question, answer := driverCaptcha.GenerateIdQuestionAnswer() - // 验证码表达式解析输出 - item, err := driverCaptcha.DrawCaptcha(question) - if err != nil { - log.Infof("Generate Id Question Answer %s : %v", question, err) - } else { - data["uuid"] = id - data["img"] = item.EncodeB64string() - verifyKey = cachekey.CAPTCHA_CODE_KEY + id - cache.SetLocalTTL(verifyKey, answer, 120*time.Second) - } - - // 本地开发下返回验证码结果,方便接口调试 - // text, ok := cache.GetLocalTTL(verifyKey) - // if ok { - // data["text"] = text.(string) - // } - - ctx.JSON(w, 200, result.Ok(data)) -} - -// 登录用户信息 -func UserInfo(w http.ResponseWriter, r *http.Request) { - loginUser, err := ctx.LoginUser(r) - if err != nil { - ctx.JSON(w, 200, result.OkData(err.Error())) - } - // 角色权限集合,管理员拥有所有权限 - userId := fmt.Sprint(loginUser.UserID) - isAdmin := srcConfig.IsAdmin(userId) - roles, perms := service.NewServiceAccount.RoleAndMenuPerms(userId, isAdmin) - - ctx.JSON(w, 200, result.OkData(map[string]any{ - "user": loginUser.User, - "roles": roles, - "permissions": perms, - })) -} - -// 登录用户路由信息 -func Routers(w http.ResponseWriter, r *http.Request) { - userID := ctx.LoginUserToUserID(r) - - // 前端路由,管理员拥有所有 - isAdmin := srcConfig.IsAdmin(userID) - buildMenus := service.NewServiceAccount.RouteMenus(userID, isAdmin) - ctx.JSON(w, 200, result.OkData(buildMenus)) -} diff --git a/features/security/service/service_account.go b/features/security/service/service_account.go deleted file mode 100644 index 28aa2c84..00000000 --- a/features/security/service/service_account.go +++ /dev/null @@ -1,56 +0,0 @@ -package service - -import ( - menuService "be.ems/features/sys_menu/service" - roleService "be.ems/features/sys_role/service" - userService "be.ems/features/sys_user/service" - "be.ems/lib/core/utils/parse" - "be.ems/lib/core/vo" -) - -// 实例化服务层 ServiceAccount 结构体 -var NewServiceAccount = &ServiceAccount{ - sysUserService: userService.NewServiceSysUser, - sysRoleService: roleService.NewServiceSysRole, - sysMenuService: menuService.NewServiceSysMenu, -} - -// 账号身份操作服务 服务层处理 -type ServiceAccount struct { - // 用户信息服务 - sysUserService *userService.ServiceSysUser - // 角色服务 - sysRoleService *roleService.ServiceSysRole - // 菜单服务 - sysMenuService *menuService.ServiceSysMenu -} - -// RoleAndMenuPerms 角色和菜单数据权限 -func (s *ServiceAccount) RoleAndMenuPerms(userId string, isAdmin bool) ([]string, []string) { - if isAdmin { - return []string{"admin"}, []string{"*:*:*"} - } else { - // 角色key - roleGroup := []string{} - roles := s.sysRoleService.SelectRoleListByUserId(userId) - for _, role := range roles { - roleGroup = append(roleGroup, role.RoleKey) - } - // 菜单权限key - perms := s.sysMenuService.SelectMenuPermsByUserId(userId) - return parse.RemoveDuplicates(roleGroup), parse.RemoveDuplicates(perms) - } -} - -// RouteMenus 前端路由所需要的菜单 -func (s *ServiceAccount) RouteMenus(userId string, isAdmin bool) []vo.Router { - var buildMenus []vo.Router - if isAdmin { - menus := s.sysMenuService.SelectMenuTreeByUserId("*") - buildMenus = s.sysMenuService.BuildRouteMenus(menus, "") - } else { - menus := s.sysMenuService.SelectMenuTreeByUserId(userId) - buildMenus = s.sysMenuService.BuildRouteMenus(menus, "") - } - return buildMenus -} diff --git a/features/sys_config/api_sys_config.go b/features/sys_config/api_sys_config.go deleted file mode 100644 index b8cbb5f1..00000000 --- a/features/sys_config/api_sys_config.go +++ /dev/null @@ -1,230 +0,0 @@ -package sysconfig - -import ( - "fmt" - "net/http" - "strings" - - "be.ems/features/sys_config/model" - "be.ems/features/sys_config/service" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/utils/parse" - "be.ems/lib/core/vo/result" - "be.ems/lib/midware" - "be.ems/lib/services" - "be.ems/restagent/config" -) - -// 参数配置信息接口添加到路由 -func Routers() []services.RouterItem { - // 实例化控制层 SysConfigApi 结构体 - var apis = &SysConfigApi{ - sysConfigService: service.NewServiceSysConfig, - } - - rs := [...]services.RouterItem{ - { - Method: "GET", - Pattern: "/configs", - Handler: apis.List, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/config/{configId}", - Handler: apis.Info, - Middleware: midware.Authorize(nil), - }, - { - Method: "POST", - Pattern: "/config", - Handler: apis.Add, - Middleware: midware.Authorize(nil), - }, - { - Method: "PUT", - Pattern: "/config", - Handler: apis.Edit, - Middleware: midware.Authorize(nil), - }, - { - Method: "DELETE", - Pattern: "/config/{configIds}", - Handler: apis.Remove, - Middleware: midware.Authorize(nil), - }, - { - Method: "PUT", - Pattern: "/config/refreshCache", - Handler: apis.RefreshCache, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/config/configKey/{configKey}", - Handler: apis.ConfigKey, - Middleware: midware.Authorize(nil), - }, - // 添加更多的 Router 对象... - } - - // 生成两组前缀路由 - rsPrefix := []services.RouterItem{} - for _, v := range rs { - path := "/configManage/{apiVersion}" + v.Pattern - // 固定前缀 - v.Pattern = config.DefaultUriPrefix + path - rsPrefix = append(rsPrefix, v) - // 可配置 - v.Pattern = config.UriPrefix + path - rsPrefix = append(rsPrefix, v) - } - return rsPrefix -} - -// 参数配置信息 -// -// PATH /configManage -type SysConfigApi struct { - // 参数配置服务 - sysConfigService *service.ServiceSysConfig -} - -// 参数配置列表 -// -// GET /list -func (s *SysConfigApi) List(w http.ResponseWriter, r *http.Request) { - querys := ctx.QueryMap(r) - data := s.sysConfigService.SelectConfigPage(querys) - ctx.JSON(w, 200, result.Ok(data)) -} - -// 参数配置信息 -// -// GET /:configId -func (s *SysConfigApi) Info(w http.ResponseWriter, r *http.Request) { - configId := ctx.Param(r, "configId") - if configId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - data := s.sysConfigService.SelectConfigById(configId) - if data.ConfigID == configId { - ctx.JSON(w, 200, result.OkData(data)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 参数配置新增 -// -// POST / -func (s *SysConfigApi) Add(w http.ResponseWriter, r *http.Request) { - var body model.SysConfig - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.ConfigID != "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查属性值唯一 - uniqueConfigKey := s.sysConfigService.CheckUniqueConfigKey(body.ConfigKey, "") - if !uniqueConfigKey { - msg := fmt.Sprintf("[%s] Parameter key name already exists", body.ConfigKey) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - body.CreateBy = ctx.LoginUserToUserName(r) - insertId := s.sysConfigService.InsertConfig(body) - if insertId != "" { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 参数配置修改 -// -// PUT / -func (s *SysConfigApi) Edit(w http.ResponseWriter, r *http.Request) { - var body model.SysConfig - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.ConfigID == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查属性值唯一 - uniqueConfigKey := s.sysConfigService.CheckUniqueConfigKey(body.ConfigKey, body.ConfigID) - if !uniqueConfigKey { - msg := fmt.Sprintf("[%s] Parameter key name already exists", body.ConfigKey) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 检查是否存在 - config := s.sysConfigService.SelectConfigById(body.ConfigID) - if config.ConfigID != body.ConfigID { - ctx.JSON(w, 200, result.ErrMsg("No permission to access parameter configuration data!")) - return - } - - body.UpdateBy = ctx.LoginUserToUserName(r) - rows := s.sysConfigService.UpdateConfig(body) - if rows > 0 { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 参数配置删除 -// -// DELETE /:configIds -func (s *SysConfigApi) Remove(w http.ResponseWriter, r *http.Request) { - configIds := ctx.Param(r, "configIds") - if configIds == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - // 处理字符转id数组后去重 - ids := strings.Split(configIds, ",") - uniqueIDs := parse.RemoveDuplicates(ids) - if len(uniqueIDs) <= 0 { - ctx.JSON(w, 200, result.Err(nil)) - return - } - rows, err := s.sysConfigService.DeleteConfigByIds(uniqueIDs) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - msg := fmt.Sprintf("删除成功:%d", rows) - ctx.JSON(w, 200, result.OkMsg(msg)) -} - -// 参数配置刷新缓存 -// -// PUT /refreshCache -func (s *SysConfigApi) RefreshCache(w http.ResponseWriter, r *http.Request) { - s.sysConfigService.ResetConfigCache() - ctx.JSON(w, 200, result.Ok(nil)) -} - -// 参数配置根据参数键名 -// -// GET /configKey/:configKey -func (s *SysConfigApi) ConfigKey(w http.ResponseWriter, r *http.Request) { - configKey := ctx.Param(r, "configKey") - if configKey == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - key := s.sysConfigService.SelectConfigValueByKey(configKey) - if key != "" { - ctx.JSON(w, 200, result.OkData(key)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} diff --git a/features/sys_config/model/sys_config.go b/features/sys_config/model/sys_config.go deleted file mode 100644 index 8949c67b..00000000 --- a/features/sys_config/model/sys_config.go +++ /dev/null @@ -1,25 +0,0 @@ -package model - -// 参数配置对象 sys_config -type SysConfig struct { - // 参数主键 - ConfigID string `json:"configId"` - // 参数名称 - ConfigName string `json:"configName" binding:"required"` - // 参数键名 - ConfigKey string `json:"configKey" binding:"required"` - // 参数键值 - ConfigValue string `json:"configValue" binding:"required"` - // 系统内置(Y是 N否) - ConfigType string `json:"configType"` - // 创建者 - CreateBy string `json:"createBy"` - // 创建时间 - CreateTime int64 `json:"createTime"` - // 更新者 - UpdateBy string `json:"updateBy"` - // 更新时间 - UpdateTime int64 `json:"updateTime"` - // 备注 - Remark string `json:"remark"` -} diff --git a/features/sys_config/service/repo_sys_config.go b/features/sys_config/service/repo_sys_config.go deleted file mode 100644 index c4065269..00000000 --- a/features/sys_config/service/repo_sys_config.go +++ /dev/null @@ -1,336 +0,0 @@ -package service - -import ( - "fmt" - "strings" - "time" - - "be.ems/features/sys_config/model" - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/date" - "be.ems/lib/core/utils/parse" - "be.ems/lib/log" -) - -// 实例化数据层 RepoSysConfig 结构体 -var NewRepoSysConfig = &RepoSysConfig{ - selectSql: `select - config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark - from sys_config`, - - resultMap: map[string]string{ - "config_id": "ConfigID", - "config_name": "ConfigName", - "config_key": "ConfigKey", - "config_value": "ConfigValue", - "config_type": "ConfigType", - "remark": "Remark", - "create_by": "CreateBy", - "create_time": "CreateTime", - "update_by": "UpdateBy", - "update_time": "UpdateTime", - }, -} - -// RepoSysConfig 参数配置表 数据层处理 -type RepoSysConfig struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *RepoSysConfig) convertResultRows(rows []map[string]any) []model.SysConfig { - arr := make([]model.SysConfig, 0) - for _, row := range rows { - sysConfig := model.SysConfig{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - datasource.SetFieldValue(&sysConfig, keyMapper, value) - } - } - arr = append(arr, sysConfig) - } - return arr -} - -// SelectDictDataPage 分页查询参数配置列表数据 -func (r *RepoSysConfig) SelectConfigPage(query map[string]any) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if v, ok := query["configName"]; ok && v != "" { - conditions = append(conditions, "config_name like concat(?, '%')") - params = append(params, v) - } - if v, ok := query["configType"]; ok && v != "" { - conditions = append(conditions, "config_type = ?") - params = append(params, v) - } - if v, ok := query["configKey"]; ok && v != "" { - conditions = append(conditions, "config_key like concat(?, '%')") - params = append(params, v) - } - beginTime, ok := query["beginTime"] - if !ok { - beginTime, ok = query["params[beginTime]"] - } - if ok && beginTime != "" { - conditions = append(conditions, "create_time >= ?") - beginDate := date.ParseStrToDate(beginTime.(string), date.YYYY_MM_DD) - params = append(params, beginDate.UnixMilli()) - } - endTime, ok := query["endTime"] - if !ok { - endTime, ok = query["params[endTime]"] - } - if ok && endTime != "" { - conditions = append(conditions, "create_time <= ?") - endDate := date.ParseStrToDate(endTime.(string), date.YYYY_MM_DD) - params = append(params, endDate.UnixMilli()) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from sys_config" - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { - log.Errorf("total err => %v", err) - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return map[string]any{ - "total": total, - "rows": []model.SysConfig{}, - } - } - - // 分页 - pageNum, pageSize := datasource.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 查询数据 - querySql := r.selectSql + whereSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - } - - // 转换实体 - rows := r.convertResultRows(results) - return map[string]any{ - "total": total, - "rows": rows, - } -} - -// SelectConfigList 查询参数配置列表 -func (r *RepoSysConfig) SelectConfigList(sysConfig model.SysConfig) []model.SysConfig { - // 查询条件拼接 - var conditions []string - var params []any - if sysConfig.ConfigName != "" { - conditions = append(conditions, "config_name like concat(?, '%')") - params = append(params, sysConfig.ConfigName) - } - if sysConfig.ConfigType != "" { - conditions = append(conditions, "config_type = ?") - params = append(params, sysConfig.ConfigType) - } - if sysConfig.ConfigKey != "" { - conditions = append(conditions, "config_key like concat(?, '%')") - params = append(params, sysConfig.ConfigKey) - } - if sysConfig.CreateTime > 0 { - conditions = append(conditions, "create_time >= ?") - params = append(params, sysConfig.CreateTime) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数据 - querySql := r.selectSql + whereSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysConfig{} - } - - // 转换实体 - return r.convertResultRows(results) -} - -// SelectConfigValueByKey 通过参数键名查询参数键值 -func (r *RepoSysConfig) SelectConfigValueByKey(configKey string) string { - querySql := "select config_value as 'str' from sys_config where config_key = ?" - results, err := datasource.RawDB("", querySql, []any{configKey}) - if err != nil { - log.Errorf("query err => %v", err) - return "" - } - if len(results) > 0 { - return fmt.Sprint(results[0]["str"]) - } - return "" -} - -// SelectConfigByIds 通过配置ID查询参数配置信息 -func (r *RepoSysConfig) SelectConfigByIds(configIds []string) []model.SysConfig { - placeholder := datasource.KeyPlaceholderByQuery(len(configIds)) - querySql := r.selectSql + " where config_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(configIds) - results, err := datasource.RawDB("", querySql, parameters) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysConfig{} - } - // 转换实体 - return r.convertResultRows(results) -} - -// CheckUniqueConfig 校验配置参数是否唯一 -func (r *RepoSysConfig) CheckUniqueConfig(sysConfig model.SysConfig) string { - // 查询条件拼接 - var conditions []string - var params []any - if sysConfig.ConfigKey != "" { - conditions = append(conditions, "config_key = ?") - params = append(params, sysConfig.ConfigKey) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } else { - return "" - } - - // 查询数据 - querySql := "select config_id as 'str' from sys_config " + whereSql + " limit 1" - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err %v", err) - return "" - } - if len(results) > 0 { - return fmt.Sprint(results[0]["str"]) - } - return "" -} - -// InsertConfig 新增参数配置 -func (r *RepoSysConfig) InsertConfig(sysConfig model.SysConfig) string { - // 参数拼接 - params := make(map[string]any) - if sysConfig.ConfigName != "" { - params["config_name"] = sysConfig.ConfigName - } - if sysConfig.ConfigKey != "" { - params["config_key"] = sysConfig.ConfigKey - } - if sysConfig.ConfigValue != "" { - params["config_value"] = sysConfig.ConfigValue - } - if sysConfig.ConfigType != "" { - params["config_type"] = sysConfig.ConfigType - } - if sysConfig.Remark != "" { - params["remark"] = sysConfig.Remark - } - if sysConfig.CreateBy != "" { - params["create_by"] = sysConfig.CreateBy - params["create_time"] = time.Now().UnixMilli() - } - - // 构建执行语句 - keys, placeholder, values := datasource.KeyPlaceholderValueByInsert(params) - sql := "insert into sys_config (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" - - // 执行插入 - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - - insertId, err := results.LastInsertId() - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - return fmt.Sprint(insertId) -} - -// UpdateConfig 修改参数配置 -func (r *RepoSysConfig) UpdateConfig(sysConfig model.SysConfig) int64 { - // 参数拼接 - params := make(map[string]any) - if sysConfig.ConfigName != "" { - params["config_name"] = sysConfig.ConfigName - } - if sysConfig.ConfigKey != "" { - params["config_key"] = sysConfig.ConfigKey - } - if sysConfig.ConfigValue != "" { - params["config_value"] = sysConfig.ConfigValue - } - if sysConfig.ConfigType != "" { - params["config_type"] = sysConfig.ConfigType - } - if sysConfig.Remark != "" { - params["remark"] = sysConfig.Remark - } - if sysConfig.UpdateBy != "" { - params["update_by"] = sysConfig.UpdateBy - params["update_time"] = time.Now().UnixMilli() - } - - // 构建执行语句 - keys, values := datasource.KeyValueByUpdate(params) - sql := "update sys_config set " + strings.Join(keys, ",") + " where config_id = ?" - - // 执行更新 - values = append(values, sysConfig.ConfigID) - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("update row : %v", err.Error()) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("update err => %v", err) - return 0 - } - return affected -} - -// DeleteConfigByIds 批量删除参数配置信息 -func (r *RepoSysConfig) DeleteConfigByIds(configIds []string) int64 { - placeholder := datasource.KeyPlaceholderByQuery(len(configIds)) - sql := "delete from sys_config where config_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(configIds) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} diff --git a/features/sys_config/service/service_sys_config.go b/features/sys_config/service/service_sys_config.go deleted file mode 100644 index ede49ab7..00000000 --- a/features/sys_config/service/service_sys_config.go +++ /dev/null @@ -1,155 +0,0 @@ -package service - -import ( - "errors" - - "be.ems/features/sys_config/model" - "be.ems/lib/core/cache" - "be.ems/lib/core/constants/cachekey" -) - -// 实例化服务层 ServiceSysConfig 结构体 -var NewServiceSysConfig = &ServiceSysConfig{ - sysConfigRepository: NewRepoSysConfig, -} - -// ServiceSysConfig 参数配置 服务层处理 -type ServiceSysConfig struct { - // 参数配置表 - sysConfigRepository *RepoSysConfig -} - -// SelectDictDataPage 分页查询参数配置列表数据 -func (r *ServiceSysConfig) SelectConfigPage(query map[string]any) map[string]any { - return r.sysConfigRepository.SelectConfigPage(query) -} - -// SelectConfigList 查询参数配置列表 -func (r *ServiceSysConfig) SelectConfigList(sysConfig model.SysConfig) []model.SysConfig { - return r.sysConfigRepository.SelectConfigList(sysConfig) -} - -// SelectConfigValueByKey 通过参数键名查询参数键值 -func (r *ServiceSysConfig) SelectConfigValueByKey(configKey string) string { - cacheKey := r.getCacheKey(configKey) - // 从缓存中读取 - cacheValue, ok := cache.GetLocal(cacheKey) - if cacheValue != nil && ok { - return cacheValue.(string) - } - // 无缓存时读取数据放入缓存中 - configValue := r.sysConfigRepository.SelectConfigValueByKey(configKey) - if configValue != "" { - cache.SetLocal(cacheKey, configValue) - return configValue - } - return "" -} - -// SelectConfigById 通过配置ID查询参数配置信息 -func (r *ServiceSysConfig) SelectConfigById(configId string) model.SysConfig { - if configId == "" { - return model.SysConfig{} - } - configs := r.sysConfigRepository.SelectConfigByIds([]string{configId}) - if len(configs) > 0 { - return configs[0] - } - return model.SysConfig{} -} - -// CheckUniqueConfigKey 校验参数键名是否唯一 -func (r *ServiceSysConfig) CheckUniqueConfigKey(configKey, configId string) bool { - uniqueId := r.sysConfigRepository.CheckUniqueConfig(model.SysConfig{ - ConfigKey: configKey, - }) - if uniqueId == configId { - return true - } - return uniqueId == "" -} - -// InsertConfig 新增参数配置 -func (r *ServiceSysConfig) InsertConfig(sysConfig model.SysConfig) string { - configId := r.sysConfigRepository.InsertConfig(sysConfig) - if configId != "" { - r.loadingConfigCache(sysConfig.ConfigKey) - } - return configId -} - -// UpdateConfig 修改参数配置 -func (r *ServiceSysConfig) UpdateConfig(sysConfig model.SysConfig) int64 { - rows := r.sysConfigRepository.UpdateConfig(sysConfig) - if rows > 0 { - r.loadingConfigCache(sysConfig.ConfigKey) - } - return rows -} - -// DeleteConfigByIds 批量删除参数配置信息 -func (r *ServiceSysConfig) DeleteConfigByIds(configIds []string) (int64, error) { - // 检查是否存在 - configs := r.sysConfigRepository.SelectConfigByIds(configIds) - if len(configs) <= 0 { - return 0, errors.New("does not have permission to access parameter configuration data") - } - for _, config := range configs { - // 检查是否为内置参数 - if config.ConfigType == "Y" { - return 0, errors.New(config.ConfigID + " Configuration parameters are built-in parameters and their deletion is prohibited!") - } - // 清除缓存 - r.clearConfigCache(config.ConfigKey) - } - if len(configs) == len(configIds) { - rows := r.sysConfigRepository.DeleteConfigByIds(configIds) - return rows, nil - } - return 0, errors.New("failed to delete parameter configuration information") -} - -// ResetConfigCache 重置参数缓存数据 -func (r *ServiceSysConfig) ResetConfigCache() { - r.clearConfigCache("*") - r.loadingConfigCache("*") -} - -// getCacheKey 组装缓存key -func (r *ServiceSysConfig) getCacheKey(configKey string) string { - return cachekey.SYS_CONFIG_KEY + configKey -} - -// loadingConfigCache 加载参数缓存数据 -func (r *ServiceSysConfig) loadingConfigCache(configKey string) { - // 查询全部参数 - if configKey == "*" { - sysConfigs := r.SelectConfigList(model.SysConfig{}) - for _, v := range sysConfigs { - key := r.getCacheKey(v.ConfigKey) - cache.DeleteLocal(key) - cache.SetLocal(key, v.ConfigValue) - } - return - } - // 指定参数 - if configKey != "" { - cacheValue := r.sysConfigRepository.SelectConfigValueByKey(configKey) - if cacheValue != "" { - key := r.getCacheKey(configKey) - cache.DeleteLocal(key) - cache.SetLocal(key, cacheValue) - } - return - } -} - -// clearConfigCache 清空参数缓存数据 -func (r *ServiceSysConfig) clearConfigCache(configKey string) bool { - key := r.getCacheKey(configKey) - keys := cache.GetLocalKeys(key) - for _, v := range keys { - cache.DeleteLocal(v) - } - return len(keys) > 0 -} diff --git a/features/sys_dict_data/api_sys_dict_data.go b/features/sys_dict_data/api_sys_dict_data.go deleted file mode 100644 index 748ed55f..00000000 --- a/features/sys_dict_data/api_sys_dict_data.go +++ /dev/null @@ -1,247 +0,0 @@ -package sysdictdata - -import ( - "fmt" - "net/http" - "strings" - - "be.ems/features/sys_dict_data/model" - sysDictDataService "be.ems/features/sys_dict_data/service" - sysDictTypeService "be.ems/features/sys_dict_type/service" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/utils/parse" - "be.ems/lib/core/vo/result" - "be.ems/lib/midware" - "be.ems/lib/services" - "be.ems/restagent/config" -) - -// 字典类型对应的字典数据信息接口添加到路由 -func Routers() []services.RouterItem { - // 实例化控制层 SysDictDataApi 结构体 - var apis = &SysDictDataApi{ - sysDictDataService: sysDictDataService.NewServiceSysDictData, - sysDictTypeService: sysDictTypeService.NewServiceSysDictType, - } - - rs := [...]services.RouterItem{ - { - Method: "GET", - Pattern: "/dictDatas", - Handler: apis.List, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/dictData/{dictCode}", - Handler: apis.Info, - Middleware: midware.Authorize(nil), - }, - { - Method: "POST", - Pattern: "/dictData", - Handler: apis.Add, - Middleware: midware.Authorize(nil), - }, - { - Method: "PUT", - Pattern: "/dictData", - Handler: apis.Edit, - Middleware: midware.Authorize(nil), - }, - { - Method: "DELETE", - Pattern: "/dictData/{dictCodes}", - Handler: apis.Remove, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/dictData/type/{dictType}", - Handler: apis.DictType, - Middleware: midware.Authorize(nil), - }, - // 添加更多的 Router 对象... - } - - // 生成两组前缀路由 - rsPrefix := []services.RouterItem{} - for _, v := range rs { - path := "/dictDataManage/{apiVersion}" + v.Pattern - // 固定前缀 - v.Pattern = config.DefaultUriPrefix + path - rsPrefix = append(rsPrefix, v) - // 可配置 - v.Pattern = config.UriPrefix + path - rsPrefix = append(rsPrefix, v) - } - return rsPrefix -} - -// 字典类型对应的字典数据信息 -// -// PATH /dictDataManage -type SysDictDataApi struct { - // 字典数据服务 - sysDictDataService *sysDictDataService.ServiceSysDictData - // 字典类型服务 - sysDictTypeService *sysDictTypeService.ServiceSysDictType -} - -// 字典数据列表 -// -// GET /list -func (s *SysDictDataApi) List(w http.ResponseWriter, r *http.Request) { - querys := ctx.QueryMap(r) - data := s.sysDictDataService.SelectDictDataPage(querys) - ctx.JSON(w, 200, result.Ok(data)) -} - -// 字典数据详情 -// -// GET /:dictCode -func (s *SysDictDataApi) Info(w http.ResponseWriter, r *http.Request) { - dictCode := ctx.Param(r, "dictCode") - if dictCode == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - data := s.sysDictDataService.SelectDictDataByCode(dictCode) - if data.DictCode == dictCode { - ctx.JSON(w, 200, result.OkData(data)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 字典数据新增 -// -// POST / -func (s *SysDictDataApi) Add(w http.ResponseWriter, r *http.Request) { - var body model.SysDictData - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.DictCode != "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查字典类型是否存在 - sysDictType := s.sysDictTypeService.SelectDictTypeByType(body.DictType) - if sysDictType.DictType != body.DictType { - ctx.JSON(w, 200, result.ErrMsg("No permission to access dictionary type data!")) - return - } - - // 检查字典标签唯一 - uniqueDictLabel := s.sysDictDataService.CheckUniqueDictLabel(body.DictType, body.DictLabel, "") - if !uniqueDictLabel { - msg := fmt.Sprintf("[%s] The subscript signature of this dictionary type already exists", body.DictLabel) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 检查字典键值唯一 - uniqueDictValue := s.sysDictDataService.CheckUniqueDictValue(body.DictType, body.DictValue, "") - if !uniqueDictValue { - msg := fmt.Sprintf("[%s] The label value under this dictionary type already exists", body.DictValue) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - body.CreateBy = ctx.LoginUserToUserName(r) - insertId := s.sysDictDataService.InsertDictData(body) - if insertId != "" { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 字典类型修改 -// -// PUT / -func (s *SysDictDataApi) Edit(w http.ResponseWriter, r *http.Request) { - var body model.SysDictData - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.DictCode == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查字典类型是否存在 - sysDictType := s.sysDictTypeService.SelectDictTypeByType(body.DictType) - if sysDictType.DictType != body.DictType { - ctx.JSON(w, 200, result.ErrMsg("No permission to access dictionary type data!")) - return - } - - // 检查字典编码是否存在 - SysDictDataApi := s.sysDictDataService.SelectDictDataByCode(body.DictCode) - if SysDictDataApi.DictCode != body.DictCode { - ctx.JSON(w, 200, result.ErrMsg("No permission to access dictionary encoding data!")) - return - } - - // 检查字典标签唯一 - uniqueDictLabel := s.sysDictDataService.CheckUniqueDictLabel(body.DictType, body.DictLabel, body.DictCode) - if !uniqueDictLabel { - msg := fmt.Sprintf("Data modification failed for [%s], the dictionary type subscript signature already exists", body.DictLabel) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 检查字典键值唯一 - uniqueDictValue := s.sysDictDataService.CheckUniqueDictValue(body.DictType, body.DictValue, body.DictCode) - if !uniqueDictValue { - msg := fmt.Sprintf("Data modification failed for [%s], label value already exists under this dictionary type", body.DictValue) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - body.UpdateBy = ctx.LoginUserToUserName(r) - rows := s.sysDictDataService.UpdateDictData(body) - if rows > 0 { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 字典数据删除 -// -// DELETE /:dictCodes -func (s *SysDictDataApi) Remove(w http.ResponseWriter, r *http.Request) { - dictCodes := ctx.Param(r, "dictCodes") - if dictCodes == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - // 处理字符转id数组后去重 - ids := strings.Split(dictCodes, ",") - uniqueIDs := parse.RemoveDuplicates(ids) - if len(uniqueIDs) <= 0 { - ctx.JSON(w, 200, result.Err(nil)) - return - } - rows, err := s.sysDictDataService.DeleteDictDataByCodes(uniqueIDs) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - msg := fmt.Sprintf("Successfully deleted: %d", rows) - ctx.JSON(w, 200, result.OkMsg(msg)) -} - -// 字典数据列表(指定字典类型) -// -// GET /type/:dictType -func (s *SysDictDataApi) DictType(w http.ResponseWriter, r *http.Request) { - dictType := ctx.Param(r, "dictType") - if dictType == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - data := s.sysDictDataService.SelectDictDataByType(dictType) - ctx.JSON(w, 200, result.OkData(data)) -} diff --git a/features/sys_dict_data/model/sys_dict_data.go b/features/sys_dict_data/model/sys_dict_data.go deleted file mode 100644 index 7c8cd06a..00000000 --- a/features/sys_dict_data/model/sys_dict_data.go +++ /dev/null @@ -1,31 +0,0 @@ -package model - -// SysDictData 字典数据对象 sys_dict_data -type SysDictData struct { - // 字典编码 - DictCode string `json:"dictCode"` - // 字典排序 - DictSort int `json:"dictSort"` - // 字典标签 - DictLabel string `json:"dictLabel" binding:"required"` - // 字典键值 - DictValue string `json:"dictValue" binding:"required"` - // 字典类型 - DictType string `json:"dictType" binding:"required"` - // 样式属性(样式扩展) - TagClass string `json:"tagClass"` - // 标签类型(预设颜色) - TagType string `json:"tagType"` - // 状态(0停用 1正常) - Status string `json:"status"` - // 创建者 - CreateBy string `json:"createBy"` - // 创建时间 - CreateTime int64 `json:"createTime"` - // 更新者 - UpdateBy string `json:"updateBy"` - // 更新时间 - UpdateTime int64 `json:"updateTime"` - // 备注 - Remark string `json:"remark"` -} diff --git a/features/sys_dict_data/repo/repo_sys_dict_data.go b/features/sys_dict_data/repo/repo_sys_dict_data.go deleted file mode 100644 index 02b0b37d..00000000 --- a/features/sys_dict_data/repo/repo_sys_dict_data.go +++ /dev/null @@ -1,369 +0,0 @@ -package repo - -import ( - "fmt" - "strings" - "time" - - "be.ems/features/sys_dict_data/model" - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/parse" - "be.ems/lib/log" -) - -// 实例化数据层 RepoSysDictData 结构体 -var NewRepoSysDictData = &RepoSysDictData{ - selectSql: `select - dict_code, dict_sort, dict_label, dict_value, dict_type, tag_class, tag_type, status, create_by, create_time, remark - from sys_dict_data`, - - resultMap: map[string]string{ - "dict_code": "DictCode", - "dict_sort": "DictSort", - "dict_label": "DictLabel", - "dict_value": "DictValue", - "dict_type": "DictType", - "tag_class": "TagClass", - "tag_type": "TagType", - "status": "Status", - "remark": "Remark", - "create_by": "CreateBy", - "create_time": "CreateTime", - "update_by": "UpdateBy", - "update_time": "UpdateTime", - }, -} - -// RepoSysDictData 字典类型数据表 数据层处理 -type RepoSysDictData struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *RepoSysDictData) convertResultRows(rows []map[string]any) []model.SysDictData { - arr := make([]model.SysDictData, 0) - for _, row := range rows { - sysDictData := model.SysDictData{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - datasource.SetFieldValue(&sysDictData, keyMapper, value) - } - } - arr = append(arr, sysDictData) - } - return arr -} - -// SelectDictDataPage 根据条件分页查询字典数据 -func (r *RepoSysDictData) SelectDictDataPage(query map[string]any) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if v, ok := query["dictType"]; ok && v != "" { - conditions = append(conditions, "dict_type = ?") - params = append(params, v) - } - if v, ok := query["dictLabel"]; ok && v != "" { - conditions = append(conditions, "dict_label like concat(?, '%')") - params = append(params, v) - } - if v, ok := query["status"]; ok && v != "" { - conditions = append(conditions, "status = ?") - params = append(params, v) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from sys_dict_data" - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { - log.Errorf("total err => %v", err) - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return map[string]any{ - "total": total, - "rows": []model.SysDictData{}, - } - } - - // 分页 - pageNum, pageSize := datasource.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " order by dict_sort asc limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 查询数据 - querySql := r.selectSql + whereSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - } - - // 转换实体 - rows := r.convertResultRows(results) - return map[string]any{ - "total": total, - "rows": rows, - } -} - -// SelectDictDataList 根据条件查询字典数据 -func (r *RepoSysDictData) SelectDictDataList(sysDictData model.SysDictData) []model.SysDictData { - // 查询条件拼接 - var conditions []string - var params []any - if sysDictData.DictLabel != "" { - conditions = append(conditions, "dict_label like concat(?, '%')") - params = append(params, sysDictData.DictLabel) - } - if sysDictData.DictType != "" { - conditions = append(conditions, "dict_type = ?") - params = append(params, sysDictData.DictType) - } - if sysDictData.Status != "" { - conditions = append(conditions, "status = ?") - params = append(params, sysDictData.Status) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数据 - orderSql := " order by dict_sort asc " - querySql := r.selectSql + whereSql + orderSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysDictData{} - } - - // 转换实体 - return r.convertResultRows(results) -} - -// SelectDictDataByCodes 根据字典数据编码查询信息 -func (r *RepoSysDictData) SelectDictDataByCodes(dictCodes []string) []model.SysDictData { - placeholder := datasource.KeyPlaceholderByQuery(len(dictCodes)) - querySql := r.selectSql + " where dict_code in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(dictCodes) - results, err := datasource.RawDB("", querySql, parameters) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysDictData{} - } - // 转换实体 - return r.convertResultRows(results) -} - -// CountDictDataByType 查询字典数据 -func (r *RepoSysDictData) CountDictDataByType(dictType string) int64 { - querySql := "select count(1) as 'total' from sys_dict_data where dict_type = ?" - results, err := datasource.RawDB("", querySql, []any{dictType}) - if err != nil { - log.Errorf("query err => %v", err) - return 0 - } - if len(results) > 0 { - return parse.Number(results[0]["total"]) - } - return 0 -} - -// CheckUniqueDictData 校验字典数据是否唯一 -func (r *RepoSysDictData) CheckUniqueDictData(sysDictData model.SysDictData) string { - // 查询条件拼接 - var conditions []string - var params []any - if sysDictData.DictType != "" { - conditions = append(conditions, "dict_type = ?") - params = append(params, sysDictData.DictType) - } - if sysDictData.DictLabel != "" { - conditions = append(conditions, "dict_label = ?") - params = append(params, sysDictData.DictLabel) - } - if sysDictData.DictValue != "" { - conditions = append(conditions, "dict_value = ?") - params = append(params, sysDictData.DictValue) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } else { - return "" - } - - // 查询数据 - querySql := "select dict_code as 'str' from sys_dict_data " + whereSql + " limit 1" - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err %v", err) - return "" - } - if len(results) > 0 { - return fmt.Sprint(results[0]["str"]) - } - return "" -} - -// DeleteDictDataByCodes 批量删除字典数据信息 -func (r *RepoSysDictData) DeleteDictDataByCodes(dictCodes []string) int64 { - placeholder := datasource.KeyPlaceholderByQuery(len(dictCodes)) - sql := "delete from sys_dict_data where dict_code in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(dictCodes) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} - -// InsertDictData 新增字典数据信息 -func (r *RepoSysDictData) InsertDictData(sysDictData model.SysDictData) string { - // 参数拼接 - params := make(map[string]any) - if sysDictData.DictSort > 0 { - params["dict_sort"] = sysDictData.DictSort - } - if sysDictData.DictLabel != "" { - params["dict_label"] = sysDictData.DictLabel - } - if sysDictData.DictValue != "" { - params["dict_value"] = sysDictData.DictValue - } - if sysDictData.DictType != "" { - params["dict_type"] = sysDictData.DictType - } - if sysDictData.TagClass != "" { - params["tag_class"] = sysDictData.TagClass - } - if sysDictData.TagType != "" { - params["tag_type"] = sysDictData.TagType - } - if sysDictData.Status != "" { - params["status"] = sysDictData.Status - } - if sysDictData.Remark != "" { - params["remark"] = sysDictData.Remark - } - if sysDictData.CreateBy != "" { - params["create_by"] = sysDictData.CreateBy - params["create_time"] = time.Now().UnixMilli() - } - - // 构建执行语句 - keys, placeholder, values := datasource.KeyPlaceholderValueByInsert(params) - sql := "insert into sys_dict_data (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" - - // 执行插入 - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - insertId, err := results.LastInsertId() - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - return fmt.Sprint(insertId) -} - -// UpdateDictData 修改字典数据信息 -func (r *RepoSysDictData) UpdateDictData(sysDictData model.SysDictData) int64 { - // 参数拼接 - params := make(map[string]any) - if sysDictData.DictSort > 0 { - params["dict_sort"] = sysDictData.DictSort - } - if sysDictData.DictLabel != "" { - params["dict_label"] = sysDictData.DictLabel - } - if sysDictData.DictValue != "" { - params["dict_value"] = sysDictData.DictValue - } - if sysDictData.DictType != "" { - params["dict_type"] = sysDictData.DictType - } - if sysDictData.TagClass != "" { - params["tag_class"] = sysDictData.TagClass - } - if sysDictData.TagType != "" { - params["tag_type"] = sysDictData.TagType - } - if sysDictData.Status != "" { - params["status"] = sysDictData.Status - } - if sysDictData.Remark != "" { - params["remark"] = sysDictData.Remark - } - if sysDictData.UpdateBy != "" { - params["update_by"] = sysDictData.UpdateBy - params["update_time"] = time.Now().UnixMilli() - } - - // 构建执行语句 - keys, values := datasource.KeyValueByUpdate(params) - sql := "update sys_dict_data set " + strings.Join(keys, ",") + " where dict_code = ?" - - // 执行更新 - values = append(values, sysDictData.DictCode) - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("update row : %v", err.Error()) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("update err => %v", err) - return 0 - } - return affected -} - -// UpdateDictDataType 同步修改字典类型 -func (r *RepoSysDictData) UpdateDictDataType(oldDictType string, newDictType string) int64 { - // 参数拼接 - params := make([]any, 0) - if oldDictType == "" || newDictType == "" { - return 0 - } - params = append(params, newDictType) - params = append(params, oldDictType) - - // 构建执行语句 - sql := "update sys_dict_data set dict_type = ? where dict_type = ?" - - // 执行更新 - results, err := datasource.ExecDB("", sql, params) - if err != nil { - log.Errorf("update row : %v", err.Error()) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("update err => %v", err) - return 0 - } - return affected -} diff --git a/features/sys_dict_data/service/service_sys_dict_data.go b/features/sys_dict_data/service/service_sys_dict_data.go deleted file mode 100644 index 68a2cff2..00000000 --- a/features/sys_dict_data/service/service_sys_dict_data.go +++ /dev/null @@ -1,111 +0,0 @@ -package service - -import ( - "errors" - - "be.ems/features/sys_dict_data/model" - "be.ems/features/sys_dict_data/repo" - sysDictTypeService "be.ems/features/sys_dict_type/service" -) - -// 实例化服务层 ServiceSysDictData 结构体 -var NewServiceSysDictData = &ServiceSysDictData{ - sysDictDataRepository: *repo.NewRepoSysDictData, - sysDictTypeService: *sysDictTypeService.NewServiceSysDictType, -} - -// ServiceSysDictData 字典类型数据 服务层处理 -type ServiceSysDictData struct { - // 字典数据服务 - sysDictDataRepository repo.RepoSysDictData - // 字典类型服务 - sysDictTypeService sysDictTypeService.ServiceSysDictType -} - -// SelectDictDataPage 根据条件分页查询字典数据 -func (r *ServiceSysDictData) SelectDictDataPage(query map[string]any) map[string]any { - return r.sysDictDataRepository.SelectDictDataPage(query) -} - -// SelectDictDataList 根据条件查询字典数据 -func (r *ServiceSysDictData) SelectDictDataList(sysDictData model.SysDictData) []model.SysDictData { - return r.sysDictDataRepository.SelectDictDataList(sysDictData) -} - -// SelectDictDataByCode 根据字典数据编码查询信息 -func (r *ServiceSysDictData) SelectDictDataByCode(dictCode string) model.SysDictData { - if dictCode == "" { - return model.SysDictData{} - } - dictCodes := r.sysDictDataRepository.SelectDictDataByCodes([]string{dictCode}) - if len(dictCodes) > 0 { - return dictCodes[0] - } - return model.SysDictData{} -} - -// SelectDictDataByType 根据字典类型查询信息 -func (r *ServiceSysDictData) SelectDictDataByType(dictType string) []model.SysDictData { - return r.sysDictTypeService.DictDataCache(dictType) -} - -// CheckUniqueDictLabel 校验字典标签是否唯一 -func (r *ServiceSysDictData) CheckUniqueDictLabel(dictType, dictLabel, dictCode string) bool { - uniqueId := r.sysDictDataRepository.CheckUniqueDictData(model.SysDictData{ - DictType: dictType, - DictLabel: dictLabel, - }) - if uniqueId == dictCode { - return true - } - return uniqueId == "" -} - -// CheckUniqueDictValue 校验字典键值是否唯一 -func (r *ServiceSysDictData) CheckUniqueDictValue(dictType, dictValue, dictCode string) bool { - uniqueId := r.sysDictDataRepository.CheckUniqueDictData(model.SysDictData{ - DictType: dictType, - DictValue: dictValue, - }) - if uniqueId == dictCode { - return true - } - return uniqueId == "" -} - -// DeleteDictDataByCodes 批量删除字典数据信息 -func (r *ServiceSysDictData) DeleteDictDataByCodes(dictCodes []string) (int64, error) { - // 检查是否存在 - dictDatas := r.sysDictDataRepository.SelectDictDataByCodes(dictCodes) - if len(dictDatas) <= 0 { - return 0, errors.New("does not have permission to access dictionary-encoded data") - } - if len(dictDatas) == len(dictCodes) { - for _, v := range dictDatas { - // 刷新缓存 - r.sysDictTypeService.ClearDictCache(v.DictType) - r.sysDictTypeService.LoadingDictCache(v.DictType) - } - rows := r.sysDictDataRepository.DeleteDictDataByCodes(dictCodes) - return rows, nil - } - return 0, errors.New("failed to delete dictionary data information") -} - -// InsertDictData 新增字典数据信息 -func (r *ServiceSysDictData) InsertDictData(sysDictData model.SysDictData) string { - insertId := r.sysDictDataRepository.InsertDictData(sysDictData) - if insertId != "" { - r.sysDictTypeService.LoadingDictCache(sysDictData.DictType) - } - return insertId -} - -// UpdateDictData 修改字典数据信息 -func (r *ServiceSysDictData) UpdateDictData(sysDictData model.SysDictData) int64 { - rows := r.sysDictDataRepository.UpdateDictData(sysDictData) - if rows > 0 { - r.sysDictTypeService.LoadingDictCache(sysDictData.DictType) - } - return rows -} diff --git a/features/sys_dict_type/api_sys_dict_type.go b/features/sys_dict_type/api_sys_dict_type.go deleted file mode 100644 index d3780707..00000000 --- a/features/sys_dict_type/api_sys_dict_type.go +++ /dev/null @@ -1,253 +0,0 @@ -package sysdicttype - -import ( - "fmt" - "net/http" - "strings" - - "be.ems/features/sys_dict_type/model" - sysDictTypeService "be.ems/features/sys_dict_type/service" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/utils/parse" - "be.ems/lib/core/vo/result" - "be.ems/lib/midware" - "be.ems/lib/services" - "be.ems/restagent/config" -) - -// 字典类型信息接口添加到路由 -func Routers() []services.RouterItem { - // 实例化控制层 SysDictTypeApi 结构体 - var apis = &SysDictTypeApi{ - sysDictTypeService: *sysDictTypeService.NewServiceSysDictType, - } - - rs := [...]services.RouterItem{ - { - Method: "GET", - Pattern: "/dictTypes", - Handler: apis.List, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/dictType/{dictId}", - Handler: apis.Info, - Middleware: midware.Authorize(nil), - }, - { - Method: "POST", - Pattern: "/dictType", - Handler: apis.Add, - Middleware: midware.Authorize(nil), - }, - { - Method: "PUT", - Pattern: "/dictType", - Handler: apis.Edit, - Middleware: midware.Authorize(nil), - }, - { - Method: "DELETE", - Pattern: "/dictType/{dictIds}", - Handler: apis.Remove, - Middleware: midware.Authorize(nil), - }, - { - Method: "PUT", - Pattern: "/dictType/refreshCache", - Handler: apis.RefreshCache, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/dictTypes/optionselect", - Handler: apis.DictOptionselect, - Middleware: midware.Authorize(nil), - }, - // 添加更多的 Router 对象... - } - - // 生成两组前缀路由 - rsPrefix := []services.RouterItem{} - for _, v := range rs { - path := "/dictTypegManage/{apiVersion}" + v.Pattern - // 固定前缀 - v.Pattern = config.DefaultUriPrefix + path - rsPrefix = append(rsPrefix, v) - // 可配置 - v.Pattern = config.UriPrefix + path - rsPrefix = append(rsPrefix, v) - } - return rsPrefix -} - -// 字典类型信息 -// -// PATH /dictTypegManage -type SysDictTypeApi struct { - // 字典类型服务 - sysDictTypeService sysDictTypeService.ServiceSysDictType -} - -// 字典类型列表 -// -// GET /list -func (s *SysDictTypeApi) List(w http.ResponseWriter, r *http.Request) { - querys := ctx.QueryMap(r) - data := s.sysDictTypeService.SelectDictTypePage(querys) - ctx.JSON(w, 200, result.Ok(data)) -} - -// 字典类型信息 -// -// GET /:dictId -func (s *SysDictTypeApi) Info(w http.ResponseWriter, r *http.Request) { - dictId := ctx.Param(r, "dictId") - if dictId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - data := s.sysDictTypeService.SelectDictTypeByID(dictId) - if data.DictID == dictId { - ctx.JSON(w, 200, result.OkData(data)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 字典类型新增 -// -// POST / -func (s *SysDictTypeApi) Add(w http.ResponseWriter, r *http.Request) { - var body model.SysDictType - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.DictID != "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查字典名称唯一 - uniqueDictName := s.sysDictTypeService.CheckUniqueDictName(body.DictName, "") - if !uniqueDictName { - msg := fmt.Sprintf("Failed to add dictionary '%s', dictionary name already exists", body.DictName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 检查字典类型唯一 - uniqueDictType := s.sysDictTypeService.CheckUniqueDictType(body.DictType, "") - if !uniqueDictType { - msg := fmt.Sprintf("Failed to add dictionary '%s', dictionary type already exists", body.DictType) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - body.CreateBy = ctx.LoginUserToUserName(r) - insertId := s.sysDictTypeService.InsertDictType(body) - if insertId != "" { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 字典类型修改 -// -// PUT / -func (s *SysDictTypeApi) Edit(w http.ResponseWriter, r *http.Request) { - var body model.SysDictType - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.DictID == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查数据是否存在 - dictInfo := s.sysDictTypeService.SelectDictTypeByID(body.DictID) - if dictInfo.DictID != body.DictID { - ctx.JSON(w, 200, result.ErrMsg("No permission to access dictionary type data!")) - return - } - - // 检查字典名称唯一 - uniqueDictName := s.sysDictTypeService.CheckUniqueDictName(body.DictName, body.DictID) - if !uniqueDictName { - msg := fmt.Sprintf("Dictionary modification failed for [%s], dictionary name already exists", body.DictName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 检查字典类型唯一 - uniqueDictType := s.sysDictTypeService.CheckUniqueDictType(body.DictType, body.DictID) - if !uniqueDictType { - msg := fmt.Sprintf("Dictionary modification failed for [%s], dictionary type already exists", body.DictType) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - body.UpdateBy = ctx.LoginUserToUserName(r) - rows := s.sysDictTypeService.UpdateDictType(body) - if rows > 0 { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 字典类型删除 -// -// DELETE /:dictIds -func (s *SysDictTypeApi) Remove(w http.ResponseWriter, r *http.Request) { - dictIds := ctx.Param(r, "dictIds") - if dictIds == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - // 处理字符转id数组后去重 - ids := strings.Split(dictIds, ",") - uniqueIDs := parse.RemoveDuplicates(ids) - if len(uniqueIDs) <= 0 { - ctx.JSON(w, 200, result.Err(nil)) - return - } - rows, err := s.sysDictTypeService.DeleteDictTypeByIDs(uniqueIDs) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - msg := fmt.Sprintf("Successfully deleted: %d", rows) - ctx.JSON(w, 200, result.OkMsg(msg)) -} - -// 字典类型刷新缓存 -// -// PUT /refreshCache -func (s *SysDictTypeApi) RefreshCache(w http.ResponseWriter, r *http.Request) { - s.sysDictTypeService.ResetDictCache() - ctx.JSON(w, 200, result.Ok(nil)) -} - -// 字典类型选择框列表 -// -// GET /getDictOptionselect -func (s *SysDictTypeApi) DictOptionselect(w http.ResponseWriter, r *http.Request) { - data := s.sysDictTypeService.SelectDictTypeList(model.SysDictType{ - Status: "1", - }) - - type labelValue struct { - Label string `json:"label"` - Value string `json:"value"` - } - - // 数据组 - arr := []labelValue{} - for _, v := range data { - arr = append(arr, labelValue{ - Label: v.DictName, - Value: v.DictType, - }) - } - ctx.JSON(w, 200, result.OkData(arr)) -} diff --git a/features/sys_dict_type/model/sys_dict_type.go b/features/sys_dict_type/model/sys_dict_type.go deleted file mode 100644 index 0ad0b1ab..00000000 --- a/features/sys_dict_type/model/sys_dict_type.go +++ /dev/null @@ -1,23 +0,0 @@ -package model - -// SysDictType 字典类型对象 sys_dict_type -type SysDictType struct { - // 字典主键 - DictID string `json:"dictId"` - // 字典名称 - DictName string `json:"dictName" binding:"required"` - // 字典类型 - DictType string `json:"dictType" binding:"required"` - // 状态(0停用 1正常) - Status string `json:"status"` - // 创建者 - CreateBy string `json:"createBy"` - // 创建时间 - CreateTime int64 `json:"createTime"` - // 更新者 - UpdateBy string `json:"updateBy"` - // 更新时间 - UpdateTime int64 `json:"updateTime"` - // 备注 - Remark string `json:"remark"` -} diff --git a/features/sys_dict_type/repo/repo_sys_dict_type.go b/features/sys_dict_type/repo/repo_sys_dict_type.go deleted file mode 100644 index 261f6489..00000000 --- a/features/sys_dict_type/repo/repo_sys_dict_type.go +++ /dev/null @@ -1,330 +0,0 @@ -package repo - -import ( - "fmt" - "strings" - "time" - - "be.ems/features/sys_dict_type/model" - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/date" - "be.ems/lib/core/utils/parse" - "be.ems/lib/log" -) - -// 实例化数据层 RepoSysDictType 结构体 -var NewRepoSysDictType = &RepoSysDictType{ - selectSql: `select - dict_id, dict_name, dict_type, status, create_by, create_time, remark - from sys_dict_type`, - - resultMap: map[string]string{ - "dict_id": "DictID", - "dict_name": "DictName", - "dict_type": "DictType", - "remark": "Remark", - "status": "Status", - "create_by": "CreateBy", - "create_time": "CreateTime", - "update_by": "UpdateBy", - "update_time": "UpdateTime", - }, -} - -// RepoSysDictType 字典类型表 数据层处理 -type RepoSysDictType struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *RepoSysDictType) convertResultRows(rows []map[string]any) []model.SysDictType { - arr := make([]model.SysDictType, 0) - for _, row := range rows { - sysDictType := model.SysDictType{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - datasource.SetFieldValue(&sysDictType, keyMapper, value) - } - } - arr = append(arr, sysDictType) - } - return arr -} - -// SelectDictTypePage 根据条件分页查询字典类型 -func (r *RepoSysDictType) SelectDictTypePage(query map[string]any) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if v, ok := query["dictName"]; ok && v != "" { - conditions = append(conditions, "dict_name like concat(?, '%')") - params = append(params, v) - } - if v, ok := query["dictType"]; ok && v != "" { - conditions = append(conditions, "dict_type like concat(?, '%')") - params = append(params, v) - } - if v, ok := query["status"]; ok && v != "" { - conditions = append(conditions, "status = ?") - params = append(params, v) - } - beginTime, ok := query["beginTime"] - if !ok { - beginTime, ok = query["params[beginTime]"] - } - if ok && beginTime != "" { - conditions = append(conditions, "create_time >= ?") - beginDate := date.ParseStrToDate(beginTime.(string), date.YYYY_MM_DD) - params = append(params, beginDate.UnixMilli()) - } - endTime, ok := query["endTime"] - if !ok { - endTime, ok = query["params[endTime]"] - } - if ok && endTime != "" { - conditions = append(conditions, "create_time <= ?") - endDate := date.ParseStrToDate(endTime.(string), date.YYYY_MM_DD) - params = append(params, endDate.UnixMilli()) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from sys_dict_type" - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { - log.Errorf("total err => %v", err) - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return map[string]any{ - "total": total, - "rows": []model.SysDictType{}, - } - } - - // 分页 - pageNum, pageSize := datasource.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 查询数据 - querySql := r.selectSql + whereSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - } - - // 转换实体 - rows := r.convertResultRows(results) - return map[string]any{ - "total": total, - "rows": rows, - } -} - -// SelectDictTypeList 根据条件查询字典类型 -func (r *RepoSysDictType) SelectDictTypeList(sysDictType model.SysDictType) []model.SysDictType { - // 查询条件拼接 - var conditions []string - var params []any - if sysDictType.DictName != "" { - conditions = append(conditions, "dict_name like concat(?, '%')") - params = append(params, sysDictType.DictName) - } - if sysDictType.DictType != "" { - conditions = append(conditions, "dict_type like concat(?, '%')") - params = append(params, sysDictType.DictType) - } - if sysDictType.Status != "" { - conditions = append(conditions, "status = ?") - params = append(params, sysDictType.Status) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数据 - querySql := r.selectSql + whereSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysDictType{} - } - - // 转换实体 - return r.convertResultRows(results) -} - -// SelectDictTypeByIDs 根据字典类型ID查询信息 -func (r *RepoSysDictType) SelectDictTypeByIDs(dictIDs []string) []model.SysDictType { - placeholder := datasource.KeyPlaceholderByQuery(len(dictIDs)) - querySql := r.selectSql + " where dict_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(dictIDs) - results, err := datasource.RawDB("", querySql, parameters) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysDictType{} - } - // 转换实体 - return r.convertResultRows(results) -} - -// SelectDictTypeByType 根据字典类型查询信息 -func (r *RepoSysDictType) SelectDictTypeByType(dictType string) model.SysDictType { - querySql := r.selectSql + " where dict_type = ?" - results, err := datasource.RawDB("", querySql, []any{dictType}) - if err != nil { - log.Errorf("query err => %v", err) - return model.SysDictType{} - } - // 转换实体 - rows := r.convertResultRows(results) - if len(rows) > 0 { - return rows[0] - } - return model.SysDictType{} -} - -// CheckUniqueDictType 校验字典是否唯一 -func (r *RepoSysDictType) CheckUniqueDictType(sysDictType model.SysDictType) string { - // 查询条件拼接 - var conditions []string - var params []any - if sysDictType.DictName != "" { - conditions = append(conditions, "dict_name = ?") - params = append(params, sysDictType.DictName) - } - if sysDictType.DictType != "" { - conditions = append(conditions, "dict_type = ?") - params = append(params, sysDictType.DictType) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } else { - return "" - } - - // 查询数据 - querySql := "select dict_id as 'str' from sys_dict_type " + whereSql + " limit 1" - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err %v", err) - return "" - } - if len(results) > 0 { - return fmt.Sprint(results[0]["str"]) - } - return "" -} - -// InsertDictType 新增字典类型信息 -func (r *RepoSysDictType) InsertDictType(sysDictType model.SysDictType) string { - // 参数拼接 - params := make(map[string]any) - if sysDictType.DictName != "" { - params["dict_name"] = sysDictType.DictName - } - if sysDictType.DictType != "" { - params["dict_type"] = sysDictType.DictType - } - if sysDictType.Status != "" { - params["status"] = sysDictType.Status - } - if sysDictType.Remark != "" { - params["remark"] = sysDictType.Remark - } - if sysDictType.CreateBy != "" { - params["create_by"] = sysDictType.CreateBy - params["create_time"] = time.Now().UnixMilli() - } - - // 构建执行语句 - keys, placeholder, values := datasource.KeyPlaceholderValueByInsert(params) - sql := "insert into sys_dict_type (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" - - // 执行插入 - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - insertId, err := results.LastInsertId() - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - return fmt.Sprint(insertId) -} - -// UpdateDictType 修改字典类型信息 -func (r *RepoSysDictType) UpdateDictType(sysDictType model.SysDictType) int64 { - // 参数拼接 - params := make(map[string]any) - if sysDictType.DictName != "" { - params["dict_name"] = sysDictType.DictName - } - if sysDictType.DictType != "" { - params["dict_type"] = sysDictType.DictType - } - if sysDictType.Status != "" { - params["status"] = sysDictType.Status - } - if sysDictType.Remark != "" { - params["remark"] = sysDictType.Remark - } - if sysDictType.UpdateBy != "" { - params["update_by"] = sysDictType.UpdateBy - params["update_time"] = time.Now().UnixMilli() - } - - // 构建执行语句 - keys, values := datasource.KeyValueByUpdate(params) - sql := "update sys_dict_type set " + strings.Join(keys, ",") + " where dict_id = ?" - - // 执行更新 - values = append(values, sysDictType.DictID) - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("update row : %v", err.Error()) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("update err => %v", err) - return 0 - } - return affected -} - -// DeleteDictTypeByIDs 批量删除字典类型信息 -func (r *RepoSysDictType) DeleteDictTypeByIDs(dictIDs []string) int64 { - placeholder := datasource.KeyPlaceholderByQuery(len(dictIDs)) - sql := "delete from sys_dict_type where dict_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(dictIDs) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} diff --git a/features/sys_dict_type/service/service_sys_dict_type.go b/features/sys_dict_type/service/service_sys_dict_type.go deleted file mode 100644 index 66674a17..00000000 --- a/features/sys_dict_type/service/service_sys_dict_type.go +++ /dev/null @@ -1,211 +0,0 @@ -package service - -import ( - "encoding/json" - "errors" - "fmt" - - sysDictDataModel "be.ems/features/sys_dict_data/model" - sysDictDataRepo "be.ems/features/sys_dict_data/repo" - sysDictTypeModel "be.ems/features/sys_dict_type/model" - "be.ems/features/sys_dict_type/repo" - "be.ems/lib/core/cache" - "be.ems/lib/core/constants/cachekey" -) - -// 实例化服务层 ServiceSysDictType 结构体 -var NewServiceSysDictType = &ServiceSysDictType{ - sysDictTypeRepository: *repo.NewRepoSysDictType, - sysDictDataRepository: *sysDictDataRepo.NewRepoSysDictData, -} - -// ServiceSysDictType 字典类型 服务层处理 -type ServiceSysDictType struct { - // 字典类型服务 - sysDictTypeRepository repo.RepoSysDictType - // 字典数据服务 - sysDictDataRepository sysDictDataRepo.RepoSysDictData -} - -// SelectDictTypePage 根据条件分页查询字典类型 -func (r *ServiceSysDictType) SelectDictTypePage(query map[string]any) map[string]any { - return r.sysDictTypeRepository.SelectDictTypePage(query) -} - -// SelectDictTypeList 根据条件查询字典类型 -func (r *ServiceSysDictType) SelectDictTypeList(sysDictType sysDictTypeModel.SysDictType) []sysDictTypeModel.SysDictType { - return r.sysDictTypeRepository.SelectDictTypeList(sysDictType) -} - -// SelectDictTypeByID 根据字典类型ID查询信息 -func (r *ServiceSysDictType) SelectDictTypeByID(dictID string) sysDictTypeModel.SysDictType { - if dictID == "" { - return sysDictTypeModel.SysDictType{} - } - dictTypes := r.sysDictTypeRepository.SelectDictTypeByIDs([]string{dictID}) - if len(dictTypes) > 0 { - return dictTypes[0] - } - return sysDictTypeModel.SysDictType{} -} - -// SelectDictTypeByType 根据字典类型查询信息 -func (r *ServiceSysDictType) SelectDictTypeByType(dictType string) sysDictTypeModel.SysDictType { - return r.sysDictTypeRepository.SelectDictTypeByType(dictType) -} - -// CheckUniqueDictName 校验字典名称是否唯一 -func (r *ServiceSysDictType) CheckUniqueDictName(dictName, dictID string) bool { - uniqueId := r.sysDictTypeRepository.CheckUniqueDictType(sysDictTypeModel.SysDictType{ - DictName: dictName, - }) - if uniqueId == dictID { - return true - } - return uniqueId == "" -} - -// CheckUniqueDictType 校验字典类型是否唯一 -func (r *ServiceSysDictType) CheckUniqueDictType(dictType, dictID string) bool { - uniqueId := r.sysDictTypeRepository.CheckUniqueDictType(sysDictTypeModel.SysDictType{ - DictType: dictType, - }) - if uniqueId == dictID { - return true - } - return uniqueId == "" -} - -// InsertDictType 新增字典类型信息 -func (r *ServiceSysDictType) InsertDictType(sysDictType sysDictTypeModel.SysDictType) string { - insertId := r.sysDictTypeRepository.InsertDictType(sysDictType) - if insertId != "" { - r.LoadingDictCache(sysDictType.DictType) - } - return insertId -} - -// UpdateDictType 修改字典类型信息 -func (r *ServiceSysDictType) UpdateDictType(sysDictType sysDictTypeModel.SysDictType) int64 { - data := r.sysDictTypeRepository.SelectDictTypeByIDs([]string{sysDictType.DictID}) - if len(data) == 0 { - return 0 - } - // 修改字典类型key时同步更新其字典数据的类型key - oldDictType := data[0].DictType - rows := r.sysDictTypeRepository.UpdateDictType(sysDictType) - if rows > 0 && oldDictType != "" && oldDictType != sysDictType.DictType { - r.sysDictDataRepository.UpdateDictDataType(oldDictType, sysDictType.DictType) - } - // 刷新缓存 - r.ClearDictCache(oldDictType) - r.LoadingDictCache(sysDictType.DictType) - return rows -} - -// DeleteDictTypeByIDs 批量删除字典类型信息 -func (r *ServiceSysDictType) DeleteDictTypeByIDs(dictIDs []string) (int64, error) { - // 检查是否存在 - dictTypes := r.sysDictTypeRepository.SelectDictTypeByIDs(dictIDs) - if len(dictTypes) <= 0 { - return 0, errors.New("no permission to access dictionary type data") - } - for _, v := range dictTypes { - // 字典类型下级含有数据 - useCount := r.sysDictDataRepository.CountDictDataByType(v.DictType) - if useCount > 0 { - msg := fmt.Sprintf("[%s] Dictionary data exists and cannot be deleted. ", v.DictName) - return 0, errors.New(msg) - } - // 清除缓存 - r.ClearDictCache(v.DictType) - } - if len(dictTypes) == len(dictIDs) { - rows := r.sysDictTypeRepository.DeleteDictTypeByIDs(dictIDs) - return rows, nil - } - return 0, errors.New("failed to delete dictionary data information") -} - -// ResetDictCache 重置字典缓存数据 -func (r *ServiceSysDictType) ResetDictCache() { - r.ClearDictCache("*") - r.LoadingDictCache("") -} - -// getCacheKey 组装缓存key -func (r *ServiceSysDictType) getDictCache(dictType string) string { - return cachekey.SYS_DICT_KEY + dictType -} - -// LoadingDictCache 加载字典缓存数据 -func (r *ServiceSysDictType) LoadingDictCache(dictType string) { - sysDictData := sysDictDataModel.SysDictData{ - Status: "1", - } - - // 指定字典类型 - if dictType != "" { - sysDictData.DictType = dictType - // 删除缓存 - key := r.getDictCache(dictType) - cache.DeleteLocal(key) - } - - sysDictDataList := r.sysDictDataRepository.SelectDictDataList(sysDictData) - if len(sysDictDataList) == 0 { - return - } - - // 将字典数据按类型分组 - m := make(map[string][]sysDictDataModel.SysDictData, 0) - for _, v := range sysDictDataList { - key := v.DictType - if item, ok := m[key]; ok { - m[key] = append(item, v) - } else { - m[key] = []sysDictDataModel.SysDictData{v} - } - } - - // 放入缓存 - for k, v := range m { - key := r.getDictCache(k) - values, _ := json.Marshal(v) - cache.SetLocal(key, string(values)) - } -} - -// ClearDictCache 清空字典缓存数据 -func (r *ServiceSysDictType) ClearDictCache(dictType string) bool { - key := r.getDictCache(dictType) - keys := cache.GetLocalKeys(key) - for _, v := range keys { - cache.DeleteLocal(v) - } - return len(keys) > 0 -} - -// DictDataCache 获取字典数据缓存数据 -func (r *ServiceSysDictType) DictDataCache(dictType string) []sysDictDataModel.SysDictData { - data := []sysDictDataModel.SysDictData{} - key := r.getDictCache(dictType) - jsonAny, ok := cache.GetLocal(key) - if jsonAny != nil && ok { - err := json.Unmarshal([]byte(jsonAny.(string)), &data) - if err != nil { - data = []sysDictDataModel.SysDictData{} - } - } else { - data = r.sysDictDataRepository.SelectDictDataList(sysDictDataModel.SysDictData{ - Status: "1", - DictType: dictType, - }) - if len(data) > 0 { - cache.DeleteLocal(key) - values, _ := json.Marshal(data) - cache.SetLocal(key, string(values)) - } - } - return data -} diff --git a/features/sys_menu/api_sys_menu.go b/features/sys_menu/api_sys_menu.go deleted file mode 100644 index b949a159..00000000 --- a/features/sys_menu/api_sys_menu.go +++ /dev/null @@ -1,354 +0,0 @@ -package sysmenu - -import ( - "fmt" - "net/http" - - "be.ems/features/sys_menu/consts" - "be.ems/features/sys_menu/model" - "be.ems/features/sys_menu/service" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/utils/regular" - "be.ems/lib/core/vo/result" - "be.ems/lib/midware" - "be.ems/lib/services" - "be.ems/restagent/config" - srcConfig "be.ems/src/framework/config" -) - -// 菜单接口添加到路由 -func Routers() []services.RouterItem { - // 实例化控制层 SysMenuApi 结构体 - var apis = &SysMenuApi{ - sysMenuService: service.NewServiceSysMenu, - } - - rs := [...]services.RouterItem{ - { - Method: "GET", - Pattern: "/menus", - Handler: apis.List, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/menu/{menuId}", - Handler: apis.Info, - Middleware: midware.Authorize(nil), - }, - { - Method: "POST", - Pattern: "/menu", - Handler: apis.Add, - Middleware: midware.Authorize(nil), - }, - { - Method: "PUT", - Pattern: "/menu", - Handler: apis.Edit, - Middleware: midware.Authorize(nil), - }, - { - Method: "DELETE", - Pattern: "/menu/{menuId}", - Handler: apis.Remove, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/menus/treeSelect", - Handler: apis.TreeSelect, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/menu/roleMenuTreeSelect/{roleId}", - Handler: apis.RoleMenuTreeSelect, - Middleware: midware.Authorize(nil), - }, - // 添加更多的 Router 对象... - } - - // 生成两组前缀路由 - rsPrefix := []services.RouterItem{} - for _, v := range rs { - path := "/menuManage/{apiVersion}" + v.Pattern - // 固定前缀 - v.Pattern = config.DefaultUriPrefix + path - rsPrefix = append(rsPrefix, v) - // 可配置 - v.Pattern = config.UriPrefix + path - rsPrefix = append(rsPrefix, v) - } - return rsPrefix -} - -// // 实例化控制层 SysMenuApi 结构体 -// var NewSysMenu = &SysMenuApi{ -// sysMenuService: NewServiceSysMenu, -// } - -// 菜单信息 -// -// PATH /menuManage -type SysMenuApi struct { - // 菜单服务 - sysMenuService *service.ServiceSysMenu -} - -// 菜单列表 -// -// GET /list -func (s *SysMenuApi) List(w http.ResponseWriter, r *http.Request) { - query := model.SysMenu{} - if v := ctx.GetQuery(r, "menuName"); v != "" { - query.MenuName = v - } - if v := ctx.GetQuery(r, "status"); v != "" { - query.Status = v - } - - userId := ctx.LoginUserToUserID(r) - if srcConfig.IsAdmin(userId) { - userId = "*" - } - data := s.sysMenuService.SelectMenuList(query, userId) - ctx.JSON(w, 200, result.OkData(data)) -} - -// 菜单信息 -// -// GET /:menuId -func (s *SysMenuApi) Info(w http.ResponseWriter, r *http.Request) { - menuId := ctx.Param(r, "menuId") - if menuId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - data := s.sysMenuService.SelectMenuById(menuId) - if data.MenuID == menuId { - ctx.JSON(w, 200, result.OkData(data)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 菜单新增 -// -// POST / -func (s *SysMenuApi) Add(w http.ResponseWriter, r *http.Request) { - var body model.SysMenu - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.MenuID != "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 目录和菜单检查地址唯一 - if consts.TYPE_DIR == body.MenuType || consts.TYPE_MENU == body.MenuType { - uniqueNenuPath := s.sysMenuService.CheckUniqueMenuPath(body.Path, "") - if !uniqueNenuPath { - msg := fmt.Sprintf("菜单新增【%s】失败,菜单路由地址已存在", body.MenuName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - } - - // 检查名称唯一 - uniqueNenuName := s.sysMenuService.CheckUniqueMenuName(body.MenuName, body.ParentID, "") - if !uniqueNenuName { - msg := fmt.Sprintf("菜单新增【%s】失败,菜单名称已存在", body.MenuName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 外链菜单需要符合网站http(s)开头 - if body.IsFrame == "0" && !regular.ValidHttp(body.Path) { - msg := fmt.Sprintf("菜单新增【%s】失败,非内部地址必须以http(s)://开头", body.MenuName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - body.CreateBy = ctx.LoginUserToUserName(r) - insertId := s.sysMenuService.InsertMenu(body) - if insertId != "" { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 菜单修改 -// -// PUT / -func (s *SysMenuApi) Edit(w http.ResponseWriter, r *http.Request) { - var body model.SysMenu - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.MenuID == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 上级菜单不能选自己 - if body.MenuID == body.ParentID { - msg := fmt.Sprintf("Menu modification failed for [%s], parent menu cannot select itself", body.MenuName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 检查数据是否存在 - menuInfo := s.sysMenuService.SelectMenuById(body.MenuID) - if menuInfo.MenuID != body.MenuID { - ctx.JSON(w, 200, result.ErrMsg("No permission to access menu data")) - return - } - // 父级ID不为0是要检查 - if body.ParentID != "0" { - menuParent := s.sysMenuService.SelectMenuById(body.ParentID) - if menuParent.MenuID != body.ParentID { - ctx.JSON(w, 200, result.ErrMsg("No permission to access menu data")) - return - } - // 禁用菜单时检查父菜单是否使用 - if body.Status == "1" && menuParent.Status == "0" { - ctx.JSON(w, 200, result.ErrMsg("Parent menu not enabled!")) - return - } - } - - // 目录和菜单检查地址唯一 - if consts.TYPE_DIR == body.MenuType || consts.TYPE_MENU == body.MenuType { - uniqueNenuPath := s.sysMenuService.CheckUniqueMenuPath(body.Path, body.MenuID) - if !uniqueNenuPath { - msg := fmt.Sprintf("菜单修改【%s】失败,菜单路由地址已存在", body.MenuName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - } - - // 检查名称唯一 - uniqueNenuName := s.sysMenuService.CheckUniqueMenuName(body.MenuName, body.ParentID, body.MenuID) - if !uniqueNenuName { - msg := fmt.Sprintf("菜单修改【%s】失败,菜单名称已存在", body.MenuName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 外链菜单需要符合网站http(s)开头 - if body.IsFrame == "0" && !regular.ValidHttp(body.Path) { - msg := fmt.Sprintf("菜单修改【%s】失败,非内部地址必须以http(s)://开头", body.MenuName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 禁用菜单时检查子菜单是否使用 - if body.Status == "0" { - hasStatus := s.sysMenuService.HasChildByMenuIdAndStatus(body.MenuID, "1") - if hasStatus > 0 { - msg := fmt.Sprintf("不允许禁用,存在使用子菜单数:%d", hasStatus) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - } - - body.UpdateBy = ctx.LoginUserToUserName(r) - rows := s.sysMenuService.UpdateMenu(body) - if rows > 0 { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 菜单删除 -// -// DELETE /:menuId -func (s *SysMenuApi) Remove(w http.ResponseWriter, r *http.Request) { - menuId := ctx.Param(r, "menuId") - if menuId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查数据是否存在 - menu := s.sysMenuService.SelectMenuById(menuId) - if menu.MenuID != menuId { - ctx.JSON(w, 200, result.ErrMsg("No permission to access menu data!")) - return - } - - // 检查是否存在子菜单 - hasChild := s.sysMenuService.HasChildByMenuIdAndStatus(menuId, "") - if hasChild > 0 { - msg := fmt.Sprintf("Deletion not allowed, there are sub orders: %d", hasChild) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 检查是否分配给角色 - existRole := s.sysMenuService.CheckMenuExistRole(menuId) - if existRole > 0 { - msg := fmt.Sprintf("Deletion not allowed, menu already assigned to roles: %d", existRole) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - rows := s.sysMenuService.DeleteMenuById(menuId) - if rows > 0 { - msg := fmt.Sprintf("Successfully deleted: %d", rows) - ctx.JSON(w, 200, result.OkMsg(msg)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 菜单树结构列表 -// -// GET /treeSelect -func (s *SysMenuApi) TreeSelect(w http.ResponseWriter, r *http.Request) { - query := model.SysMenu{} - if v := ctx.GetQuery(r, "menuName"); v != "" { - query.MenuName = v - } - if v := ctx.GetQuery(r, "status"); v != "" { - query.Status = v - } - - userId := ctx.LoginUserToUserID(r) - if srcConfig.IsAdmin(userId) { - userId = "*" - } - data := s.sysMenuService.SelectMenuTreeSelectByUserId(query, userId) - ctx.JSON(w, 200, result.OkData(data)) - -} - -// 菜单树结构列表(指定角色) -// -// GET /roleMenuTreeSelect/:roleId -func (s *SysMenuApi) RoleMenuTreeSelect(w http.ResponseWriter, r *http.Request) { - roleId := ctx.Param(r, "roleId") - if roleId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - query := model.SysMenu{} - if v := ctx.GetQuery(r, "menuName"); v != "" { - query.MenuName = v - } - if v := ctx.GetQuery(r, "status"); v != "" { - query.Status = v - } - - userId := ctx.LoginUserToUserID(r) - if srcConfig.IsAdmin(userId) { - userId = "*" - } - menuTreeSelect := s.sysMenuService.SelectMenuTreeSelectByUserId(query, userId) - checkedKeys := s.sysMenuService.SelectMenuListByRoleId(roleId) - ctx.JSON(w, 200, result.OkData(map[string]any{ - "menus": menuTreeSelect, - "checkedKeys": checkedKeys, - })) -} diff --git a/features/sys_menu/consts/consts_menu.go b/features/sys_menu/consts/consts_menu.go deleted file mode 100644 index 6a1dca31..00000000 --- a/features/sys_menu/consts/consts_menu.go +++ /dev/null @@ -1,24 +0,0 @@ -package consts - -// 系统菜单常量信息 - -const ( - // 组件布局类型-基础布局组件标识 - COMPONENT_LAYOUT_BASIC = "BasicLayout" - // 组件布局类型-空白布局组件标识 - COMPONENT_LAYOUT_BLANK = "BlankLayout" - // 组件布局类型-内链接布局组件标识 - COMPONENT_LAYOUT_LINK = "LinkLayout" -) - -const ( - // 菜单类型-目录 - TYPE_DIR = "D" - // 菜单类型-菜单 - TYPE_MENU = "M" - // 菜单类型-按钮 - TYPE_BUTTON = "B" -) - -// 菜单内嵌地址标识-带/前缀 -const PATH_INLINE = "/inline" diff --git a/features/sys_menu/model/sys_menu.go b/features/sys_menu/model/sys_menu.go deleted file mode 100644 index 397e30eb..00000000 --- a/features/sys_menu/model/sys_menu.go +++ /dev/null @@ -1,46 +0,0 @@ -package model - -// SysMenu 菜单权限对象 sys_menu -type SysMenu struct { - // 菜单ID - MenuID string `json:"menuId"` - // 菜单名称 - MenuName string `json:"menuName" binding:"required"` - // 父菜单ID 默认0 - ParentID string `json:"parentId" binding:"required"` - // 显示顺序 - MenuSort int `json:"menuSort"` - // 路由地址 - Path string `json:"path"` - // 组件路径 - Component string `json:"component"` - // 是否内部跳转(0否 1是) - IsFrame string `json:"isFrame"` - // 是否缓存(0不缓存 1缓存) - IsCache string `json:"isCache"` - // 菜单类型(D目录 M菜单 B按钮) - MenuType string `json:"menuType" binding:"required"` - // 是否显示(0隐藏 1显示) - Visible string `json:"visible"` - // 菜单状态(0停用 1正常) - Status string `json:"status"` - // 权限标识 - Perms string `json:"perms"` - // 菜单图标(#无图标) - Icon string `json:"icon"` - // 创建者 - CreateBy string `json:"createBy"` - // 创建时间 - CreateTime int64 `json:"createTime"` - // 更新者 - UpdateBy string `json:"updateBy"` - // 更新时间 - UpdateTime int64 `json:"updateTime"` - // 备注 - Remark string `json:"remark"` - - // ====== 非数据库字段属性 ====== - - // 子菜单 - Children []SysMenu `json:"children,omitempty"` -} diff --git a/features/sys_menu/service/repo_sys_menu.go b/features/sys_menu/service/repo_sys_menu.go deleted file mode 100644 index 1b8f50a3..00000000 --- a/features/sys_menu/service/repo_sys_menu.go +++ /dev/null @@ -1,475 +0,0 @@ -package service - -import ( - "fmt" - "strings" - "time" - - "be.ems/features/sys_menu/consts" - "be.ems/features/sys_menu/model" - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/parse" - "be.ems/lib/log" -) - -// 实例化数据层 RepoSysMenu 结构体 -var NewRepoSysMenu = &RepoSysMenu{ - selectSql: `select - m.menu_id, m.menu_name, m.parent_id, m.menu_sort, m.path, m.component, m.is_frame, m.is_cache, m.menu_type, m.visible, m.status, ifnull(m.perms,'') as perms, m.icon, m.create_time, m.remark - from sys_menu m`, - - selectSqlByUser: `select distinct - m.menu_id, m.menu_name, m.parent_id, m.menu_sort, m.path, m.component, m.is_frame, m.is_cache, m.menu_type, m.visible, m.status, ifnull(m.perms,'') as perms, m.icon, m.create_time, m.remark - from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - left join sys_user_role ur on rm.role_id = ur.role_id - left join sys_role ro on ur.role_id = ro.role_id`, - - resultMap: map[string]string{ - "menu_id": "MenuID", - "menu_name": "MenuName", - "parent_name": "ParentName", - "parent_id": "ParentID", - "path": "Path", - "menu_sort": "MenuSort", - "component": "Component", - "is_frame": "IsFrame", - "is_cache": "IsCache", - "menu_type": "MenuType", - "visible": "Visible", - "status": "Status", - "perms": "Perms", - "icon": "Icon", - "create_by": "CreateBy", - "create_time": "CreateTime", - "update_by": "UpdateBy", - "update_time": "UpdateTime", - "remark": "Remark", - }, -} - -// RepoSysMenu 菜单表 数据层处理 -type RepoSysMenu struct { - // 查询视图对象SQL - selectSql string - // 查询视图用户对象SQL - selectSqlByUser string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *RepoSysMenu) convertResultRows(rows []map[string]any) []model.SysMenu { - arr := make([]model.SysMenu, 0) - for _, row := range rows { - sysMenu := model.SysMenu{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - datasource.SetFieldValue(&sysMenu, keyMapper, value) - } - } - arr = append(arr, sysMenu) - } - return arr -} - -// SelectMenuList 查询系统菜单列表 -func (r *RepoSysMenu) SelectMenuList(sysMenu model.SysMenu, userId string) []model.SysMenu { - // 查询条件拼接 - var conditions []string - var params []any - if sysMenu.MenuName != "" { - conditions = append(conditions, "m.menu_name like concat('%', concat(?, '%'))") - params = append(params, sysMenu.MenuName) - } - if sysMenu.Visible != "" { - conditions = append(conditions, "m.visible = ?") - params = append(params, sysMenu.Visible) - } - if sysMenu.Status != "" { - conditions = append(conditions, "m.status = ?") - params = append(params, sysMenu.Status) - } - - fromSql := r.selectSql - - // 个人菜单 - if userId != "*" { - fromSql = r.selectSqlByUser - conditions = append(conditions, "ur.user_id = ?") - params = append(params, userId) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数据 - orderSql := " order by m.parent_id, m.menu_sort" - querySql := fromSql + whereSql + orderSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysMenu{} - } - - // 转换实体 - return r.convertResultRows(results) -} - -// SelectMenuPermsByUserId 根据用户ID查询权限 -func (r *RepoSysMenu) SelectMenuPermsByUserId(userId string) []string { - querySql := `select distinct m.perms as 'str' from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - left join sys_user_role ur on rm.role_id = ur.role_id - left join sys_role r on r.role_id = ur.role_id - where m.status = '1' and m.perms != '' and r.status = '1' and ur.user_id = ? ` - - // 查询结果 - results, err := datasource.RawDB("", querySql, []any{userId}) - if err != nil { - log.Errorf("query err => %v", err) - return []string{} - } - - // 读取结果 - rows := make([]string, 0) - for _, m := range results { - rows = append(rows, fmt.Sprintf("%v", m["str"])) - } - return rows -} - -// SelectMenuTreeByUserId 根据用户ID查询菜单 -func (r *RepoSysMenu) SelectMenuTreeByUserId(userId string) []model.SysMenu { - var params []any - var querySql string - - if userId == "*" { - // 管理员全部菜单 - querySql = r.selectSql + ` where - m.menu_type in (?,?) and m.status = '1' - order by m.parent_id, m.menu_sort` - params = append(params, consts.TYPE_DIR) - params = append(params, consts.TYPE_MENU) - } else { - // 用户ID权限 - querySql = r.selectSqlByUser + ` where - m.menu_type in (?, ?) and m.status = '1' - and ur.user_id = ? and ro.status = '1' - order by m.parent_id, m.menu_sort` - params = append(params, consts.TYPE_DIR) - params = append(params, consts.TYPE_MENU) - params = append(params, userId) - } - - // 查询结果 - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysMenu{} - } - - return r.convertResultRows(results) -} - -// SelectMenuListByRoleId 根据角色ID查询菜单树信息 -func (r *RepoSysMenu) SelectMenuListByRoleId(roleId string, menuCheckStrictly bool) []string { - querySql := `select m.menu_id as 'str' from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - where rm.role_id = ? ` - var params []any - params = append(params, roleId) - // 展开 - if menuCheckStrictly { - querySql += ` and m.menu_id not in - (select m.parent_id from sys_menu m - inner join sys_role_menu rm on m.menu_id = rm.menu_id - and rm.role_id = ?) ` - params = append(params, roleId) - } - - // 查询结果 - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - return []string{} - } - - if len(results) > 0 { - ids := make([]string, 0) - for _, v := range results { - ids = append(ids, fmt.Sprintf("%v", v["str"])) - } - return ids - } - return []string{} -} - -// SelectMenuByIds 根据菜单ID查询信息 -func (r *RepoSysMenu) SelectMenuByIds(menuIds []string) []model.SysMenu { - placeholder := datasource.KeyPlaceholderByQuery(len(menuIds)) - querySql := r.selectSql + " where m.menu_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(menuIds) - results, err := datasource.RawDB("", querySql, parameters) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysMenu{} - } - // 转换实体 - return r.convertResultRows(results) -} - -// HasChildByMenuIdAndStatus 存在菜单子节点数量与状态 -func (r *RepoSysMenu) HasChildByMenuIdAndStatus(menuId, status string) int64 { - querySql := "select count(1) as 'total' from sys_menu where parent_id = ?" - params := []any{menuId} - - // 菜单状态 - if status != "" { - querySql += " and status = ?" - params = append(params, status) - } - - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - return 0 - } - if len(results) > 0 { - return parse.Number(results[0]["total"]) - } - return 0 -} - -// InsertMenu 新增菜单信息 -func (r *RepoSysMenu) InsertMenu(sysMenu model.SysMenu) string { - // 参数拼接 - params := make(map[string]any) - if sysMenu.MenuID != "" { - params["menu_id"] = sysMenu.MenuID - } - if sysMenu.ParentID != "" { - params["parent_id"] = sysMenu.ParentID - } - if sysMenu.MenuName != "" { - params["menu_name"] = sysMenu.MenuName - } - if sysMenu.MenuSort > 0 { - params["menu_sort"] = sysMenu.MenuSort - } - if sysMenu.Path != "" { - params["path"] = sysMenu.Path - } - if sysMenu.Component != "" { - params["component"] = sysMenu.Component - } - if sysMenu.IsFrame != "" { - params["is_frame"] = sysMenu.IsFrame - } - if sysMenu.IsCache != "" { - params["is_cache"] = sysMenu.IsCache - } - if sysMenu.MenuType != "" { - params["menu_type"] = sysMenu.MenuType - } - if sysMenu.Visible != "" { - params["visible"] = sysMenu.Visible - } - if sysMenu.Status != "" { - params["status"] = sysMenu.Status - } - if sysMenu.Perms != "" { - params["perms"] = sysMenu.Perms - } - if sysMenu.Icon != "" { - params["icon"] = sysMenu.Icon - } else { - params["icon"] = "#" - } - if sysMenu.Remark != "" { - params["remark"] = sysMenu.Remark - } - if sysMenu.CreateBy != "" { - params["create_by"] = sysMenu.CreateBy - params["create_time"] = time.Now().UnixMilli() - } - - // 根据菜单类型重置参数 - if sysMenu.MenuType == consts.TYPE_BUTTON { - params["component"] = "" - params["path"] = "" - params["icon"] = "#" - params["is_cache"] = "1" - params["is_frame"] = "1" - params["visible"] = "1" - params["status"] = "1" - } - if sysMenu.MenuType == consts.TYPE_DIR { - params["component"] = "" - params["perms"] = "" - } - - // 构建执行语句 - keys, placeholder, values := datasource.KeyPlaceholderValueByInsert(params) - sql := "insert into sys_menu (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" - - // 执行插入 - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - - insertId, err := results.LastInsertId() - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - return fmt.Sprint(insertId) -} - -// UpdateMenu 修改菜单信息 -func (r *RepoSysMenu) UpdateMenu(sysMenu model.SysMenu) int64 { - // 参数拼接 - params := make(map[string]any) - if sysMenu.MenuID != "" { - params["menu_id"] = sysMenu.MenuID - } - if sysMenu.ParentID != "" { - params["parent_id"] = sysMenu.ParentID - } - if sysMenu.MenuName != "" { - params["menu_name"] = sysMenu.MenuName - } - if sysMenu.MenuSort > 0 { - params["menu_sort"] = sysMenu.MenuSort - } - if sysMenu.Path != "" { - params["path"] = sysMenu.Path - } - if sysMenu.Component != "" { - params["component"] = sysMenu.Component - } - if sysMenu.IsFrame != "" { - params["is_frame"] = sysMenu.IsFrame - } - if sysMenu.IsCache != "" { - params["is_cache"] = sysMenu.IsCache - } - if sysMenu.MenuType != "" { - params["menu_type"] = sysMenu.MenuType - } - if sysMenu.Visible != "" { - params["visible"] = sysMenu.Visible - } - if sysMenu.Status != "" { - params["status"] = sysMenu.Status - } - if sysMenu.Perms != "" { - params["perms"] = sysMenu.Perms - } - if sysMenu.Icon != "" { - params["icon"] = sysMenu.Icon - } else { - params["icon"] = "#" - } - if sysMenu.Remark != "" { - params["remark"] = sysMenu.Remark - } - if sysMenu.UpdateBy != "" { - params["update_by"] = sysMenu.UpdateBy - params["update_time"] = time.Now().UnixMilli() - } - - // 根据菜单类型重置参数 - if sysMenu.MenuType == consts.TYPE_BUTTON { - params["component"] = "" - params["path"] = "" - params["icon"] = "#" - params["is_cache"] = "1" - params["is_frame"] = "1" - params["visible"] = "1" - params["status"] = "1" - } - if sysMenu.MenuType == consts.TYPE_DIR { - params["component"] = "" - params["perms"] = "" - } - - // 构建执行语句 - keys, values := datasource.KeyValueByUpdate(params) - sql := "update sys_menu set " + strings.Join(keys, ",") + " where menu_id = ?" - - // 执行更新 - values = append(values, sysMenu.MenuID) - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("update row : %v", err.Error()) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("update err => %v", err) - return 0 - } - return affected -} - -// DeleteMenuById 删除菜单管理信息 -func (r *RepoSysMenu) DeleteMenuById(menuId string) int64 { - sql := "delete from sys_menu where menu_id = ?" - results, err := datasource.ExecDB("", sql, []any{menuId}) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} - -// CheckUniqueMenu 校验菜单是否唯一 -func (r *RepoSysMenu) CheckUniqueMenu(sysMenu model.SysMenu) string { - // 查询条件拼接 - var conditions []string - var params []any - if sysMenu.MenuName != "" { - conditions = append(conditions, "menu_name = ?") - params = append(params, sysMenu.MenuName) - } - if sysMenu.ParentID != "" { - conditions = append(conditions, "parent_id = ?") - params = append(params, sysMenu.ParentID) - } - if sysMenu.Path != "" { - conditions = append(conditions, "path = ?") - params = append(params, sysMenu.Path) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - if whereSql == "" { - return "" - } - - // 查询数据 - querySql := "select menu_id as 'str' from sys_menu " + whereSql + " limit 1" - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err %v", err) - return "" - } - if len(results) > 0 { - return fmt.Sprint(results[0]["str"]) - } - return "" -} diff --git a/features/sys_menu/service/service_sys_menu.go b/features/sys_menu/service/service_sys_menu.go deleted file mode 100644 index 0da85e34..00000000 --- a/features/sys_menu/service/service_sys_menu.go +++ /dev/null @@ -1,408 +0,0 @@ -package service - -import ( - "encoding/base64" - "strings" - - "be.ems/features/sys_menu/consts" - "be.ems/features/sys_menu/model" - sysRoleService "be.ems/features/sys_role/service" - sysrolemenu "be.ems/features/sys_role_menu" - "be.ems/lib/core/utils/parse" - "be.ems/lib/core/utils/regular" - "be.ems/lib/core/vo" -) - -// 实例化服务层 ServiceSysMenu 结构体 -var NewServiceSysMenu = &ServiceSysMenu{ - sysMenuRepository: NewRepoSysMenu, - sysRoleMenuRepository: sysrolemenu.NewRepoSysRoleMenu, - sysRoleRepository: sysRoleService.NewRepoSysRole, -} - -// ServiceSysMenu 菜单 服务层处理 -type ServiceSysMenu struct { - // 菜单服务 - sysMenuRepository *RepoSysMenu - // 角色与菜单关联服务 - sysRoleMenuRepository *sysrolemenu.RepoSysRoleMenu - // 角色服务 - sysRoleRepository *sysRoleService.RepoSysRole -} - -// SelectMenuList 查询系统菜单列表 -func (r *ServiceSysMenu) SelectMenuList(sysMenu model.SysMenu, userId string) []model.SysMenu { - return r.sysMenuRepository.SelectMenuList(sysMenu, userId) -} - -// SelectMenuPermsByUserId 根据用户ID查询权限 -func (r *ServiceSysMenu) SelectMenuPermsByUserId(userId string) []string { - return r.sysMenuRepository.SelectMenuPermsByUserId(userId) -} - -// SelectMenuTreeByUserId 根据用户ID查询菜单 -func (r *ServiceSysMenu) SelectMenuTreeByUserId(userId string) []model.SysMenu { - sysMenus := r.sysMenuRepository.SelectMenuTreeByUserId(userId) - return r.parseDataToTree(sysMenus) -} - -// SelectMenuTreeSelectByUserId 根据用户ID查询菜单树结构信息 -func (r *ServiceSysMenu) SelectMenuTreeSelectByUserId(sysMenu model.SysMenu, userId string) []vo.TreeSelect { - sysMenus := r.sysMenuRepository.SelectMenuList(sysMenu, userId) - - // 过滤旧前端菜单 - sysMenusF := []model.SysMenu{} - for _, v := range sysMenus { - if v.Perms != "page" { - continue - } - sysMenusF = append(sysMenusF, v) - } - - menus := r.parseDataToTree(sysMenusF) - tree := make([]vo.TreeSelect, 0) - for _, menu := range menus { - tree = append(tree, sysMenuTreeSelect(menu)) - } - return tree -} - -// sysMenuTreeSelect 使用给定的 SysMenu 对象解析为 TreeSelect 对象 -func sysMenuTreeSelect(sysMenu model.SysMenu) vo.TreeSelect { - t := vo.TreeSelect{} - t.ID = sysMenu.MenuID - t.Label = sysMenu.MenuName - t.Title = sysMenu.MenuName - - if len(sysMenu.Children) > 0 { - for _, menu := range sysMenu.Children { - child := sysMenuTreeSelect(menu) - t.Children = append(t.Children, child) - } - } else { - t.Children = []vo.TreeSelect{} - } - - return t -} - -// SelectMenuListByRoleId 根据角色ID查询菜单树信息 TODO -func (r *ServiceSysMenu) SelectMenuListByRoleId(roleId string) []string { - roles := r.sysRoleRepository.SelectRoleByIds([]string{roleId}) - if len(roles) > 0 { - role := roles[0] - if role.RoleID == roleId { - return r.sysMenuRepository.SelectMenuListByRoleId( - role.RoleID, - role.MenuCheckStrictly == "1", - ) - } - } - return []string{} -} - -// SelectMenuById 根据菜单ID查询信息 -func (r *ServiceSysMenu) SelectMenuById(menuId string) model.SysMenu { - if menuId == "" { - return model.SysMenu{} - } - menus := r.sysMenuRepository.SelectMenuByIds([]string{menuId}) - if len(menus) > 0 { - return menus[0] - } - return model.SysMenu{} -} - -// HasChildByMenuIdAndStatus 存在菜单子节点数量与状态 -func (r *ServiceSysMenu) HasChildByMenuIdAndStatus(menuId, status string) int64 { - return r.sysMenuRepository.HasChildByMenuIdAndStatus(menuId, status) -} - -// CheckMenuExistRole 查询菜单是否存在角色 -func (r *ServiceSysMenu) CheckMenuExistRole(menuId string) int64 { - return r.sysRoleMenuRepository.CheckMenuExistRole(menuId) -} - -// InsertMenu 新增菜单信息 -func (r *ServiceSysMenu) InsertMenu(sysMenu model.SysMenu) string { - return r.sysMenuRepository.InsertMenu(sysMenu) -} - -// UpdateMenu 修改菜单信息 -func (r *ServiceSysMenu) UpdateMenu(sysMenu model.SysMenu) int64 { - return r.sysMenuRepository.UpdateMenu(sysMenu) -} - -// DeleteMenuById 删除菜单管理信息 -func (r *ServiceSysMenu) DeleteMenuById(menuId string) int64 { - // 删除菜单与角色关联 - r.sysRoleMenuRepository.DeleteMenuRole([]string{menuId}) - return r.sysMenuRepository.DeleteMenuById(menuId) -} - -// CheckUniqueMenuName 校验菜单名称是否唯一 -func (r *ServiceSysMenu) CheckUniqueMenuName(menuName, parentId, menuId string) bool { - uniqueId := r.sysMenuRepository.CheckUniqueMenu(model.SysMenu{ - MenuName: menuName, - ParentID: parentId, - }) - if uniqueId == menuId { - return true - } - return uniqueId == "" -} - -// CheckUniqueMenuPath 校验路由地址是否唯一(针对目录和菜单) -func (r *ServiceSysMenu) CheckUniqueMenuPath(path, menuId string) bool { - uniqueId := r.sysMenuRepository.CheckUniqueMenu(model.SysMenu{ - Path: path, - }) - if uniqueId == menuId { - return true - } - return uniqueId == "" -} - -// BuildRouteMenus 构建前端路由所需要的菜单 -func (r *ServiceSysMenu) BuildRouteMenus(sysMenus []model.SysMenu, prefix string) []vo.Router { - routers := []vo.Router{} - for _, item := range sysMenus { - router := vo.Router{} - router.Name = r.getRouteName(item) - router.Path = r.getRouterPath(item) - router.Component = r.getComponent(item) - router.Meta = r.getRouteMeta(item) - - // 子项菜单 目录类型 非路径链接 - cMenus := item.Children - if len(cMenus) > 0 && item.MenuType == consts.TYPE_DIR && !regular.ValidHttp(item.Path) { - // 获取重定向地址 - redirectPrefix, redirectPath := r.getRouteRedirect( - cMenus, - router.Path, - prefix, - ) - router.Redirect = redirectPath - // 子菜单进入递归 - router.Children = r.BuildRouteMenus(cMenus, redirectPrefix) - } else if item.ParentID == "0" && item.IsFrame == "1" && item.MenuType == consts.TYPE_MENU { - // 父菜单 内部跳转 菜单类型 - menuPath := "/" + item.MenuID - childPath := menuPath + r.getRouterPath(item) - children := vo.Router{ - Name: r.getRouteName(item), - Path: childPath, - Component: item.Component, - Meta: r.getRouteMeta(item), - } - router.Meta.HideChildInMenu = true - router.Children = append(router.Children, children) - router.Name = item.MenuID - router.Path = menuPath - router.Redirect = childPath - router.Component = consts.COMPONENT_LAYOUT_BASIC - } else if item.ParentID == "0" && item.IsFrame == "1" && regular.ValidHttp(item.Path) { - // 父菜单 内部跳转 路径链接 - menuPath := "/" + item.MenuID - childPath := menuPath + r.getRouterPath(item) - children := vo.Router{ - Name: r.getRouteName(item), - Path: childPath, - Component: consts.COMPONENT_LAYOUT_LINK, - Meta: r.getRouteMeta(item), - } - router.Meta.HideChildInMenu = true - router.Children = append(router.Children, children) - router.Name = item.MenuID - router.Path = menuPath - router.Redirect = childPath - router.Component = consts.COMPONENT_LAYOUT_BASIC - } - - routers = append(routers, router) - } - return routers -} - -// getRouteName 获取路由名称 路径英文首字母大写 -func (r *ServiceSysMenu) getRouteName(sysMenu model.SysMenu) string { - routerName := parse.FirstUpper(sysMenu.Path) - // 路径链接 - if regular.ValidHttp(sysMenu.Path) { - return routerName[:5] + "Link" + sysMenu.MenuID - } - return routerName -} - -// getRouterPath 获取路由地址 -func (r *ServiceSysMenu) getRouterPath(sysMenu model.SysMenu) string { - routerPath := sysMenu.Path - - // 显式路径 - if routerPath == "" || strings.HasPrefix(routerPath, "/") { - return routerPath - } - - // 路径链接 内部跳转 - if regular.ValidHttp(routerPath) && sysMenu.IsFrame == "1" { - routerPath = regular.Replace(routerPath, `/^http(s)?:\/\/+/`, "") - routerPath = base64.StdEncoding.EncodeToString([]byte(routerPath)) - } - - // 父菜单 内部跳转 - if sysMenu.ParentID == "0" && sysMenu.IsFrame == "1" { - routerPath = "/" + routerPath - } - - return routerPath -} - -// getComponent 获取组件信息 -func (r *ServiceSysMenu) getComponent(sysMenu model.SysMenu) string { - // 内部跳转 路径链接 - if sysMenu.IsFrame == "1" && regular.ValidHttp(sysMenu.Path) { - return consts.COMPONENT_LAYOUT_LINK - } - - // 非父菜单 目录类型 - if sysMenu.ParentID != "0" && sysMenu.MenuType == consts.TYPE_DIR { - return consts.COMPONENT_LAYOUT_BLANK - } - - // 组件路径 内部跳转 菜单类型 - if sysMenu.Component != "" && sysMenu.IsFrame == "1" && sysMenu.MenuType == consts.TYPE_MENU { - // 父菜单套外层布局 - if sysMenu.ParentID == "0" { - return consts.COMPONENT_LAYOUT_BASIC - } - return sysMenu.Component - } - - return consts.COMPONENT_LAYOUT_BASIC -} - -// getRouteMeta 获取路由元信息 -func (r *ServiceSysMenu) getRouteMeta(sysMenu model.SysMenu) vo.RouterMeta { - meta := vo.RouterMeta{} - if sysMenu.Icon == "#" { - meta.Icon = "" - } else { - meta.Icon = sysMenu.Icon - } - meta.Title = sysMenu.MenuName - meta.HideChildInMenu = false - meta.HideInMenu = sysMenu.Visible == "0" - meta.Cache = sysMenu.IsCache == "1" - meta.Target = "" - - // 路径链接 非内部跳转 - if regular.ValidHttp(sysMenu.Path) && sysMenu.IsFrame == "0" { - meta.Target = "_blank" - } - - return meta -} - -// getRouteRedirect 获取路由重定向地址(针对目录) -// -// cMenus 子菜单数组 -// routerPath 当前菜单路径 -// prefix 菜单重定向路径前缀 -func (r *ServiceSysMenu) getRouteRedirect(cMenus []model.SysMenu, routerPath string, prefix string) (string, string) { - redirectPath := "" - - // 重定向为首个显示并启用的子菜单 - var firstChild *model.SysMenu - for _, item := range cMenus { - if item.IsFrame == "1" && item.Visible == "1" { - firstChild = &item - break - } - } - - // 检查内嵌隐藏菜单是否可做重定向 - if firstChild == nil { - for _, item := range cMenus { - if item.IsFrame == "1" && item.Visible == "1" && strings.Contains(item.Path, consts.PATH_INLINE) { - firstChild = &item - break - } - } - } - - if firstChild != nil { - firstChildPath := r.getRouterPath(*firstChild) - if strings.HasPrefix(firstChildPath, "/") { - redirectPath = firstChildPath - } else { - // 拼接追加路径 - if !strings.HasPrefix(routerPath, "/") { - prefix += "/" - } - prefix = prefix + routerPath - redirectPath = prefix + "/" + firstChildPath - } - } - - return prefix, redirectPath -} - -// parseDataToTree 将数据解析为树结构,构建前端所需要下拉树结构 -func (r *ServiceSysMenu) parseDataToTree(sysMenus []model.SysMenu) []model.SysMenu { - // 节点分组 - nodesMap := make(map[string][]model.SysMenu) - // 节点id - treeIds := []string{} - // 树节点 - tree := []model.SysMenu{} - - for _, item := range sysMenus { - parentID := item.ParentID - // 分组 - mapItem, ok := nodesMap[parentID] - if !ok { - mapItem = []model.SysMenu{} - } - mapItem = append(mapItem, item) - nodesMap[parentID] = mapItem - // 记录节点ID - treeIds = append(treeIds, item.MenuID) - } - - for key, value := range nodesMap { - // 选择不是节点ID的作为树节点 - found := false - for _, id := range treeIds { - if id == key { - found = true - break - } - } - if !found { - tree = append(tree, value...) - } - } - - for i, node := range tree { - iN := r.parseDataToTreeComponet(node, &nodesMap) - tree[i] = iN - } - - return tree -} - -// parseDataToTreeComponet 递归函数处理子节点 -func (r *ServiceSysMenu) parseDataToTreeComponet(node model.SysMenu, nodesMap *map[string][]model.SysMenu) model.SysMenu { - id := node.MenuID - children, ok := (*nodesMap)[id] - if ok { - node.Children = children - } - if len(node.Children) > 0 { - for i, child := range node.Children { - icN := r.parseDataToTreeComponet(child, nodesMap) - node.Children[i] = icN - } - } - return node -} diff --git a/features/sys_role/api_sys_role.go b/features/sys_role/api_sys_role.go deleted file mode 100644 index ec43a1e5..00000000 --- a/features/sys_role/api_sys_role.go +++ /dev/null @@ -1,368 +0,0 @@ -package sysrole - -import ( - "fmt" - "net/http" - "strings" - - "be.ems/features/sys_role/model" - "be.ems/features/sys_role/service" - userService "be.ems/features/sys_user/service" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/utils/parse" - "be.ems/lib/core/vo/result" - "be.ems/lib/midware" - "be.ems/lib/services" - "be.ems/restagent/config" -) - -// 角色接口添加到路由 -func Routers() []services.RouterItem { - // 实例化控制层 SysRoleApi 结构体 - var apis = &SysRoleApi{ - sysRoleService: service.NewServiceSysRole, - sysUserService: userService.NewServiceSysUser, - } - - rs := [...]services.RouterItem{ - { - Method: "GET", - Pattern: "/roles", - Handler: apis.List, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/role/{roleId}", - Handler: apis.Info, - Middleware: midware.Authorize(nil), - }, - { - Method: "POST", - Pattern: "/role", - Handler: apis.Add, - Middleware: midware.Authorize(nil), - }, - { - Method: "PUT", - Pattern: "/role", - Handler: apis.Edit, - Middleware: midware.Authorize(nil), - }, - { - Method: "DELETE", - Pattern: "/role/{roleIds}", - Handler: apis.Remove, - Middleware: midware.Authorize(nil), - }, - { - Method: "PUT", - Pattern: "/role/changeStatus", - Handler: apis.Status, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/role/authUser/allocatedList", - Handler: apis.AuthUserAllocatedList, - Middleware: midware.Authorize(nil), - }, - { - Method: "PUT", - Pattern: "/role/authUser/checked", - Handler: apis.AuthUserChecked, - Middleware: midware.Authorize(nil), - }, - // 添加更多的 Router 对象... - } - - // 生成两组前缀路由 - rsPrefix := []services.RouterItem{} - for _, v := range rs { - path := "/roleManage/{apiVersion}" + v.Pattern - // 固定前缀 - v.Pattern = config.DefaultUriPrefix + path - rsPrefix = append(rsPrefix, v) - // 可配置 - v.Pattern = config.UriPrefix + path - rsPrefix = append(rsPrefix, v) - } - return rsPrefix -} - -// // 实例化控制层 SysRoleApi 结构体 -// var NewSysRole = &SysRoleApi{ -// sysRoleService: sysrole.NewServiceSysRole, -// sysUserService: sysuser.NewServiceSysUser, -// } - -// 角色信息 -// -// PATH /roleManage -type SysRoleApi struct { - // 角色服务 - sysRoleService *service.ServiceSysRole - // 用户服务 - sysUserService *userService.ServiceSysUser -} - -// 角色列表 -// -// GET /list -func (s *SysRoleApi) List(w http.ResponseWriter, r *http.Request) { - querys := ctx.QueryMap(r) - data := s.sysRoleService.SelectRolePage(querys) - ctx.JSON(w, 200, result.Ok(data)) -} - -// 角色信息详情 -// -// GET /:roleId -func (s *SysRoleApi) Info(w http.ResponseWriter, r *http.Request) { - roleId := ctx.Param(r, "roleId") - if roleId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - data := s.sysRoleService.SelectRoleById(roleId) - if data.RoleID == roleId { - ctx.JSON(w, 200, result.OkData(data)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 角色信息新增 -// -// POST / -func (s *SysRoleApi) Add(w http.ResponseWriter, r *http.Request) { - var body model.SysRole - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.RoleID != "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 判断角色名称是否唯一 - uniqueRoleName := s.sysRoleService.CheckUniqueRoleName(body.RoleName, "") - if !uniqueRoleName { - msg := fmt.Sprintf("[%s] Role name already exists", body.RoleName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 判断角色键值是否唯一 - uniqueRoleKey := s.sysRoleService.CheckUniqueRoleKey(body.RoleKey, "") - if !uniqueRoleKey { - msg := fmt.Sprintf("[%s] The role key value already exists", body.RoleName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - body.CreateBy = ctx.LoginUserToUserName(r) - insertId := s.sysRoleService.InsertRole(body) - if insertId != "" { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 角色信息修改 -// -// PUT / -func (s *SysRoleApi) Edit(w http.ResponseWriter, r *http.Request) { - var body model.SysRole - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.RoleID == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查是否管理员角色 - if body.RoleID == "1" { - ctx.JSON(w, 200, result.ErrMsg("Operation of administrator role is not allowed")) - return - } - - // 检查是否存在 - role := s.sysRoleService.SelectRoleById(body.RoleID) - if role.RoleID != body.RoleID { - ctx.JSON(w, 200, result.ErrMsg("No permission to access role data!")) - return - } - - // 判断角色名称是否唯一 - uniqueRoleName := s.sysRoleService.CheckUniqueRoleName(body.RoleName, body.RoleID) - if !uniqueRoleName { - msg := fmt.Sprintf("[%s] Role name already exists", body.RoleName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - // 判断角色键值是否唯一 - uniqueRoleKey := s.sysRoleService.CheckUniqueRoleKey(body.RoleKey, body.RoleID) - if !uniqueRoleKey { - msg := fmt.Sprintf("[%s] The role key value already exists", body.RoleName) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - body.UpdateBy = ctx.LoginUserToUserName(r) - rows := s.sysRoleService.UpdateRole(body) - if rows > 0 { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 角色信息删除 -// -// DELETE /:roleIds -func (s *SysRoleApi) Remove(w http.ResponseWriter, r *http.Request) { - roleIds := ctx.Param(r, "roleIds") - if roleIds == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - // 处理字符转id数组后去重 - ids := strings.Split(roleIds, ",") - uniqueIDs := parse.RemoveDuplicates(ids) - if len(uniqueIDs) <= 0 { - ctx.JSON(w, 200, result.Err(nil)) - return - } - // 检查是否管理员角色 - for _, id := range uniqueIDs { - if id == "1" { - ctx.JSON(w, 200, result.ErrMsg("Operation of administrator role is not allowed")) - return - } - } - rows, err := s.sysRoleService.DeleteRoleByIds(uniqueIDs) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - msg := fmt.Sprintf("Successfully deleted: %d", rows) - ctx.JSON(w, 200, result.OkMsg(msg)) -} - -// 角色状态变更 -// -// PUT /changeStatus -func (s *SysRoleApi) Status(w http.ResponseWriter, r *http.Request) { - var body struct { - // 角色ID - RoleID string `json:"roleId" binding:"required"` - // 状态 - Status string `json:"status" binding:"required"` - } - err := ctx.ShouldBindJSON(r, &body) - if err != nil { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查是否管理员角色 - if body.RoleID == "1" { - ctx.JSON(w, 200, result.ErrMsg("Operation of administrator role is not allowed")) - return - } - - // 检查是否存在 - role := s.sysRoleService.SelectRoleById(body.RoleID) - if role.RoleID != body.RoleID { - ctx.JSON(w, 200, result.ErrMsg("No permission to access role data!")) - return - } - - // 与旧值相等不变更 - if role.Status == body.Status { - ctx.JSON(w, 200, result.ErrMsg("Change status equals old value!")) - return - } - - // 更新状态不刷新缓存 - userName := ctx.LoginUserToUserName(r) - SysRoleApi := model.SysRole{ - RoleID: body.RoleID, - Status: body.Status, - UpdateBy: userName, - } - rows := s.sysRoleService.UpdateRole(SysRoleApi) - if rows > 0 { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 角色分配用户列表 -// -// GET /authUser/allocatedList -func (s *SysRoleApi) AuthUserAllocatedList(w http.ResponseWriter, r *http.Request) { - querys := ctx.QueryMap(r) - roleId, ok := querys["roleId"] - if !ok || roleId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查是否存在 - role := s.sysRoleService.SelectRoleById(roleId.(string)) - if role.RoleID != roleId { - ctx.JSON(w, 200, result.ErrMsg("No permission to access role data!")) - return - } - - data := s.sysUserService.SelectAllocatedPage(querys) - ctx.JSON(w, 200, result.Ok(data)) -} - -// 角色分配选择授权 -// -// PUT /authUser/checked -func (s *SysRoleApi) AuthUserChecked(w http.ResponseWriter, r *http.Request) { - var body struct { - // 角色ID - RoleID string `json:"roleId" binding:"required"` - // 用户ID组 - UserIDs string `json:"userIds" binding:"required"` - // 选择操作 添加true 取消false - Checked bool `json:"checked"` - } - err := ctx.ShouldBindJSON(r, &body) - if err != nil { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 处理字符转id数组后去重 - ids := strings.Split(body.UserIDs, ",") - uniqueIDs := parse.RemoveDuplicates(ids) - if len(uniqueIDs) <= 0 { - ctx.JSON(w, 200, result.Err(nil)) - return - } - - // 检查是否存在 - role := s.sysRoleService.SelectRoleById(body.RoleID) - if role.RoleID != body.RoleID { - ctx.JSON(w, 200, result.ErrMsg("No permission to access role data!")) - return - } - - var rows int64 - if body.Checked { - rows = s.sysRoleService.InsertAuthUsers(body.RoleID, uniqueIDs) - } else { - rows = s.sysRoleService.DeleteAuthUsers(body.RoleID, uniqueIDs) - } - if rows > 0 { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} diff --git a/features/sys_role/model/sys_role.go b/features/sys_role/model/sys_role.go deleted file mode 100644 index 921fd252..00000000 --- a/features/sys_role/model/sys_role.go +++ /dev/null @@ -1,38 +0,0 @@ -package model - -// SysRole 角色对象 sys_role -type SysRole struct { - // 角色ID - RoleID string `json:"roleId"` - // 角色名称 - RoleName string `json:"roleName" binding:"required"` - // 角色键值 - RoleKey string `json:"roleKey" binding:"required"` - // 显示顺序 - RoleSort int `json:"roleSort"` - // 菜单树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示) - MenuCheckStrictly string `json:"menuCheckStrictly"` - // 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示) - DeptCheckStrictly string `json:"deptCheckStrictly"` - // 角色状态(0停用 1正常) - Status string `json:"status"` - // 删除标志(0代表存在 1代表删除) - DelFlag string `json:"delFlag"` - // 创建者 - CreateBy string `json:"createBy"` - // 创建时间 - CreateTime int64 `json:"createTime"` - // 更新者 - UpdateBy string `json:"updateBy"` - // 更新时间 - UpdateTime int64 `json:"updateTime"` - // 备注 - Remark string `json:"remark"` - - // ====== 非数据库字段属性 ====== - - // 菜单组 - MenuIds []string `json:"menuIds,omitempty"` - // 部门组(数据权限) - DeptIds []string `json:"deptIds,omitempty"` -} diff --git a/features/sys_role/service/repo_sys_role.go b/features/sys_role/service/repo_sys_role.go deleted file mode 100644 index c4182ac3..00000000 --- a/features/sys_role/service/repo_sys_role.go +++ /dev/null @@ -1,362 +0,0 @@ -package service - -import ( - "fmt" - "strings" - "time" - - "be.ems/features/sys_role/model" - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/date" - "be.ems/lib/core/utils/parse" - "be.ems/lib/log" -) - -// 实例化数据层 RepoSysRole 结构体 -var NewRepoSysRole = &RepoSysRole{ - selectSql: `select distinct - r.role_id, r.role_name, r.role_key, r.role_sort, r.menu_check_strictly, - r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark - from sys_role r - left join sys_user_role ur on ur.role_id = r.role_id - left join user u on u.id = ur.user_id`, - - resultMap: map[string]string{ - "role_id": "RoleID", - "role_name": "RoleName", - "role_key": "RoleKey", - "role_sort": "RoleSort", - "menu_check_strictly": "MenuCheckStrictly", - "dept_check_strictly": "DeptCheckStrictly", - "status": "Status", - "del_flag": "DelFlag", - "create_by": "CreateBy", - "create_time": "CreateTime", - "update_by": "UpdateBy", - "update_time": "UpdateTime", - "remark": "Remark", - }, -} - -// RepoSysRole 角色表 数据层处理 -type RepoSysRole struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *RepoSysRole) convertResultRows(rows []map[string]any) []model.SysRole { - arr := make([]model.SysRole, 0) - for _, row := range rows { - sysRole := model.SysRole{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - datasource.SetFieldValue(&sysRole, keyMapper, value) - } - } - arr = append(arr, sysRole) - } - return arr -} - -// SelectRolePage 根据条件分页查询角色数据 -func (r *RepoSysRole) SelectRolePage(query map[string]any) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if v, ok := query["roleId"]; ok && v != "" { - conditions = append(conditions, "r.role_id = ?") - params = append(params, v) - } - if v, ok := query["roleName"]; ok && v != "" { - conditions = append(conditions, "r.role_name like concat('%', concat(?, '%'))") - params = append(params, v) - } - if v, ok := query["roleKey"]; ok && v != "" { - conditions = append(conditions, "r.role_key like concat('%', concat(?, '%'))") - params = append(params, v) - } - if v, ok := query["status"]; ok && v != "" { - conditions = append(conditions, "r.status = ?") - params = append(params, v) - } - beginTime, ok := query["beginTime"] - if !ok { - beginTime, ok = query["params[beginTime]"] - } - if ok && beginTime != "" { - conditions = append(conditions, "r.create_time >= ?") - beginDate := date.ParseStrToDate(beginTime.(string), date.YYYY_MM_DD) - params = append(params, beginDate.UnixMilli()) - } - endTime, ok := query["endTime"] - if !ok { - endTime, ok = query["params[endTime]"] - } - if ok && endTime != "" { - conditions = append(conditions, "r.create_time <= ?") - endDate := date.ParseStrToDate(endTime.(string), date.YYYY_MM_DD) - params = append(params, endDate.UnixMilli()) - } - - // 构建查询条件语句 - whereSql := " where r.del_flag = '0' " - if len(conditions) > 0 { - whereSql += " and " + strings.Join(conditions, " and ") - } - - // 查询数量 长度为0直接返回 - totalSql := `select count(distinct r.role_id) as 'total' from sys_role r - left join sys_user_role ur on ur.role_id = r.role_id - left join user u on u.id = ur.user_id` - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { - log.Errorf("total err => %v", err) - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return map[string]any{ - "total": total, - "rows": []model.SysRole{}, - } - } - - // 分页 - pageNum, pageSize := datasource.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " order by r.role_sort asc limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 查询数据 - querySql := r.selectSql + whereSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - } - - // 转换实体 - rows := r.convertResultRows(results) - return map[string]any{ - "total": total, - "rows": rows, - } -} - -// SelectRoleList 根据条件查询角色数据 -func (r *RepoSysRole) SelectRoleList(sysRole model.SysRole) []model.SysRole { - // 查询条件拼接 - var conditions []string - var params []any - if sysRole.RoleID != "" { - conditions = append(conditions, "r.role_id = ?") - params = append(params, sysRole.RoleID) - } - if sysRole.RoleKey != "" { - conditions = append(conditions, "r.role_key like concat('%', concat(?, '%'))") - params = append(params, sysRole.RoleKey) - } - if sysRole.RoleName != "" { - conditions = append(conditions, "r.role_name like concat('%', concat(?, '%'))") - params = append(params, sysRole.RoleName) - } - if sysRole.Status != "" { - conditions = append(conditions, "r.status = ?") - params = append(params, sysRole.Status) - } - - // 构建查询条件语句 - whereSql := " where r.del_flag = '0' " - if len(conditions) > 0 { - whereSql += " and " + strings.Join(conditions, " and ") - } - - // 查询数据 - orderSql := " order by r.role_sort" - querySql := r.selectSql + whereSql + orderSql - rows, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysRole{} - } - return r.convertResultRows(rows) -} - -// SelectRoleListByUserId 根据用户ID获取角色选择框列表 -func (r *RepoSysRole) SelectRoleListByUserId(userId string) []model.SysRole { - querySql := r.selectSql + " where r.del_flag = '0' and ur.user_id = ?" - results, err := datasource.RawDB("", querySql, []any{userId}) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysRole{} - } - return r.convertResultRows(results) -} - -// SelectRoleByIds 通过角色ID查询角色 -func (r *RepoSysRole) SelectRoleByIds(roleIds []string) []model.SysRole { - placeholder := datasource.KeyPlaceholderByQuery(len(roleIds)) - querySql := r.selectSql + " where r.role_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(roleIds) - results, err := datasource.RawDB("", querySql, parameters) - if err != nil { - log.Errorf("query err => %v", err) - return []model.SysRole{} - } - // 转换实体 - return r.convertResultRows(results) -} - -// UpdateRole 修改角色信息 -func (r *RepoSysRole) UpdateRole(sysRole model.SysRole) int64 { - // 参数拼接 - params := make(map[string]any) - if sysRole.RoleName != "" { - params["role_name"] = sysRole.RoleName - } - if sysRole.RoleKey != "" { - params["role_key"] = sysRole.RoleKey - } - if sysRole.RoleSort > 0 { - params["role_sort"] = sysRole.RoleSort - } - if sysRole.MenuCheckStrictly != "" { - params["menu_check_strictly"] = sysRole.MenuCheckStrictly - } - if sysRole.DeptCheckStrictly != "" { - params["dept_check_strictly"] = sysRole.DeptCheckStrictly - } - if sysRole.Status != "" { - params["status"] = sysRole.Status - } - if sysRole.Remark != "" { - params["remark"] = sysRole.Remark - } - if sysRole.UpdateBy != "" { - params["update_by"] = sysRole.UpdateBy - params["update_time"] = time.Now().UnixMilli() - } - - // 构建执行语句 - keys, values := datasource.KeyValueByUpdate(params) - sql := "update sys_role set " + strings.Join(keys, ",") + " where role_id = ?" - - // 执行更新 - values = append(values, sysRole.RoleID) - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("update row : %v", err.Error()) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("update err => %v", err) - return 0 - } - return affected -} - -// InsertRole 新增角色信息 -func (r *RepoSysRole) InsertRole(sysRole model.SysRole) string { - // 参数拼接 - params := make(map[string]any) - if sysRole.RoleID != "" { - params["role_id"] = sysRole.RoleID - } - if sysRole.RoleName != "" { - params["role_name"] = sysRole.RoleName - } - if sysRole.RoleKey != "" { - params["role_key"] = sysRole.RoleKey - } - if sysRole.RoleSort > 0 { - params["role_sort"] = sysRole.RoleSort - } - if sysRole.MenuCheckStrictly != "" { - params["menu_check_strictly"] = sysRole.MenuCheckStrictly - } - if sysRole.DeptCheckStrictly != "" { - params["dept_check_strictly"] = sysRole.DeptCheckStrictly - } - if sysRole.Status != "" { - params["status"] = sysRole.Status - } - if sysRole.Remark != "" { - params["remark"] = sysRole.Remark - } - if sysRole.CreateBy != "" { - params["create_by"] = sysRole.CreateBy - params["create_time"] = time.Now().UnixMilli() - } - - // 构建执行语句 - keys, placeholder, values := datasource.KeyPlaceholderValueByInsert(params) - sql := "insert into sys_role (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" - - // 执行插入 - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - insertId, err := results.LastInsertId() - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - return fmt.Sprint(insertId) -} - -// DeleteRoleByIds 批量删除角色信息 -func (r *RepoSysRole) DeleteRoleByIds(roleIds []string) int64 { - placeholder := datasource.KeyPlaceholderByQuery(len(roleIds)) - sql := "update sys_role set del_flag = '1' where role_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(roleIds) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} - -// CheckUniqueRole 校验角色是否唯一 -func (r *RepoSysRole) CheckUniqueRole(sysRole model.SysRole) string { - // 查询条件拼接 - var conditions []string - var params []any - if sysRole.RoleName != "" { - conditions = append(conditions, "r.role_name = ?") - params = append(params, sysRole.RoleName) - } - if sysRole.RoleKey != "" { - conditions = append(conditions, "r.role_key = ?") - params = append(params, sysRole.RoleKey) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } else { - return "" - } - - // 查询数据 - querySql := "select role_id as 'str' from sys_role r " + whereSql + " and r.del_flag = '0' limit 1" - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err %v", err) - return "" - } - if len(results) > 0 { - return fmt.Sprint(results[0]["str"]) - } - return "" -} diff --git a/features/sys_role/service/service_sys_role.go b/features/sys_role/service/service_sys_role.go deleted file mode 100644 index 33d89be3..00000000 --- a/features/sys_role/service/service_sys_role.go +++ /dev/null @@ -1,165 +0,0 @@ -package service - -import ( - "errors" - "fmt" - - "be.ems/features/sys_role/model" - sysrolemenu "be.ems/features/sys_role_menu" - sysuserrole "be.ems/features/sys_user_role" -) - -// 实例化服务层 ServiceSysRole 结构体 -var NewServiceSysRole = &ServiceSysRole{ - sysRoleRepository: NewRepoSysRole, - sysUserRoleRepository: sysuserrole.NewRepoSysUserRole, - sysRoleMenuRepository: sysrolemenu.NewRepoSysRoleMenu, -} - -// ServiceSysRole 角色 服务层处理 -type ServiceSysRole struct { - // 角色服务 - sysRoleRepository *RepoSysRole - // 用户与角色关联服务 - sysUserRoleRepository *sysuserrole.RepoSysUserRole - // 角色与菜单关联服务 - sysRoleMenuRepository *sysrolemenu.RepoSysRoleMenu -} - -// SelectRolePage 根据条件分页查询角色数据 -func (r *ServiceSysRole) SelectRolePage(query map[string]any) map[string]any { - return r.sysRoleRepository.SelectRolePage(query) -} - -// SelectRoleList 根据条件查询角色数据 -func (r *ServiceSysRole) SelectRoleList(sysRole model.SysRole) []model.SysRole { - return r.sysRoleRepository.SelectRoleList(sysRole) -} - -// SelectRoleListByUserId 根据用户ID获取角色选择框列表 -func (r *ServiceSysRole) SelectRoleListByUserId(userId string) []model.SysRole { - return r.sysRoleRepository.SelectRoleListByUserId(userId) -} - -// SelectRoleById 通过角色ID查询角色 -func (r *ServiceSysRole) SelectRoleById(roleId string) model.SysRole { - if roleId == "" { - return model.SysRole{} - } - posts := r.sysRoleRepository.SelectRoleByIds([]string{roleId}) - if len(posts) > 0 { - return posts[0] - } - return model.SysRole{} -} - -// UpdateRole 修改角色信息 -func (r *ServiceSysRole) UpdateRole(sysRole model.SysRole) int64 { - rows := r.sysRoleRepository.UpdateRole(sysRole) - if rows > 0 { - // 删除角色与菜单关联 - r.sysRoleMenuRepository.DeleteRoleMenu([]string{sysRole.RoleID}) - if len(sysRole.MenuIds) > 0 { - r.insertRoleMenu(sysRole.RoleID, sysRole.MenuIds) - } - } - return rows -} - -// InsertRole 新增角色信息 -func (r *ServiceSysRole) InsertRole(sysRole model.SysRole) string { - insertId := r.sysRoleRepository.InsertRole(sysRole) - if insertId != "" && len(sysRole.MenuIds) > 0 { - r.insertRoleMenu(insertId, sysRole.MenuIds) - } - return insertId -} - -// insertRoleMenu 新增角色菜单信息 -func (r *ServiceSysRole) insertRoleMenu(roleId string, menuIds []string) int64 { - if roleId == "" || len(menuIds) <= 0 { - return 0 - } - - sysRoleMenus := []sysrolemenu.SysRoleMenu{} - for _, menuId := range menuIds { - if menuId == "" { - continue - } - sysRoleMenus = append(sysRoleMenus, sysrolemenu.NewSysRoleMenu(roleId, menuId)) - } - - return r.sysRoleMenuRepository.BatchRoleMenu(sysRoleMenus) -} - -// DeleteRoleByIds 批量删除角色信息 -func (r *ServiceSysRole) DeleteRoleByIds(roleIds []string) (int64, error) { - // 检查是否存在 - roles := r.sysRoleRepository.SelectRoleByIds(roleIds) - if len(roles) <= 0 { - return 0, errors.New("no permission to access role data") - } - for _, role := range roles { - // 检查是否为已删除 - if role.DelFlag == "1" { - return 0, errors.New(role.RoleID + " The character information has been deleted") - } - // 检查分配用户 - userCount := r.sysUserRoleRepository.CountUserRoleByRoleId(role.RoleID) - if userCount > 0 { - msg := fmt.Sprintf("[%s] has been assigned to a user and cannot be deleted", role.RoleName) - return 0, errors.New(msg) - } - } - if len(roles) == len(roleIds) { - // 删除角色与菜单关联 - r.sysRoleMenuRepository.DeleteRoleMenu(roleIds) - rows := r.sysRoleRepository.DeleteRoleByIds(roleIds) - return rows, nil - } - return 0, errors.New("failed to delete role information") -} - -// CheckUniqueRoleName 校验角色名称是否唯一 -func (r *ServiceSysRole) CheckUniqueRoleName(roleName, roleId string) bool { - uniqueId := r.sysRoleRepository.CheckUniqueRole(model.SysRole{ - RoleName: roleName, - }) - if uniqueId == roleId { - return true - } - return uniqueId == "" -} - -// CheckUniqueRoleKey 校验角色权限是否唯一 -func (r *ServiceSysRole) CheckUniqueRoleKey(roleKey, roleId string) bool { - uniqueId := r.sysRoleRepository.CheckUniqueRole(model.SysRole{ - RoleKey: roleKey, - }) - if uniqueId == roleId { - return true - } - return uniqueId == "" -} - -// DeleteAuthUsers 批量取消授权用户角色 -func (r *ServiceSysRole) DeleteAuthUsers(roleId string, userIds []string) int64 { - return r.sysUserRoleRepository.DeleteUserRoleByRoleId(roleId, userIds) -} - -// InsertAuthUsers 批量新增授权用户角色 -func (r *ServiceSysRole) InsertAuthUsers(roleId string, userIds []string) int64 { - if roleId == "" || len(userIds) <= 0 { - return 0 - } - - sysUserRoles := []sysuserrole.SysUserRole{} - for _, userId := range userIds { - if userId == "" { - continue - } - sysUserRoles = append(sysUserRoles, sysuserrole.NewSysUserRole(userId, roleId)) - } - - return r.sysUserRoleRepository.BatchUserRole(sysUserRoles) -} diff --git a/features/sys_role_menu/model_sys_role_menu.go b/features/sys_role_menu/model_sys_role_menu.go deleted file mode 100644 index 755e66db..00000000 --- a/features/sys_role_menu/model_sys_role_menu.go +++ /dev/null @@ -1,15 +0,0 @@ -package sysrolemenu - -// SysRoleMenu 角色和菜单关联对象 sys_role_menu -type SysRoleMenu struct { - RoleID string `json:"roleId"` // 角色ID - MenuID string `json:"menuId"` // 菜单ID -} - -// NewSysRoleMenu 创建角色和菜单关联对象的构造函数 -func NewSysRoleMenu(roleID string, menuID string) SysRoleMenu { - return SysRoleMenu{ - RoleID: roleID, - MenuID: menuID, - } -} diff --git a/features/sys_role_menu/repo_sys_role_menu.go b/features/sys_role_menu/repo_sys_role_menu.go deleted file mode 100644 index fb11cf56..00000000 --- a/features/sys_role_menu/repo_sys_role_menu.go +++ /dev/null @@ -1,86 +0,0 @@ -package sysrolemenu - -import ( - "fmt" - "strings" - - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/parse" - "be.ems/lib/log" -) - -// 实例化数据层 RepoSysRoleMenu 结构体 -var NewRepoSysRoleMenu = &RepoSysRoleMenu{} - -// RepoSysRoleMenu 角色与菜单关联表 数据层处理 -type RepoSysRoleMenu struct{} - -// CheckMenuExistRole 查询菜单分配给角色使用数量 -func (r *RepoSysRoleMenu) CheckMenuExistRole(menuId string) int64 { - querySql := "select count(1) as 'total' from sys_role_menu where menu_id = ?" - results, err := datasource.RawDB("", querySql, []any{menuId}) - if err != nil { - log.Errorf("query err => %v", err) - return 0 - } - if len(results) > 0 { - return parse.Number(results[0]["total"]) - } - return 0 -} - -// DeleteRoleMenu 批量删除角色和菜单关联 -func (r *RepoSysRoleMenu) DeleteRoleMenu(roleIds []string) int64 { - placeholder := datasource.KeyPlaceholderByQuery(len(roleIds)) - sql := "delete from sys_role_menu where role_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(roleIds) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} - -// DeleteMenuRole 批量删除菜单和角色关联 -func (r *RepoSysRoleMenu) DeleteMenuRole(menuIds []string) int64 { - placeholder := datasource.KeyPlaceholderByQuery(len(menuIds)) - sql := "delete from sys_role_menu where menu_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(menuIds) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} - -// BatchRoleMenu 批量新增角色菜单信息 -func (r *RepoSysRoleMenu) BatchRoleMenu(sysRoleMenus []SysRoleMenu) int64 { - keyValues := make([]string, 0) - for _, item := range sysRoleMenus { - keyValues = append(keyValues, fmt.Sprintf("(%s,%s)", item.RoleID, item.MenuID)) - } - sql := "insert into sys_role_menu(role_id, menu_id) values " + strings.Join(keyValues, ",") - results, err := datasource.ExecDB("", sql, nil) - if err != nil { - log.Errorf("insert err => %v", err) - return 0 - } - insertId, err := results.LastInsertId() - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return 0 - } - return insertId -} diff --git a/features/sys_user/api_sys_user.go b/features/sys_user/api_sys_user.go deleted file mode 100644 index 69b748c0..00000000 --- a/features/sys_user/api_sys_user.go +++ /dev/null @@ -1,323 +0,0 @@ -package sysuser - -import ( - "fmt" - "net/http" - "strings" - - sysRoleModel "be.ems/features/sys_role/model" - sysRoleService "be.ems/features/sys_role/service" - sysUserModel "be.ems/features/sys_user/model" - "be.ems/features/sys_user/service" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/utils/parse" - "be.ems/lib/core/vo/result" - "be.ems/lib/midware" - "be.ems/lib/services" - "be.ems/restagent/config" - srcConfig "be.ems/src/framework/config" -) - -// 用户接口添加到路由 -func Routers() []services.RouterItem { - // 实例化控制层 SysUserApi 结构体 - var apis = &SysUserApi{ - sysUserService: service.NewServiceSysUser, - sysRoleService: sysRoleService.NewServiceSysRole, - } - - rs := [...]services.RouterItem{ - { - Method: "GET", - Pattern: "/users", - Handler: apis.List, - Middleware: midware.Authorize(nil), - }, - { - Method: "GET", - Pattern: "/user/{userId}", - Handler: apis.Info, - Middleware: midware.Authorize(nil), - }, - { - Method: "POST", - Pattern: "/user", - Handler: apis.Add, - Middleware: midware.Authorize(nil), - }, - { - Method: "PUT", - Pattern: "/user", - Handler: apis.Edit, - Middleware: midware.Authorize(nil), - }, - { - Method: "DELETE", - Pattern: "/user/{userIds}", - Handler: apis.Remove, - Middleware: midware.Authorize(nil), - }, - // 添加更多的 Router 对象... - } - - // 生成两组前缀路由 - rsPrefix := []services.RouterItem{} - for _, v := range rs { - path := "/userManage/{apiVersion}" + v.Pattern - // 固定前缀 - v.Pattern = config.DefaultUriPrefix + path - rsPrefix = append(rsPrefix, v) - // 可配置 - v.Pattern = config.UriPrefix + path - rsPrefix = append(rsPrefix, v) - } - return rsPrefix -} - -// // 实例化控制层 SysUserApi 结构体 -// var NewSysUser = &SysUserApi{ -// sysUserService: service.NewSysUserImpl, -// sysRoleService: service.NewSysRoleImpl, -// sysPostService: service.NewSysPostImpl, -// sysDictDataService: service.NewSysDictDataImpl, -// } - -// 用户信息 -// -// PATH /system/user -type SysUserApi struct { - // 用户服务 - sysUserService *service.ServiceSysUser - // 角色服务 - sysRoleService *sysRoleService.ServiceSysRole -} - -// 用户信息列表 -// -// GET /list -func (s *SysUserApi) List(w http.ResponseWriter, r *http.Request) { - querys := ctx.QueryMap(r) - data := s.sysUserService.SelectUserPage(querys) - ctx.JSON(w, 200, result.Ok(data)) -} - -// 用户信息详情 -// -// GET /:userId -func (s *SysUserApi) Info(w http.ResponseWriter, r *http.Request) { - userId := ctx.Param(r, "userId") - if userId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - // 查询系统角色列表 - roles := s.sysRoleService.SelectRoleList(sysRoleModel.SysRole{}) - - // 不是系统指定管理员需要排除其角色 - if !srcConfig.IsAdmin(userId) { - rolesFilter := make([]sysRoleModel.SysRole, 0) - for _, r := range roles { - if r.RoleID != "1" { - rolesFilter = append(rolesFilter, r) - } - } - roles = rolesFilter - } - - // 新增用户时,用户ID为0 - if userId == "0" { - ctx.JSON(w, 200, result.OkData(map[string]any{ - "user": map[string]any{}, - "roleIds": []string{}, - "roles": roles, - })) - return - } - - // 检查用户是否存在 - user := s.sysUserService.SelectUserById(userId) - if user.Id != userId { - ctx.JSON(w, 200, result.ErrMsg("No permission to access user data!")) - return - } - - // 角色ID组 - roleIds := make([]string, 0) - for _, r := range user.Roles { - roleIds = append(roleIds, r.RoleID) - } - - ctx.JSON(w, 200, result.OkData(map[string]any{ - "user": user, - "roleIds": roleIds, - "roles": roles, - })) -} - -// 用户信息新增 -// -// POST / -func (s *SysUserApi) Add(w http.ResponseWriter, r *http.Request) { - var body sysUserModel.SysUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Id != "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查用户登录账号是否唯一 - uniqueUserName := s.sysUserService.CheckUniqueUserName(body.AccountId, "") - if !uniqueUserName { - msg := fmt.Sprintf("[%s] Login account already exists", body.AccountId) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - insertId := s.sysUserService.InsertUser(body) - if insertId != "" { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 用户信息修改 -// -// POST / -func (s *SysUserApi) Edit(w http.ResponseWriter, r *http.Request) { - var body sysUserModel.SysUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Id == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查是否管理员用户 - // if srcConfig.IsAdmin(body.Id) { - // ctx.JSON(w, 200, result.ErrMsg("不允许操作管理员用户")) - // return - // } - - user := s.sysUserService.SelectUserById(body.Id) - if user.Id != body.Id { - ctx.JSON(w, 200, result.ErrMsg("No permission to access user data!")) - return - } - - // 检查用户登录账号是否唯一 - uniqueUserName := s.sysUserService.CheckUniqueUserName(body.AccountId, body.Id) - if !uniqueUserName { - msg := fmt.Sprintf("[%s] Login account already exists", body.AccountId) - ctx.JSON(w, 200, result.ErrMsg(msg)) - return - } - - body.AccountId = "" // 忽略修改登录用户名称 - // body.Password = "" // 忽略修改密码 - rows := s.sysUserService.UpdateUserAndRolePost(body) - if rows > 0 { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 用户信息删除 -// -// DELETE /:userIds -func (s *SysUserApi) Remove(w http.ResponseWriter, r *http.Request) { - userIds := ctx.Param(r, "userIds") - if userIds == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - // 处理字符转id数组后去重 - ids := strings.Split(userIds, ",") - uniqueIDs := parse.RemoveDuplicates(ids) - if len(uniqueIDs) <= 0 { - ctx.JSON(w, 200, result.Err(nil)) - return - } - rows, err := s.sysUserService.DeleteUserByIds(uniqueIDs) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - msg := fmt.Sprintf("Successfully deleted: %d", rows) - ctx.JSON(w, 200, result.OkMsg(msg)) -} - -// 用户重置密码 -// -// PUT /resetPwd -func (s *SysUserApi) ResetPwd(w http.ResponseWriter, r *http.Request) { - var body struct { - UserID string `json:"userId" binding:"required"` - Password string `json:"password" binding:"required"` - } - if err := ctx.ShouldBindJSON(r, &body); err != nil { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查是否管理员用户 - if srcConfig.IsAdmin(body.UserID) { - ctx.JSON(w, 200, result.ErrMsg("No permission to access user data!")) - return - } - - user := s.sysUserService.SelectUserById(body.UserID) - if user.Id != body.UserID { - ctx.JSON(w, 200, result.ErrMsg("No permission to access user data!")) - return - } - - SysUserApi := sysUserModel.SysUser{ - Id: body.UserID, - Password: body.Password, - } - rows := s.sysUserService.UpdateUser(SysUserApi) - if rows > 0 { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} - -// 用户状态修改 -// -// PUT /changeStatus -func (s *SysUserApi) Status(w http.ResponseWriter, r *http.Request) { - var body struct { - UserID string `json:"userId" binding:"required"` - Status string `json:"status" binding:"required"` - } - if err := ctx.ShouldBindJSON(r, &body); err != nil { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 检查是否存在 - user := s.sysUserService.SelectUserById(body.UserID) - if user.Id != body.UserID { - ctx.JSON(w, 200, result.ErrMsg("No permission to access user data!")) - return - } - - // 与旧值相等不变更 - if user.Status == body.Status { - ctx.JSON(w, 200, result.ErrMsg("Change status equals old value!")) - return - } - - SysUserApi := sysUserModel.SysUser{ - Id: body.UserID, - Status: body.Status, - } - rows := s.sysUserService.UpdateUser(SysUserApi) - if rows > 0 { - ctx.JSON(w, 200, result.Ok(nil)) - return - } - ctx.JSON(w, 200, result.Err(nil)) -} diff --git a/features/sys_user/model/sys_user.go b/features/sys_user/model/sys_user.go deleted file mode 100644 index 1f5f1088..00000000 --- a/features/sys_user/model/sys_user.go +++ /dev/null @@ -1,42 +0,0 @@ -package model - -import "be.ems/features/sys_role/model" - -type SysUser struct { - Id string `json:"id" xorm:"pk 'id' autoincr"` - AccountId string `json:"accountId" xorm:"account_id"` - Name string `json:"name" xorm:"name"` - Sn string `json:"sn"` - Gender string `json:"gender"` - Description string `json:"description"` - TelephoneNumber string `json:"telephoneNumber" xorm:"telephone_number"` - Mobile string `json:"mobile"` - Email string `json:"email" xorm:"email"` - StartTime string `json:"startTime" xorm:"start_time"` - EndTime string `json:"endTime" xorm:"end_time"` - IdCardNumber string `json:"idCardNumber"` - EmployeeNumber string `json:"employeeNumber"` - Organize string `json:"organize"` - EmployeeType string `json:"employeeType"` - SupporterCorpName string `json:"supporterCorpName"` - RealName string `json:"realName" xorm:"real_name"` - Password string `json:"password" xorm:"-"` - PasswordSha512 string `json:"-" xorm:"-"` - ChangePasswordFlag int `json:"changePasswordFlag"` - PasswordExpiration string `json:"passwordExpiration" xorm:"password_expiration"` - Status string `json:"status"` - UserExpiration string `json:"userExpiration" xorm:"user_expiration"` - GroupName string `json:"groupName" xorm:"group_name"` - Profile string `json:"-" xorm:"profile"` - Phone string `json:"phone" xorm:"phone"` - CreateTime string `json:"createTime" xorm:"create_time"` - UpdateTime string `json:"updateTime" xorm:"update_time"` - Unit string `json:"unit" xorm:"unit"` - - // 角色对象组 - Roles []model.SysRole `json:"roles"` - // 角色ID - 参数提交绑定 - RoleID string `json:"roleId,omitempty"` - // 角色组 - 参数提交绑定 - RoleIDs []string `json:"roleIds,omitempty"` -} diff --git a/features/sys_user/service/repo_sys_user.go b/features/sys_user/service/repo_sys_user.go deleted file mode 100644 index de559491..00000000 --- a/features/sys_user/service/repo_sys_user.go +++ /dev/null @@ -1,578 +0,0 @@ -package service - -import ( - "fmt" - "strings" - "time" - - sysRoleModel "be.ems/features/sys_role/model" - sysUserModel "be.ems/features/sys_user/model" - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/date" - "be.ems/lib/core/utils/parse" - "be.ems/lib/log" - "be.ems/src/framework/utils/crypto" -) - -// 实例化数据层 RepoSysUser 结构体 -var NewRepoSysUser = &RepoSysUser{ - selectSql: `select u.id, - u.account_id, u.name, u.sn, u.gender, u.description, u.telephone_number, u.mobile, u.email, - u.start_time, u.end_time, u.id_card_number, u.employee_number, - u.organize, u.employee_type, u.supporter_corp_name, u.real_name, u.password, u.password_sha512, - u.change_password_flag,u.password_expiration, u.status, u.user_expiration, u.group_name, - u.profile, u.phone, u.create_time, u.update_time, u.unit, - r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status - from user u - left join sys_user_role ur on u.id = ur.user_id - left join sys_role r on r.role_id = ur.role_id`, - - sysUserMap: map[string]string{ - "id": "Id", - "account_id": "AccountId", - "name": "Name", - "sn": "Sn", - "gender": "Gender", - "description": "Description", - "telephone_number": "TelephoneNumber", - "mobile": "Mobile", - "email": "Email", - "start_time": "StartTime", - "end_time": "EndTime", - "id_card_number": "IdCardNumber", - "employee_number": "EmployeeNumber", - "organize": "Organize", - "employee_type": "EmployeeType", - "supporter_corp_name": "SupporterCorpName", - "real_name": "RealName", - "password": "Password", - "password_sha512": "PasswordSha512", - "change_password_flag": "ChangePasswordFlag", - "password_expiration": "PasswordExpiration", - "status": "Status", - "user_expiration": "UserExpiration", - "group_name": "GroupName", - "profile": "Profile", - "phone": "Phone", - "create_time": "CreateTime", - "update_time": "UpdateTime", - "unit": "Unit", - }, - - sysRoleMap: map[string]string{ - "role_id": "RoleID", - "role_name": "RoleName", - "role_key": "RoleKey", - "role_sort": "RoleSort", - "data_scope": "DataScope", - "role_status": "Status", - }, -} - -// RepoSysUser 用户表 数据层处理 -type RepoSysUser struct { - // 查询视图对象SQL - selectSql string - // 用户信息实体映射 - sysUserMap map[string]string - // 用户角色实体映射 一对多 - sysRoleMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *RepoSysUser) convertResultRows(rows []map[string]any) []sysUserModel.SysUser { - arr := make([]sysUserModel.SysUser, 0) - - for _, row := range rows { - sysUser := sysUserModel.SysUser{} - sysRole := sysRoleModel.SysRole{} - sysUser.Roles = []sysRoleModel.SysRole{} - - for key, value := range row { - if keyMapper, ok := r.sysUserMap[key]; ok { - datasource.SetFieldValue(&sysUser, keyMapper, value) - } - if keyMapper, ok := r.sysRoleMap[key]; ok { - datasource.SetFieldValue(&sysRole, keyMapper, value) - } - } - - if sysRole.RoleKey != "" { - sysUser.Roles = append(sysUser.Roles, sysRole) - } - - one := true - for i, a := range arr { - if a.Id == sysUser.Id { - arrUser := &arr[i] - arrUser.Roles = append(arrUser.Roles, sysUser.Roles...) - one = false - break - } - } - if one { - arr = append(arr, sysUser) - } - } - - return arr -} - -// SelectUserPage 根据条件分页查询用户列表 -func (r *RepoSysUser) SelectUserPage(query map[string]any) map[string]any { - selectUserSql := `select u.id, - u.account_id, u.name, u.sn, u.gender, u.description, u.telephone_number, u.mobile, u.email, - u.start_time, u.end_time, u.id_card_number, u.employee_number, - u.organize, u.employee_type, u.supporter_corp_name, u.real_name, - u.change_password_flag,u.password_expiration, u.status, u.user_expiration, u.group_name, - u.profile, u.phone, u.create_time, u.update_time, u.unit - from user u` - selectUserTotalSql := `select count(distinct u.id) as 'total' from user u` - - // 查询条件拼接 - var conditions []string - var params []any - if v, ok := query["accountId"]; ok && v != "" { - conditions = append(conditions, "u.account_id = ?") - params = append(params, v) - } - if v, ok := query["name"]; ok && v != "" { - conditions = append(conditions, "u.name concat('%', concat(?, '%'))") - params = append(params, v) - } - if v, ok := query["status"]; ok && v != "" { - conditions = append(conditions, "u.status = ?") - params = append(params, v) - } - if v, ok := query["phonenumber"]; ok && v != "" { - conditions = append(conditions, "u.phonenumber like concat('%', concat(?, '%'))") - params = append(params, v) - } - beginTime, ok := query["beginTime"] - if !ok { - beginTime, ok = query["params[beginTime]"] - } - if ok && beginTime != "" { - conditions = append(conditions, "u.login_date >= ?") - beginDate := date.ParseStrToDate(beginTime.(string), date.YYYY_MM_DD) - params = append(params, beginDate.UnixMilli()) - } - endTime, ok := query["endTime"] - if !ok { - endTime, ok = query["params[endTime]"] - } - if ok && endTime != "" { - conditions = append(conditions, "u.login_date <= ?") - endDate := date.ParseStrToDate(endTime.(string), date.YYYY_MM_DD) - params = append(params, endDate.UnixMilli()) - } - if v, ok := query["deptId"]; ok && v != "" { - conditions = append(conditions, "(u.dept_id = ? or u.dept_id in ( select t.dept_id from sys_dept t where find_in_set(?, ancestors) ))") - params = append(params, v) - params = append(params, v) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数量 长度为0直接返回 - totalSql := selectUserTotalSql + whereSql - totalRows, err := datasource.RawDB("", totalSql, params) - if err != nil { - log.Errorf("total err => %v", err) - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return map[string]any{ - "total": total, - "rows": []sysUserModel.SysUser{}, - } - } - - // 分页 - pageNum, pageSize := datasource.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 查询数据 - querySql := selectUserSql + whereSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - } - - // 转换实体 - rows := r.convertResultRows(results) - return map[string]any{ - "total": total, - "rows": rows, - } -} - -// SelectAllocatedPage 根据条件分页查询分配用户角色列表 -func (r *RepoSysUser) SelectAllocatedPage(query map[string]any) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if v, ok := query["name"]; ok && v != "" { - conditions = append(conditions, "u.name like concat('%', concat(?, '%'))") - params = append(params, v) - } - if v, ok := query["phone"]; ok && v != "" { - conditions = append(conditions, "u.phone like concat('%', concat(?, '%'))") - params = append(params, v) - } - if v, ok := query["status"]; ok && v != "" { - conditions = append(conditions, "u.status = ?") - params = append(params, v) - } - // 分配角色用户 - if allocated, ok := query["allocated"]; ok && allocated != "" { - if roleId, ok := query["roleId"]; ok && roleId != "" { - if parse.Boolean(allocated) { - conditions = append(conditions, "r.role_id = ?") - params = append(params, roleId) - } else { - conditions = append(conditions, `(r.role_id != ? or r.role_id IS NULL) - and u.id not in ( - select u.id from user u - inner join sys_user_role ur on u.id = ur.user_id - and ur.role_id = ? - )`) - params = append(params, roleId) - params = append(params, roleId) - } - - } - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数量 长度为0直接返回 - totalSql := `select count(distinct u.id) as 'total' from user u - left join sys_user_role ur on u.id = ur.user_id - left join sys_role r on r.role_id = ur.role_id` - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { - log.Errorf("total err => %v", err) - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return map[string]any{ - "total": total, - "rows": []sysUserModel.SysUser{}, - } - } - - // 分页 - pageNum, pageSize := datasource.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 查询数据 - querySql := `select distinct - u.id, u.account_id, u.name, u.gender, u.email, - u.phone, u.status, u.create_time, u.real_name - from user u - left join sys_user_role ur on u.id = ur.user_id - left join sys_role r on r.role_id = ur.role_id` - querySql = querySql + whereSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - } - - // 转换实体 - rows := r.convertResultRows(results) - return map[string]any{ - "total": total, - "rows": rows, - } -} - -// SelectUserList 根据条件查询用户列表 -func (r *RepoSysUser) SelectUserList(sysUser sysUserModel.SysUser, dataScopeSQL string) []sysUserModel.SysUser { - selectUserSql := `select - u.id, u.account_id, u.name, u.real_name, u.email, u.gender, u.phone, u.create_time, u.status, u.description - from user u` - - // 查询条件拼接 - var conditions []string - var params []any - if sysUser.AccountId != "" { - conditions = append(conditions, "u.account_id = ?") - params = append(params, sysUser.AccountId) - } - if sysUser.Name != "" { - conditions = append(conditions, "u.name like concat('%', concat(?, '%'))") - params = append(params, sysUser.Name) - } - if sysUser.Status != "" { - conditions = append(conditions, "u.status = ?") - params = append(params, sysUser.Status) - } - if sysUser.Phone != "" { - conditions = append(conditions, "u.phone like concat('%', concat(?, '%'))") - params = append(params, sysUser.Phone) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数据 - querySql := selectUserSql + whereSql + dataScopeSQL - rows, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - return []sysUserModel.SysUser{} - } - return r.convertResultRows(rows) -} - -// SelectUserByIds 通过用户ID查询用户 -func (r *RepoSysUser) SelectUserByIds(userIds []string) []sysUserModel.SysUser { - placeholder := datasource.KeyPlaceholderByQuery(len(userIds)) - querySql := r.selectSql + " where u.id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(userIds) - results, err := datasource.RawDB("", querySql, parameters) - if err != nil { - log.Errorf("query err => %v", err) - return []sysUserModel.SysUser{} - } - // 转换实体 - return r.convertResultRows(results) -} - -// SelectUserByUserName 通过用户登录账号查询用户 -func (r *RepoSysUser) SelectUserByUserName(userName string) sysUserModel.SysUser { - querySql := r.selectSql + " where u.name = ?" - results, err := datasource.RawDB("", querySql, []any{userName}) - if err != nil { - log.Errorf("query err => %v", err) - return sysUserModel.SysUser{} - } - // 转换实体 - rows := r.convertResultRows(results) - if len(rows) > 0 { - return rows[0] - } - return sysUserModel.SysUser{} -} - -// InsertUser 新增用户信息 -func (r *RepoSysUser) InsertUser(sysUser sysUserModel.SysUser) string { - // 参数拼接 - params := make(map[string]any) - if sysUser.AccountId != "" { - params["account_id"] = sysUser.AccountId - } - if sysUser.Name != "" { - params["name"] = sysUser.Name - } - if sysUser.Sn != "" { - params["sn"] = sysUser.Sn - } else { - params["sn"] = "" - } - if sysUser.RealName != "" { - params["real_name"] = sysUser.RealName - } else { - params["real_name"] = "" - } - if sysUser.Gender != "" { - params["gender"] = sysUser.Gender - } - if sysUser.Email != "" { - params["email"] = sysUser.Email - } else { - params["email"] = "" - } - if sysUser.Phone != "" { - params["phone"] = sysUser.Phone - } else { - params["phone"] = "" - } - if sysUser.Unit != "" { - params["unit"] = sysUser.Unit - } else { - params["unit"] = "" - } - - if sysUser.Organize != "" { - params["organize"] = sysUser.Organize - } - if sysUser.Password != "" { - password := crypto.BcryptHash(sysUser.Password) - params["password"] = password - } - if sysUser.Status != "" { - params["status"] = sysUser.Status - } - if sysUser.PasswordExpiration != "" { - params["password_expiration"] = sysUser.PasswordExpiration - } - if sysUser.UserExpiration != "" { - params["user_expiration"] = sysUser.UserExpiration - } - if sysUser.GroupName != "" { - params["group_name"] = sysUser.GroupName - } - params["create_time"] = time.Now() - - // 构建执行语句 - keys, placeholder, values := datasource.KeyPlaceholderValueByInsert(params) - sql := "insert into user (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" - - // 执行插入 - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - insertId, err := results.LastInsertId() - if err != nil { - log.Errorf("insert row : %v", err.Error()) - return "" - } - return fmt.Sprint(insertId) -} - -// UpdateUser 修改用户信息 -func (r *RepoSysUser) UpdateUser(sysUser sysUserModel.SysUser) int64 { - // 参数拼接 - params := make(map[string]any) - if sysUser.Name != "" { - params["name"] = sysUser.Name - } - if sysUser.Sn != "" { - params["sn"] = sysUser.Sn - } else { - params["sn"] = "" - } - if sysUser.RealName != "" { - params["real_name"] = sysUser.RealName - } else { - params["real_name"] = "" - } - if sysUser.Gender != "" { - params["gender"] = sysUser.Gender - } - if sysUser.Email != "" { - params["email"] = sysUser.Email - } else { - params["email"] = "" - } - if sysUser.Phone != "" { - params["phone"] = sysUser.Phone - } else { - params["phone"] = "" - } - if sysUser.Unit != "" { - params["unit"] = sysUser.Unit - } else { - params["unit"] = "" - } - - if sysUser.Organize != "" { - params["organize"] = sysUser.Organize - } - if sysUser.Password != "" { - password := crypto.BcryptHash(sysUser.Password) - params["password"] = password - } - if sysUser.Status != "" { - params["status"] = sysUser.Status - } - if sysUser.PasswordExpiration != "" { - params["password_expiration"] = sysUser.PasswordExpiration - } - if sysUser.UserExpiration != "" { - params["user_expiration"] = sysUser.UserExpiration - } - if sysUser.GroupName != "" { - params["group_name"] = sysUser.GroupName - } - params["update_time"] = time.Now() - - // 构建执行语句 - keys, values := datasource.KeyValueByUpdate(params) - sql := "update user set " + strings.Join(keys, ",") + " where id = ?" - - // 执行更新 - values = append(values, sysUser.Id) - results, err := datasource.ExecDB("", sql, values) - if err != nil { - log.Errorf("update row : %v", err.Error()) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("update err => %v", err) - return 0 - } - return affected -} - -// DeleteUserByIds 批量删除用户信息 -func (r *RepoSysUser) DeleteUserByIds(userIds []string) int64 { - placeholder := datasource.KeyPlaceholderByQuery(len(userIds)) - sql := "delete from user where id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(userIds) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} - -// CheckUniqueUser 校验用户信息是否唯一 -func (r *RepoSysUser) CheckUniqueUser(sysUser sysUserModel.SysUser) string { - // 查询条件拼接 - var conditions []string - var params []any - if sysUser.Name != "" { - conditions = append(conditions, "name = ?") - params = append(params, sysUser.Name) - } - if sysUser.AccountId != "" { - conditions = append(conditions, "account_id = ?") - params = append(params, sysUser.AccountId) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } else { - return "" - } - - // 查询数据 - querySql := "select id as 'str' from user " + whereSql + " limit 1" - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err %v", err) - } - if len(results) > 0 { - return fmt.Sprint(results[0]["str"]) - } - return "" -} diff --git a/features/sys_user/service/service_sys_user.go b/features/sys_user/service/service_sys_user.go deleted file mode 100644 index e5021fc7..00000000 --- a/features/sys_user/service/service_sys_user.go +++ /dev/null @@ -1,150 +0,0 @@ -package service - -import ( - "errors" - "fmt" - - sysUserModel "be.ems/features/sys_user/model" - sysuserrole "be.ems/features/sys_user_role" -) - -// 实例化服务层 ServiceSysUser 结构体 -var NewServiceSysUser = &ServiceSysUser{ - sysUserRepository: NewRepoSysUser, - sysUserRoleRepository: sysuserrole.NewRepoSysUserRole, -} - -// ServiceSysUser 用户 服务层处理 -type ServiceSysUser struct { - // 用户服务 - sysUserRepository *RepoSysUser - // 用户与角色服务 - sysUserRoleRepository *sysuserrole.RepoSysUserRole -} - -// SelectUserPage 根据条件分页查询用户列表 -func (r *ServiceSysUser) SelectUserPage(query map[string]any) map[string]any { - return r.sysUserRepository.SelectUserPage(query) -} - -// SelectUserList 根据条件查询用户列表 -func (r *ServiceSysUser) SelectUserList(sysUser sysUserModel.SysUser) []sysUserModel.SysUser { - return []sysUserModel.SysUser{} -} - -// SelectAllocatedPage 根据条件分页查询分配用户角色列表 -func (r *ServiceSysUser) SelectAllocatedPage(query map[string]any) map[string]any { - return r.sysUserRepository.SelectAllocatedPage(query) -} - -// SelectUserByUserName 通过用户名查询用户 -func (r *ServiceSysUser) SelectUserByUserName(userName string) sysUserModel.SysUser { - return r.sysUserRepository.SelectUserByUserName(userName) -} - -// SelectUserById 通过用户ID查询用户 -func (r *ServiceSysUser) SelectUserById(userId string) sysUserModel.SysUser { - if userId == "" { - return sysUserModel.SysUser{} - } - users := r.sysUserRepository.SelectUserByIds([]string{userId}) - if len(users) > 0 { - return users[0] - } - return sysUserModel.SysUser{} -} - -// InsertUser 新增用户信息 -func (r *ServiceSysUser) InsertUser(sysUser sysUserModel.SysUser) string { - // 新增用户信息 - insertId := r.sysUserRepository.InsertUser(sysUser) - if insertId != "" { - // 新增用户角色信息 - r.insertUserRole(insertId, sysUser.RoleIDs) - } - return insertId -} - -// insertUserRole 新增用户角色信息 -func (r *ServiceSysUser) insertUserRole(userId string, roleIds []string) int64 { - if userId == "" || len(roleIds) <= 0 { - return 0 - } - - sysUserRoles := []sysuserrole.SysUserRole{} - for _, roleId := range roleIds { - // 管理员角色禁止操作,只能通过配置指定用户ID分配 - if roleId == "" || roleId == "1" { - continue - } - sysUserRoles = append(sysUserRoles, sysuserrole.NewSysUserRole(userId, roleId)) - } - - return r.sysUserRoleRepository.BatchUserRole(sysUserRoles) -} - -// UpdateUser 修改用户信息 -func (r *ServiceSysUser) UpdateUser(sysUser sysUserModel.SysUser) int64 { - return r.sysUserRepository.UpdateUser(sysUser) -} - -// UpdateUserAndRolePost 修改用户信息同时更新角色和岗位 -func (r *ServiceSysUser) UpdateUserAndRolePost(sysUser sysUserModel.SysUser) int64 { - userId := fmt.Sprint(sysUser.Id) - // 删除用户与角色关联 - r.sysUserRoleRepository.DeleteUserRole([]string{userId}) - // 新增用户角色信息 - r.insertUserRole(userId, sysUser.RoleIDs) - return r.sysUserRepository.UpdateUser(sysUser) -} - -// DeleteUserByIds 批量删除用户信息 -func (r *ServiceSysUser) DeleteUserByIds(userIds []string) (int64, error) { - // 检查是否存在 - users := r.sysUserRepository.SelectUserByIds(userIds) - if len(users) <= 0 { - return 0, errors.New("no permission to access user data") - } - if len(users) == len(userIds) { - // 删除用户与角色关联 - r.sysUserRoleRepository.DeleteUserRole(userIds) - // ... 注意其他userId进行关联的表 - // 删除用户 - rows := r.sysUserRepository.DeleteUserByIds(userIds) - return rows, nil - } - return 0, errors.New("failed to delete user information") -} - -// CheckUniqueUserName 校验用户名称是否唯一 -func (r *ServiceSysUser) CheckUniqueUserName(accountId, userId string) bool { - uniqueId := r.sysUserRepository.CheckUniqueUser(sysUserModel.SysUser{ - AccountId: accountId, - }) - if uniqueId == userId { - return true - } - return uniqueId == "" -} - -// CheckUniquePhone 校验手机号码是否唯一 -func (r *ServiceSysUser) CheckUniquePhone(phonenumber, userId string) bool { - uniqueId := r.sysUserRepository.CheckUniqueUser(sysUserModel.SysUser{ - Phone: phonenumber, - }) - if uniqueId == userId { - return true - } - return uniqueId == "" -} - -// CheckUniqueEmail 校验email是否唯一 -func (r *ServiceSysUser) CheckUniqueEmail(email, userId string) bool { - uniqueId := r.sysUserRepository.CheckUniqueUser(sysUserModel.SysUser{ - Email: email, - }) - if uniqueId == userId { - return true - } - return uniqueId == "" -} diff --git a/features/sys_user_role/model_sys_user_role.go b/features/sys_user_role/model_sys_user_role.go deleted file mode 100644 index bc493eb0..00000000 --- a/features/sys_user_role/model_sys_user_role.go +++ /dev/null @@ -1,15 +0,0 @@ -package sysuserrole - -// SysUserRole 用户和角色关联对象 sys_user_role -type SysUserRole struct { - UserID string `json:"userId"` // 用户ID - RoleID string `json:"roleId"` // 角色ID -} - -// NewSysUserRole 创建用户和角色关联对象的构造函数 -func NewSysUserRole(userID string, roleID string) SysUserRole { - return SysUserRole{ - UserID: userID, - RoleID: roleID, - } -} diff --git a/features/sys_user_role/repo_sys_user_role.go b/features/sys_user_role/repo_sys_user_role.go deleted file mode 100644 index 66a6cec7..00000000 --- a/features/sys_user_role/repo_sys_user_role.go +++ /dev/null @@ -1,87 +0,0 @@ -package sysuserrole - -import ( - "fmt" - "strings" - - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/parse" - "be.ems/lib/log" -) - -// 实例化数据层 RepoSysUserRole 结构体 -var NewRepoSysUserRole = &RepoSysUserRole{} - -// RepoSysUserRole 用户与角色关联表 数据层处理 -type RepoSysUserRole struct{} - -// CountUserRoleByRoleId 通过角色ID查询角色使用数量 -func (r *RepoSysUserRole) CountUserRoleByRoleId(roleId string) int64 { - querySql := "select count(1) as total from sys_user_role where role_id = ?" - results, err := datasource.RawDB("", querySql, []any{roleId}) - if err != nil { - log.Errorf("query err => %v", err) - return 0 - } - if len(results) > 0 { - return parse.Number(results[0]["total"]) - } - return 0 -} - -// BatchUserRole 批量新增用户角色信息 -func (r *RepoSysUserRole) BatchUserRole(sysUserRoles []SysUserRole) int64 { - keyValues := make([]string, 0) - for _, item := range sysUserRoles { - keyValues = append(keyValues, fmt.Sprintf("(%s,%s)", item.UserID, item.RoleID)) - } - sql := "insert into sys_user_role(user_id, role_id) values " + strings.Join(keyValues, ",") - results, err := datasource.ExecDB("", sql, nil) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} - -// DeleteUserRole 批量删除用户和角色关联 -func (r *RepoSysUserRole) DeleteUserRole(userIds []string) int64 { - placeholder := datasource.KeyPlaceholderByQuery(len(userIds)) - sql := "delete from sys_user_role where user_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(userIds) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} - -// DeleteUserRoleByRoleId 批量取消授权用户角色 -func (r *RepoSysUserRole) DeleteUserRoleByRoleId(roleId string, userIds []string) int64 { - placeholder := datasource.KeyPlaceholderByQuery(len(userIds)) - sql := "delete from sys_user_role where role_id= ? and user_id in (" + placeholder + ")" - parameters := datasource.ConvertIdsSlice(userIds) - parameters = append([]any{roleId}, parameters...) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - affected, err := results.RowsAffected() - if err != nil { - log.Errorf("delete err => %v", err) - return 0 - } - return affected -} diff --git a/features/trace/tcpdump.go b/features/trace/tcpdump.go deleted file mode 100644 index e2f8765a..00000000 --- a/features/trace/tcpdump.go +++ /dev/null @@ -1,339 +0,0 @@ -package trace - -import ( - "fmt" - "net" - "net/http" - "strings" - "time" - - "be.ems/lib/core/conf" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/vo/result" - "be.ems/lib/dborm" - "be.ems/lib/log" - "be.ems/restagent/config" - "be.ems/src/framework/utils/cmd" - "be.ems/src/framework/utils/ssh" -) - -var ( - UriTcpdumpTask = config.DefaultUriPrefix + "/traceManagement/{apiVersion}/tcpdumpNeTask" - CustomUriTcpdumpTask = config.UriPrefix + "/traceManagement/{apiVersion}/tcpdumpNeTask" // decode message api - - UriTcpdumpPcapDownload = config.DefaultUriPrefix + "/traceManagement/{apiVersion}/tcpdumpPcapDownload" - CustomUriTcpdumpPcapDownload = config.UriPrefix + "/traceManagement/{apiVersion}/tcpdumpPcapDownload" // decode message api - - UriTcpdumpNeUPFTask = config.DefaultUriPrefix + "/traceManagement/{apiVersion}/tcpdumpNeUPFTask" - CustomUriTcpdumpNeUPFTask = config.UriPrefix + "/traceManagement/{apiVersion}/tcpdumpNeUPFTask" // decode message api -) - -// NeInfo 网元信息 -func NeInfo(neType, neId string) (*dborm.NeInfo, error) { - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("dborm.XormGetNeInfo is failed:", err) - return nil, err - } - if neInfo == nil || neInfo.Ip == "" { - return nil, fmt.Errorf("not ne_info or not IP") - } - return neInfo, nil -} - -// TcpdumpNeTask 网元发送执行 pcap -func TcpdumpNeTask(w http.ResponseWriter, r *http.Request) { - var body struct { - NeType string `json:"neType"` // 网元类型 - NeId string `json:"neId"` // 网元ID - Timeout int `json:"timeout"` // 超时时间 - Cmd string `json:"cmd"` // 命令 - } - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.NeType == "" || body.NeId == "" || body.Timeout < 5 || body.Cmd == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfo(body.NeType, body.NeId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - filePcapName := fmt.Sprintf("tmp_%s_%s_%d.pcap", body.NeType, body.NeId, time.Now().UnixMilli()) - fileLogName := fmt.Sprintf("tmp_%s_%s_%d.log", body.NeType, body.NeId, time.Now().UnixMilli()) - writeLog := fmt.Sprintf(" >> %s 2>&1 \ncat %s", fileLogName, fileLogName) // 执行信息写入日志文件,放置弹出code 127 - cmdStr := fmt.Sprintf("cd /tmp \nsudo timeout %d tcpdump -i any %s -s0 -w %s", body.Timeout, body.Cmd, filePcapName) - usernameNe := conf.Get("ne.user").(string) // 网元统一用户 - sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.Ip) - msg, err := cmd.ExecWithCheck("ssh", sshHost, cmdStr+writeLog) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - ctx.JSON(w, 200, result.OkData(map[string]any{ - "cmd": cmdStr, - "msg": msg, - "fileName": filePcapName, - })) -} - -// TcpdumpPcapDownload 网元抓包pcap文件下载 -func TcpdumpPcapDownload(w http.ResponseWriter, r *http.Request) { - var body struct { - NeType string `json:"neType"` // 网元类型 - NeId string `json:"neId"` // 网元ID - FileName string `json:"fileName"` // 文件名 - } - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.NeType == "" || body.NeId == "" || body.FileName == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfo(body.NeType, body.NeId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - nePath := fmt.Sprintf("/tmp/%s", body.FileName) - localPath := fmt.Sprintf("%s/tcpdump/pcap/%s", conf.Get("ne.omcdir"), body.FileName) - err = ssh.FileSCPNeToLocal(neInfo.Ip, nePath, localPath) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - ctx.FileAttachment(w, r, localPath, body.FileName) -} - -// TcpdumpNeUPFTask 网元UPF发送执行 pcap -func TcpdumpNeUPFTask(w http.ResponseWriter, r *http.Request) { - var body struct { - NeType string `json:"neType"` // 网元类型 - NeId string `json:"neId"` // 网元ID - Cmd string `json:"cmd"` // 命令 - RunType string `json:"runType"` // 执行开始start还是停止stop - } - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.NeType != "UPF" || body.NeId == "" || body.Cmd == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfo(body.NeType, body.NeId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 开始telnet - if body.RunType == "start_telnet" { - // 创建TCP连接 - conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", neInfo.Ip, 5002)) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - defer conn.Close() - - filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId) - cmdStr := fmt.Sprintf("pcap dispatch trace on max 100000 file %s", filePcapName) - - fmt.Fprintln(conn, cmdStr) - - // 读取内容 - time.Sleep(time.Duration(200) * time.Millisecond) - buf := make([]byte, 1024*8) - n, err := conn.Read(buf) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - } else { - str := string(buf[0:n]) - s := strings.Index(str, "pcap dispatch trace:") - if s != -1 { - e := strings.Index(str, "\r\nupfd1#") - str = str[s:e] - } else { - str = fmt.Sprintf("Executed, please stop before proceeding %d", n) - } - ctx.JSON(w, 200, result.OkData(map[string]any{ - "cmd": cmdStr, - "msg": str, - "fileName": filePcapName, - })) - } - conn.Close() - return - } - // 停止telnet - if body.RunType == "stop_telnet" { - // 创建TCP连接 - conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", neInfo.Ip, 5002)) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - defer conn.Close() - - filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId) - cmdStr := "pcap dispatch trace off" - - fmt.Fprintln(conn, cmdStr) - - // 读取内容 - time.Sleep(time.Duration(200) * time.Millisecond) - buf := make([]byte, 1024*8) - n, err := conn.Read(buf) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - } else { - str := string(buf[0:n]) - s := strings.Index(str, "pcap dispatch trace:") - if s == -1 { - s = strings.Index(str, "Write ") - } - if s != -1 { - e := strings.Index(str, "\r\nupfd1#") - str = str[s:e] - } else { - str = "No stoppable found" - } - - ctx.JSON(w, 200, result.OkData(map[string]any{ - "cmd": cmdStr, - "msg": str, - "fileName": filePcapName, - })) - } - conn.Close() - return - } - - // 开始 -脚本 - if body.RunType == "start2" { - fileLogName := fmt.Sprintf("tmp_%s_%s.log", body.NeType, body.NeId) - filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId) - // 复制文件到网元上 - err := ssh.FileSCPLocalToNe(neInfo.Ip, "C:\\AMP\\Probject\\ems_backend\\restagent\\backup\\upf_pcap", "/tmp") - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - writeLog := fmt.Sprintf(" >> %s 2>&1 \ncat %s", fileLogName, fileLogName) // 执行信息写入日志文件,放置弹出code 127 - cmdStr := fmt.Sprintf("cd /tmp \nchmod +x upf_pcap\n./upf_pcap '192.168.4.139' 'root' 'Admin123@pl' 'pcap dispatch trace on max 100000 file %s' %s ", fileLogName, writeLog) - - usernameNe := conf.Get("ne.user").(string) // 网元统一用户 - sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.Ip) - msg, err := cmd.ExecWithCheck("ssh", sshHost, cmdStr) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - } else { - ctx.JSON(w, 200, result.OkData(map[string]any{ - "cmd": cmdStr, - "msg": msg, - "fileName": filePcapName, - })) - } - return - } - // 停止 -脚本 - if body.RunType == "stop2" { - fileLogName := fmt.Sprintf("tmp_%s_%s.log", body.NeType, body.NeId) - filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId) - // cmdStr := "cd /tmp \nexpect /tmp/cat.sh " - err := ssh.FileSCPLocalToNe(neInfo.Ip, "C:\\AMP\\Probject\\ems_backend\\restagent\\backup\\upf_pcap", "/tmp") - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - writeLog := fmt.Sprintf(" >> %s 2>&1 \ncat %s", fileLogName, fileLogName) // 执行信息写入日志文件,放置弹出code 127 - cmdStr := fmt.Sprintf("cd /tmp \nchmod +x upf_pcap\n./upf_pcap '192.168.4.139' 'root' 'Admin123@pl' 'pcap dispatch trace off' %s ", writeLog) - - usernameNe := conf.Get("ne.user").(string) // 网元统一用户 - sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.Ip) - msg, err := cmd.ExecWithCheck("ssh", sshHost, cmdStr) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - } else { - ctx.JSON(w, 200, result.OkData(map[string]any{ - "cmd": cmdStr, - "msg": msg, - "fileName": filePcapName, - })) - } - return - } - - // 开始-脚本字符串 - if body.RunType == "start_str" { - fileLogName := fmt.Sprintf("tmp_%s_%s.log", body.NeType, body.NeId) - filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId) - scriptStr := "set capcmd [lindex $argv 0]\nspawn telnet localhost 5002\nexpect \"upfd1# \"\nsend \"$capcmd\\n\"\nexpect \"upfd1# \"\nsend \"quit\\n\"\nexpect \"eof\"" - writeLog := fmt.Sprintf(" > %s 2>&1 \ncat %s", fileLogName, fileLogName) // 执行信息写入日志文件输出,避免弹出code 127 - - capCmdStr := fmt.Sprintf("%s file %s", body.Cmd, filePcapName) - - cmdStr := fmt.Sprintf("cd /tmp\n\necho '%s' > cap.sh\n\nchmod +x cap.sh\n\nexpect ./cap.sh '%s'%s", scriptStr, capCmdStr, writeLog) - usernameNe := conf.Get("ne.user").(string) // 网元统一用户 - sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.Ip) - msg, err := cmd.ExecWithCheck("ssh", sshHost, cmdStr) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - } else { - s := strings.Index(msg, "pcap dispatch trace:") - if s != -1 { - e := strings.Index(msg, "\r\nupfd1#") - msg = msg[s:e] - } else { - msg = "Executed, please stop before proceeding" - } - ctx.JSON(w, 200, result.OkData(map[string]any{ - "cmd": capCmdStr, - "msg": msg, - "fileName": filePcapName, - })) - } - return - } - // 停止-脚本字符串 - if body.RunType == "stop_str" { - fileLogName := fmt.Sprintf("tmp_%s_%s.log", body.NeType, body.NeId) - filePcapName := fmt.Sprintf("tmp_%s_%s.pcap", body.NeType, body.NeId) - scriptStr := "set capcmd [lindex $argv 0]\nspawn telnet localhost 5002\nexpect \"upfd1# \"\nsend \"$capcmd\\n\"\nexpect \"upfd1# \"\nsend \"quit\\n\"\nexpect \"eof\"" - writeLog := fmt.Sprintf(" > %s 2>&1 \ncat %s", fileLogName, fileLogName) // 执行信息写入日志文件输出,避免弹出code 127 - - capCmdStr := body.Cmd - - cmdStr := fmt.Sprintf("cd /tmp\n\necho '%s' > cap.sh\n\nchmod +x cap.sh\n\nexpect ./cap.sh '%s'%s", scriptStr, capCmdStr, writeLog) - - usernameNe := conf.Get("ne.user").(string) // 网元统一用户 - sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.Ip) - msg, err := cmd.ExecWithCheck("ssh", sshHost, cmdStr) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - } else { - s := strings.Index(msg, "pcap dispatch trace:") - if s == -1 { - s = strings.Index(msg, "Write ") - } - if s != -1 { - e := strings.Index(msg, "\r\nupfd1#") - msg = msg[s:e] - } else { - msg = "No stoppable found" - } - ctx.JSON(w, 200, result.OkData(map[string]any{ - "cmd": capCmdStr, - "msg": msg, - "fileName": filePcapName, - })) - } - return - } - - ctx.JSON(w, 200, result.ErrMsg("runType is start or stop")) -} diff --git a/features/udm_user/api_udm_user.go b/features/udm_user/api_udm_user.go deleted file mode 100644 index 40918e45..00000000 --- a/features/udm_user/api_udm_user.go +++ /dev/null @@ -1,1211 +0,0 @@ -package udmuser - -import ( - "fmt" - "net/http" - "strconv" - "strings" - "time" - - "be.ems/features/udm_user/model" - "be.ems/features/udm_user/service" - "be.ems/lib/core/conf" - mmlclient "be.ems/lib/core/mml_client" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/vo/result" - "be.ems/lib/dborm" - "be.ems/lib/log" - "be.ems/lib/midware" - "be.ems/lib/services" - "be.ems/restagent/config" - "be.ems/src/framework/middleware/collectlogs" - "be.ems/src/framework/utils/file" - "be.ems/src/framework/utils/ssh" -) - -// UDM 用户信息接口添加到路由 -func Routers() []services.RouterItem { - // 实例化控制层 SysDictTypeApi 结构体 - var apis = &UdmUserApi{ - authUser: *service.NewServiceUdmAuthUser, - subUser: *service.NewServiceUdmSubUser, - } - - rs := [...]services.RouterItem{ - // UDM鉴权用户 - { - Method: "GET", - Pattern: "/auths", - Handler: apis.UdmAuthUserList, - Middleware: midware.Authorize(nil), - }, - { - Method: "POST", - Pattern: "/authSave/{neId}", - Handler: apis.UdmAuthUserSave, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_INSERT)), - }, - { - Method: "GET", - Pattern: "/auth/{neId}/{imsi}", - Handler: apis.UdmAuthUserInfo, - Middleware: midware.Authorize(nil), - }, - { - Method: "POST", - Pattern: "/auth/{neId}", - Handler: apis.UdmAuthUserAdd, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_INSERT)), - }, - { - Method: "POST", - Pattern: "/auth/{neId}/{num}", - Handler: apis.UdmAuthUserAdds, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_INSERT)), - }, - { - Method: "PUT", - Pattern: "/auth/{neId}", - Handler: apis.UdmAuthUserEdit, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_UPDATE)), - }, - { - Method: "DELETE", - Pattern: "/auth/{neId}/{imsi}", - Handler: apis.UdmAuthUserRemove, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_DELETE)), - }, - { - Method: "DELETE", - Pattern: "/auth/{neId}/{imsi}/{num}", - Handler: apis.UdmAuthUserRemoves, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_DELETE)), - }, - { - Method: "POST", - Pattern: "/authExport", - Handler: apis.UdmAuthUserExport, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_EXPORT)), - }, - { - Method: "POST", - Pattern: "/authImport/{neId}", - Handler: apis.UdmAuthUserImport, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Authentication User", collectlogs.BUSINESS_TYPE_IMPORT)), - }, - // UDM签约用户 - { - Method: "GET", - Pattern: "/subs", - Handler: apis.UdmSubUserList, - Middleware: midware.Authorize(nil), - }, - { - Method: "POST", - Pattern: "/subSave/{neId}", - Handler: apis.UdmSubUserSave, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Contracted User", collectlogs.BUSINESS_TYPE_INSERT)), - }, - { - Method: "GET", - Pattern: "/subInfo/{neId}/{imsi}", - Handler: apis.UdmSubUserInfo, - Middleware: midware.Authorize(nil), - }, - { - Method: "POST", - Pattern: "/sub/{neId}", - Handler: apis.UdmSubUserAdd, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Contracted User", collectlogs.BUSINESS_TYPE_INSERT)), - }, - { - Method: "POST", - Pattern: "/sub/{neId}/{num}", - Handler: apis.UdmSubUserAdds, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Contracted User", collectlogs.BUSINESS_TYPE_INSERT)), - }, - { - Method: "PUT", - Pattern: "/sub/{neId}", - Handler: apis.UdmSubUserEdit, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Contracted User", collectlogs.BUSINESS_TYPE_UPDATE)), - }, - { - Method: "PUT", - Pattern: "/sub4gIP/{neId}", - Handler: apis.UdmSubUser4GIP, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Contracted User", collectlogs.BUSINESS_TYPE_UPDATE)), - }, - { - Method: "PUT", - Pattern: "/subSmData/{neId}", - Handler: apis.UdmSubUserSmData, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Contracted User", collectlogs.BUSINESS_TYPE_UPDATE)), - }, - { - Method: "DELETE", - Pattern: "/sub/{neId}/{imsi}", - Handler: apis.UdmSubUserRemove, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Contracted User", collectlogs.BUSINESS_TYPE_DELETE)), - }, - { - Method: "DELETE", - Pattern: "/sub/{neId}/{imsi}/{num}", - Handler: apis.UdmSubUserRemoves, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Contracted User", collectlogs.BUSINESS_TYPE_DELETE)), - }, - { - Method: "POST", - Pattern: "/subExport", - Handler: apis.UdmSubUserExport, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Contracted User", collectlogs.BUSINESS_TYPE_EXPORT)), - }, - { - Method: "POST", - Pattern: "/subImport/{neId}", - Handler: apis.UdmSubUserImport, - Middleware: midware.LogOperate(collectlogs.OptionNew("UDM Contracted User", collectlogs.BUSINESS_TYPE_IMPORT)), - }, - // 添加更多的 Router 对象... - } - - // 生成两组前缀路由 - rsPrefix := []services.RouterItem{} - for _, v := range rs { - path := "/udmUserManage/{apiVersion}" + v.Pattern - // 固定前缀 - v.Pattern = config.DefaultUriPrefix + path - rsPrefix = append(rsPrefix, v) - // 可配置 - v.Pattern = config.UriPrefix + path - rsPrefix = append(rsPrefix, v) - } - return rsPrefix -} - -// NeInfoByUDM 网元信息 -func NeInfoByUDM(neId string) (*dborm.NeInfo, error) { - neInfo, err := dborm.XormGetNeInfo("UDM", neId) - if err != nil { - log.Error("dborm.XormGetNeInfo is failed:", err) - return nil, err - } - if neInfo == nil || neInfo.Ip == "" { - return nil, fmt.Errorf("not ne_info or not IP") - } - return neInfo, nil -} - -// UDM 用户 -// -// PATH /udmUserManage -type UdmUserApi struct { - authUser service.ServiceUdmAuthUser - subUser service.ServiceUdmSubUser -} - -// UDM鉴权用户 -// -// GET /auths -func (s *UdmUserApi) UdmAuthUserList(w http.ResponseWriter, r *http.Request) { - querys := ctx.QueryMap(r) - querys["neId"] = "" - data := s.authUser.Page(querys) - ctx.JSON(w, 200, result.Ok(data)) -} - -// UDM鉴权用户-获取全部保存数据库 -// -// POST /authSave/{neId} -func (s *UdmUserApi) UdmAuthUserSave(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neId = "" - data := s.authUser.Save(neId) - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM鉴权用户-信息 -// -// GET /authInfo/{neId}/{imsi} -func (s *UdmUserApi) UdmAuthUserInfo(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - imsi := ctx.Param(r, "imsi") - if neId == "" || imsi == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("dsp authdat:imsi=%s", imsi) - - // 发送MML - data, err := mmlclient.MMLSendMsgToMap(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 查询数据库是否存在并存入 - neId = "" - var userInfo model.UdmAuthUser - list := s.authUser.List(model.UdmAuthUser{NeID: neId, Imsi: imsi}) - if len(list) > 0 { - userInfo = list[0] - // 返回查询的用户信息 - userInfo.Amf = data["amf"] - userInfo.AlgoIndex = data["algo"] - userInfo.Opc = data["opc"] - userInfo.Ki = data["ki"] - } else { - userInfo := model.UdmAuthUser{ - Imsi: imsi, - Amf: data["amf"], - AlgoIndex: data["algo"], - Opc: data["opc"], - Ki: data["ki"], - } - s.authUser.Insert(neId, userInfo) - } - ctx.JSON(w, 200, result.OkData(userInfo)) - -} - -// UDM鉴权用户-增加 -// -// POST /{neId} -func (s *UdmUserApi) UdmAuthUserAdd(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - var body model.UdmAuthUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Imsi == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("add authdat:imsi=%s,ki=%s,amf=%s,algo=%s,opc=%s", body.Imsi, body.Ki, body.Amf, body.AlgoIndex, body.Opc) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.authUser.Insert(neId, body) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM鉴权用户-批量添加 -// -// POST /{neId}/{num} -func (s *UdmUserApi) UdmAuthUserAdds(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - num := ctx.Param(r, "num") - if neId == "" || num == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - var body model.UdmAuthUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Imsi == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("bad authdat:start_imsi=%s,sub_num=%s,ki=%s,amf=%s,algo=%s,opc=%s", body.Imsi, num, body.Ki, body.Amf, body.AlgoIndex, body.Opc) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.authUser.Inserts(neId, body, num) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM鉴权用户-修改 -// -// PUT /{neId} -func (s *UdmUserApi) UdmAuthUserEdit(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - var body model.UdmAuthUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Imsi == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("mod authdata:imsi=%s", body.Imsi) - // 修改的参数名称 - if body.Ki != "" { - msg += fmt.Sprintf(",ki=%s", body.Ki) - } - if body.Amf != "" { - msg += fmt.Sprintf(",amf=%s", body.Amf) - } - if body.AlgoIndex != "" { - msg += fmt.Sprintf(",algo=%s", body.AlgoIndex) - } - if body.Opc != "" { - msg += fmt.Sprintf(",opc=%s", body.Opc) - } - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.authUser.Update(neId, body) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM鉴权用户-删除 -// -// DELETE /{neId}/{imsi} -func (s *UdmUserApi) UdmAuthUserRemove(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - imsi := ctx.Param(r, "imsi") - if neId == "" || imsi == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("del authdat:imsi=%s", imsi) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.authUser.Delete(neId, imsi) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM鉴权用户-批量删除 -// -// DELETE /{neId}/{imsi}/{num} -func (s *UdmUserApi) UdmAuthUserRemoves(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - imsi := ctx.Param(r, "imsi") - num := ctx.Param(r, "num") - if neId == "" || imsi == "" || num == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("bde authdat:start_imsi=%s,sub_num=%s", imsi, num) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.authUser.Deletes(neId, imsi, num) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM鉴权用户-导出 -// -// POST /authExport -func (s *UdmUserApi) UdmAuthUserExport(w http.ResponseWriter, r *http.Request) { - var body struct { - NeId string `json:"neId"` - Type string `json:"type"` - } - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.NeId == "" || body.Type == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - if !(body.Type == "csv" || body.Type == "txt") { - ctx.JSON(w, 200, result.ErrMsg("Export file types support CSV and txt")) - return - } - - neId := "" - list := s.authUser.List(model.UdmAuthUser{NeID: neId}) - // 文件名 - fileName := fmt.Sprintf("OMC_AUTH_USER_EXPORT_%s_%d.%s", neId, time.Now().UnixMilli(), body.Type) - filePath := fmt.Sprintf("%s/upload/mml/%s", conf.Get("ne.omcdir"), fileName) - - if body.Type == "csv" { - // 转换数据 - data := [][]string{} - data = append(data, []string{"imsi", "ki", "algo", "amf", "opc"}) - for _, v := range list { - data = append(data, []string{v.Imsi, v.Ki, v.AlgoIndex, v.Amf, v.Opc}) - } - // 输出到文件 - err := file.WriterFileCSV(data, filePath) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - } - - if body.Type == "txt" { - // 转换数据 - data := [][]string{} - for _, v := range list { - data = append(data, []string{v.Imsi, v.Ki, v.AlgoIndex, v.Amf, v.Opc}) - } - // 输出到文件 - err = file.WriterFileTXT(data, ",", filePath) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - } - - ctx.FileAttachment(w, r, filePath, fileName) -} - -// UDM鉴权用户-导入 -// -// POST /authImport/{neId} -func (s *UdmUserApi) UdmAuthUserImport(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 获取文件名 - _, fileHeader, err := r.FormFile("file") - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - if !(strings.HasSuffix(fileHeader.Filename, ".csv") || strings.HasSuffix(fileHeader.Filename, ".txt")) { - ctx.JSON(w, 200, result.ErrMsg("Please upload files in. csv and. txt formats with content fields: imsi,ki,algo,amf,opc")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 文件名 - fileName := fmt.Sprintf("OMC_AUTH_USER_IMPORT_%s_%d_%s", neId, time.Now().UnixMilli(), fileHeader.Filename) - localPath := fmt.Sprintf("%s/upload/mml/%s", conf.Get("ne.omcdir"), fileName) - nePath := conf.Get("mml.upload").(string) - // 输出保存文件 - err = ctx.SaveUploadedFile(r, localPath) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 复制到远程 - err = ssh.FileSCPLocalToNe(neInfo.Ip, localPath, nePath) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("import authdat:path=%s", fmt.Sprintf("%s/%s", nePath, fileName)) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - if strings.HasSuffix(fileHeader.Filename, ".csv") { - data := file.ReadFileCSV(localPath) - neId = "" - go s.authUser.InsertCSV(neId, data) - } - if strings.HasSuffix(fileHeader.Filename, ".txt") { - data := file.ReadFileTXT(",", localPath) - neId = "" - go s.authUser.InsertTxt(neId, data) - } - } - ctx.JSON(w, 200, result.OkMsg(data)) -} - -// UDM签约用户 -// -// GET /subs -func (s *UdmUserApi) UdmSubUserList(w http.ResponseWriter, r *http.Request) { - querys := ctx.QueryMap(r) - querys["neId"] = "" - data := s.subUser.Page(querys) - ctx.JSON(w, 200, result.Ok(data)) -} - -// UDM签约用户-获取全部保存数据库 -// -// POST /subSave/{neId} -func (s *UdmUserApi) UdmSubUserSave(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neId = "" - data := s.subUser.Save(neId) - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM签约用户-信息 -// -// GET /subInfo/{neId}/{imsi} -func (s *UdmUserApi) UdmSubUserInfo(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - imsi := ctx.Param(r, "imsi") - if neId == "" || imsi == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("dsp udmuser:imsi=%s", imsi) - - // 发送MML - data, err := mmlclient.MMLSendMsgToMap(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 解析返回的数据 - cnType, _ := strconv.ParseInt(data["CNType"][:4], 0, 64) - rat, _ := strconv.ParseInt(data["RAT"][:4], 0, 64) - msisdn := data["MSISDN"] - imsMsisdnLen := strings.Index(msisdn, ",") - if imsMsisdnLen != -1 { - msisdn = msisdn[:imsMsisdnLen] - } - userInfo := model.UdmSubUser{ - Imsi: imsi, - Msisdn: msisdn, - Ambr: data["AMBR"], - Arfb: data["AreaForbidden"], - Cn: fmt.Sprint(cnType), - SmData: data["SM-Data(snssai+dnn[1..n])"], - Sar: data["ServiceAreaRestriction"], - Nssai: data["NSSAI"], - SmfSel: data["Smf-Selection"], - Rat: fmt.Sprint(rat), - } - // 1,64,24,65,def_eps,1,2,010200000000,- - if v, ok := data["EPS-Data"]; ok { - userInfo.EpsDat = v - arr := strings.Split(v, ",") - userInfo.EpsFlag = arr[0] - userInfo.EpsOdb = arr[1] - userInfo.HplmnOdb = arr[2] - userInfo.Ard = arr[3] - userInfo.Epstpl = arr[4] - userInfo.ContextId = arr[5] - userInfo.ApnContext = arr[7] - userInfo.StaticIp = arr[8] - } - - // 查询数据库是否存在并存入更新 - neId = "" - list := s.subUser.List(model.UdmSubUser{NeID: neId, Imsi: imsi}) - if len(list) > 0 { - listItme := list[0] - userInfo.ID = listItme.ID - s.subUser.Update(neId, userInfo) - } else { - s.subUser.Insert(neId, userInfo) - } - ctx.JSON(w, 200, result.OkData(userInfo)) -} - -// UDM签约用户-增加 -// -// POST /{neId} -func (s *UdmUserApi) UdmSubUserAdd(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - var body model.UdmSubUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Imsi == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("add udmuser:imsi=%s,msisdn=%s,ambr=%s,nssai=%s,arfb=%s,sar=%s,rat=%s,cn=%s,smf_sel=%s,sm_data=%s,eps_flag=%s,eps_odb=%s,hplmn_odb=%s,ard=%s,epstpl=%s,context_id=%s,apn_context=%s", - body.Imsi, body.Msisdn, body.Ambr, body.Nssai, body.Arfb, body.Sar, body.Rat, body.Cn, body.SmfSel, body.SmData, body.EpsFlag, body.EpsOdb, body.HplmnOdb, body.Ard, body.Epstpl, body.ContextId, body.ApnContext) - // static_ip指给4G UE分配的静态IP,没有可不带此字段名,批量添加IP会自动递增 - if body.StaticIp != "" { - msg += fmt.Sprintf(",static_ip=%s", body.StaticIp) - } - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.subUser.Insert(neId, body) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM签约用户-批量添加 -// -// POST /{neId}/{num} -func (s *UdmUserApi) UdmSubUserAdds(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - num := ctx.Param(r, "num") - if neId == "" || num == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - var body model.UdmSubUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Imsi == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("bad udmuser:start_imsi=%s,start_msisdn=%s,sub_num=%s,ambr=%s,nssai=%s,arfb=%s,sar=%s,rat=%s,cn=%s,smf_sel=%s,sm_data=%s,eps_flag=%s,eps_odb=%s,hplmn_odb=%s,ard=%s,epstpl=%s,context_id=%s,apn_context=%s", - body.Imsi, body.Msisdn, num, body.Ambr, body.Nssai, body.Arfb, body.Sar, body.Rat, body.Cn, body.SmfSel, body.SmData, body.EpsFlag, body.EpsOdb, body.HplmnOdb, body.Ard, body.Epstpl, body.ContextId, body.ApnContext) - // static_ip指给4G UE分配的静态IP,没有可不带此字段名,批量添加IP会自动递增 - if body.StaticIp != "" { - msg += fmt.Sprintf(",static_ip=%s", body.StaticIp) - } - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.subUser.Inserts(neId, body, num) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM签约用户-批量添加4G用户 -// -// POST /sub4G/{neId} -func (s *UdmUserApi) UdmSubUserAdd4G(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - var body model.UdmSubUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Imsi == "" || body.SubNum == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("bmd udmuser:start_imsi=%s,sub_num=%s,eps_flag=%s", body.Imsi, body.SubNum, body.EpsFlag) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.subUser.Insert4G(neId, body) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM签约用户-修改 -// -// PUT /{neId} -func (s *UdmUserApi) UdmSubUserEdit(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - var body model.UdmSubUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Imsi == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("mod udmuser:imsi=%s", body.Imsi) - // 修改的参数名称 - if body.Msisdn != "" { - msg += fmt.Sprintf(",msisdn=%s", body.Msisdn) - } - if body.Ambr != "" { - msg += fmt.Sprintf(",ambr=%s", body.Ambr) - } - if body.Nssai != "" { - msg += fmt.Sprintf(",nssai=%s", body.Nssai) - } - if body.Arfb != "" { - msg += fmt.Sprintf(",arfb=%s", body.Arfb) - } - if body.Sar != "" { - msg += fmt.Sprintf(",sar=%s", body.Sar) - } - if body.Rat != "" { - msg += fmt.Sprintf(",rat=%s", body.Rat) - } - if body.Cn != "" { - msg += fmt.Sprintf(",cn=%s", body.Cn) - } - if body.SmfSel != "" { - msg += fmt.Sprintf(",smf_sel=%s", body.SmfSel) - } - if body.SmData != "" { - msg += fmt.Sprintf(",sm_data=%s", body.SmData) - } - if body.EpsDat != "" { - msg += fmt.Sprintf(",eps_dat=%s", body.EpsDat) - } - if body.EpsFlag != "" { - msg += fmt.Sprintf(",eps_flag=%s", body.EpsFlag) - } - if body.EpsOdb != "" { - msg += fmt.Sprintf(",eps_odb=%s", body.EpsOdb) - } - if body.HplmnOdb != "" { - msg += fmt.Sprintf(",hplmn_odb=%s", body.HplmnOdb) - } - if body.Epstpl != "" { - msg += fmt.Sprintf(",epstpl=%s", body.Epstpl) - } - if body.Ard != "" { - msg += fmt.Sprintf(",ard=%s", body.Ard) - } - if body.ContextId != "" { - msg += fmt.Sprintf(",context_id=%s", body.ContextId) - } - if body.ApnContext != "" { - msg += fmt.Sprintf(",apn_context=%s", body.ApnContext) - } - if body.StaticIp != "" { - msg += fmt.Sprintf(",static_ip=%s", body.StaticIp) - } - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.subUser.Update(neId, body) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM签约用户-批量修改4G IP -// -// PUT /sub4gIP/{neId} -func (s *UdmUserApi) UdmSubUser4GIP(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - var body model.UdmSubUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Imsi == "" || body.SubNum == "" || body.StaticIp == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("bmd udmuser:start_imsi=%s,sub_num=%s,static_ip=%s", body.Imsi, body.SubNum, body.StaticIp) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.subUser.Update4GIP(neId, body) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM签约用户-批量修改sm-data -// -// PUT /subSmData/{neId} -func (s *UdmUserApi) UdmSubUserSmData(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - var body model.UdmSubUser - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.Imsi == "" || body.SubNum == "" || body.SmData == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 3-000003&internet-10.10.1.1&ims-10.11.1.1 - msg := fmt.Sprintf("bmd udmuser:start_imsi=%s,sub_num=%s,sm_data=%s", body.Imsi, body.SubNum, body.SmData) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.subUser.UpdateSmData(neId, body) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM签约用户-删除 -// -// DELETE /{neId}/{imsi} -func (s *UdmUserApi) UdmSubUserRemove(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - imsi := ctx.Param(r, "imsi") - if neId == "" || imsi == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("del udmuser:imsi=%s", imsi) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.subUser.Delete(neId, imsi) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM签约用户-批量删除 -// -// DELETE /{neId}/{imsi}/{num} -func (s *UdmUserApi) UdmSubUserRemoves(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - imsi := ctx.Param(r, "imsi") - num := ctx.Param(r, "num") - if neId == "" || imsi == "" || num == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("bde udmuser:start_imsi=%s,sub_num=%s", imsi, num) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 命令ok时 - if strings.Contains(data, "ok") { - neId = "" - s.subUser.Deletes(neId, imsi, num) - } - ctx.JSON(w, 200, result.OkData(data)) -} - -// UDM签约用户-导出 -// -// POST /subExport -func (s *UdmUserApi) UdmSubUserExport(w http.ResponseWriter, r *http.Request) { - var body struct { - NeId string `json:"neId"` - Type string `json:"type"` - } - err := ctx.ShouldBindJSON(r, &body) - if err != nil || body.NeId == "" || body.Type == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - if !(body.Type == "csv" || body.Type == "txt") { - ctx.JSON(w, 200, result.ErrMsg("Export file type support csv、txt")) - return - } - - neId := "" - list := s.subUser.List(model.UdmSubUser{NeID: neId}) - // 文件名 - fileName := fmt.Sprintf("OMC_AUTH_USER_EXPORT_%s_%d.%s", neId, time.Now().UnixMilli(), body.Type) - filePath := fmt.Sprintf("%s/upload/mml/%s", conf.Get("ne.omcdir"), fileName) - - if body.Type == "csv" { - // 转换数据 - data := [][]string{} - data = append(data, []string{"imsi", "msisdn", "ambr", "nssai", "arfb", "sar", "rat", "cn", "smf_sel", "sm_dat", "eps_dat"}) - for _, v := range list { - epsDat := fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s", v.EpsFlag, v.EpsOdb, v.HplmnOdb, v.Ard, v.Epstpl, v.ContextId, v.ApnContext, v.StaticIp) - data = append(data, []string{v.Imsi, v.Msisdn, v.Ambr, v.Nssai, v.Arfb, v.Sar, v.Rat, v.Cn, v.SmfSel, v.SmData, epsDat}) - } - // 输出到文件 - err = file.WriterFileCSV(data, filePath) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - } - - if body.Type == "txt" { - // 转换数据 - data := [][]string{} - for _, v := range list { - epsDat := fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s", v.EpsFlag, v.EpsOdb, v.HplmnOdb, v.Ard, v.Epstpl, v.ContextId, v.ApnContext, v.StaticIp) - data = append(data, []string{v.Imsi, v.Msisdn, v.Ambr, v.Nssai, v.Arfb, v.Sar, v.Rat, v.Cn, v.SmfSel, v.SmData, epsDat}) - } - // 输出到文件 - err = file.WriterFileTXT(data, ",", filePath) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - } - - ctx.FileAttachment(w, r, filePath, fileName) -} - -// UDM签约用户-导入 -// -// POST /subImport/{neId} -func (s *UdmUserApi) UdmSubUserImport(w http.ResponseWriter, r *http.Request) { - neId := ctx.Param(r, "neId") - if neId == "" { - ctx.JSON(w, 400, result.CodeMsg(400, "parameter error")) - return - } - - // 获取文件名 - _, fileHeader, err := r.FormFile("file") - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - if !(strings.HasSuffix(fileHeader.Filename, ".csv") || strings.HasSuffix(fileHeader.Filename, ".txt")) { - ctx.JSON(w, 200, result.ErrMsg("Please upload files in. csv and. txt formats with content fields: imsi,msisdn,ambr,nssai,arfb,sar,rat,cn,smf_sel,sm_dat,eps_dat")) - return - } - - neInfo, err := NeInfoByUDM(neId) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 文件名 - fileName := fmt.Sprintf("OMC_SUB_USER_IMPORT_%s_%d_%s", neId, time.Now().UnixMilli(), fileHeader.Filename) - localPath := fmt.Sprintf("%s/upload/mml/%s", conf.Get("ne.omcdir"), fileName) - nePath := conf.Get("mml.upload").(string) - // 输出保存文件 - err = ctx.SaveUploadedFile(r, localPath) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - // 复制到远程 - err = ssh.FileSCPLocalToNe(neInfo.Ip, localPath, nePath) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - - msg := fmt.Sprintf("import udmuser:path=%s", fmt.Sprintf("%s/%s", nePath, fileName)) - - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg) - if err != nil { - ctx.JSON(w, 200, result.ErrMsg(err.Error())) - return - } - // 命令ok时 - if strings.Contains(data, "ok") { - if strings.HasSuffix(fileHeader.Filename, ".csv") { - data := file.ReadFileCSV(localPath) - neId = "" - go s.subUser.InsertCSV(neId, data) - } - if strings.HasSuffix(fileHeader.Filename, ".txt") { - data := file.ReadFileTXT(",", localPath) - neId = "" - go s.subUser.InsertTxt(neId, data) - } - } - ctx.JSON(w, 200, result.OkMsg(data)) -} diff --git a/features/udm_user/model/udm_auth_user.go b/features/udm_user/model/udm_auth_user.go deleted file mode 100644 index 520d3463..00000000 --- a/features/udm_user/model/udm_auth_user.go +++ /dev/null @@ -1,13 +0,0 @@ -package model - -// UdmAuthUser UDM鉴权用户 -type UdmAuthUser struct { - ID string `json:"id" xorm:"pk 'id' autoincr"` - Imsi string `json:"imsi" xorm:"imsi"` // SIM卡号 - Amf string `json:"amf" xorm:"amf"` // ANF - Status string `json:"status" xorm:"status"` // 状态 - Ki string `json:"ki" xorm:"ki"` // ki - AlgoIndex string `json:"algoIndex" xorm:"algo_index"` // - Opc string `json:"opc" xorm:"opc"` - NeID string `json:"neId" xorm:"ne_id"` // UDM网元标识-子系统 -} diff --git a/features/udm_user/model/udm_sub_user.go b/features/udm_user/model/udm_sub_user.go deleted file mode 100644 index 466fce1c..00000000 --- a/features/udm_user/model/udm_sub_user.go +++ /dev/null @@ -1,29 +0,0 @@ -package model - -// UdmSubUser UDM签约用户 -type UdmSubUser struct { - ID string `json:"id" xorm:"pk 'id' autoincr"` - Msisdn string `json:"msisdn" xorm:"msisdn"` // 相当手机号 - Imsi string `json:"imsi" xorm:"imsi"` // SIM卡号 - Ambr string `json:"ambr" xorm:"ambr"` - Nssai string `json:"nssai" xorm:"nssai"` - Rat string `json:"rat" xorm:"rat"` - Arfb string `json:"arfb" xorm:"arfb"` - Sar string `json:"sar" xorm:"sar"` - Cn string `json:"cn" xorm:"cn"` - SmData string `json:"smData" xorm:"sm_data"` - SmfSel string `json:"smfSel" xorm:"smf_sel"` - EpsDat string `json:"epsDat" xorm:"eps_dat"` - NeID string `json:"neId" xorm:"ne_id"` // UDM网元标识-子系统 - - EpsFlag string `json:"epsFlag" xorm:"eps_flag"` - EpsOdb string `json:"epsOdb" xorm:"eps_odb"` - HplmnOdb string `json:"hplmnOdb" xorm:"hplmn_odb"` - Ard string `json:"ard" xorm:"ard"` - Epstpl string `json:"epstpl" xorm:"epstpl"` - ContextId string `json:"contextId" xorm:"context_id"` - ApnContext string `json:"apnContext" xorm:"apn_context"` - StaticIp string `json:"staticIp" xorm:"static_ip"` - - SubNum string `json:"subNum,omitempty" xorm:"-"` // 批量数 -} diff --git a/features/udm_user/repo/repo_udm_auth_user.go b/features/udm_user/repo/repo_udm_auth_user.go deleted file mode 100644 index 9c388774..00000000 --- a/features/udm_user/repo/repo_udm_auth_user.go +++ /dev/null @@ -1,276 +0,0 @@ -package repo - -import ( - "strconv" - "strings" - - "be.ems/features/udm_user/model" - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/parse" - "be.ems/lib/log" -) - -// 实例化数据层 RepoUdmAuthUser 结构体 -var NewRepoUdmAuthUser = &RepoUdmAuthUser{ - selectSql: `select - id, imsi, amf, status, ki, algo_index, opc, ne_id - from u_auth_user`, - - resultMap: map[string]string{ - "id": "ID", - "imsi": "Imsi", - "amf": "Amf", - "status": "Status", - "ki": "Ki", - "algo_index": "AlgoIndex", - "opc": "Opc", - "ne_id": "NeID", - }, -} - -// RepoUdmAuthUser UDM鉴权用户 数据层处理 -type RepoUdmAuthUser struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *RepoUdmAuthUser) convertResultRows(rows []map[string]any) []model.UdmAuthUser { - arr := make([]model.UdmAuthUser, 0) - for _, row := range rows { - UdmUser := model.UdmAuthUser{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - datasource.SetFieldValue(&UdmUser, keyMapper, value) - } - } - arr = append(arr, UdmUser) - } - return arr -} - -// SelectPage 根据条件分页查询 -func (r *RepoUdmAuthUser) SelectPage(query map[string]any) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if v, ok := query["imsi"]; ok && v != "" { - conditions = append(conditions, "imsi like concat(concat('%', ?), '%')") - params = append(params, v) - } - if v, ok := query["neId"]; ok && v != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, v) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - result := map[string]any{ - "total": 0, - "rows": []model.UdmAuthUser{}, - } - - // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from u_auth_user" - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { - log.Errorf("total err => %v", err) - return result - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return result - } else { - result["total"] = total - } - - // 分页 - pageNum, pageSize := datasource.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 排序 - sortSql := "" - if v, ok := query["sortField"]; ok && v != "" { - if v == "imsi" { - sortSql += " order by imsi " - } - if o, ok := query["sortOrder"]; ok && o != nil && v != "" { - if o == "desc" { - sortSql += " desc " - } else { - sortSql += " asc " - } - } - } - - // 查询数据 - querySql := r.selectSql + whereSql + sortSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - } - - // 转换实体 - result["rows"] = r.convertResultRows(results) - return result -} - -// SelectList 根据实体查询 -func (r *RepoUdmAuthUser) SelectList(auth model.UdmAuthUser) []model.UdmAuthUser { - // 查询条件拼接 - var conditions []string - var params []any - if auth.Imsi != "" { - conditions = append(conditions, "imsi = ?") - params = append(params, auth.Imsi) - } - if auth.NeID != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, auth.NeID) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数据 - querySql := r.selectSql + whereSql + " order by imsi asc " - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - } - - // 转换实体 - return r.convertResultRows(results) -} - -// ClearAndInsert 清空ne_id后新增实体 -func (r *RepoUdmAuthUser) ClearAndInsert(neID string, authArr []model.UdmAuthUser) int64 { - var num int64 = 0 - - // 清空指定ne_id - _, err := datasource.ExecDB("", "TRUNCATE TABLE u_auth_user", nil) - // _, err := datasource.ExecDB("", "DELETE FROM u_auth_user WHERE ne_id = ?", []any{neID}) - if err != nil { - log.Errorf("TRUNCATE err => %v", err) - } - - n := len(authArr) - batchSize := 2000 - for i := 0; i < n; i += batchSize { - end := i + batchSize - if end > n { - end = n - } - batch := authArr[i:end] - - // 调用 InsertMulti 函数将批量数据插入数据库 - results, err := datasource.DefaultDB().Table("u_auth_user").InsertMulti(batch) - if err != nil { - log.Errorf("InsertMulti err => %v", err) - continue - } - num += results - } - return num -} - -// Insert 新增实体 -func (r *RepoUdmAuthUser) Insert(authUser model.UdmAuthUser) int64 { - results, err := datasource.DefaultDB().Table("u_auth_user").Insert(authUser) - if err != nil { - log.Errorf("Insert err => %v", err) - return results - } - return results -} - -// Insert 批量添加 -func (r *RepoUdmAuthUser) Inserts(authUsers []model.UdmAuthUser) int64 { - var num int64 - n := len(authUsers) - batchSize := 2000 - for i := 0; i < n; i += batchSize { - end := i + batchSize - if end > n { - end = n - } - batch := authUsers[i:end] - - // 调用 InsertMulti 函数将批量数据插入数据库 - results, err := datasource.DefaultDB().Table("u_auth_user").InsertMulti(batch) - if err != nil { - log.Errorf("Insert err => %v", err) - continue - } - num += results - } - return num -} - -// Update 修改更新 -func (r *RepoUdmAuthUser) Update(neID string, authUser model.UdmAuthUser) int64 { - // 查询先 - var user model.UdmAuthUser - has, err := datasource.DefaultDB().Table("u_auth_user").Where("imsi = ? and ne_id = ?", authUser.Imsi, neID).Get(&user) - if !has || err != nil { - return 0 - } - - if authUser.Ki != "" && authUser.Ki != user.Ki { - user.Ki = authUser.Ki - } - if authUser.Amf != "" && authUser.Amf != user.Amf { - user.Amf = authUser.Amf - } - if authUser.AlgoIndex != "" && authUser.AlgoIndex != user.AlgoIndex { - user.AlgoIndex = authUser.AlgoIndex - } - if authUser.Opc != "" && authUser.Opc != user.Opc { - user.Opc = authUser.Opc - } - - results, err := datasource.DefaultDB().Table("u_auth_user").Where("imsi = ? and ne_id = ?", user.Imsi, user.NeID).Update(user) - if err != nil { - return 0 - } - return results -} - -// Delete 删除实体 -func (r *RepoUdmAuthUser) Delete(neID, imsi string) int64 { - results, err := datasource.DefaultDB().Table("u_auth_user").Where("imsi = ? and ne_id = ?", imsi, neID).Delete() - if err != nil { - return results - } - return results -} - -// Delete 删除范围实体 -func (r *RepoUdmAuthUser) Deletes(neID, imsi, num string) int64 { - imsiV, err := strconv.Atoi(imsi) - if err != nil { - return 0 - } - - numV, err := strconv.Atoi(num) - if err != nil { - return 0 - } - - results, err := datasource.DefaultDB().Table("u_auth_user").Where("imsi >= ? and imsi < ? and ne_id = ?", imsiV, imsiV+numV, neID).Delete() - if err != nil { - return results - } - return results -} diff --git a/features/udm_user/repo/repo_udm_sub_user.go b/features/udm_user/repo/repo_udm_sub_user.go deleted file mode 100644 index 03c90a5f..00000000 --- a/features/udm_user/repo/repo_udm_sub_user.go +++ /dev/null @@ -1,450 +0,0 @@ -package repo - -import ( - "fmt" - "strconv" - "strings" - - "be.ems/features/udm_user/model" - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/parse" - "be.ems/lib/log" -) - -// 实例化数据层 RepoUdmSubUser 结构体 -var NewRepoUdmSubUser = &RepoUdmSubUser{ - selectSql: `select - id, msisdn, imsi, ambr, nssai, rat, arfb, sar, cn, sm_data, smf_sel, eps_dat, ne_id, eps_flag, eps_odb, hplmn_odb, ard, epstpl, context_id, apn_context, static_ip - from u_sub_user`, - - resultMap: map[string]string{ - "id": "ID", - "msisdn": "Msisdn", - "imsi": "Imsi", - "ambr": "Ambr", - "nssai": "Nssai", - "rat": "Rat", - "arfb": "Arfb", - "sar": "Sar", - "cn": "Cn", - "sm_data": "SmData", - "smf_sel": "SmfSel", - "eps_dat": "EpsDat", - "ne_id": "NeID", - "eps_flag": "EpsFlag", - "eps_odb": "EpsOdb", - "hplmn_odb": "HplmnOdb", - "ard": "Ard", - "epstpl": "Epstpl", - "context_id": "ContextId", - "apn_context": "ApnContext", - "static_ip": "StaticIp", - }, -} - -// RepoUdmSubUser UDM签约用户 数据层处理 -type RepoUdmSubUser struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *RepoUdmSubUser) convertResultRows(rows []map[string]any) []model.UdmSubUser { - arr := make([]model.UdmSubUser, 0) - for _, row := range rows { - UdmUser := model.UdmSubUser{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - datasource.SetFieldValue(&UdmUser, keyMapper, value) - } - } - arr = append(arr, UdmUser) - } - return arr -} - -// SelectPage 根据条件分页查询字典类型 -func (r *RepoUdmSubUser) SelectPage(query map[string]any) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if v, ok := query["msisdn"]; ok && v != "" { - conditions = append(conditions, "msisdn like concat(concat('%', ?), '%')") - params = append(params, v) - } - if v, ok := query["imsi"]; ok && v != "" { - conditions = append(conditions, "imsi like concat(concat('%', ?), '%')") - params = append(params, v) - } - if v, ok := query["neId"]; ok && v != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, v) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - result := map[string]any{ - "total": 0, - "rows": []model.UdmAuthUser{}, - } - - // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from u_sub_user" - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { - log.Errorf("total err => %v", err) - return result - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return result - } else { - result["total"] = total - } - - // 分页 - pageNum, pageSize := datasource.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 排序 - sortSql := "" - if v, ok := query["sortField"]; ok && v != "" { - if v == "imsi" { - sortSql += " order by imsi " - } - if v == "msisdn" { - sortSql += " order by msisdn " - } - if o, ok := query["sortOrder"]; ok && o != nil && v != "" { - if o == "desc" { - sortSql += " desc " - } else { - sortSql += " asc " - } - } - } - - // 查询数据 - querySql := r.selectSql + whereSql + sortSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - return result - } - - // 转换实体 - result["rows"] = r.convertResultRows(results) - return result -} - -// SelectList 根据实体查询 -func (r *RepoUdmSubUser) SelectList(auth model.UdmSubUser) []model.UdmSubUser { - // 查询条件拼接 - var conditions []string - var params []any - if auth.Imsi != "" { - conditions = append(conditions, "imsi = ?") - params = append(params, auth.Imsi) - } - if auth.NeID != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, auth.NeID) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数据 - querySql := r.selectSql + whereSql + " order by imsi asc " - results, err := datasource.RawDB("", querySql, params) - if err != nil { - log.Errorf("query err => %v", err) - } - - // 转换实体 - return r.convertResultRows(results) -} - -// ClearAndInsert 清空ne_id后新增实体 -func (r *RepoUdmSubUser) ClearAndInsert(neID string, subArr []model.UdmSubUser) int64 { - var num int64 = 0 - - // 清空指定ne_id - _, err := datasource.ExecDB("", "TRUNCATE TABLE u_sub_user", nil) - // _, err := datasource.ExecDB("", "DELETE FROM u_sub_user WHERE ne_id = ?", []any{neID}) - if err != nil { - log.Errorf("TRUNCATE err => %v", err) - } - - n := len(subArr) - batchSize := 2000 - for i := 0; i < n; i += batchSize { - end := i + batchSize - if end > n { - end = n - } - batch := subArr[i:end] - - // 调用 InsertMulti 函数将批量数据插入数据库 - results, err := datasource.DefaultDB().Table("u_sub_user").InsertMulti(batch) - if err != nil { - log.Errorf("InsertMulti err => %v", err) - continue - } - num += results - } - - // for _, u := range subArr { - // u.NeID = neID - // results, err := datasource.DefaultDB().Table("u_sub_user").Insert(u) - // if err != nil { - // return num - // } - // num += results - // } - return num -} - -// Insert 新增实体 -func (r *RepoUdmSubUser) Insert(subUser model.UdmSubUser) int64 { - results, err := datasource.DefaultDB().Table("u_sub_user").Insert(subUser) - if err != nil { - log.Errorf("Insert err => %v", err) - return results - } - return results -} - -// Insert 批量添加 -func (r *RepoUdmSubUser) Inserts(subUser []model.UdmSubUser) int64 { - var num int64 - n := len(subUser) - batchSize := 2000 - for i := 0; i < n; i += batchSize { - end := i + batchSize - if end > n { - end = n - } - batch := subUser[i:end] - - // 调用 InsertMulti 函数将批量数据插入数据库 - results, err := datasource.DefaultDB().Table("u_sub_user").InsertMulti(batch) - if err != nil { - log.Errorf("Insert err => %v", err) - continue - } - num += results - } - return num -} - -// Insert4G 批量添加4G用户 -func (r *RepoUdmSubUser) Insert4G(neID string, subUser model.UdmSubUser) int64 { - var insertNum int64 - - imsiV, err := strconv.Atoi(subUser.Imsi) - if err != nil { - return 0 - } - numV, err := strconv.Atoi(subUser.SubNum) - if err != nil { - return 0 - } - - subUser.NeID = neID - for i := 0; i < numV; i++ { - subUser.Imsi = fmt.Sprint(imsiV + i) - - results, err := datasource.DefaultDB().Table("u_sub_user").Insert(subUser) - if err == nil { - log.Errorf("Insert err => %v", err) - insertNum += results - } - } - - return insertNum -} - -// Update 修改更新 -func (r *RepoUdmSubUser) Update(neID string, authUser model.UdmSubUser) int64 { - // 查询先 - var user model.UdmSubUser - has, err := datasource.DefaultDB().Table("u_sub_user").Where("imsi = ? and ne_id = ?", authUser.Imsi, neID).Get(&user) - if !has || err != nil { - return 0 - } - - if authUser.Msisdn != "" && authUser.Msisdn != user.Msisdn { - user.Msisdn = authUser.Msisdn - } - if authUser.Ambr != "" && authUser.Ambr != user.Ambr { - user.Ambr = authUser.Ambr - } - if authUser.Arfb != "" && authUser.Arfb != user.Arfb { - user.Arfb = authUser.Arfb - } - if authUser.Sar != "" && authUser.Sar != user.Sar { - user.Sar = authUser.Sar - } - if authUser.Rat != "" && authUser.Rat != user.Rat { - user.Rat = authUser.Rat - } - if authUser.Cn != "" && authUser.Cn != user.Cn { - user.Cn = authUser.Cn - } - if authUser.SmfSel != "" && authUser.SmfSel != user.SmfSel { - user.SmfSel = authUser.SmfSel - } - if authUser.SmData != "" && authUser.SmData != user.SmData { - user.SmData = authUser.SmData - } - if authUser.EpsDat != "" && authUser.EpsDat != user.EpsDat { - user.EpsDat = authUser.EpsDat - } - if authUser.EpsFlag != "" && authUser.EpsFlag != user.EpsFlag { - user.EpsFlag = authUser.EpsFlag - } - if authUser.EpsOdb != "" && authUser.EpsDat != user.EpsDat { - user.EpsOdb = authUser.EpsOdb - } - if authUser.HplmnOdb != "" && authUser.HplmnOdb != user.HplmnOdb { - user.HplmnOdb = authUser.HplmnOdb - } - if authUser.Epstpl != "" && authUser.Epstpl != user.Epstpl { - user.Epstpl = authUser.Epstpl - } - if authUser.Ard != "" && authUser.Ard != user.Ard { - user.Ard = authUser.Ard - } - if authUser.ContextId != "" && authUser.ContextId != user.ContextId { - user.ContextId = authUser.ContextId - } - if authUser.ApnContext != "" && authUser.ApnContext != user.ApnContext { - user.ApnContext = authUser.ApnContext - } - if authUser.StaticIp != "" && authUser.StaticIp != user.StaticIp { - user.StaticIp = authUser.StaticIp - } - - results, err := datasource.DefaultDB().Table("u_sub_user").Where("imsi = ? and ne_id = ?", user.Imsi, user.NeID).Update(user) - if err != nil { - log.Errorf("Update err => %v", err) - return 0 - } - return results -} - -// Update4GIP 批量修改4G IP -func (r *RepoUdmSubUser) Update4GIP(neID string, subUser model.UdmSubUser) int64 { - var insertNum int64 - - imsiV, err := strconv.Atoi(subUser.Imsi) - if err != nil || subUser.StaticIp == "" { - return insertNum - } - numV, err := strconv.Atoi(subUser.SubNum) - if err != nil { - return insertNum - } - - for i := 0; i < numV; i++ { - subUser.Imsi = fmt.Sprint(imsiV + i) - - // 查询先 - var user model.UdmSubUser - has, err := datasource.DefaultDB().Table("u_sub_user").Where("imsi = ? and ne_id = ?", subUser.Imsi, neID).Get(&user) - if has && err == nil { - // IP会自动递增 - parts := strings.Split(subUser.StaticIp, ".") - lastPart := parts[3] - lastNum, _ := strconv.Atoi(lastPart) - lastNum += i - newLastPart := strconv.Itoa(lastNum) - parts[3] = newLastPart - newIP := strings.Join(parts, ".") - user.StaticIp = newIP - // 更新 - results, err := datasource.DefaultDB().Table("u_sub_user").Update(user) - if err == nil { - log.Errorf("Update err => %v", err) - insertNum += results - } - } - } - return insertNum -} - -// UpdateSmData 批量修改sm-data -func (r *RepoUdmSubUser) UpdateSmData(neID string, subUser model.UdmSubUser) int64 { - var insertNum int64 - - imsiV, err := strconv.Atoi(subUser.Imsi) - if err != nil || subUser.StaticIp == "" { - return insertNum - } - numV, err := strconv.Atoi(subUser.SubNum) - if err != nil { - return insertNum - } - - for i := 0; i < numV; i++ { - subUser.Imsi = fmt.Sprint(imsiV + i) - - // 查询先 - var user model.UdmSubUser - has, err := datasource.DefaultDB().Table("u_sub_user").Where("imsi = ? and ne_id = ?", subUser.Imsi, neID).Get(&user) - if has && err == nil { - // IP会自动递增,需提前规划好DNN对应的IP;如dnn不需要绑定IP则不带此字段名 - // parts := strings.Split(subUser.SmData, "&") - user.SmData = subUser.SmData - // 更新 - results, err := datasource.DefaultDB().Table("u_sub_user").Update(user) - if err == nil { - log.Errorf("Update err => %v", err) - insertNum += results - } - } - } - return insertNum -} - -// Delete 删除实体 -func (r *RepoUdmSubUser) Delete(neID, imsi string) int64 { - results, err := datasource.DefaultDB().Table("u_sub_user").Where("imsi = ? and ne_id = ?", imsi, neID).Delete() - if err != nil { - log.Errorf("Delete err => %v", err) - return results - } - return results -} - -// Delete 删除范围实体 -func (r *RepoUdmSubUser) Deletes(neID, imsi, num string) int64 { - imsiV, err := strconv.Atoi(imsi) - if err != nil { - return 0 - } - - numV, err := strconv.Atoi(num) - if err != nil { - return 0 - } - - results, err := datasource.DefaultDB().Table("u_sub_user").Where("imsi >= ? and imsi < ? and ne_id = ?", imsiV, imsiV+numV, neID).Delete() - if err != nil { - log.Errorf("Delete err => %v", err) - return results - } - return results -} diff --git a/features/udm_user/service/service_redis_data.go b/features/udm_user/service/service_redis_data.go deleted file mode 100644 index 8687fbe6..00000000 --- a/features/udm_user/service/service_redis_data.go +++ /dev/null @@ -1,119 +0,0 @@ -package service - -import ( - "strings" - - "be.ems/features/udm_user/model" - "be.ems/src/framework/redis" -) - -// phoneImsiList 获取所有imsi -// func phoneImsiList() map[string]string { -// phoneAndImsiArr := make(map[string]string, 0) -// phoneKeys, err := redis.GetKeys("udmuser", "1*********") -// if err != nil { -// return phoneAndImsiArr -// } -// for _, phone := range phoneKeys { -// imsi, err := redis.Get("udmuser", phone) -// if err != nil { -// continue -// } -// phoneAndImsiArr[phone] = imsi -// } -// return phoneAndImsiArr -// } - -// redisUdmAuthUserList UDM鉴权用户 -func redisUdmAuthUserList() []model.UdmAuthUser { - user := []model.UdmAuthUser{} - ausfArr, err := redis.GetKeys("udmuser", "ausf:*") - if err != nil { - return user - } - for _, key := range ausfArr { - m, err := redis.GetHash("udmuser", key) - if err != nil { - continue - } - - // 跳过-号数据 - imsi := key[5:] - if strings.Contains(imsi, "-") { - continue - } - - status := "0" - if _, ok := m["auth_success"]; ok { - status = "1" - } - amf := "" - if v, ok := m["amf"]; ok { - amf = strings.Replace(v, "\r\n", "", 1) - } - a := model.UdmAuthUser{ - Imsi: imsi, - Amf: amf, - Status: status, - Ki: m["ki"], - AlgoIndex: m["algo"], - Opc: m["opc"], - } - user = append(user, a) - } - return user -} - -// redisUdmSubUserList UDM签约用户 -func redisUdmSubUserList() []model.UdmSubUser { - user := []model.UdmSubUser{} - udmsdArr, err := redis.GetKeys("udmuser", "udm-sd:*") - if err != nil { - return user - } - for _, key := range udmsdArr { - m, err := redis.GetHash("udmuser", key) - if err != nil { - continue - } - - a := model.UdmSubUser{ - Imsi: key[7:], - Msisdn: m["gpsi"], // 46003550072 strings.TrimPrefix(m["gpsi"], "86"), - SmfSel: m["smf-sel"], - SmData: m["sm-dat"], // 1-000001&cmnet&ims&3gnet - } - - // def_ambr,def_nssai,0,def_arfb,def_sar,3,1,12000,1,1000,0,1,- - if v, ok := m["am-dat"]; ok { - arr := strings.Split(v, ",") - a.Ambr = arr[0] - a.Nssai = arr[1] - a.Rat = arr[2] - a.Arfb = arr[3] - a.Sar = arr[4] - a.Cn = arr[5] - } - // 1,64,24,65,def_eps,1,2,010200000000,- - if v, ok := m["eps-dat"]; ok { - arr := strings.Split(v, ",") - // 跳过非常规数据 - if len(arr) > 9 { - continue - } - a.EpsDat = v - a.EpsFlag = arr[0] - a.EpsOdb = arr[1] - a.HplmnOdb = arr[2] - a.Ard = arr[3] - a.Epstpl = arr[4] - a.ContextId = arr[5] - a.ApnContext = arr[7] - // [6] 是不要的,导入和导出不用 - a.StaticIp = arr[8] - } - - user = append(user, a) - } - return user -} diff --git a/features/udm_user/service/service_udm_auth_user.go b/features/udm_user/service/service_udm_auth_user.go deleted file mode 100644 index 5023f4ce..00000000 --- a/features/udm_user/service/service_udm_auth_user.go +++ /dev/null @@ -1,151 +0,0 @@ -package service - -import ( - "fmt" - "strconv" - - "be.ems/features/udm_user/model" - "be.ems/features/udm_user/repo" -) - -// 实例化服务层 ServiceUdmAuthUser 结构体 -var NewServiceUdmAuthUser = &ServiceUdmAuthUser{ - repoAuthUser: *repo.NewRepoUdmAuthUser, -} - -// ServiceUdmAuthUser UDM鉴权用户 服务层处理 -type ServiceUdmAuthUser struct { - repoAuthUser repo.RepoUdmAuthUser -} - -// Save UDM鉴权用户-获取全部保存数据库 -func (r *ServiceUdmAuthUser) Save(neID string) int64 { - var num int64 = 0 - authArr := redisUdmAuthUserList() - // 有数据才清空 - if len(authArr) == 0 { - return num - } - go r.repoAuthUser.ClearAndInsert(neID, authArr) - return int64(len(authArr)) -} - -// Page UDM签约用户-分页查询数据库 -func (r *ServiceUdmAuthUser) Page(query map[string]any) map[string]any { - return r.repoAuthUser.SelectPage(query) -} - -// List UDM签约用户-查询数据库 -func (r *ServiceUdmAuthUser) List(authUser model.UdmAuthUser) []model.UdmAuthUser { - return r.repoAuthUser.SelectList(authUser) -} - -// Insert UDM鉴权用户-新增单个 -// imsi长度15,ki长度32,opc长度0或者32 -func (r *ServiceUdmAuthUser) Insert(neID string, authUser model.UdmAuthUser) int64 { - authUser.NeID = neID - authUser.Status = "0" - return r.repoAuthUser.Insert(authUser) -} - -// Insert UDM鉴权用户-批量添加 -func (r *ServiceUdmAuthUser) Inserts(neID string, authUser model.UdmAuthUser, num string) int64 { - var arr []model.UdmAuthUser - - imsiVlen := len(authUser.Imsi) - imsiV, err := strconv.Atoi(authUser.Imsi) - if err != nil { - return 0 - } - - numV, err := strconv.Atoi(num) - if err != nil { - return 0 - } - - authUser.NeID = neID - authUser.Status = "0" - for i := 0; i < numV; i++ { - imsi := fmt.Sprint(imsiV + i) - if len(imsi) < imsiVlen { - imsi = fmt.Sprintf("%0*s", imsiVlen, imsi) - } - authUser.Imsi = imsi - arr = append(arr, authUser) - } - - return r.repoAuthUser.Inserts(arr) -} - -// InsertCSV UDM鉴权用户-批量添加 -func (r *ServiceUdmAuthUser) InsertCSV(neID string, data []map[string]string) int64 { - var arr []model.UdmAuthUser - for _, v := range data { - var authUser model.UdmAuthUser - authUser.NeID = neID - authUser.Status = "0" - if s, ok := v["imsi"]; ok { - authUser.Imsi = s - } - if s, ok := v["ki"]; ok { - authUser.Ki = s - } - if s, ok := v["algo"]; ok { - authUser.AlgoIndex = s - } - if s, ok := v["amf"]; ok { - authUser.Amf = s - } - if s, ok := v["opc"]; ok { - authUser.Opc = s - } - - if authUser.Imsi == "" { - continue - } - arr = append(arr, authUser) - } - return r.repoAuthUser.Inserts(arr) -} - -// InsertTxt UDM鉴权用户-批量添加 -func (r *ServiceUdmAuthUser) InsertTxt(neID string, data [][]string) int64 { - var arr []model.UdmAuthUser - for _, v := range data { - if len(v) < 4 { - continue - } - var authUser model.UdmAuthUser - authUser.NeID = neID - authUser.Status = "0" - authUser.Imsi = v[0] - authUser.Ki = v[1] - authUser.AlgoIndex = v[2] - authUser.Amf = v[3] - if len(v) == 5 { - authUser.Opc = v[4] - } - - if authUser.Imsi == "" { - continue - } - arr = append(arr, authUser) - } - - return r.repoAuthUser.Inserts(arr) -} - -// Insert UDM鉴权用户-修改更新 -func (r *ServiceUdmAuthUser) Update(neID string, authUser model.UdmAuthUser) int64 { - return r.repoAuthUser.Update(neID, authUser) -} - -// Insert UDM鉴权用户-删除单个 -func (r *ServiceUdmAuthUser) Delete(neID, imsi string) int64 { - return r.repoAuthUser.Delete(neID, imsi) -} - -// Insert UDM鉴权用户-删除范围 -func (r *ServiceUdmAuthUser) Deletes(neID, imsi, num string) int64 { - return r.repoAuthUser.Deletes(neID, imsi, num) -} diff --git a/features/udm_user/service/service_udm_sub_user.go b/features/udm_user/service/service_udm_sub_user.go deleted file mode 100644 index 6a2d218c..00000000 --- a/features/udm_user/service/service_udm_sub_user.go +++ /dev/null @@ -1,231 +0,0 @@ -package service - -import ( - "fmt" - "strconv" - "strings" - - "be.ems/features/udm_user/model" - "be.ems/features/udm_user/repo" -) - -// 实例化服务层 ServiceUdmSubUser 结构体 -var NewServiceUdmSubUser = &ServiceUdmSubUser{ - repoSunUser: *repo.NewRepoUdmSubUser, -} - -// ServiceUdmSubUser UDM签约用户 服务层处理 -type ServiceUdmSubUser struct { - repoSunUser repo.RepoUdmSubUser -} - -// Save UDM签约用户-获取全部保存数据库 -func (r *ServiceUdmSubUser) Save(neID string) int64 { - var num int64 = 0 - subArr := redisUdmSubUserList() - // 有数据才清空 - if len(subArr) == 0 { - return num - } - go r.repoSunUser.ClearAndInsert(neID, subArr) - return int64(len(subArr)) -} - -// Page UDM签约用户-分页查询数据库 -func (r *ServiceUdmSubUser) Page(query map[string]any) map[string]any { - return r.repoSunUser.SelectPage(query) -} - -// List UDM签约用户-查询数据库 -func (r *ServiceUdmSubUser) List(subUser model.UdmSubUser) []model.UdmSubUser { - return r.repoSunUser.SelectList(subUser) -} - -// Insert UDM签约用户-新增单个 -// imsi长度15,ki长度32,opc长度0或者32 -func (r *ServiceUdmSubUser) Insert(neID string, subUser model.UdmSubUser) int64 { - subUser.NeID = neID - return r.repoSunUser.Insert(subUser) -} - -// Insert UDM签约用户-批量添加 -func (r *ServiceUdmSubUser) Inserts(neID string, subUser model.UdmSubUser, num string) int64 { - var arr []model.UdmSubUser - - imsiVlen := len(subUser.Imsi) - imsiV, err := strconv.Atoi(subUser.Imsi) - if err != nil { - return 0 - } - msisdnVlen := len(subUser.Msisdn) - msisdnV, err := strconv.Atoi(subUser.Msisdn) - if err != nil { - return 0 - } - - numV, err := strconv.Atoi(num) - if err != nil { - return 0 - } - - subUser.NeID = neID - for i := 0; i < numV; i++ { - msisdn := fmt.Sprint(msisdnV + i) - if len(msisdn) < msisdnVlen { - msisdn = fmt.Sprintf("%0*s", msisdnVlen, msisdn) - } - subUser.Msisdn = msisdn - - imsi := fmt.Sprint(imsiV + i) - if len(imsi) < imsiVlen { - imsi = fmt.Sprintf("%0*s", imsiVlen, imsi) - } - subUser.Imsi = imsi - - // IP会自动递增 - if len(subUser.StaticIp) > 5 { - parts := strings.Split(subUser.StaticIp, ".") - lastPart := parts[3] - lastNum, _ := strconv.Atoi(lastPart) - lastNum += i - newLastPart := strconv.Itoa(lastNum) - parts[3] = newLastPart - newIP := strings.Join(parts, ".") - subUser.StaticIp = newIP - } - - subUser.EpsDat = fmt.Sprintf("%s,%s,%s,%s,%s,%s,2,%s,%s", subUser.EpsFlag, subUser.EpsOdb, subUser.HplmnOdb, subUser.Ard, subUser.Epstpl, subUser.ContextId, subUser.ApnContext, subUser.StaticIp) - - arr = append(arr, subUser) - } - - return r.repoSunUser.Inserts(arr) -} - -// InsertCSV UDM签约用户-批量添加 -func (r *ServiceUdmSubUser) InsertCSV(neID string, data []map[string]string) int64 { - var arr []model.UdmSubUser - for _, v := range data { - var subUser model.UdmSubUser - subUser.NeID = neID - if s, ok := v["imsi"]; ok { - subUser.Imsi = s - } - if s, ok := v["msisdn"]; ok { - subUser.Msisdn = s - } - if s, ok := v["ambr"]; ok { - subUser.Ambr = s - } - if s, ok := v["nssai"]; ok { - subUser.Nssai = s - } - if s, ok := v["arfb"]; ok { - subUser.Arfb = s - } - if s, ok := v["sar"]; ok { - subUser.Sar = s - } - if s, ok := v["rat"]; ok { - subUser.Rat = s - } - if s, ok := v["cn"]; ok { - subUser.Cn = s - } - if s, ok := v["smf_sel"]; ok { - subUser.SmfSel = s - } - if s, ok := v["sm_dat"]; ok { - subUser.SmData = s - } - if s, ok := v["eps_dat"]; ok { - subUser.EpsDat = s - arr := strings.Split(s, ",") - if len(arr) == 8 { - subUser.EpsFlag = arr[0] - subUser.EpsOdb = arr[1] - subUser.HplmnOdb = arr[2] - subUser.Ard = arr[3] - subUser.Epstpl = arr[4] - subUser.ContextId = arr[5] - subUser.ApnContext = arr[6] - subUser.StaticIp = arr[7] - } - } - - if subUser.Imsi == "" { - continue - } - arr = append(arr, subUser) - } - return r.repoSunUser.Inserts(arr) -} - -// InsertTxt UDM签约用户-批量添加 -func (r *ServiceUdmSubUser) InsertTxt(neID string, data [][]string) int64 { - var arr []model.UdmSubUser - for _, v := range data { - if len(v) < 10 { - continue - } - var subUser model.UdmSubUser - subUser.NeID = neID - subUser.Imsi = v[0] - subUser.Msisdn = v[1] - subUser.Ambr = v[2] - subUser.Nssai = v[3] - subUser.Arfb = v[4] - subUser.Sar = v[5] - subUser.Rat = v[6] - subUser.Cn = v[7] - subUser.SmfSel = v[8] - subUser.SmData = v[9] - if len(v) > 17 { - subUser.EpsFlag = v[10] - subUser.EpsOdb = v[11] - subUser.HplmnOdb = v[12] - subUser.Ard = v[13] - subUser.Epstpl = v[14] - subUser.ContextId = v[15] - subUser.ApnContext = v[16] - subUser.StaticIp = v[17] - subUser.EpsDat = strings.Join(v[10:], ",") - } - - if subUser.Imsi == "" { - continue - } - arr = append(arr, subUser) - } - return r.repoSunUser.Inserts(arr) -} - -// Insert UDM签约用户-批量添加4G用户 -func (r *ServiceUdmSubUser) Insert4G(neID string, subUser model.UdmSubUser) int64 { - return r.repoSunUser.Insert4G(neID, subUser) -} - -// Insert UDM签约用户-修改更新 -func (r *ServiceUdmSubUser) Update(neID string, subUser model.UdmSubUser) int64 { - return r.repoSunUser.Update(neID, subUser) -} - -// Update4GIP UDM签约用户-批量修改4G IP -func (r *ServiceUdmSubUser) Update4GIP(neID string, subUser model.UdmSubUser) int64 { - return r.repoSunUser.Update4GIP(neID, subUser) -} - -// Update4GIP UDM签约用户-批量修改sm-data -func (r *ServiceUdmSubUser) UpdateSmData(neID string, subUser model.UdmSubUser) int64 { - return r.repoSunUser.UpdateSmData(neID, subUser) -} - -// Insert UDM签约用户-删除单个 -func (r *ServiceUdmSubUser) Delete(neID, imsi string) int64 { - return r.repoSunUser.Delete(neID, imsi) -} - -// Insert UDM签约用户-删除范围 -func (r *ServiceUdmSubUser) Deletes(neID, imsi, num string) int64 { - return r.repoSunUser.Deletes(neID, imsi, num) -} diff --git a/lib/core/account/account.go b/lib/core/account/account.go deleted file mode 100644 index 81d58533..00000000 --- a/lib/core/account/account.go +++ /dev/null @@ -1,54 +0,0 @@ -package account - -import ( - "fmt" - "strconv" - "time" - - sysMenuService "be.ems/features/sys_menu/service" - sysRoleService "be.ems/features/sys_role/service" - "be.ems/lib/core/cache" - "be.ems/lib/core/vo" - "be.ems/lib/dborm" - srcConfig "be.ems/src/framework/config" -) - -// 登录缓存用户信息 -func CacheLoginUser(user *dborm.User) { - // 过期时间 - expiresStr, err := dborm.XormGetConfigValue("Security", "sessionExpires") - if err != nil { - expiresStr = "18000" - } - expiresValue, _ := strconv.Atoi(expiresStr) - expireTime := time.Duration(expiresValue) * time.Second - - nowTime := time.Now().UnixMilli() - - // 登录用户 - loginUser := vo.LoginUser{ - UserID: fmt.Sprint(user.Id), - UserName: user.Name, - ExpireTime: nowTime + expireTime.Milliseconds(), - LoginTime: nowTime, - User: *user, - } - - // 是否管理员 - if srcConfig.IsAdmin(loginUser.UserID) { - loginUser.Permissions = []string{"*:*:*"} - } else { - // 获取权限标识 - loginUser.Permissions = sysMenuService.NewRepoSysMenu.SelectMenuPermsByUserId(loginUser.UserID) - // 获取角色信息 - loginUser.User.Roles = sysRoleService.NewRepoSysRole.SelectRoleListByUserId(loginUser.UserID) - } - - // 缓存时间 - cache.SetLocalTTL(user.AccountId, loginUser, time.Duration(expireTime)) -} - -// 清除缓存用户信息 -func ClearLoginUser(accountId string) { - cache.DeleteLocalTTL(accountId) -} diff --git a/lib/dborm/dborm.go b/lib/dborm/dborm.go index 43174bbf..538ab02e 100644 --- a/lib/dborm/dborm.go +++ b/lib/dborm/dborm.go @@ -10,9 +10,9 @@ import ( "strings" - "be.ems/features/sys_role/model" "be.ems/lib/log" "be.ems/lib/oauth" + "be.ems/src/modules/system/model" _ "github.com/go-sql-driver/mysql" "xorm.io/xorm" diff --git a/lib/midware/arrow_ip_addr.go b/lib/midware/arrow_ip_addr.go index 98c29462..c9c7a32c 100644 --- a/lib/midware/arrow_ip_addr.go +++ b/lib/midware/arrow_ip_addr.go @@ -10,6 +10,7 @@ import ( "be.ems/lib/services" ) +// 已禁用 // 登录策略限制登录时间和访问ip范围 func ArrowIPAddr(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { diff --git a/lib/midware/authorize.go b/lib/midware/authorize.go index 152709b2..b56e9c39 100644 --- a/lib/midware/authorize.go +++ b/lib/midware/authorize.go @@ -14,6 +14,7 @@ import ( tokenUtils "be.ems/src/framework/utils/token" ) +// 已禁用由Gin部分接管 // Authorize 用户身份授权认证校验 // // 只需含有其中角色 "hasRoles": {"xxx"}, diff --git a/lib/midware/cors.go b/lib/midware/cors.go index b0a73ad6..a9243694 100644 --- a/lib/midware/cors.go +++ b/lib/midware/cors.go @@ -5,6 +5,7 @@ import ( "strings" ) +// 已禁用由Gin部分接管 // Cors 跨域 func Cors(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { diff --git a/lib/midware/operate_log.go b/lib/midware/operate_log.go index 6b00eb07..d8bc3964 100644 --- a/lib/midware/operate_log.go +++ b/lib/midware/operate_log.go @@ -11,8 +11,8 @@ import ( "strings" "time" + "be.ems/lib/core/utils/ctx" "be.ems/lib/core/utils/parse" - "be.ems/lib/dborm" "be.ems/src/framework/constants/common" "be.ems/src/framework/middleware/collectlogs" "be.ems/src/framework/utils/ip2region" @@ -47,13 +47,7 @@ func LogOperate(options collectlogs.Options) func(http.Handler) http.Handler { funcName = funcName[lastDotIndex+1:] // 用户名 - username := "-" - accessToken := r.Header.Get("AccessToken") - if accessToken != "" { - // 验证令牌 == 这里直接查数据库session - se, _ := dborm.XormUpdateSessionShakeTime(accessToken) - username = se.AccountId - } + username := ctx.LoginUserToUserName(r) // 解析ip地址 ip := strings.Split(r.RemoteAddr, ":")[0] diff --git a/lib/routes/routes.go b/lib/routes/routes.go index bf95fe71..8c8ca84d 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -13,21 +13,12 @@ import ( "be.ems/features/fm" "be.ems/features/lm" "be.ems/features/mml" - "be.ems/features/monitor/monitor" - "be.ems/features/monitor/psnet" "be.ems/features/nbi" "be.ems/features/pm" "be.ems/features/security" "be.ems/features/sm" "be.ems/features/state" - sysconfig "be.ems/features/sys_config" - sysdictdata "be.ems/features/sys_dict_data" - sysdicttype "be.ems/features/sys_dict_type" - sysmenu "be.ems/features/sys_menu" - sysrole "be.ems/features/sys_role" - sysuser "be.ems/features/sys_user" "be.ems/features/trace" - udmuser "be.ems/features/udm_user" "be.ems/features/ue" "be.ems/lib/midware" "be.ems/lib/services" @@ -233,16 +224,6 @@ func init() { Register("PUT", trace.CustomUriTraceTask, trace.PutTraceTaskToNF, nil) Register("DELETE", trace.CustomUriTraceTask, trace.DeleteTraceTaskToNF, nil) - // 网元发送执行 pcap抓包任务 - Register("POST", trace.UriTcpdumpTask, trace.TcpdumpNeTask, midware.LogOperate(collectlogs.OptionNew("Packet Capturing Task", collectlogs.BUSINESS_TYPE_INSERT))) - Register("POST", trace.CustomUriTcpdumpTask, trace.TcpdumpNeTask, midware.LogOperate(collectlogs.OptionNew("Packet Capturing Task", collectlogs.BUSINESS_TYPE_INSERT))) - // 网元发送执行 抓包下载pcap文件 - Register("POST", trace.UriTcpdumpPcapDownload, trace.TcpdumpPcapDownload, midware.LogOperate(collectlogs.OptionNew("Packet Capturing Task", collectlogs.BUSINESS_TYPE_EXPORT))) - Register("POST", trace.CustomUriTcpdumpPcapDownload, trace.TcpdumpPcapDownload, midware.LogOperate(collectlogs.OptionNew("Packet Capturing Task", collectlogs.BUSINESS_TYPE_EXPORT))) - // 网元发送执行UPF pcap抓包 - Register("POST", trace.UriTcpdumpNeUPFTask, trace.TcpdumpNeUPFTask, midware.LogOperate(collectlogs.OptionNew("Packet Capturing Task", collectlogs.BUSINESS_TYPE_INSERT))) - Register("POST", trace.CustomUriTcpdumpNeUPFTask, trace.TcpdumpNeUPFTask, midware.LogOperate(collectlogs.OptionNew("Packet Capturing Task", collectlogs.BUSINESS_TYPE_INSERT))) - // file management Register("POST", file.UriFile, file.UploadFile, midware.LogOperate(collectlogs.OptionNew("File", collectlogs.BUSINESS_TYPE_INSERT))) Register("GET", file.UriFile, file.DownloadFile, midware.LogOperate(collectlogs.OptionNew("File", collectlogs.BUSINESS_TYPE_OTHER))) @@ -303,20 +284,9 @@ func init() { Register("POST", cdr.UriCDREvent, cdr.PostCDREventFromNF, nil) Register("POST", cdr.CustomUriCDREvent, cdr.PostCDREventFromNF, nil) - // UE event + // UE event AMF上报的UE事件, 无前缀给到Gin处理 //Register("POST", event.UriUEEvent, event.PostUEEventFromAMF, nil) - // 进程网络 - Register("GET", psnet.UriWs, psnet.ProcessWs, nil) - Register("POST", psnet.UriStop, psnet.StopProcess, nil) - Register("POST", psnet.UriPing, psnet.Ping, nil) - - // 主机CPU内存监控 - Register("POST", monitor.UriLoad, monitor.LoadMonitor, nil) - Register("GET", monitor.UriNetOpt, monitor.Netoptions, nil) - Register("GET", monitor.UriIPAddr, monitor.IPAddr, nil) - Register("GET", monitor.UriIoOpt, monitor.Iooptions, nil) - // 文件资源 Register("GET", file.UriDiskList, file.DiskList, nil) Register("POST", file.UriListFiles, file.ListFiles, nil) @@ -337,56 +307,6 @@ func init() { Register("POST", lm.ExtBackupDataUri, lm.ExtDatabaseBackupData, nil) Register("POST", lm.CustomExtBackupDataUri, lm.ExtDatabaseBackupData, nil) - // 系统登录 - Register("POST", security.UriLogin, security.LoginOMC, nil) - Register("POST", security.CustomUriLogin, security.LoginOMC, nil) - - // 获取验证码 - Register("GET", security.UriCaptchaImage, security.CaptchaImage, nil) - Register("GET", security.CustomUriCaptchaImage, security.CaptchaImage, nil) - - // 登录用户信息 - Register("GET", security.UriUserInfo, security.UserInfo, midware.Authorize(nil)) - Register("GET", security.CustomUriUserInfo, security.UserInfo, midware.Authorize(nil)) - - // 登录用户路由信息 - Register("GET", security.UriRouters, security.Routers, midware.Authorize(nil)) - Register("GET", security.CustomUriRouters, security.Routers, midware.Authorize(nil)) - - // 参数配置信息接口添加到路由 - for _, v := range sysconfig.Routers() { - Register(v.Method, v.Pattern, v.Handler, v.Middleware) - } - - // 字典类型信息接口添加到路由 - for _, v := range sysdicttype.Routers() { - Register(v.Method, v.Pattern, v.Handler, v.Middleware) - } - - // 字典类型对应的字典数据信息接口添加到路由 - for _, v := range sysdictdata.Routers() { - Register(v.Method, v.Pattern, v.Handler, v.Middleware) - } - - // 菜单接口添加到路由 - for _, v := range sysmenu.Routers() { - Register(v.Method, v.Pattern, v.Handler, v.Middleware) - } - - // 角色接口添加到路由 - for _, v := range sysrole.Routers() { - Register(v.Method, v.Pattern, v.Handler, v.Middleware) - } - - // 用户接口添加到路由 - for _, v := range sysuser.Routers() { - Register(v.Method, v.Pattern, v.Handler, v.Middleware) - } - - // UDM 用户信息接口添加到路由 - for _, v := range udmuser.Routers() { - Register(v.Method, v.Pattern, v.Handler, v.Middleware) - } } // To resolv rest POST/PUT/DELETE/PATCH cross domain From fe09fa4ed5ff5afd0c0e3d4efdbecd004e1d87d6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 17 May 2024 18:06:01 +0800 Subject: [PATCH 103/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E6=A3=80=E6=9F=A5=E7=8A=B6=E6=80=81=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E4=B8=8D=E6=9B=B4=E6=96=B0=E8=AE=B8=E5=8F=AF=E8=AF=81=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/controller/ne_license.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/modules/network_element/controller/ne_license.go b/src/modules/network_element/controller/ne_license.go index 9c171e8e..d503b8db 100644 --- a/src/modules/network_element/controller/ne_license.go +++ b/src/modules/network_element/controller/ne_license.go @@ -199,19 +199,17 @@ func (s *NeLicenseController) State(c *gin.Context) { return } if neState, err := neService.NeState(neInfo); err == nil { + neLicense.Status = "1" neLicense.SerialNum = fmt.Sprint(neState["sn"]) neLicense.ExpiryDate = fmt.Sprint(neState["expire"]) - neLicense.Status = "1" + code, licensePath := s.neLicenseService.ReadLicenseInfo(neLicense) + neLicense.ActivationRequestCode = code + neLicense.LicensePath = licensePath } else { - neLicense.SerialNum = "-" - neLicense.ExpiryDate = "-" neLicense.Status = "0" } // 更新授权信息 - code, licensePath := s.neLicenseService.ReadLicenseInfo(neLicense) - neLicense.ActivationRequestCode = code - neLicense.LicensePath = licensePath neLicense.UpdateBy = ctx.LoginUserToUserName(c) s.neLicenseService.Update(neLicense) From fa8058317e86dba8848450d3ade1f2a0bc0b0935 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 17 May 2024 18:06:28 +0800 Subject: [PATCH 104/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=9F=A5=E8=AF=A2=E6=94=AF=E6=8C=81=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/repository/ne_version.impl.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/network_element/repository/ne_version.impl.go b/src/modules/network_element/repository/ne_version.impl.go index de883acb..ad2c1440 100644 --- a/src/modules/network_element/repository/ne_version.impl.go +++ b/src/modules/network_element/repository/ne_version.impl.go @@ -148,6 +148,10 @@ func (r *NeVersionImpl) SelectList(neVersion model.NeVersion) []model.NeVersion conditions = append(conditions, "path like concat(?, '%')") params = append(params, neVersion.Path) } + if neVersion.Status != "" { + conditions = append(conditions, "status = ?") + params = append(params, neVersion.Status) + } // 构建查询条件语句 whereSql := "" From c7b0b1f471db30d949872747aae0ecce717eb826 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 17 May 2024 18:07:04 +0800 Subject: [PATCH 105/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=9B=B4?= =?UTF-8?q?=E8=BF=9E=E6=9F=A5=E8=AF=A2=E7=8A=B6=E6=80=81=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E8=B6=85=E6=97=B6300ms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_direct_link.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/network_element/service/ne_direct_link.go b/src/modules/network_element/service/ne_direct_link.go index 20cb1ec4..d19ffb36 100644 --- a/src/modules/network_element/service/ne_direct_link.go +++ b/src/modules/network_element/service/ne_direct_link.go @@ -15,7 +15,7 @@ import ( func NeState(neInfo model.NeInfo) (map[string]any, error) { // 网元状态 neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType)) - resBytes, err := fetch.Get(neUrl, nil, 250) + resBytes, err := fetch.Get(neUrl, nil, 300) if err != nil { logger.Warnf("NeState %s", err.Error()) return nil, err From 4a40e3bd71dff2de9745930ea7096e19a73c9b0b Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 18 May 2024 10:45:32 +0800 Subject: [PATCH 106/130] =?UTF-8?q?fix:=20=E6=97=A5=E5=BF=97=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BF=9D=E7=95=99=E4=B8=83=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/config/config/config.default.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/framework/config/config/config.default.yaml b/src/framework/config/config/config.default.yaml index 44daa561..641b79bb 100644 --- a/src/framework/config/config/config.default.yaml +++ b/src/framework/config/config/config.default.yaml @@ -15,7 +15,7 @@ logger: fileDir: "/var/log" fileName: "omc.log" level: 2 # 日志记录的等级 0:silent<1:info<2:warn<3:error - maxDay: 180 # 日志会保留 180 天 + maxDay: 7 # 日志会保留 180 天 maxSize: 10 # 调整按 10MB 大小的切割 # 静态文件配置, 相对项目根路径或填绝对路径 From 4b91db0b8abbf294680a4ab3de84fdccbdad0047 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 18 May 2024 15:38:18 +0800 Subject: [PATCH 107/130] Merge remote-tracking branch 'origin/main' into lichang --- go.mod | 1 + 1 file changed, 1 insertion(+) diff --git a/go.mod b/go.mod index 1ec5c2ed..797feebf 100644 --- a/go.mod +++ b/go.mod @@ -50,6 +50,7 @@ require ( github.com/creack/pty v1.1.9 // indirect github.com/go-admin-team/go-admin-core v1.3.12-0.20221121065133-27b7dbe27a8f // indirect github.com/go-gsm/charset v1.0.0 // indirect + github.com/kr/fs v0.1.0 // indirect github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.48.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect From 543056724209b95b73a2df1f2f460af3780caa5d Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 24 May 2024 10:01:56 +0800 Subject: [PATCH 108/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=9B=B4?= =?UTF-8?q?=E8=BF=9E=E8=8E=B7=E5=8F=96=E7=8A=B6=E6=80=81=E8=B6=85=E6=97=B6?= =?UTF-8?q?1s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_direct_link.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/service/ne_direct_link.go b/src/modules/network_element/service/ne_direct_link.go index d19ffb36..7d5afaf0 100644 --- a/src/modules/network_element/service/ne_direct_link.go +++ b/src/modules/network_element/service/ne_direct_link.go @@ -15,7 +15,7 @@ import ( func NeState(neInfo model.NeInfo) (map[string]any, error) { // 网元状态 neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType)) - resBytes, err := fetch.Get(neUrl, nil, 300) + resBytes, err := fetch.Get(neUrl, nil, 1000) if err != nil { logger.Warnf("NeState %s", err.Error()) return nil, err @@ -62,7 +62,7 @@ func NeConfigOMC(neInfo model.NeInfo) (map[string]any, error) { var resData map[string]any if err != nil { status := err.Error() - logger.Warnf("NeConfigOMC %s", status) + logger.Warnf("NeConfigOMC %s Put \"%s\"", status, neUrl) if strings.HasPrefix(status, "201") || strings.HasPrefix(status, "204") { return resData, nil } From 511c2bbceb167eed7ffd01a87c605553c27e7ee3 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 24 May 2024 10:02:31 +0800 Subject: [PATCH 109/130] =?UTF-8?q?style:=20=E7=BD=91=E5=85=83=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E6=94=B9=E4=B8=BA=E7=BD=91=E5=85=83=E8=AE=B8=E5=8F=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 6 +++--- database/upgrade/upg_sys_dict_data1_i18n_zh.sql | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index dc08f664..6c6c59cb 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -641,13 +641,13 @@ INSERT INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '-' INSERT INTO `sys_dict_data` VALUES (2115, 2115, 'dictType.ne_info_status', '网元信息状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2116, 2116, 'menu.ne.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2117, 2117, 'log.operate.title.neConfig', '网元参数配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2118, 2118, 'menu.config.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2119, 2119, 'log.operate.title.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2118, 2118, 'menu.config.neLicense', '网元许可', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2119, 2119, 'log.operate.title.neLicense', '网元许可', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2120, 2120, 'menu.config.neSoftware', '网元软件包', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2121, 2121, 'log.operate.title.neSoftware', '网元软件包', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2122, 2122, 'log.operate.title.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2123, 2123, 'menu.config.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2124, 2124, 'dictType.ne_license_status', '网元授权状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2124, 2124, 'dictType.ne_license_status', '网元许可状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2125, 2125, 'dictData.ne_license_status.0', '无效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2126, 2126, 'dictData.ne_license_status.1', '有效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2127, 2127, 'menu.dashboard.mocn', 'MOCN', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index e7b0b9c8..4e83140a 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -632,13 +632,13 @@ REPLACE INTO `sys_dict_data` VALUES (2114, 2114, 'dictData.ne_info_status.3', '- REPLACE INTO `sys_dict_data` VALUES (2115, 2115, 'dictType.ne_info_status', '网元信息状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2116, 2116, 'menu.ne.neQuickSetup', '网元快速安装', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2117, 2117, 'log.operate.title.neConfig', '网元参数配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2118, 2118, 'menu.config.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2119, 2119, 'log.operate.title.neLicense', '网元授权', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2118, 2118, 'menu.config.neLicense', '网元许可', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2119, 2119, 'log.operate.title.neLicense', '网元许可', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2120, 2120, 'menu.config.neSoftware', '网元软件包', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2121, 2121, 'log.operate.title.neSoftware', '网元软件包', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2122, 2122, 'log.operate.title.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2123, 2123, 'menu.config.neVersion', '网元版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2124, 2124, 'dictType.ne_license_status', '网元授权状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2124, 2124, 'dictType.ne_license_status', '网元许可状态', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2125, 2125, 'dictData.ne_license_status.0', '无效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2126, 2126, 'dictData.ne_license_status.1', '有效', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2127, 2127, 'menu.dashboard.mocn', 'MOCN', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); From 86525bac3715f1e479a481d34887d64b5be58918 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 24 May 2024 20:58:24 +0800 Subject: [PATCH 110/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85=E5=91=BD=E4=BB=A4=E5=8F=82=E8=80=83?= =?UTF-8?q?=E7=BD=91=E5=85=83=E8=84=9A=E6=9C=AC=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/service/ne_info.impl.go | 55 ++++++++---- .../service/ne_version.impl.go | 87 ++++++++++++++----- 2 files changed, 105 insertions(+), 37 deletions(-) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 99ff0574..a940564f 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -652,9 +652,16 @@ func (r *NeInfoImpl) neConfPara5GDataConvert(content map[string]any) map[string] mcc := "460" mnc := "01" + mncDomain := "001" if plmnId, plmnIdOk := basic["plmnId"].(map[string]any); plmnIdOk { mcc = plmnId["mcc"].(string) mnc = plmnId["mnc"].(string) + // If a user input two digit MNC, add a leading zero + if len(mnc) == 2 { + mncDomain = fmt.Sprintf("0%s", mnc) + } else { + mncDomain = mnc + } } sst := "1" @@ -677,29 +684,43 @@ func (r *NeInfoImpl) neConfPara5GDataConvert(content map[string]any) map[string] ueIPAmdMask := external["ue_pool"].(string) ueArr := strings.Split(ueIPAmdMask, "/") ueIP := ueArr[0] + ueCicr := ueArr[1] ueMask := parse.ConvertIPMask(parse.Number(ueArr[1])) return map[string]string{ // basic - "TAC": basic["tac"].(string), - "MCC": mcc, - "MNC": mnc, - "SST": sst, - "SD": sd, - "DNN_DATA": basic["dnn_data"].(string), - "DNN_IMS": basic["dnn_ims"].(string), + "TAC": basic["tac"].(string), + "MCC": mcc, + "MNC": mnc, + "MNC_DOMAIN": mncDomain, + "SST": sst, + "SD": sd, + "DNN_DATA": basic["dnn_data"].(string), + "DNN_IMS": basic["dnn_ims"].(string), // external - "N2_IP": external["amfn2_ip"].(string), - "UE_POOL": external["ue_pool"].(string), - "UE_IP": ueIP, - "UE_MASK": ueMask, - "N3_IP": n3IP, - "N3_MASK": n3Mask, - "N3_GW": external["upfn3_gw"].(string), - "N6_IP": n6IP, - "N6_MASK": n6Mask, - "N6_GW": external["upfn6_gw"].(string), + "N2_IP": external["amfn2_ip"].(string), + "UE_POOL": external["ue_pool"].(string), + "UE_IP": ueIP, + "UE_MASK": ueMask, + "UE_CIDR": ueCicr, + "UPF_TYPE": "LightUPF", // StandardUPF LightUPF + "N3_IP": n3IP, + "N3_MASK": n3Mask, + "N3_GW": external["upfn3_gw"].(string), + "N3_PCI": "0000:00:00.0", + "N3_MAC": "00:00:00:00:00:00", + "N6_IP": n6IP, + "N6_MASK": n6Mask, + "N6_GW": external["upfn6_gw"].(string), + "N6_PCI": "0000:00:00.0", + "N6_MAC": "00:00:00:00:00:00", + + "SIP_IP": "192.168.8.110", + + "S1_MMEIP": "192.168.8.220", + "S11_MMEIP": "172.16.5.220", + "S10_MMEIP": "172.16.5.221", // sbi "OMC_IP": sbi["omc_ip"].(string), diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index d331ce4b..d04e7873 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -174,11 +174,32 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") cmdStrArr = append(cmdStrArr, "sudo ims-stop || true && sudo ims-start \n") // 公网 PLMN地址 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", para5GData["N2_IP"], para5GData["MCC"], para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", para5GData["SIP_IP"], para5GData["MCC"], para5GData["MNC"])) // 内网 服务地址 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", para5GData["IMS_IP"])) // IWF连接PCF服务 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", para5GData["PCF_IP"])) + // HOST + mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"]) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ims' /etc/hosts || echo '%s ims' | sudo tee -a /etc/hosts \n", para5GData["IMS_IP"], para5GData["IMS_IP"])) + hssHost := fmt.Sprintf("%s hss.ims.%s.3gppnetwork.org ims", para5GData["UDM_IP"], mnc_mcc) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", hssHost, hssHost)) + pcrfHost := fmt.Sprintf("%s pcrf.epc.%s.3gppnetwork.org ims\n", para5GData["IMS_IP"], mnc_mcc) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcrfHost, pcrfHost)) + imsOrgHost := fmt.Sprintf("ims.%s.3gppnetwork.org", mnc_mcc) + imsHost := fmt.Sprintf("%s %s", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", imsHost, imsHost)) + pcscfHost := fmt.Sprintf("%s pcscf.%s", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcscfHost, pcscfHost)) + icscfHost := fmt.Sprintf("%s icscf.%s", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", icscfHost, icscfHost)) + scscfHost := fmt.Sprintf("%s scscf.%s", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", scscfHost, scscfHost)) + mmtelHost := fmt.Sprintf("%s mmtel.%s", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", mmtelHost, mmtelHost)) + smsHost := fmt.Sprintf("%s sms.%s", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", smsHost, smsHost)) + // 30s后停止服务 cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") } else { @@ -209,6 +230,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.200/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["LMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NEF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- internet/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s amf' /etc/hosts || echo '%s amf' | sudo tee -a /etc/hosts \n", para5GData["AMF_IP"], para5GData["AMF_IP"])) } // AUSF配置修改 if neTypeLower == "ausf" { @@ -218,6 +240,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["NRF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ausf' /etc/hosts || echo '%s ausf' | sudo tee -a /etc/hosts \n", para5GData["AUSF_IP"], para5GData["AUSF_IP"])) } // UDM配置修改 if neTypeLower == "udm" { @@ -234,9 +257,9 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC"], para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["MNC"], para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/udm/scscfSet.yaml \n", para5GData["MNC"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/scscfSet.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/nssai.yaml \n", para5GData["SST"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SST"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/nssai.yaml \n", para5GData["SD"])) @@ -245,12 +268,14 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_IMS"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_DATA"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_IMS"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.18.81/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.18.81/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["ADB_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s udm' /etc/hosts || echo '%s udm' | sudo tee -a /etc/hosts \n", para5GData["UDM_IP"], para5GData["UDM_IP"])) } // SMF配置修改 if neTypeLower == "smf" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/smf/default/smf_conf.yaml /usr/local/etc/smf/smf_conf.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["N2_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SIP_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["AMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UDM_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SMF_IP"])) @@ -258,6 +283,8 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["NRF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UPF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|10.2.1.0/24|%s|g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UE_POOL"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s smf' /etc/hosts || echo '%s smf' | sudo tee -a /etc/hosts \n", para5GData["SMF_IP"], para5GData["SMF_IP"])) } // PCF配置修改 if neTypeLower == "pcf" { @@ -269,7 +296,8 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NEF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s pcf' /etc/hosts || echo '%s pcf' | sudo tee -a /etc/hosts \n", para5GData["PCF_IP"], para5GData["PCF_IP"])) } // UPF配置修改 @@ -278,20 +306,32 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", para5GData["UPF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/localhost/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_IP"])) - // UE N3 N6 根据版本修改 + // UE cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"])) + // N3 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MASK"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_GW"])) - // 标准版 - // cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"])) - // cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) - // cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_PCI"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MAC"])) + // 标准版 N6 + if para5GData["UPF_IP"] == "StandardUPF" { + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_PCI"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MAC"])) + // 路由 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo ip route add '%s/%s' via '%s' \n", para5GData["UE_IP"], para5GData["UE_CIDR"], para5GData["N6_IP"])) + } // 轻量版 - cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") + if para5GData["UPF_IP"] == "LightUPF" { + cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") + } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upf' /etc/hosts || echo '%s upf' | sudo tee -a /etc/hosts \n", para5GData["UPF_IP"], para5GData["UPF_IP"])) } // NRF配置修改 @@ -300,6 +340,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["NRF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nrf' /etc/hosts || echo '%s nrf' | sudo tee -a /etc/hosts \n", para5GData["NRF_IP"], para5GData["NRF_IP"])) } // NSSF配置修改 if neTypeLower == "nssf" { @@ -308,24 +349,29 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NRF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nssf' /etc/hosts || echo '%s nssf' | sudo tee -a /etc/hosts \n", para5GData["NSSF_IP"], para5GData["NSSF_IP"])) } - // MME配置修改 + // MME配置修改 - 4G if neTypeLower == "mme" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/mme/default/mme.conf /usr/local/etc/mme/mme.conf \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/epsApn.yaml /usr/local/etc/udm/epsApn.yaml \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["AMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["SMF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220/20|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["N2_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["MME_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.221/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["MME_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc0%s.mcc%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MNC"], para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220/20|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S1_MMEIP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S1_MMEIP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S11_MMEIP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.221/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S10_MMEIP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/\"00101\"/\"%s%s\"/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC=\"001\" ; MNC=\"01\";/MCC=\"%s\" ; MNC=\"%s\";/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = \"1\";/TAC = \"%s\";/g\" /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = 1;/TAC = %s;/g\" /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_DATA"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/ims/%s/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"])) // SMF开启 cmdStrArr = append(cmdStrArr, "sudo sed -i \"/^ *gxcfg:/,/^ *[^ ]/{s/enable: false/enable: true/;b};\" /usr/local/etc/smf/smf_conf.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s mme' /etc/hosts || echo '%s mme' | sudo tee -a /etc/hosts \n", para5GData["S11_MMEIP"], para5GData["S11_MMEIP"])) + } // N3IWF配置修改 if neTypeLower == "n3iwf" { @@ -339,6 +385,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.22/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N2_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N6_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n3iwf' /etc/hosts || echo '%s n3iwf' | sudo tee -a /etc/hosts \n", para5GData["N3IWF_IP"], para5GData["N3IWF_IP"])) } cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) From 6baae1862acb2f4c1250762d0325cf66aa0d27b1 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 24 May 2024 21:09:46 +0800 Subject: [PATCH 111/130] =?UTF-8?q?fix:=20=E5=8D=87=E7=BA=A7sql=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E6=9B=BF=E6=8D=A2=E7=B3=BB=E7=BB=9F=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E7=89=88=E6=9D=83=E4=BF=A1=E6=81=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/upgrade/upg_sys_dict_data1_i18n_zh.sql | 4 ++-- database/upgrade/upg_sys_dict_data2_i18n_en.sql | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index 4e83140a..291e33b1 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -315,8 +315,8 @@ REPLACE INTO `sys_dict_data` VALUES (1656, 1656, 'config..export.key', '参数 REPLACE INTO `sys_dict_data` VALUES (1657, 1657, 'config..export.value', '参数键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1658, 1658, 'config..export.type', '系统内置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1659, 1659, 'config..export.remark', '参数说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1660, 1660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1661, 1661, 'config.sys.copyrightValue', 'Copyright ©2023 千通科技', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT IGNORE INTO `sys_dict_data` VALUES (1660, 1660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT IGNORE INTO `sys_dict_data` VALUES (1661, 1661, 'config.sys.copyrightValue', 'Copyright ©2023 千通科技', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1662, 1662, 'config.noData', '没有可访问参数配置数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1663, 1663, 'config.errKey', '无效 key', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1664, 1664, 'config.errValueEq', '变更状态与旧值相等!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 7ef5bdd0..365cadd8 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -309,8 +309,8 @@ REPLACE INTO `sys_dict_data` VALUES (3656, 3656, 'config..export.key', 'Config K REPLACE INTO `sys_dict_data` VALUES (3657, 3657, 'config..export.value', 'Config Value', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3658, 3658, 'config..export.type', 'Built In', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3659, 3659, 'config..export.remark', 'Config Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3660, 3660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3661, 3661, 'config.sys.copyrightValue', 'Copyright ©2023 AGrandTech', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT IGNORE INTO `sys_dict_data` VALUES (3660, 3660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT IGNORE INTO `sys_dict_data` VALUES (3661, 3661, 'config.sys.copyrightValue', 'Copyright ©2023 AGrandTech', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3662, 3662, 'config.noData', 'No parameter configuration data is accessible!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3663, 3663, 'config.errKey', 'Invalid key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3664, 3664, 'config.errValueEq', 'Change state is equal to the old value!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); From 4ac4fb55dc7b96778bf097cda522063cad50c06a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 27 May 2024 10:29:04 +0800 Subject: [PATCH 112/130] =?UTF-8?q?fix:=20mkdir=E7=9B=AE=E5=BD=95=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=BB=9F=E4=B8=80775?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/logger/writer.go | 2 +- src/framework/utils/file/csv.go | 2 +- src/framework/utils/file/excel.go | 2 +- src/framework/utils/file/file.go | 2 +- src/framework/utils/file/json.go | 4 ++-- src/framework/utils/file/txt.go | 2 +- src/framework/utils/file/utils.go | 4 ++-- src/framework/utils/parse/parse.go | 2 +- src/framework/utils/ssh/scp.go | 2 +- src/framework/utils/ssh/ssh.go | 4 ++-- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/framework/logger/writer.go b/src/framework/logger/writer.go index 32096866..d535f643 100644 --- a/src/framework/logger/writer.go +++ b/src/framework/logger/writer.go @@ -34,7 +34,7 @@ const ( // NewLogger 实例日志器对象 func NewLogger(env, fileDir, fileName string, level, maxDay, maxSize int) (*Logger, error) { logFilePath := filepath.Join(fileDir, fileName) - if err := os.MkdirAll(filepath.Dir(logFilePath), 0750); err != nil { + if err := os.MkdirAll(filepath.Dir(logFilePath), 0775); err != nil { return nil, fmt.Errorf("failed to mkdir logger dir: %v", err) } fileHandle, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) diff --git a/src/framework/utils/file/csv.go b/src/framework/utils/file/csv.go index 6591ff86..401f2ec8 100644 --- a/src/framework/utils/file/csv.go +++ b/src/framework/utils/file/csv.go @@ -20,7 +20,7 @@ func WriterFileCSV(data [][]string, filePath string) error { dirPath := filepath.Dir(filePath) // 确保文件夹路径存在 - err := os.MkdirAll(dirPath, os.ModePerm) + err := os.MkdirAll(dirPath, 0775) if err != nil { logger.Errorf("MkdirAll dir %v", err) } diff --git a/src/framework/utils/file/excel.go b/src/framework/utils/file/excel.go index 74416800..69b7aa53 100644 --- a/src/framework/utils/file/excel.go +++ b/src/framework/utils/file/excel.go @@ -142,7 +142,7 @@ func WriteSheet(headerCells map[string]string, dataCells []map[string]any, fileN saveFilePath := filepath.Join(dir, filePath, fileName) // 创建文件目录 - if err := os.MkdirAll(filepath.Dir(saveFilePath), 0750); err != nil { + if err := os.MkdirAll(filepath.Dir(saveFilePath), 0775); err != nil { return "", fmt.Errorf("failed to create save file %v", err) } diff --git a/src/framework/utils/file/file.go b/src/framework/utils/file/file.go index 8470fc98..d1f90f01 100644 --- a/src/framework/utils/file/file.go +++ b/src/framework/utils/file/file.go @@ -312,7 +312,7 @@ func CopyUploadFile(filePath, dst string) error { } defer src.Close() - if err := os.MkdirAll(filepath.Dir(dst), 0750); err != nil { + if err := os.MkdirAll(filepath.Dir(dst), 0775); err != nil { return err } diff --git a/src/framework/utils/file/json.go b/src/framework/utils/file/json.go index 88217c93..4421c2bf 100644 --- a/src/framework/utils/file/json.go +++ b/src/framework/utils/file/json.go @@ -16,7 +16,7 @@ func WriterFileJSON(data any, filePath string) error { dirPath := filepath.Dir(filePath) // 确保文件夹路径存在 - err := os.MkdirAll(dirPath, os.ModePerm) + err := os.MkdirAll(dirPath, 0775) if err != nil { logger.Errorf("CreateFile MkdirAll %v", err) } @@ -46,7 +46,7 @@ func WriterFileJSONLine(data []any, filePath string) error { dirPath := filepath.Dir(filePath) // 确保文件夹路径存在 - err := os.MkdirAll(dirPath, os.ModePerm) + err := os.MkdirAll(dirPath, 0775) if err != nil { logger.Errorf("CreateFile MkdirAll %v", err) } diff --git a/src/framework/utils/file/txt.go b/src/framework/utils/file/txt.go index d509fd82..e468a191 100644 --- a/src/framework/utils/file/txt.go +++ b/src/framework/utils/file/txt.go @@ -22,7 +22,7 @@ func WriterFileTXT(data [][]string, sep string, filePath string) error { dirPath := filepath.Dir(filePath) // 确保文件夹路径存在 - err := os.MkdirAll(dirPath, os.ModePerm) + err := os.MkdirAll(dirPath, 0775) if err != nil { logger.Errorf("CreateFile MkdirAll %v", err) } diff --git a/src/framework/utils/file/utils.go b/src/framework/utils/file/utils.go index fbb05fe8..eccf54c3 100644 --- a/src/framework/utils/file/utils.go +++ b/src/framework/utils/file/utils.go @@ -26,7 +26,7 @@ func transferToNewFile(file *multipart.FileHeader, dst string) error { } defer src.Close() - if err = os.MkdirAll(filepath.Dir(dst), 0750); err != nil { + if err = os.MkdirAll(filepath.Dir(dst), 0775); err != nil { return err } @@ -66,7 +66,7 @@ func mergeToNewFile(dirPath string, writePath string, fileName string) error { // 写入到新路径文件 newFilePath := filepath.Join(writePath, fileName) - if err = os.MkdirAll(filepath.Dir(newFilePath), 0750); err != nil { + if err = os.MkdirAll(filepath.Dir(newFilePath), 0775); err != nil { return err } diff --git a/src/framework/utils/parse/parse.go b/src/framework/utils/parse/parse.go index 937b58f7..8eb27dcb 100644 --- a/src/framework/utils/parse/parse.go +++ b/src/framework/utils/parse/parse.go @@ -246,7 +246,7 @@ func ConvertConfigToFile(configType, filePath string, data any) error { return err } - if err := os.MkdirAll(filepath.Dir(filePath), 0750); err != nil { + if err := os.MkdirAll(filepath.Dir(filePath), 0775); err != nil { return err } return os.WriteFile(filePath, dataByte, 0644) diff --git a/src/framework/utils/ssh/scp.go b/src/framework/utils/ssh/scp.go index 8151b3a4..33beb538 100644 --- a/src/framework/utils/ssh/scp.go +++ b/src/framework/utils/ssh/scp.go @@ -28,7 +28,7 @@ func FileSCPLocalToNe(neIp, localPath, nePath string) error { // 网元NE 远程文件复制到本地文件 func FileSCPNeToLocal(neIp, nePath, localPath string) error { // 确保文件夹路径存在 - if err := os.MkdirAll(filepath.Dir(localPath), 0750); err != nil { + if err := os.MkdirAll(filepath.Dir(localPath), 0775); err != nil { logger.Errorf("FileSCPNeToLocal MkdirAll err %v", err) return err } diff --git a/src/framework/utils/ssh/ssh.go b/src/framework/utils/ssh/ssh.go index 84265bc2..eaf5c3d9 100644 --- a/src/framework/utils/ssh/ssh.go +++ b/src/framework/utils/ssh/ssh.go @@ -314,7 +314,7 @@ func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error { } // 创建本地目录 - err = os.MkdirAll(localDir, 0755) + err = os.MkdirAll(localDir, 0775) if err != nil { logger.Errorf("CopyDirRemoteToLocal failed to creating local directory %s: => %s", localDir, err.Error()) return err @@ -425,7 +425,7 @@ func (s *SSHClientSFTP) CopyFileRemoteToLocal(remotePath, localPath string) erro } defer remoteFile.Close() - if err := os.MkdirAll(filepath.Dir(localPath), 0750); err != nil { + if err := os.MkdirAll(filepath.Dir(localPath), 0775); err != nil { return err } From abfe3227f2923ad8cf4c23c32491b9dc3ccbdf03 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 27 May 2024 17:11:09 +0800 Subject: [PATCH 113/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E5=8C=85=E7=B1=BB=E5=9E=8B=E5=AD=97=E6=AE=B5=E5=8F=98?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/ne_software.sql | 18 ++++----- database/upgrade/upg_ne_software.sql | 23 +++++------ .../network_element/controller/ne_software.go | 8 ++-- .../network_element/model/ne_software.go | 2 +- .../repository/ne_software.impl.go | 39 ++++++++++++------- .../service/ne_software.impl.go | 8 ++-- 6 files changed, 54 insertions(+), 44 deletions(-) diff --git a/database/install/ne_software.sql b/database/install/ne_software.sql index 01f1d43d..839c12dd 100644 --- a/database/install/ne_software.sql +++ b/database/install/ne_software.sql @@ -10,17 +10,17 @@ DROP TABLE IF EXISTS `ne_software`; CREATE TABLE `ne_software` ( `id` int NOT NULL AUTO_INCREMENT, - `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包类型', `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包名称', - `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包路径', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包路径', `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本', - `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包说明', - `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', - `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', - `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包说明', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uk_type_name_version`(`ne_type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元软件包' ROW_FORMAT = DYNAMIC; + UNIQUE KEY `uk_type_name_version` (`type`,`name`,`version`) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元软件包'; SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_ne_software.sql b/database/upgrade/upg_ne_software.sql index fed4d7b7..b869275e 100644 --- a/database/upgrade/upg_ne_software.sql +++ b/database/upgrade/upg_ne_software.sql @@ -5,18 +5,18 @@ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- CREATE TABLE IF NOT EXISTS `ne_software` ( `id` int NOT NULL AUTO_INCREMENT, - `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包类型', `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包名称', - `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包路径', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包路径', `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本', - `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包说明', - `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', - `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', - `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间', + `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包说明', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uk_type_name_version`(`ne_type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元软件包' ROW_FORMAT = DYNAMIC; + UNIQUE KEY `uk_type_name_version` (`type`,`name`,`version`) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元软件包'; -- 20240511前旧表更新 ALTER TABLE `ne_software` COMMENT = '网元软件包'; @@ -25,15 +25,16 @@ ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `description` varchar(500) CH ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `description`; ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; -ALTER TABLE `ne_software` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型' AFTER `id`; +ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包类型' AFTER `id`; ALTER TABLE `ne_software` MODIFY COLUMN `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包路径' AFTER `name`; ALTER TABLE `ne_software` MODIFY COLUMN `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本' AFTER `path`; ALTER TABLE `ne_software` MODIFY COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; +ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `ne_type`; ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `file_name`; ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `md5_sum`; ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `status`; ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `comment`; ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `patch_time`; -ALTER TABLE `ne_software` ADD UNIQUE INDEX IF NOT EXISTS `uk_type_name_version`(`ne_type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一'; +ALTER TABLE `ne_software` ADD UNIQUE INDEX IF NOT EXISTS `uk_type_name_version`(`type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一'; SET FOREIGN_KEY_CHECKS=1; diff --git a/src/modules/network_element/controller/ne_software.go b/src/modules/network_element/controller/ne_software.go index d5658d7c..85bfeb33 100644 --- a/src/modules/network_element/controller/ne_software.go +++ b/src/modules/network_element/controller/ne_software.go @@ -71,7 +71,7 @@ func (s *NeSoftwareController) Add(c *gin.Context) { // 找到已存在的删除后重新添加 neSoftwares := s.neSoftwareService.SelectList(model.NeSoftware{ - NeType: body.NeType, + Type: body.Type, Name: body.Name, Version: body.Version, }) @@ -111,7 +111,7 @@ func (s *NeSoftwareController) Edit(c *gin.Context) { } // 检查属性值唯一 - uniqueSoftware := s.neSoftwareService.CheckUniqueTypeAndNameAndVersion(body.NeType, body.Name, body.Version, body.ID) + uniqueSoftware := s.neSoftwareService.CheckUniqueTypeAndNameAndVersion(body.Type, body.Name, body.Version, body.ID) if !uniqueSoftware { // 网元软件包操作【%s】失败,网元类型与文件名版本已存在 msg := i18n.TTemplate(language, "neSoftware.errKeyExists", map[string]any{"name": body.Name}) @@ -176,14 +176,14 @@ func (s *NeSoftwareController) NewNeVersion(c *gin.Context) { // 找到已存在的软件包信息 neSoftwares := s.neSoftwareService.SelectList(model.NeSoftware{ - NeType: body.NeType, + Type: body.Type, Name: body.Name, Version: body.Version, }) if len(neSoftwares) > 0 { neSoftware := neSoftwares[0] s.neSoftwareService.UpdateVersions(neSoftware, model.NeVersion{ - NeType: neSoftware.NeType, + NeType: neSoftware.Type, UpdateBy: ctx.LoginUserToUserName(c), }) c.JSON(200, result.Ok(nil)) diff --git a/src/modules/network_element/model/ne_software.go b/src/modules/network_element/model/ne_software.go index 3eaf9569..353e0c95 100644 --- a/src/modules/network_element/model/ne_software.go +++ b/src/modules/network_element/model/ne_software.go @@ -3,7 +3,7 @@ package model // NeSoftware 网元软件包 ne_software type NeSoftware struct { ID string `json:"id" gorm:"id"` - NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型 + Type string `json:"type" gorm:"type" binding:"required"` // 包类型 Name string `json:"name" gorm:"name" binding:"required"` // 包名称 Path string `json:"path" gorm:"path"` // 包路径 Version string `json:"version" gorm:"version" binding:"required"` // 包版本 diff --git a/src/modules/network_element/repository/ne_software.impl.go b/src/modules/network_element/repository/ne_software.impl.go index 133dd420..edb520c1 100644 --- a/src/modules/network_element/repository/ne_software.impl.go +++ b/src/modules/network_element/repository/ne_software.impl.go @@ -15,12 +15,12 @@ import ( // 实例化数据层 NewNeSoftware 结构体 var NewNeSoftwareImpl = &NeSoftwareImpl{ selectSql: `select - id, ne_type, name, path, version, description, create_by, create_time, update_by, update_time + id, type, name, path, version, description, create_by, create_time, update_by, update_time from ne_software`, resultMap: map[string]string{ "id": "ID", - "ne_type": "NeType", + "type": "Type", "name": "Name", "path": "Path", "version": "Version", @@ -60,9 +60,18 @@ func (r *NeSoftwareImpl) SelectPage(query map[string]any) map[string]any { // 查询条件拼接 var conditions []string var params []any - if v, ok := query["neType"]; ok && v != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, strings.Trim(v.(string), " ")) + if v, ok := query["type"]; ok && v != "" { + softwareType := v.(string) + if strings.Contains(softwareType, ",") { + softwareTypeArr := strings.Split(softwareType, ",") + placeholder := repo.KeyPlaceholderByQuery(len(softwareTypeArr)) + conditions = append(conditions, "type in ("+placeholder+")") + parameters := repo.ConvertIdsSlice(softwareTypeArr) + params = append(params, parameters...) + } else { + conditions = append(conditions, "type = ?") + params = append(params, strings.Trim(softwareType, " ")) + } } if v, ok := query["name"]; ok && v != "" { conditions = append(conditions, "name like concat(?, '%')") @@ -122,9 +131,9 @@ func (r *NeSoftwareImpl) SelectList(neSoftware model.NeSoftware) []model.NeSoftw // 查询条件拼接 var conditions []string var params []any - if neSoftware.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, neSoftware.NeType) + if neSoftware.Type != "" { + conditions = append(conditions, "type = ?") + params = append(params, neSoftware.Type) } if neSoftware.Path != "" { conditions = append(conditions, "path = ?") @@ -175,9 +184,9 @@ func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neSoftware model.NeSof // 查询条件拼接 var conditions []string var params []any - if neSoftware.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, neSoftware.NeType) + if neSoftware.Type != "" { + conditions = append(conditions, "type = ?") + params = append(params, neSoftware.Type) } if neSoftware.Version != "" { conditions = append(conditions, "version = ?") @@ -213,8 +222,8 @@ func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neSoftware model.NeSof func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string { // 参数拼接 params := make(map[string]any) - if neSoftware.NeType != "" { - params["ne_type"] = neSoftware.NeType + if neSoftware.Type != "" { + params["type"] = neSoftware.Type } if neSoftware.Name != "" { params["name"] = neSoftware.Name @@ -262,8 +271,8 @@ func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string { func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 { // 参数拼接 params := make(map[string]any) - if neSoftware.NeType != "" { - params["ne_type"] = neSoftware.NeType + if neSoftware.Type != "" { + params["type"] = neSoftware.Type } if neSoftware.Name != "" { params["name"] = neSoftware.Name diff --git a/src/modules/network_element/service/ne_software.impl.go b/src/modules/network_element/service/ne_software.impl.go index 8ac52094..a1e23929 100644 --- a/src/modules/network_element/service/ne_software.impl.go +++ b/src/modules/network_element/service/ne_software.impl.go @@ -47,7 +47,7 @@ func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string { inserId := r.neSoftwareRepository.Insert(neSoftware) if inserId != "" { // 更新同类型的新包版本 - neVersions := NewNeVersionImpl.SelectList(model.NeVersion{NeType: neSoftware.NeType}) + neVersions := NewNeVersionImpl.SelectList(model.NeVersion{NeType: neSoftware.Type}) if len(neVersions) > 0 { for _, neVersion := range neVersions { neVersion.NewName = neSoftware.Name @@ -68,7 +68,7 @@ func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 { if rows > 0 { // 更新同类型的新包版本 neVersions := NewNeVersionImpl.SelectList(model.NeVersion{ - NeType: neSoftware.NeType, + NeType: neSoftware.Type, Status: "3", }) if len(neVersions) > 0 { @@ -112,9 +112,9 @@ func (r *NeSoftwareImpl) DeleteByIds(ids []string) (int64, error) { } // CheckUniqueTypeAndNameAndVersion 校验网元类型和文件名版本是否唯一 -func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neType, name, version, id string) bool { +func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(softwareType, name, version, id string) bool { uniqueId := r.neSoftwareRepository.CheckUniqueTypeAndNameAndVersion(model.NeSoftware{ - NeType: neType, + Type: softwareType, Name: name, Version: version, }) From 83192c3172c50df276a6ed0cee3d03028fc0a62e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 27 May 2024 17:11:42 +0800 Subject: [PATCH 114/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85=E6=B3=A8=E9=87=8A30s=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_version.impl.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index d04e7873..7576ed5d 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -201,7 +201,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", smsHost, smsHost)) // 30s后停止服务 - cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") + // cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") } else { cmdStrArr = append(cmdStrArr, "sudo ims-stop \n") cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") @@ -390,7 +390,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) // 30s后停止服务 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) + // cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) } else { cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s stop \n", neTypeLower)) cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") From 57a18656dfc0b207191a15ec7eeb10f41e976d5f Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 27 May 2024 19:02:33 +0800 Subject: [PATCH 115/130] =?UTF-8?q?revt:=20=E5=9B=9E=E9=80=80=E7=BD=91?= =?UTF-8?q?=E5=85=83=E8=BD=AF=E4=BB=B6=E5=8C=85=E7=B1=BB=E5=9E=8B=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/ne_software.sql | 8 ++--- database/upgrade/upg_ne_software.sql | 11 ++++--- .../network_element/controller/ne_software.go | 8 ++--- .../network_element/model/ne_software.go | 2 +- .../repository/ne_software.impl.go | 30 +++++++++---------- .../service/ne_software.impl.go | 8 ++--- 6 files changed, 33 insertions(+), 34 deletions(-) diff --git a/database/install/ne_software.sql b/database/install/ne_software.sql index 839c12dd..aa89eb93 100644 --- a/database/install/ne_software.sql +++ b/database/install/ne_software.sql @@ -8,11 +8,11 @@ SET FOREIGN_KEY_CHECKS = 0; DROP TABLE IF EXISTS `ne_software`; -CREATE TABLE `ne_software` ( +CREATE TABLE `ne_software` ( `id` int NOT NULL AUTO_INCREMENT, - `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包类型', + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包名称', - `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包路径', + `path` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包路径', `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本', `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包说明', `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', @@ -20,7 +20,7 @@ CREATE TABLE `ne_software` ( `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', `update_time` bigint DEFAULT '0' COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_type_name_version` (`type`,`name`,`version`) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' + UNIQUE KEY `uk_type_name_version` (`ne_type`,`name`,`version`) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元软件包'; SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_ne_software.sql b/database/upgrade/upg_ne_software.sql index b869275e..5406340b 100644 --- a/database/upgrade/upg_ne_software.sql +++ b/database/upgrade/upg_ne_software.sql @@ -5,9 +5,9 @@ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- CREATE TABLE IF NOT EXISTS `ne_software` ( `id` int NOT NULL AUTO_INCREMENT, - `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包类型', + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包名称', - `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包路径', + `path` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包路径', `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本', `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '包说明', `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', @@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS `ne_software` ( `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', `update_time` bigint DEFAULT '0' COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_type_name_version` (`type`,`name`,`version`) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' + UNIQUE KEY `uk_type_name_version` (`ne_type`,`name`,`version`) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='网元软件包'; -- 20240511前旧表更新 @@ -25,16 +25,15 @@ ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `description` varchar(500) CH ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `description`; ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`; ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`; -ALTER TABLE `ne_software` ADD COLUMN IF NOT EXISTS `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包类型' AFTER `id`; +ALTER TABLE `ne_software` MODIFY COLUMN `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型' AFTER `id`; ALTER TABLE `ne_software` MODIFY COLUMN `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '包路径' AFTER `name`; ALTER TABLE `ne_software` MODIFY COLUMN `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '包版本' AFTER `path`; ALTER TABLE `ne_software` MODIFY COLUMN `update_time` bigint NULL DEFAULT 0 COMMENT '更新时间' AFTER `update_by`; -ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `ne_type`; ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `file_name`; ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `md5_sum`; ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `status`; ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `comment`; ALTER TABLE `ne_software` DROP COLUMN IF EXISTS `patch_time`; -ALTER TABLE `ne_software` ADD UNIQUE INDEX IF NOT EXISTS `uk_type_name_version`(`type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一'; + ALTER TABLE `ne_software` ADD UNIQUE INDEX IF NOT EXISTS `uk_type_name_version`(`ne_type` ASC, `name` ASC, `version` ASC) USING BTREE COMMENT '唯一网元类型和文件名版本是否唯一'; SET FOREIGN_KEY_CHECKS=1; diff --git a/src/modules/network_element/controller/ne_software.go b/src/modules/network_element/controller/ne_software.go index 85bfeb33..d5658d7c 100644 --- a/src/modules/network_element/controller/ne_software.go +++ b/src/modules/network_element/controller/ne_software.go @@ -71,7 +71,7 @@ func (s *NeSoftwareController) Add(c *gin.Context) { // 找到已存在的删除后重新添加 neSoftwares := s.neSoftwareService.SelectList(model.NeSoftware{ - Type: body.Type, + NeType: body.NeType, Name: body.Name, Version: body.Version, }) @@ -111,7 +111,7 @@ func (s *NeSoftwareController) Edit(c *gin.Context) { } // 检查属性值唯一 - uniqueSoftware := s.neSoftwareService.CheckUniqueTypeAndNameAndVersion(body.Type, body.Name, body.Version, body.ID) + uniqueSoftware := s.neSoftwareService.CheckUniqueTypeAndNameAndVersion(body.NeType, body.Name, body.Version, body.ID) if !uniqueSoftware { // 网元软件包操作【%s】失败,网元类型与文件名版本已存在 msg := i18n.TTemplate(language, "neSoftware.errKeyExists", map[string]any{"name": body.Name}) @@ -176,14 +176,14 @@ func (s *NeSoftwareController) NewNeVersion(c *gin.Context) { // 找到已存在的软件包信息 neSoftwares := s.neSoftwareService.SelectList(model.NeSoftware{ - Type: body.Type, + NeType: body.NeType, Name: body.Name, Version: body.Version, }) if len(neSoftwares) > 0 { neSoftware := neSoftwares[0] s.neSoftwareService.UpdateVersions(neSoftware, model.NeVersion{ - NeType: neSoftware.Type, + NeType: neSoftware.NeType, UpdateBy: ctx.LoginUserToUserName(c), }) c.JSON(200, result.Ok(nil)) diff --git a/src/modules/network_element/model/ne_software.go b/src/modules/network_element/model/ne_software.go index 353e0c95..3eaf9569 100644 --- a/src/modules/network_element/model/ne_software.go +++ b/src/modules/network_element/model/ne_software.go @@ -3,7 +3,7 @@ package model // NeSoftware 网元软件包 ne_software type NeSoftware struct { ID string `json:"id" gorm:"id"` - Type string `json:"type" gorm:"type" binding:"required"` // 包类型 + NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型 Name string `json:"name" gorm:"name" binding:"required"` // 包名称 Path string `json:"path" gorm:"path"` // 包路径 Version string `json:"version" gorm:"version" binding:"required"` // 包版本 diff --git a/src/modules/network_element/repository/ne_software.impl.go b/src/modules/network_element/repository/ne_software.impl.go index edb520c1..5aa8cda6 100644 --- a/src/modules/network_element/repository/ne_software.impl.go +++ b/src/modules/network_element/repository/ne_software.impl.go @@ -15,12 +15,12 @@ import ( // 实例化数据层 NewNeSoftware 结构体 var NewNeSoftwareImpl = &NeSoftwareImpl{ selectSql: `select - id, type, name, path, version, description, create_by, create_time, update_by, update_time + id, ne_type, name, path, version, description, create_by, create_time, update_by, update_time from ne_software`, resultMap: map[string]string{ "id": "ID", - "type": "Type", + "ne_type": "NeType", "name": "Name", "path": "Path", "version": "Version", @@ -60,16 +60,16 @@ func (r *NeSoftwareImpl) SelectPage(query map[string]any) map[string]any { // 查询条件拼接 var conditions []string var params []any - if v, ok := query["type"]; ok && v != "" { + if v, ok := query["neType"]; ok && v != "" { softwareType := v.(string) if strings.Contains(softwareType, ",") { softwareTypeArr := strings.Split(softwareType, ",") placeholder := repo.KeyPlaceholderByQuery(len(softwareTypeArr)) - conditions = append(conditions, "type in ("+placeholder+")") + conditions = append(conditions, "ne_type in ("+placeholder+")") parameters := repo.ConvertIdsSlice(softwareTypeArr) params = append(params, parameters...) } else { - conditions = append(conditions, "type = ?") + conditions = append(conditions, "ne_type = ?") params = append(params, strings.Trim(softwareType, " ")) } } @@ -131,9 +131,9 @@ func (r *NeSoftwareImpl) SelectList(neSoftware model.NeSoftware) []model.NeSoftw // 查询条件拼接 var conditions []string var params []any - if neSoftware.Type != "" { - conditions = append(conditions, "type = ?") - params = append(params, neSoftware.Type) + if neSoftware.NeType != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, neSoftware.NeType) } if neSoftware.Path != "" { conditions = append(conditions, "path = ?") @@ -184,9 +184,9 @@ func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neSoftware model.NeSof // 查询条件拼接 var conditions []string var params []any - if neSoftware.Type != "" { - conditions = append(conditions, "type = ?") - params = append(params, neSoftware.Type) + if neSoftware.NeType != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, neSoftware.NeType) } if neSoftware.Version != "" { conditions = append(conditions, "version = ?") @@ -222,8 +222,8 @@ func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neSoftware model.NeSof func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string { // 参数拼接 params := make(map[string]any) - if neSoftware.Type != "" { - params["type"] = neSoftware.Type + if neSoftware.NeType != "" { + params["ne_type"] = neSoftware.NeType } if neSoftware.Name != "" { params["name"] = neSoftware.Name @@ -271,8 +271,8 @@ func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string { func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 { // 参数拼接 params := make(map[string]any) - if neSoftware.Type != "" { - params["type"] = neSoftware.Type + if neSoftware.NeType != "" { + params["ne_type"] = neSoftware.NeType } if neSoftware.Name != "" { params["name"] = neSoftware.Name diff --git a/src/modules/network_element/service/ne_software.impl.go b/src/modules/network_element/service/ne_software.impl.go index a1e23929..8ac52094 100644 --- a/src/modules/network_element/service/ne_software.impl.go +++ b/src/modules/network_element/service/ne_software.impl.go @@ -47,7 +47,7 @@ func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string { inserId := r.neSoftwareRepository.Insert(neSoftware) if inserId != "" { // 更新同类型的新包版本 - neVersions := NewNeVersionImpl.SelectList(model.NeVersion{NeType: neSoftware.Type}) + neVersions := NewNeVersionImpl.SelectList(model.NeVersion{NeType: neSoftware.NeType}) if len(neVersions) > 0 { for _, neVersion := range neVersions { neVersion.NewName = neSoftware.Name @@ -68,7 +68,7 @@ func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 { if rows > 0 { // 更新同类型的新包版本 neVersions := NewNeVersionImpl.SelectList(model.NeVersion{ - NeType: neSoftware.Type, + NeType: neSoftware.NeType, Status: "3", }) if len(neVersions) > 0 { @@ -112,9 +112,9 @@ func (r *NeSoftwareImpl) DeleteByIds(ids []string) (int64, error) { } // CheckUniqueTypeAndNameAndVersion 校验网元类型和文件名版本是否唯一 -func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(softwareType, name, version, id string) bool { +func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neType, name, version, id string) bool { uniqueId := r.neSoftwareRepository.CheckUniqueTypeAndNameAndVersion(model.NeSoftware{ - Type: softwareType, + NeType: neType, Name: name, Version: version, }) From f098409624d0fd742957a14b70cfce87667fc14e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 29 May 2024 16:58:20 +0800 Subject: [PATCH 116/130] =?UTF-8?q?perf:=20=20=E9=87=8D=E6=9E=84=E7=BD=91?= =?UTF-8?q?=E5=85=83=E7=89=88=E6=9C=AC=E5=AE=89=E8=A3=85=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/service/ne_info.impl.go | 18 +- .../service/ne_version.impl.go | 294 +++++++++++------- 2 files changed, 184 insertions(+), 128 deletions(-) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index a940564f..de5b6a8d 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -704,23 +704,23 @@ func (r *NeInfoImpl) neConfPara5GDataConvert(content map[string]any) map[string] "UE_IP": ueIP, "UE_MASK": ueMask, "UE_CIDR": ueCicr, - "UPF_TYPE": "LightUPF", // StandardUPF LightUPF + "UPF_TYPE": external["upf_type"].(string), // StandardUPF LightUPF "N3_IP": n3IP, "N3_MASK": n3Mask, "N3_GW": external["upfn3_gw"].(string), - "N3_PCI": "0000:00:00.0", - "N3_MAC": "00:00:00:00:00:00", + "N3_PCI": external["upfn3_pci"].(string), + "N3_MAC": external["upfn3_mac"].(string), "N6_IP": n6IP, "N6_MASK": n6Mask, "N6_GW": external["upfn6_gw"].(string), - "N6_PCI": "0000:00:00.0", - "N6_MAC": "00:00:00:00:00:00", + "N6_PCI": external["upfn6_pci"].(string), + "N6_MAC": external["upfn6_mac"].(string), - "SIP_IP": "192.168.8.110", + "SIP_IP": external["ims_sip_ip"].(string), - "S1_MMEIP": "192.168.8.220", - "S11_MMEIP": "172.16.5.220", - "S10_MMEIP": "172.16.5.221", + "S1_MMEIP": external["mmes1_ip"].(string), + "S11_MMEIP": external["mmes11_ip"].(string), + "S10_MMEIP": external["mmes10_ip"].(string), // sbi "OMC_IP": sbi["omc_ip"].(string), diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 7576ed5d..1a1e98bf 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -8,6 +8,7 @@ import ( "time" "be.ems/src/framework/utils/file" + "be.ems/src/framework/utils/ssh" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" ) @@ -87,6 +88,14 @@ func (r *NeVersionImpl) SelectByNeTypeAndNeID(neType, neId string) model.NeVersi // // action 安装行为:install upgrade rollback func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) { + // 网元主机的SSH客户端 + sshClient, err := NewNeInfoImpl.NeRunSSHclient(neVersion.NeType, neVersion.NeId) + if err != nil { + return "", err + } + defer sshClient.Close() + + // ========= 文件传输阶段 ========= softwarePath := neVersion.Path if action == "install" || action == "upgrade" { softwarePath = neVersion.NewPath @@ -94,68 +103,106 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp if action == "rollback" { softwarePath = neVersion.PrePath } - // 检查文件是否存在 - localFilePath := file.ParseUploadFilePath(softwarePath) - if _, err := os.Stat(localFilePath); err != nil { - return "", fmt.Errorf("file read failure") - } - fileName := filepath.Base(softwarePath) - if strings.Contains(fileName, "*") { - fileName = strings.ReplaceAll(fileName, "*", "_") - } - nePath := "/tmp" - neFilePath := fmt.Sprintf("%s/%s", nePath, fileName) - - // 网元信息 - neInfo := NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) - if neInfo.NeId != neVersion.NeId { - return "", fmt.Errorf("error found neinfo") - } - - // 网元主机的SSH客户端 - sshClient, err := NewNeInfoImpl.NeRunSSHclient(neVersion.NeType, neVersion.NeId) + neFilePaths, err := r.operateFile(sshClient, softwarePath) if err != nil { return "", err } - defer sshClient.Close() - // 网元主机的SSH客户端进行文件传输 - sftpClient, err := sshClient.NewClientSFTP() - if err != nil { - return "", err - } - defer sftpClient.Close() - - // 上传软件包到 /tmp - if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { - return "", fmt.Errorf("error uploading package") - } + // ========= 安装时设置 ========= if action == "install" { - // ========= 网元公共配置文件 start ========= + // 网元公共配置文件 para5GMap, err := NewNeInfoImpl.NeConfPara5GRead() if para5GMap == nil || err != nil { return "", fmt.Errorf("error read para5G file info") } - if err := NewNeInfoImpl.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neInfo.NeType, neInfo.NeId)}); err != nil { + if err := NewNeInfoImpl.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neVersion.NeType, neVersion.NeId)}); err != nil { return "", fmt.Errorf("error wirte para5G file info") } - // ========= 网元公共配置文件 end =========== } - // ========= 安装命令 start ========= - neTypeLower := strings.ToLower(neInfo.NeType) + // ========= 命令生成阶段 ========= + okFlagStr, cmdStrArr, err := r.operateCommand(action, neVersion.NeType, neFilePaths) + if err != nil { + return "", err + } + // 操作自己omc时 + if neVersion.NeType == "OMC" { + return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 3s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && "))) + } + + // ========= 执行阶段 ========= + commandLine, err := r.operateRun(sshClient, preinput, cmdStrArr, neVersion.NeType, okFlagStr) + if err != nil { + return "", err + } + + // ========= 完成阶段 ========= + if strings.LastIndex(commandLine, okFlagStr) > 5 { + if err := r.operateDome(action, neVersion); err != nil { + return "", err + } + } + return commandLine, nil +} + +// operateDome 操作版本-文件传输阶段 +func (r *NeVersionImpl) operateFile(sshClient *ssh.ConnSSH, softwarePath string) ([]string, error) { + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + return nil, err + } + defer sftpClient.Close() + + nePath := "/tmp" + copyFileToNeMap := map[string]string{} + + // 统一处理多个文件和单个文件的情况 + var softwarePaths []string + if strings.Contains(softwarePath, ",") { + softwarePaths = strings.Split(softwarePath, ",") + } else { + softwarePaths = []string{softwarePath} + } + + for _, path := range softwarePaths { + // 检查文件是否存在 + localFilePath := file.ParseUploadFilePath(path) + if _, err := os.Stat(localFilePath); err != nil { + return nil, fmt.Errorf("file read failure") + } + + fileName := filepath.Base(path) + neFilePath := fmt.Sprintf("%s/%s", nePath, fileName) + copyFileToNeMap[localFilePath] = neFilePath + } + + // 上传软件包到 /tmp + neFilePaths := []string{} + for k, v := range copyFileToNeMap { + if err = sftpClient.CopyFileLocalToRemote(k, v); err != nil { + return nil, fmt.Errorf("error uploading package") + } + neFilePaths = append(neFilePaths, v) + } + return neFilePaths, nil +} + +// operateDome 操作版本-命令生成阶段 +func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []string) (string, []string, error) { + neTypeLower := strings.ToLower(neType) // 命令终止结束标记 okFlagStr := fmt.Sprintf("%s version %s successful!", neTypeLower, action) // 安装软件包 - pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", neFilePath) - fileExt := filepath.Ext(strings.ToLower(fileName)) + pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", strings.Join(neFilePaths, " ")) + fileExt := filepath.Ext(strings.ToLower(neFilePaths[0])) if strings.HasSuffix(fileExt, "rpm") { - pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s", neFilePath) + pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s", strings.Join(neFilePaths, " ")) } // 组合命令输入 cmdStrArr := []string{} - if neInfo.NeType == "OMC" { + if neType == "OMC" { cmdStrArr = append(cmdStrArr, pkgCmdStr) if action == "install" { cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m install") // 初始化数据库 @@ -164,11 +211,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m upgrade") // 升级数据库 } cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart") - return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 3s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && "))) - } else if neInfo.NeType == "IMS" { - if !strings.Contains(strings.ToLower(fileName), "ims") { - return "", fmt.Errorf("error file package not ims") - } + } else if neType == "IMS" { if action == "install" { para5GData := NewNeInfoImpl.Para5GData cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") @@ -180,24 +223,26 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp // IWF连接PCF服务 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", para5GData["PCF_IP"])) // HOST - mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"]) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ims' /etc/hosts || echo '%s ims' | sudo tee -a /etc/hosts \n", para5GData["IMS_IP"], para5GData["IMS_IP"])) - hssHost := fmt.Sprintf("%s hss.ims.%s.3gppnetwork.org ims", para5GData["UDM_IP"], mnc_mcc) + mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"]) + hssHost := fmt.Sprintf("%s hss.ims.%s.3gppnetwork.org hss", para5GData["UDM_IP"], mnc_mcc) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", hssHost, hssHost)) - pcrfHost := fmt.Sprintf("%s pcrf.epc.%s.3gppnetwork.org ims\n", para5GData["IMS_IP"], mnc_mcc) + pcrfHost := fmt.Sprintf("%s pcrf.epc.%s.3gppnetwork.org pcrf\n", para5GData["IMS_IP"], mnc_mcc) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcrfHost, pcrfHost)) imsOrgHost := fmt.Sprintf("ims.%s.3gppnetwork.org", mnc_mcc) - imsHost := fmt.Sprintf("%s %s", para5GData["SIP_IP"], imsOrgHost) + imsHost := fmt.Sprintf("%s %s ims", para5GData["SIP_IP"], imsOrgHost) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", imsHost, imsHost)) - pcscfHost := fmt.Sprintf("%s pcscf.%s", para5GData["SIP_IP"], imsOrgHost) + pcscfHost := fmt.Sprintf("%s pcscf.%s pcscf", para5GData["SIP_IP"], imsOrgHost) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcscfHost, pcscfHost)) - icscfHost := fmt.Sprintf("%s icscf.%s", para5GData["SIP_IP"], imsOrgHost) + icscfHost := fmt.Sprintf("%s icscf.%s icscf", para5GData["SIP_IP"], imsOrgHost) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", icscfHost, icscfHost)) - scscfHost := fmt.Sprintf("%s scscf.%s", para5GData["SIP_IP"], imsOrgHost) + scscfHost := fmt.Sprintf("%s scscf.%s scscf", para5GData["SIP_IP"], imsOrgHost) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", scscfHost, scscfHost)) - mmtelHost := fmt.Sprintf("%s mmtel.%s", para5GData["SIP_IP"], imsOrgHost) + mmtelHost := fmt.Sprintf("%s mmtel.%s mmtel", para5GData["SIP_IP"], imsOrgHost) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", mmtelHost, mmtelHost)) - smsHost := fmt.Sprintf("%s sms.%s", para5GData["SIP_IP"], imsOrgHost) + mrfcHost := fmt.Sprintf("%s mrfc.%s mrfc", para5GData["SIP_IP"], imsOrgHost) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", mrfcHost, mrfcHost)) + smsHost := fmt.Sprintf("%s smsc.%s smsc", para5GData["SIP_IP"], imsOrgHost) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", smsHost, smsHost)) // 30s后停止服务 @@ -230,6 +275,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.200/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["LMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NEF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- internet/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n2' /etc/hosts || echo '%s n2' | sudo tee -a /etc/hosts \n", para5GData["N2_IP"], para5GData["N2_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s amf' /etc/hosts || echo '%s amf' | sudo tee -a /etc/hosts \n", para5GData["AMF_IP"], para5GData["AMF_IP"])) } // AUSF配置修改 @@ -266,6 +312,8 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SD"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_DATA"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_IMS"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'internet'/serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_DATA"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'ims'serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_DATA"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_IMS"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.18.81/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"])) @@ -332,6 +380,8 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") } cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upf' /etc/hosts || echo '%s upf' | sudo tee -a /etc/hosts \n", para5GData["UPF_IP"], para5GData["UPF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upfn3' /etc/hosts || echo '%s upfn3' | sudo tee -a /etc/hosts \n", para5GData["N3_IP"], para5GData["N3_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upfn6' /etc/hosts || echo '%s upfn6' | sudo tee -a /etc/hosts \n", para5GData["N6_IP"], para5GData["N6_IP"])) } // NRF配置修改 @@ -354,11 +404,9 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp // MME配置修改 - 4G if neTypeLower == "mme" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/mme/default/mme.conf /usr/local/etc/mme/mme.conf \n") - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/epsApn.yaml /usr/local/etc/udm/epsApn.yaml \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["AMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["SMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220/20|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S1_MMEIP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S1_MMEIP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S11_MMEIP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.221/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S10_MMEIP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) @@ -366,12 +414,9 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC=\"001\" ; MNC=\"01\";/MCC=\"%s\" ; MNC=\"%s\";/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = \"1\";/TAC = \"%s\";/g\" /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = 1;/TAC = %s;/g\" /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_DATA"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/ims/%s/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"])) // SMF开启 cmdStrArr = append(cmdStrArr, "sudo sed -i \"/^ *gxcfg:/,/^ *[^ ]/{s/enable: false/enable: true/;b};\" /usr/local/etc/smf/smf_conf.yaml \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s mme' /etc/hosts || echo '%s mme' | sudo tee -a /etc/hosts \n", para5GData["S11_MMEIP"], para5GData["S11_MMEIP"])) - } // N3IWF配置修改 if neTypeLower == "n3iwf" { @@ -399,22 +444,26 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp } // 删除软件包 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", neFilePath)) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", strings.Join(neFilePaths, " "))) // 结束 cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) - // ========= 安装命令 end ========= + return okFlagStr, cmdStrArr, nil +} + +// operateDome 操作版本-执行阶段 +func (r *NeVersionImpl) operateRun(sshClient *ssh.ConnSSH, preinput map[string]string, cmdStrArr []string, neType string, okFlagStr string) (string, error) { // ssh连接会话 - clientSession, err := sshClient.NewClientSession(80, 24) + clientSession, err := sshClient.NewClientSession(127, 42) if err != nil { return "", fmt.Errorf("neinfo ssh client session new err") } defer clientSession.Close() firstRead := true // 首次命令进行记录日志信息 - logMsg := "" // 日志信息 + commandLineText := "" // 日志信息 done := make(chan bool) // 完成信号 - // 超时退出 30s + // 超时退出 60s timeoutTicker := time.NewTicker(60 * time.Second) defer timeoutTicker.Stop() // 实时读取SSH消息直接输出 @@ -432,10 +481,10 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp outputStr := string(outputByte) // 非首次进行记录命令 if !firstRead { - logMsg += outputStr + commandLineText += outputStr } // IMS预输入 P/I/S-CSCF Config 配置覆盖 - if neVersion.NeType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? ") { + if neType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? ") { if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) } else { @@ -465,56 +514,63 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp // 等待写入协程完成 <-done - // 执行到最后语句 - if strings.LastIndex(logMsg, okFlagStr) > 5 { - if action == "install" { - // ========= 网元OAM配置文件 start ========== - if err := NewNeInfoImpl.NeConfOAMSync(neInfo, nil, true); err != nil { - return "", fmt.Errorf("error wirte OAM file info") - } - // ========= 网元OAM配置文件 end =========== - } - - // 更新Version - verInfo := NewNeVersionImpl.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) - if verInfo.NeId == neVersion.NeId { - curName := verInfo.Name - curVersion := verInfo.Version - curPath := verInfo.Path - if action == "install" { - verInfo.Name = neVersion.NewName - verInfo.Version = neVersion.NewVersion - verInfo.Path = neVersion.NewPath - verInfo.PreName = "-" - verInfo.PreVersion = "-" - verInfo.PrePath = "-" - verInfo.NewName = "-" - verInfo.NewVersion = "-" - verInfo.NewPath = "-" - } - if action == "upgrade" { - verInfo.Name = neVersion.NewName - verInfo.Version = neVersion.NewVersion - verInfo.Path = neVersion.NewPath - verInfo.PreName = curName - verInfo.PreVersion = curVersion - verInfo.PrePath = curPath - verInfo.NewName = "-" - verInfo.NewVersion = "-" - verInfo.NewPath = "-" - } - if action == "rollback" { - verInfo.Name = neVersion.PreName - verInfo.Version = neVersion.PreVersion - verInfo.Path = neVersion.PrePath - verInfo.PreName = curName - verInfo.PreVersion = curVersion - verInfo.PrePath = curPath - } - - verInfo.Status = "1" - NewNeVersionImpl.Update(verInfo) - } - } - return logMsg, nil + return commandLineText, nil +} + +// operateDome 操作版本-完成阶段 +func (r *NeVersionImpl) operateDome(action string, neVersion model.NeVersion) error { + if action == "install" { + // 网元信息 + neInfo := NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) + if neInfo.NeId != neVersion.NeId { + return fmt.Errorf("error found neinfo") + } + // ========= 网元OAM配置文件 start ========== + if err := NewNeInfoImpl.NeConfOAMSync(neInfo, nil, true); err != nil { + return fmt.Errorf("error wirte OAM file info") + } + // ========= 网元OAM配置文件 end =========== + } + + // 更新Version + verInfo := r.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) + if verInfo.NeId == neVersion.NeId { + curName := verInfo.Name + curVersion := verInfo.Version + curPath := verInfo.Path + if action == "install" { + verInfo.Name = neVersion.NewName + verInfo.Version = neVersion.NewVersion + verInfo.Path = neVersion.NewPath + verInfo.PreName = "-" + verInfo.PreVersion = "-" + verInfo.PrePath = "-" + verInfo.NewName = "-" + verInfo.NewVersion = "-" + verInfo.NewPath = "-" + } + if action == "upgrade" { + verInfo.Name = neVersion.NewName + verInfo.Version = neVersion.NewVersion + verInfo.Path = neVersion.NewPath + verInfo.PreName = curName + verInfo.PreVersion = curVersion + verInfo.PrePath = curPath + verInfo.NewName = "-" + verInfo.NewVersion = "-" + verInfo.NewPath = "-" + } + if action == "rollback" { + verInfo.Name = neVersion.PreName + verInfo.Version = neVersion.PreVersion + verInfo.Path = neVersion.PrePath + verInfo.PreName = curName + verInfo.PreVersion = curVersion + verInfo.PrePath = curPath + } + + verInfo.Status = "1" + NewNeVersionImpl.Update(verInfo) + } + return nil } From d0009be8f7cafcbcc8dc5e94bb6bc1645a642b9a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 29 May 2024 18:04:56 +0800 Subject: [PATCH 117/130] =?UTF-8?q?fix:=20=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85=E4=B8=8D=E4=B8=BB=E5=8A=A8=E9=87=8D?= =?UTF-8?q?=E5=90=AF=EF=BC=8Cudm=E9=85=8D=E7=BD=AEoam=E4=B8=8D=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E9=BB=98=E8=AE=A4=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_version.impl.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 1a1e98bf..b9d8ec24 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -215,14 +215,14 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri if action == "install" { para5GData := NewNeInfoImpl.Para5GData cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") - cmdStrArr = append(cmdStrArr, "sudo ims-stop || true && sudo ims-start \n") + // 公网 PLMN地址 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", para5GData["SIP_IP"], para5GData["MCC"], para5GData["MNC"])) // 内网 服务地址 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", para5GData["IMS_IP"])) // IWF连接PCF服务 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", para5GData["PCF_IP"])) - // HOST + // 设置 HOST cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ims' /etc/hosts || echo '%s ims' | sudo tee -a /etc/hosts \n", para5GData["IMS_IP"], para5GData["IMS_IP"])) mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"]) hssHost := fmt.Sprintf("%s hss.ims.%s.3gppnetwork.org hss", para5GData["UDM_IP"], mnc_mcc) @@ -291,7 +291,6 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri // UDM配置修改 if neTypeLower == "udm" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/udmcfg.yaml /usr/local/etc/udm/udmcfg.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/oam_manager.yaml /usr/local/etc/udm/oam_manager.yaml \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/nssai.yaml /usr/local/etc/udm/nssai.yaml \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/snssai.yaml /usr/local/etc/udm/snssai.yaml \n") cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/as.yaml /usr/local/etc/udm/as.yaml \n") @@ -433,7 +432,6 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n3iwf' /etc/hosts || echo '%s n3iwf' | sudo tee -a /etc/hosts \n", para5GData["N3IWF_IP"], para5GData["N3IWF_IP"])) } - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) // 30s后停止服务 // cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) } else { From 8b63c131759a9f7d4afdbf4faf2618ac561720f6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 29 May 2024 18:44:31 +0800 Subject: [PATCH 118/130] =?UTF-8?q?feat:=20=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85NEF=E5=AE=89=E8=A3=85=E5=86=99?= =?UTF-8?q?=E5=85=A5IP=E4=BF=A1=E6=81=AF=E4=BD=86=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=8E=A5=E5=85=A5=E7=BD=91=E7=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ne_version.impl.go | 50 +++++++++++++------ 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index b9d8ec24..5871bcfb 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -347,6 +347,24 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s pcf' /etc/hosts || echo '%s pcf' | sudo tee -a /etc/hosts \n", para5GData["PCF_IP"], para5GData["PCF_IP"])) } + // NSSF配置修改 + if neTypeLower == "nssf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nssf/default/nssfcfg.yaml /usr/local/etc/nssf/nssfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NSSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nssf' /etc/hosts || echo '%s nssf' | sudo tee -a /etc/hosts \n", para5GData["NSSF_IP"], para5GData["NSSF_IP"])) + } + // NRF配置修改 + if neTypeLower == "nrf" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nrfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nrf' /etc/hosts || echo '%s nrf' | sudo tee -a /etc/hosts \n", para5GData["NRF_IP"], para5GData["NRF_IP"])) + } + // UPF配置修改 if neTypeLower == "upf" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfcfg.yaml /usr/local/etc/upf/upfcfg.yaml \n") @@ -383,23 +401,23 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upfn6' /etc/hosts || echo '%s upfn6' | sudo tee -a /etc/hosts \n", para5GData["N6_IP"], para5GData["N6_IP"])) } - // NRF配置修改 - if neTypeLower == "nrf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nrfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["NRF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nrf' /etc/hosts || echo '%s nrf' | sudo tee -a /etc/hosts \n", para5GData["NRF_IP"], para5GData["NRF_IP"])) - } - // NSSF配置修改 - if neTypeLower == "nssf" { - cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nssf/default/nssfcfg.yaml /usr/local/etc/nssf/nssfcfg.yaml \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NSSF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NRF_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MCC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nssf' /etc/hosts || echo '%s nssf' | sudo tee -a /etc/hosts \n", para5GData["NSSF_IP"], para5GData["NSSF_IP"])) + // LMF配置修改 - 已不再维护,导致激活License失败 + // NEF配置修改 - SNMP无需License + if neTypeLower == "nef" { + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nef/default/nef_conf.yaml /usr/local/etc/nef/nef_conf.yaml \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.110/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["IMS_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["AMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["AUSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["UDM_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["SMF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["PCF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NSSF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NRF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["UPF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NEF_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nef' /etc/hosts || echo '%s nef' | sudo tee -a /etc/hosts \n", para5GData["NEF_IP"], para5GData["NEF_IP"])) } + // MME配置修改 - 4G if neTypeLower == "mme" { cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/mme/default/mme.conf /usr/local/etc/mme/mme.conf \n") From 969cbdc76a991c0ebb4001c8878c5c071ee831bc Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 30 May 2024 11:17:41 +0800 Subject: [PATCH 119/130] =?UTF-8?q?fix:=20=E5=88=9D=E5=A7=8B=E7=BD=91?= =?UTF-8?q?=E5=85=83=E4=BF=A1=E6=81=AF=E4=B8=BB=E6=9C=BA=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8D=E9=BB=98=E8=AE=A4=E4=B8=BAmanager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/ne_host.sql | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/database/install/ne_host.sql b/database/install/ne_host.sql index fd057c3f..56a6e773 100644 --- a/database/install/ne_host.sql +++ b/database/install/ne_host.sql @@ -30,34 +30,34 @@ CREATE TABLE `ne_host` ( ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元主机表' ROW_FORMAT = DYNAMIC; -- 初始数据对应网元 -INSERT INTO `ne_host` VALUES (1, 'ssh', '1', 'OMC_001_22', '172.16.5.100', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (1, 'ssh', '1', 'OMC_001_22', '172.16.5.100', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (2, 'telnet', '1', 'OMC_001_4100', '172.16.5.100', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (3, 'ssh', '1', 'IMS_001_22', '172.16.5.110', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708314682742, NULL, 0); +INSERT INTO `ne_host` VALUES (3, 'ssh', '1', 'IMS_001_22', '172.16.5.110', 22, 'manager', '2', '', '', '', '', 'admin', 1708314682742, NULL, 0); INSERT INTO `ne_host` VALUES (4, 'telnet', '1', 'IMS_001_4100', '172.16.5.110', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (5, 'ssh', '1', 'AMF_001_22', '172.16.5.120', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708314682742, NULL, 0); +INSERT INTO `ne_host` VALUES (5, 'ssh', '1', 'AMF_001_22', '172.16.5.120', 22, 'manager', '2', '', '', '', '', 'admin', 1708314682742, NULL, 0); INSERT INTO `ne_host` VALUES (6, 'telnet', '1', 'AMF_001_4100', '172.16.5.120', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (7, 'ssh', '1', 'AUSF_001_22', '172.16.5.130', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (7, 'ssh', '1', 'AUSF_001_22', '172.16.5.130', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (8, 'telnet', '1', 'AUSF_001_4100', '172.16.5.130', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (9, 'ssh', '1', 'UDM_001_22', '172.16.5.140', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (9, 'ssh', '1', 'UDM_001_22', '172.16.5.140', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (10, 'telnet', '1', 'UDM_001_4100', '172.16.5.140', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (11, 'ssh', '1', 'SMF_001_22', '172.16.5.150', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (11, 'ssh', '1', 'SMF_001_22', '172.16.5.150', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (12, 'telnet', '1', 'SMF_001_4100', '172.16.5.150', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (13, 'ssh', '1', 'PCF_001_22', '172.16.5.160', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (13, 'ssh', '1', 'PCF_001_22', '172.16.5.160', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (14, 'telnet', '1', 'PCF_001_4100', '172.16.5.160', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (15, 'ssh', '1', 'NSSF_001_22', '172.16.5.170', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (15, 'ssh', '1', 'NSSF_001_22', '172.16.5.170', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (16, 'telnet', '1', 'NSSF_001_4100', '172.16.5.170', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (17, 'ssh', '1', 'NRF_001_22', '172.16.5.180', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (17, 'ssh', '1', 'NRF_001_22', '172.16.5.180', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (18, 'telnet', '1', 'NRF_001_4100', '172.16.5.180', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (19, 'ssh', '1', 'UPF_001_22', '172.16.5.190', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (19, 'ssh', '1', 'UPF_001_22', '172.16.5.190', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (20, 'telnet', '1', 'UPF_001_4100', '172.16.5.190', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (21, 'telnet', '1', 'UPF_001_5002', '172.16.5.190', 5002, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (22, 'ssh', '1', 'LMF_001_22', '172.16.5.200', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (22, 'ssh', '1', 'LMF_001_22', '172.16.5.200', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (23, 'telnet', '1', 'LMF_001_4100', '172.16.5.200', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (24, 'ssh', '1', 'NEF_001_22', '172.16.5.210', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (24, 'ssh', '1', 'NEF_001_22', '172.16.5.210', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (25, 'telnet', '1', 'NEF_001_4100', '172.16.5.210', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (26, 'ssh', '1', 'MME_001_22', '172.16.5.220', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (26, 'ssh', '1', 'MME_001_22', '172.16.5.220', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (27, 'telnet', '1', 'MME_001_4100', '172.16.5.220', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (28, 'ssh', '1', 'N3IWF_001_22', '172.16.5.230', 22, 'agtuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (28, 'ssh', '1', 'N3IWF_001_22', '172.16.5.230', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (29, 'telnet', '1', 'N3IWF_001_4100', '172.16.5.230', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); SET FOREIGN_KEY_CHECKS=1; From bbe80d5a6e68f78545e635ef1331fc1cbe847837 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 30 May 2024 20:40:06 +0800 Subject: [PATCH 120/130] =?UTF-8?q?style:=20=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E8=8F=9C=E5=8D=95=E5=85=B3=E8=81=94=E6=97=B6?= =?UTF-8?q?=E5=8C=BA=E8=AE=BE=E7=BD=AE=E6=B3=A8=E9=87=8A=E8=AF=AD=E5=8F=A5?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_role_menu.sql | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/database/install/sys_role_menu.sql b/database/install/sys_role_menu.sql index 4c9f9e6a..abff5be0 100644 --- a/database/install/sys_role_menu.sql +++ b/database/install/sys_role_menu.sql @@ -1,19 +1,3 @@ -/* - Navicat Premium Data Transfer - - Source Server : local_mariadb - Source Server Type : MariaDB - Source Server Version : 100338 (10.3.38-MariaDB) - Source Host : localhost:33066 - Source Schema : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 30/05/2024 17:22:32 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -277,16 +261,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2082); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2087); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2131); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2132); -/*!40000 ALTER TABLE `sys_role_menu` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +UNLOCK TABLES; -- Dump completed on 2024-04-12 21:19:19 From 47ce9cbfb2ed32e0b5e93b10b351c42c59d03a37 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 30 May 2024 21:26:07 +0800 Subject: [PATCH 121/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85adb=E6=96=87=E4=BB=B6=E8=A6=86?= =?UTF-8?q?=E7=9B=96=E9=87=8D=E8=AE=BEbind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_version.impl.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 5871bcfb..ab831efa 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -244,6 +244,9 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", mrfcHost, mrfcHost)) smsHost := fmt.Sprintf("%s smsc.%s smsc", para5GData["SIP_IP"], imsOrgHost) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", smsHost, smsHost)) + // adb + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/adb/default/adb.conf /usr/local/etc/adb/adb.conf \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["ADB_IP"])) // 30s后停止服务 // cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") @@ -316,8 +319,10 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_DATA"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_IMS"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.18.81/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["ADB_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s udm' /etc/hosts || echo '%s udm' | sudo tee -a /etc/hosts \n", para5GData["UDM_IP"], para5GData["UDM_IP"])) + // adb + cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/adb/default/adb.conf /usr/local/etc/adb/adb.conf \n") + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["ADB_IP"])) } // SMF配置修改 if neTypeLower == "smf" { From 31006dfc2afd6cf3f7cee8731f677e6b4d522d17 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 31 May 2024 15:17:52 +0800 Subject: [PATCH 122/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=93=8D=E4=BD=9Comc=E9=87=8D=E5=90=AF=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/controller/ne_action.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/network_element/controller/ne_action.go b/src/modules/network_element/controller/ne_action.go index 4aae965a..f38e68ab 100644 --- a/src/modules/network_element/controller/ne_action.go +++ b/src/modules/network_element/controller/ne_action.go @@ -181,7 +181,7 @@ func (s *NeActionController) Service(c *gin.Context) { neTypeLower := strings.ToLower(neInfo.NeType) cmdStr := fmt.Sprintf("sudo service %s %s", neTypeLower, body.Action) if neTypeLower == "omc" { - cmdStr = fmt.Sprintf("sudo /usr/local/bin/omcsvc.sh %s", body.Action) + cmdStr = fmt.Sprintf("nohup sh -c \"sudo systemctl stop restagent && sleep 5s && sudo systemctl %s restagent\" > /dev/null 2>&1 &", body.Action) } else if neTypeLower == "ims" { if body.Action == "restart" { cmdStr = "sudo ims-stop || true && sudo ims-start" From 43ab71ba29ddc4b93bf0b20a0877408049e11792 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 31 May 2024 17:12:03 +0800 Subject: [PATCH 123/130] =?UTF-8?q?style:=20=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=8F=9C=E5=8D=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_post.sql | 34 +--- database/install/sys_role.sql | 40 +--- database/install/sys_role_menu.sql | 10 +- database/install/sys_user.sql | 38 +--- database/install/sys_user_post.sql | 33 +--- database/install/sys_user_role.sql | 33 +--- database/upgrade/upg_sys_post.sql | 188 ++---------------- database/upgrade/upg_sys_role.sql | 262 +------------------------ database/upgrade/upg_sys_role_menu.sql | 8 +- database/upgrade/upg_sys_user_role.sql | 16 +- 10 files changed, 52 insertions(+), 610 deletions(-) diff --git a/database/install/sys_post.sql b/database/install/sys_post.sql index 3a1a4d79..f0d81ee2 100644 --- a/database/install/sys_post.sql +++ b/database/install/sys_post.sql @@ -1,27 +1,9 @@ -- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- -- Table structure for table `sys_post` -- DROP TABLE IF EXISTS `sys_post`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `sys_post` ( `post_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '岗位ID', `post_code` varchar(50) NOT NULL COMMENT '岗位编码', @@ -34,29 +16,19 @@ CREATE TABLE `sys_post` ( `update_time` bigint(20) DEFAULT 0 COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`post_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='岗位信息表'; -/*!40101 SET character_set_client = @saved_cs_client */; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='岗位信息表'; -- -- Dumping data for table `sys_post` -- LOCK TABLES `sys_post` WRITE; -/*!40000 ALTER TABLE `sys_post` DISABLE KEYS */; + INSERT INTO `sys_post` VALUES (1, 'administator', 'post.admin', 1, '1', 'supervisor', 1697110106499, NULL, 0, NULL); INSERT INTO `sys_post` VALUES (2, 'operator', 'post.operator', 2, '1', 'supervisor', 1697110106499, NULL, 0, NULL); INSERT INTO `sys_post` VALUES (3, 'monitor', 'post.monitor', 3, '1', 'supervisor', 1697110106499, NULL, 0, NULL); INSERT INTO `sys_post` VALUES (4, 'visitor', 'post.visitor', 4, '1', 'supervisor', 1697110106499, NULL, 0, NULL); -/*!40000 ALTER TABLE `sys_post` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +UNLOCK TABLES; -- Dump completed on 2024-03-06 17:27:00 diff --git a/database/install/sys_role.sql b/database/install/sys_role.sql index 6da9136b..9dac69b0 100644 --- a/database/install/sys_role.sql +++ b/database/install/sys_role.sql @@ -1,27 +1,10 @@ -- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `sys_role` -- DROP TABLE IF EXISTS `sys_role`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `sys_role` ( `role_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID', `role_name` varchar(30) NOT NULL COMMENT '角色名称', @@ -38,26 +21,21 @@ CREATE TABLE `sys_role` ( `update_time` bigint(20) DEFAULT 0 COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`role_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=118 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='角色信息表'; -/*!40101 SET character_set_client = @saved_cs_client */; +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='角色信息表'; -- -- Dumping data for table `sys_role` -- LOCK TABLES `sys_role` WRITE; -/*!40000 ALTER TABLE `sys_role` DISABLE KEYS */; -INSERT INTO `sys_role` VALUES (1,'role.admin','supervisor',1,'1','1','1','1','0','supervisor',1697091437683,NULL,0,'role.adminRemark'),(2,'role.adminAssign','administrator',2,'1','1','1','1','0','supervisor',1698486915894,'supervisor',1706774375473,'role.adminAssignRemark'),(3,'role.operator','operator',3,'1','1','1','1','0','supervisor',1698486934900,'supervisor',1706774382221,'role.operatorRemark'),(4,'role.monitor','monitor',4,'1','1','1','1','0','supervisor',1698486950714,'supervisor',1706774389300,'role.monitorRemark'),(5,'role.vistor','vistor',5,'1','1','1','1','0','supervisor',1698486975779,'supervisor',1706774405096,'role.vistorRemark'); -/*!40000 ALTER TABLE `sys_role` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +INSERT INTO `sys_role` VALUES (1, 'role.admin', 'supervisor', 1, '1', '1', '1', '1', '0', 'supervisor', 1697091437683, 'supervisor', 1697091437683, 'role.adminRemark'); +INSERT INTO `sys_role` VALUES (2, 'role.adminAssign', 'administrator', 2, '1', '1', '1', '1', '0', 'supervisor', 1698486915894, 'supervisor', 1717143830709, 'role.adminAssignRemark'); +INSERT INTO `sys_role` VALUES (3, 'role.operator', 'operator', 3, '1', '1', '1', '1', '0', 'supervisor', 1698486934900, 'supervisor', 1717143582784, 'role.operatorRemark'); +INSERT INTO `sys_role` VALUES (4, 'role.monitor', 'monitor', 4, '1', '1', '1', '1', '0', 'supervisor', 1698486950714, 'supervisor', 1706774389300, 'role.monitorRemark'); +INSERT INTO `sys_role` VALUES (5, 'role.vistor', 'vistor', 5, '1', '1', '1', '1', '0', 'supervisor', 1698486975779, 'supervisor', 1706774405096, 'role.vistorRemark'); + +UNLOCK TABLES; + -- Dump completed on 2024-03-06 17:27:00 diff --git a/database/install/sys_role_menu.sql b/database/install/sys_role_menu.sql index abff5be0..1cca968b 100644 --- a/database/install/sys_role_menu.sql +++ b/database/install/sys_role_menu.sql @@ -16,7 +16,7 @@ CREATE TABLE `sys_role_menu` ( -- LOCK TABLES `sys_role_menu` WRITE; -/*!40000 ALTER TABLE `sys_role_menu` DISABLE KEYS */; + INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 4); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 5); @@ -82,9 +82,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1055); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1056); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2010); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2075); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2078); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2079); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2080); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2081); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2082); @@ -112,7 +110,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2107); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2108); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2109); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2111); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2112); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2113); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2114); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2118); @@ -136,7 +133,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2140); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2141); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2142); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2143); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2144); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2145); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2146); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2147); @@ -157,7 +153,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1042); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1048); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2010); -INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2075); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2078); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2080); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2081); @@ -186,7 +181,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2107); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2108); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2109); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2111); -INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2112); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2113); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2118); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2119); @@ -202,9 +196,11 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2130); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2131); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2132); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2133); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2137); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2138); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2140); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2141); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2143); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2147); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 5); diff --git a/database/install/sys_user.sql b/database/install/sys_user.sql index d671e18f..6e33172e 100644 --- a/database/install/sys_user.sql +++ b/database/install/sys_user.sql @@ -1,27 +1,10 @@ -- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `sys_user` -- DROP TABLE IF EXISTS `sys_user`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `sys_user` ( `user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', `dept_id` bigint DEFAULT '0' COMMENT '部门ID', @@ -44,7 +27,6 @@ CREATE TABLE `sys_user` ( `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', PRIMARY KEY (`user_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户信息表'; -/*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `sys_user` @@ -52,20 +34,12 @@ CREATE TABLE `sys_user` ( LOCK TABLES `sys_user` WRITE; /*!40000 ALTER TABLE `sys_user` DISABLE KEYS */; -INSERT INTO `sys_user` VALUES (1, NULL, 'supervisor', 'supervisor', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '192.168.5.58', 1715658376835, 'admin', 1697091656500, 'supervisor', 1715658376846, ''); -INSERT INTO `sys_user` VALUES (2, NULL, 'admin', 'admin', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '192.168.2.219', 1709713306413, 'admin', 1697091656500, 'admin', 1709713306416, ''); -INSERT INTO `sys_user` VALUES (103, NULL, 'manager', 'manager', 'sys', '', '', '', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', '192.168.2.219', 1701425631740, 'admin', 1698661521780, 'manager', 1701425631741, ''); -INSERT INTO `sys_user` VALUES (104, NULL, 'monitor', 'monitor', 'sys', '', '', '', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', '192.168.2.219', 1699345510602, 'admin', 1698661684898, 'monitor', 1699345510603, ''); -/*!40000 ALTER TABLE `sys_user` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +INSERT INTO `sys_user` VALUES (1, NULL, 'supervisor', 'supervisor', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (2, NULL, 'admin', 'admin', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (3, NULL, 'manager', 'manager', 'sys', '', '', '', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (4, NULL, 'monitor', 'monitor', 'sys', '', '', '', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); + +UNLOCK TABLES; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2024-03-06 17:27:00 diff --git a/database/install/sys_user_post.sql b/database/install/sys_user_post.sql index 09cc620a..660c4d76 100644 --- a/database/install/sys_user_post.sql +++ b/database/install/sys_user_post.sql @@ -1,51 +1,24 @@ -- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `sys_user_post` -- DROP TABLE IF EXISTS `sys_user_post`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `sys_user_post` ( `user_id` bigint(20) NOT NULL COMMENT '用户ID', `post_id` bigint(20) NOT NULL COMMENT '岗位ID', PRIMARY KEY (`user_id`,`post_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户与岗位关联表'; -/*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `sys_user_post` -- LOCK TABLES `sys_user_post` WRITE; -/*!40000 ALTER TABLE `sys_user_post` DISABLE KEYS */; -INSERT INTO `sys_user_post` VALUES (1,1),(101,3),(103,2); -/*!40000 ALTER TABLE `sys_user_post` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +INSERT INTO `sys_user_post` VALUES (1,1),(2,2),(3,3),(4,3); + +UNLOCK TABLES; -- Dump completed on 2024-03-06 17:27:00 diff --git a/database/install/sys_user_role.sql b/database/install/sys_user_role.sql index 6164b359..514fa42d 100644 --- a/database/install/sys_user_role.sql +++ b/database/install/sys_user_role.sql @@ -1,51 +1,24 @@ -- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `sys_user_role` -- DROP TABLE IF EXISTS `sys_user_role`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `sys_user_role` ( `user_id` bigint(20) NOT NULL COMMENT '用户ID', `role_id` bigint(20) NOT NULL COMMENT '角色ID', PRIMARY KEY (`user_id`,`role_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户和角色关联表'; -/*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `sys_user_role` -- LOCK TABLES `sys_user_role` WRITE; -/*!40000 ALTER TABLE `sys_user_role` DISABLE KEYS */; -INSERT INTO `sys_user_role` VALUES (1,1),(2,2),(100,2),(101,117),(102,2),(103,3),(104,4); -/*!40000 ALTER TABLE `sys_user_role` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +INSERT INTO `sys_user_role` VALUES (1,1),(2,2),(3,3),(4,4); + +UNLOCK TABLES; -- Dump completed on 2024-03-06 17:27:01 diff --git a/database/upgrade/upg_sys_post.sql b/database/upgrade/upg_sys_post.sql index 07fedd20..18f70f44 100644 --- a/database/upgrade/upg_sys_post.sql +++ b/database/upgrade/upg_sys_post.sql @@ -1,176 +1,22 @@ SET FOREIGN_KEY_CHECKS=0; -CREATE TABLE IF NOT EXISTS `omc_db`.`sys_post` ( - `post_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '岗位ID', - `post_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位编码', - `post_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位名称', - `post_sort` int(11) NULL DEFAULT 0 COMMENT '显示顺序', - `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0停用 1正常)', - `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', - `create_time` bigint(20) NULL DEFAULT 0 COMMENT '创建时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', - `update_time` bigint(20) NULL DEFAULT 0 COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`post_id`) USING BTREE - ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '岗位信息表' ROW_FORMAT = Dynamic; +CREATE TABLE IF NOT EXISTS `sys_post` ( + `post_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '岗位ID', + `post_code` varchar(50) NOT NULL COMMENT '岗位编码', + `post_name` varchar(50) NOT NULL COMMENT '岗位名称', + `post_sort` int(11) DEFAULT 0 COMMENT '显示顺序', + `status` char(1) DEFAULT '0' COMMENT '状态(0停用 1正常)', + `create_by` varchar(50) DEFAULT '' COMMENT '创建者', + `create_time` bigint(20) DEFAULT 0 COMMENT '创建时间', + `update_by` varchar(50) DEFAULT '' COMMENT '更新者', + `update_time` bigint(20) DEFAULT 0 COMMENT '更新时间', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`post_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='岗位信息表'; -DELETE FROM `omc_db`.`sys_post` WHERE `post_id` in (1,2,3,4,5); - -INSERT IGNORE INTO - `omc_db`.`sys_post` ( - `post_id`, - `post_code`, - `post_name`, - `post_sort`, - `status`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 1, - 'Administrator', - '管理人员', - 1, - '1', - 'admin', - 1697110106499, - 'admin', - 1698487012626, - '' - ); - -INSERT IGNORE INTO - `omc_db`.`sys_post` ( - `post_id`, - `post_code`, - `post_name`, - `post_sort`, - `status`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 2, - 'Operator', - '运维人员', - 2, - '1', - 'admin', - 1697110106502, - 'admin', - 1698487019898, - '' - ); - -INSERT IGNORE INTO - `omc_db`.`sys_post` ( - `post_id`, - `post_code`, - `post_name`, - `post_sort`, - `status`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 3, - 'Monitor', - '监控人员', - 3, - '1', - 'admin', - 1697110106504, - 'admin', - 1698487031259, - '' - ); - -INSERT IGNORE INTO - `omc_db`.`sys_post` ( - `post_id`, - `post_code`, - `post_name`, - `post_sort`, - `status`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 4, - 'Visitor', - '普通用户', - 4, - '1', - 'admin', - 1697110106507, - 'admin', - 1698487043293, - '' - ); - --- for cn/en locales -UPDATE `omc_db`.`sys_post` -SET - `post_code` = 'administator', - `post_name` = 'post.admin', - `post_sort` = 1, - `status` = '1', - `create_by` = 'supervisor', - `create_time` = 1697110106499, - `update_by` = NULL, - `update_time` = 0, - `remark` = NULL -WHERE `post_id` = 1; - -UPDATE `omc_db`.`sys_post` -SET - `post_code` = 'operator', - `post_name` = 'post.operator', - `post_sort` = 2, - `status` = '1', - `create_by` = 'supervisor', - `create_time` = 1697110106499, - `update_by` = NULL, - `update_time` = 0, - `remark` = NULL -WHERE `post_id` = 2; - -UPDATE `omc_db`.`sys_post` -SET - `post_code` = 'monitor', - `post_name` = 'post.monitor', - `post_sort` = 3, - `status` = '1', - `create_by` = 'supervisor', - `create_time` = 1697110106499, - `update_by` = NULL, - `update_time` = 0, - `remark` = NULL -WHERE `post_id` = 3; - -UPDATE `omc_db`.`sys_post` -SET - `post_code` = 'visitor', - `post_name` = 'post.visitor', - `post_sort` = 4, - `status` = '1', - `create_by` = 'supervisor', - `create_time` = 1697110106499, - `update_by` = NULL, - `update_time` = 0, - `remark` = NULL -WHERE `post_id` = 4; +INSERT INTO `sys_post` VALUES (1, 'administator', 'post.admin', 1, '1', 'supervisor', 1697110106499, NULL, 0, NULL); +INSERT INTO `sys_post` VALUES (2, 'operator', 'post.operator', 2, '1', 'supervisor', 1697110106499, NULL, 0, NULL); +INSERT INTO `sys_post` VALUES (3, 'monitor', 'post.monitor', 3, '1', 'supervisor', 1697110106499, NULL, 0, NULL); +INSERT INTO `sys_post` VALUES (4, 'visitor', 'post.visitor', 4, '1', 'supervisor', 1697110106499, NULL, 0, NULL); SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/database/upgrade/upg_sys_role.sql b/database/upgrade/upg_sys_role.sql index e1f7721b..7d81fa9f 100644 --- a/database/upgrade/upg_sys_role.sql +++ b/database/upgrade/upg_sys_role.sql @@ -1,261 +1,9 @@ SET FOREIGN_KEY_CHECKS=0; -DELETE FROM `omc_db`.`sys_role` WHERE `role_id` IN (1,2,3,4,5); - -INSERT IGNORE INTO - `omc_db`.`sys_role` ( - `role_id`, - `role_name`, - `role_key`, - `role_sort`, - `data_scope`, - `menu_check_strictly`, - `dept_check_strictly`, - `status`, - `del_flag`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 1, - 'Supervisor', - 'supervisor', - 1, - '1', - '1', - '1', - '1', - '0', - 'admin', - 1697091437683, - '', - 0, - '超级管理员,无法修改删除' - ); - -INSERT IGNORE INTO - `omc_db`.`sys_role` ( - `role_id`, - `role_name`, - `role_key`, - `role_sort`, - `data_scope`, - `menu_check_strictly`, - `dept_check_strictly`, - `status`, - `del_flag`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 2, - 'Administrator', - 'administrator', - 2, - '1', - '1', - '1', - '1', - '0', - 'admin', - 1698486915894, - 'supervisor', - 1698739249610, - '管理人员 可以对设备进行任何操作' - ); - -INSERT IGNORE INTO - `omc_db`.`sys_role` ( - `role_id`, - `role_name`, - `role_key`, - `role_sort`, - `data_scope`, - `menu_check_strictly`, - `dept_check_strictly`, - `status`, - `del_flag`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 3, - 'Operator', - 'operator', - 3, - '1', - '1', - '1', - '1', - '0', - 'admin', - 1698486934900, - 'supervisor', - 1698739285488, - '运维人员 可以从设备读取数据,并对设备进行配置,但是不能对设备进行软件升级操作。' - ); - -INSERT IGNORE INTO - `omc_db`.`sys_role` ( - `role_id`, - `role_name`, - `role_key`, - `role_sort`, - `data_scope`, - `menu_check_strictly`, - `dept_check_strictly`, - `status`, - `del_flag`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 4, - 'Monitor', - 'monitor', - 4, - '1', - '1', - '1', - '1', - '0', - 'admin', - 1698486950714, - 'admin', - 1698718807790, - '监控人员 只能从设备读取数据,而不能对设备进行任何设置' - ); - -INSERT IGNORE INTO - `omc_db`.`sys_role` ( - `role_id`, - `role_name`, - `role_key`, - `role_sort`, - `data_scope`, - `menu_check_strictly`, - `dept_check_strictly`, - `status`, - `del_flag`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 5, - 'Visitor', - 'vistor', - 5, - '1', - '1', - '1', - '1', - '0', - 'admin', - 1698486975779, - 'admin', - 1698718839597, - '普通用户 只可看系统相关信息' - ); - --- for cn/en locales -UPDATE `omc_db`.`sys_role` -SET - `role_name` = 'role.admin', - `role_key` = 'supervisor', - `role_sort` = 1, - `data_scope` = '1', - `menu_check_strictly` = '1', - `dept_check_strictly` = '1', - `status` = '1', - `del_flag` = '0', - `create_by` = 'supervisor', - `create_time` = 1697091437683, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'role.adminRemark' -WHERE `role_id` = 1; - -UPDATE `omc_db`.`sys_role` -SET - `role_name` = 'role.adminAssign', - `role_key` = 'administrator', - `role_sort` = 2, - `data_scope` = '1', - `menu_check_strictly` = '1', - `dept_check_strictly` = '1', - `status` = '1', - `del_flag` = '0', - `create_by` = 'supervisor', - `create_time` = 1698486915894, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'role.adminAssignRemark' -WHERE `role_id` = 2; - -UPDATE `omc_db`.`sys_role` -SET - `role_name` = 'role.operator', - `role_key` = 'operator', - `role_sort` = 3, - `data_scope` = '1', - `menu_check_strictly` = '1', - `dept_check_strictly` = '1', - `status` = '1', - `del_flag` = '0', - `create_by` = 'supervisor', - `create_time` = 1698486934900, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'role.operatorRemark' -WHERE `role_id` = 3; - -UPDATE `omc_db`.`sys_role` -SET - `role_name` = 'role.monitor', - `role_key` = 'monitor', - `role_sort` = 4, - `data_scope` = '1', - `menu_check_strictly` = '1', - `dept_check_strictly` = '1', - `status` = '1', - `del_flag` = '0', - `create_by` = 'supervisor', - `create_time` = 1698486950714, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'role.monitorRemark' -WHERE `role_id` = 4; - -UPDATE `omc_db`.`sys_role` -SET - `role_name` = 'role.vistor', - `role_key` = 'vistor', - `role_sort` = 5, - `data_scope` = '1', - `menu_check_strictly` = '1', - `dept_check_strictly` = '1', - `status` = '1', - `del_flag` = '0', - `create_by` = 'supervisor', - `create_time` = 1698486975779, - `update_by` = NULL, - `update_time` = 0, - `remark` = 'role.vistorRemark' -WHERE `role_id` = 5; +INSERT IGNORE INTO `sys_role` VALUES (1, 'role.admin', 'supervisor', 1, '1', '1', '1', '1', '0', 'supervisor', 1697091437683, 'supervisor', 1697091437683, 'role.adminRemark'); +INSERT IGNORE INTO `sys_role` VALUES (2, 'role.adminAssign', 'administrator', 2, '1', '1', '1', '1', '0', 'supervisor', 1698486915894, 'supervisor', 1717143830709, 'role.adminAssignRemark'); +INSERT IGNORE INTO `sys_role` VALUES (3, 'role.operator', 'operator', 3, '1', '1', '1', '1', '0', 'supervisor', 1698486934900, 'supervisor', 1717143582784, 'role.operatorRemark'); +INSERT IGNORE INTO `sys_role` VALUES (4, 'role.monitor', 'monitor', 4, '1', '1', '1', '1', '0', 'supervisor', 1698486950714, 'supervisor', 1706774389300, 'role.monitorRemark'); +INSERT IGNORE INTO `sys_role` VALUES (5, 'role.vistor', 'vistor', 5, '1', '1', '1', '1', '0', 'supervisor', 1698486975779, 'supervisor', 1706774405096, 'role.vistorRemark'); SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/database/upgrade/upg_sys_role_menu.sql b/database/upgrade/upg_sys_role_menu.sql index 457fd10b..6f3a80d9 100644 --- a/database/upgrade/upg_sys_role_menu.sql +++ b/database/upgrade/upg_sys_role_menu.sql @@ -94,9 +94,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1055); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1056); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2010); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2075); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2078); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2079); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2080); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2081); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2082); @@ -124,7 +122,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2107); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2108); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2109); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2111); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2112); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2113); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2114); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2118); @@ -148,7 +145,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2140); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2141); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2142); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2143); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2144); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2145); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2146); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2147); @@ -169,7 +165,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1042); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1048); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2010); -INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2075); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2078); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2080); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2081); @@ -198,7 +193,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2107); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2108); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2109); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2111); -INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2112); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2113); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2118); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2119); @@ -214,9 +208,11 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2130); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2131); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2132); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2133); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2137); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2138); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2140); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2141); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2143); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2147); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 5); diff --git a/database/upgrade/upg_sys_user_role.sql b/database/upgrade/upg_sys_user_role.sql index 64f08e0a..17a1679b 100644 --- a/database/upgrade/upg_sys_user_role.sql +++ b/database/upgrade/upg_sys_user_role.sql @@ -1,19 +1,5 @@ SET FOREIGN_KEY_CHECKS=0; -INSERT IGNORE INTO - `omc_db`.`sys_user_role` (`user_id`, `role_id`) -VALUES (1, 1); - -INSERT IGNORE INTO - `omc_db`.`sys_user_role` (`user_id`, `role_id`) -VALUES (2, 2); - -INSERT - IGNORE INTO `omc_db`.`sys_user_role` (`user_id`, `role_id`) -VALUES (103, 3); - -INSERT - IGNORE INTO `omc_db`.`sys_user_role` (`user_id`, `role_id`) -VALUES (104, 4); +INSERT IGNORE INTO `sys_user_role` VALUES (1,1),(2,2),(3,3),(4,4); SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file From 0fcaf4480af7aa5a64ee3fac394d89824cd131fa Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 31 May 2024 19:07:30 +0800 Subject: [PATCH 124/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85=E5=91=BD=E4=BB=A4=E9=98=B6=E6=AE=B5?= =?UTF-8?q?=E8=AF=AD=E5=8F=A5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ne_version.impl.go | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index ab831efa..f7a31409 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -227,7 +227,7 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"]) hssHost := fmt.Sprintf("%s hss.ims.%s.3gppnetwork.org hss", para5GData["UDM_IP"], mnc_mcc) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", hssHost, hssHost)) - pcrfHost := fmt.Sprintf("%s pcrf.epc.%s.3gppnetwork.org pcrf\n", para5GData["IMS_IP"], mnc_mcc) + pcrfHost := fmt.Sprintf("%s pcrf.epc.%s.3gppnetwork.org pcrf", para5GData["IMS_IP"], mnc_mcc) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcrfHost, pcrfHost)) imsOrgHost := fmt.Sprintf("ims.%s.3gppnetwork.org", mnc_mcc) imsHost := fmt.Sprintf("%s %s ims", para5GData["SIP_IP"], imsOrgHost) @@ -315,7 +315,7 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_DATA"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_IMS"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'internet'/serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_DATA"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'ims'serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'ims'/serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_DATA"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_IMS"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.18.81/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"])) @@ -504,15 +504,38 @@ func (r *NeVersionImpl) operateRun(sshClient *ssh.ConnSSH, preinput map[string]s if !firstRead { commandLineText += outputStr } - // IMS预输入 P/I/S-CSCF Config 配置覆盖 - if neType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? ") { - if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { - clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) - } else { - clientSession.Write("y \n") + + // IMS预输入 + if neType == "IMS" { + // IMS包 P/I/S-CSCF Config 配置覆盖 + if strings.Contains(outputStr, "(P/I/S-CSCF Config)? ") { + if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { + clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) + } else { + clientSession.Write("y \n") + } + continue + } + // MF包 etc下目录覆盖 + if strings.Contains(outputStr, "/usr/local/etc/mf directory? (Yes/No, default: No)") { + if pisCSCF, ok := preinput["updateMFetc"]; ok && pisCSCF != "" { + clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) + } else { + clientSession.Write("No \n") + } + continue + } + // MF包 share下目录覆盖 + if strings.Contains(outputStr, "/usr/local/share/mf directory? (Yes/No, default: No)") { + if pisCSCF, ok := preinput["updateMFshare"]; ok && pisCSCF != "" { + clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) + } else { + clientSession.Write("No \n") + } + continue } - continue } + // 命令终止符后继续执行命令 if len(cmdStrArr) > 0 && strings.LastIndex(outputStr, "~$ ") > 2 { if firstRead { From 1b3962cdc5e8030667b3c61194e43dea19965fd1 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 1 Jun 2024 14:37:35 +0800 Subject: [PATCH 125/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85=E5=90=8Erestart=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E7=94=9F=E6=88=90license?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_version.impl.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index f7a31409..bdae5dc1 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -248,6 +248,7 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/adb/default/adb.conf /usr/local/etc/adb/adb.conf \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["ADB_IP"])) + cmdStrArr = append(cmdStrArr, "sudo ims-stop || true && sudo ims-start \n") // 30s后停止服务 // cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") } else { @@ -455,6 +456,7 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n3iwf' /etc/hosts || echo '%s n3iwf' | sudo tee -a /etc/hosts \n", para5GData["N3IWF_IP"], para5GData["N3IWF_IP"])) } + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) // 30s后停止服务 // cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower)) } else { @@ -484,8 +486,8 @@ func (r *NeVersionImpl) operateRun(sshClient *ssh.ConnSSH, preinput map[string]s firstRead := true // 首次命令进行记录日志信息 commandLineText := "" // 日志信息 done := make(chan bool) // 完成信号 - // 超时退出 60s - timeoutTicker := time.NewTicker(60 * time.Second) + // 超时退出 120s + timeoutTicker := time.NewTicker(120 * time.Second) defer timeoutTicker.Stop() // 实时读取SSH消息直接输出 msTicker := time.NewTicker(100 * time.Millisecond) From c400194649a32da2542ebf24984bca89b79b884a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 1 Jun 2024 14:44:57 +0800 Subject: [PATCH 126/130] =?UTF-8?q?style:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=8A=B6=E6=80=81=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/upgrade/upg_sys_dict_data1_i18n_zh.sql | 2 +- database/upgrade/upg_sys_dict_data2_i18n_en.sql | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index b20e4c76..05f0c2c9 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -649,7 +649,7 @@ REPLACE INTO `sys_dict_data` VALUES (2131, 2131, 'role.export.time', '创建时 REPLACE INTO `sys_dict_data` VALUES (2132, 2132, 'dictData.ne_host_authMode.2', '免密认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2133, 2133, 'menu.ne.neConfPara5G', '网元公共配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2134, 2134, 'dictData.ne_version_status.0', '无', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.1', '当前版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.1', '已是最新', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2136, 2136, 'dictData.ne_version_status.2', '上一版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2137, 2137, 'dictData.ne_version_status.3', '有新版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2138, 2138, 'menu.fault.event', '事件通知', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 60614205..47416f54 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -642,9 +642,9 @@ REPLACE INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Event', REPLACE INTO `sys_dict_data` VALUES (4130, 4130, 'post.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4131, 4131, 'role.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4132, 4132, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4133, 4133, 'menu.ne.neConfPara5G', 'NE Config Public 5G', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4133, 4133, 'menu.ne.neConfPara5G', 'NE Public Config', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4134, 4134, 'dictData.ne_version_status.0', 'Nothing', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.1', 'Current', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.1', 'Updated', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4136, 4136, 'dictData.ne_version_status.2', 'Previous', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4137, 4137, 'dictData.ne_version_status.3', 'Has New', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4138, 4138, 'menu.fault.event', 'Event Notification', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); From 4cc197ec1ce794613533fb2759697d48b658d9b9 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 1 Jun 2024 15:34:32 +0800 Subject: [PATCH 127/130] =?UTF-8?q?style:=20=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E7=BD=91=E5=85=83=E4=BF=A1=E6=81=AFrmUid=E5=89=8D=E7=BC=804400?= =?UTF-8?q?HX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/ne_info.sql | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/database/install/ne_info.sql b/database/install/ne_info.sql index 539b910f..797dfb07 100644 --- a/database/install/ne_info.sql +++ b/database/install/ne_info.sql @@ -33,18 +33,18 @@ CREATE TABLE `ne_info` ( ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元信息表 对应一个网元版本、网元授权、网元主机' ROW_FORMAT = DYNAMIC; -- 初始网元数据 -INSERT INTO `ne_info` VALUES (1, 'OMC', '001', '4400HX1OMC001', 'OMC_001', '172.16.5.100', 33030, 'PNF', '-', '-', '-', '-', '1,2', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (1, 'OMC', '001', '4400HXOMC001', 'OMC_001', '172.16.5.100', 33030, 'PNF', '-', '-', '-', '-', '1,2', 0, '', '', 0, '', 0); INSERT INTO `ne_info` VALUES (2, 'IMS', '001', '4400HXIMS001', 'IMS_001', '172.16.5.110', 33030, 'PNF', '-', '-', '-', '-', '3,4', 0, '', '', 0, '', 0); INSERT INTO `ne_info` VALUES (3, 'AMF', '001', '4400HXAMF001', 'AMF_001', '172.16.5.120', 33030, 'PNF', '-', '-', '-', '', '5,6', 0, '', '', 0, '', 0); INSERT INTO `ne_info` VALUES (4, 'AUSF', '001', '4400HXAUSF001', 'AUSF_001', '172.16.5.130', 33030, 'PNF', '-', '-', '-', '', '7,8', 0, '', '', 0, '', 0); -INSERT INTO `ne_info` VALUES (5, 'UDM', '001', '4400HX1UDM001', 'UDM_001', '172.16.5.140', 33030, 'PNF', '-', '-', '-', '-', '9,10', 0, '', '', 0, '', 0); -INSERT INTO `ne_info` VALUES (6, 'SMF', '001', '4400HX1SMF001', 'SMF_001', '172.16.5.150', 33030, 'PNF', '-', '-', '-', '-', '11,12', 0, '', '', 0, '', 0); -INSERT INTO `ne_info` VALUES (7, 'PCF', '001', '4400HX1PCF001', 'PCF_001', '172.16.5.160', 33030, 'PNF', '-', '-', '-', '-', '13,14', 0, '', '', 0, '', 0); -INSERT INTO `ne_info` VALUES (8, 'NSSF', '001', '4400HX1NSF001', 'NSSF_001', '172.16.5.170', 33030, 'PNF', '-', '-', '-', '-', '15,16', 0, '', '', 0, '', 0); -INSERT INTO `ne_info` VALUES (9, 'NRF', '001', '4400HX1NRF001', 'NRF_001', '172.16.5.180', 33030, 'PNF', '-', '-', '-', '-', '17,18', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (5, 'UDM', '001', '4400HXUDM001', 'UDM_001', '172.16.5.140', 33030, 'PNF', '-', '-', '-', '-', '9,10', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (6, 'SMF', '001', '4400HXSMF001', 'SMF_001', '172.16.5.150', 33030, 'PNF', '-', '-', '-', '-', '11,12', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (7, 'PCF', '001', '4400HXPCF001', 'PCF_001', '172.16.5.160', 33030, 'PNF', '-', '-', '-', '-', '13,14', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (8, 'NSSF', '001', '4400HXNSF001', 'NSSF_001', '172.16.5.170', 33030, 'PNF', '-', '-', '-', '-', '15,16', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (9, 'NRF', '001', '4400HXNRF001', 'NRF_001', '172.16.5.180', 33030, 'PNF', '-', '-', '-', '-', '17,18', 0, '', '', 0, '', 0); INSERT INTO `ne_info` VALUES (10, 'UPF', '001', '4400HXUPF001', 'UPF_001', '172.16.5.190', 33030, 'PNF', '-', '-', '-', '', '19,20,21', 0, '', '', 0, '', 0); -INSERT INTO `ne_info` VALUES (11, 'LMF', '001', '4400HX1LMF001', 'LMF_001', '172.16.5.200', 33030, 'PNF', '-', '-', '-', '-', '22,23', 0, '', '', 0, '', 0); -INSERT INTO `ne_info` VALUES (12, 'NEF', '001', '4400HX1NEF001', 'NEF_001', '172.16.5.210', 33030, 'PNF', '-', '-', '-', '-', '24,25', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (11, 'LMF', '001', '4400HXLMF001', 'LMF_001', '172.16.5.200', 33030, 'PNF', '-', '-', '-', '-', '22,23', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (12, 'NEF', '001', '4400HXNEF001', 'NEF_001', '172.16.5.210', 33030, 'PNF', '-', '-', '-', '-', '24,25', 0, '', '', 0, '', 0); INSERT INTO `ne_info` VALUES (13, 'MME', '001', '4400HXMME001', 'MME_001', '172.16.5.220', 33030, 'PNF', '-', '-', '-', '', '26,27', 0, '', '', 0, '', 0); INSERT INTO `ne_info` VALUES (14, 'N3IWF', '001', '4400HXN3IWF001', 'N3IWF_001', '172.16.5.230', 33030, 'PNF', '-', '-', '-', '', '28,29', 0, '', '', 0, '', 0); From 5f0247deba56d3bedeb86c023f3685c3a42eb0ac Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 1 Jun 2024 15:35:17 +0800 Subject: [PATCH 128/130] =?UTF-8?q?style:=20=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E5=91=8A=E8=AD=A6=E5=B7=A1?= =?UTF-8?q?=E6=A3=80=E5=81=9C=E6=AD=A2/=E7=BD=91=E5=85=83=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E8=8E=B7=E5=8F=96=E5=81=9C=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_job.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/database/install/sys_job.sql b/database/install/sys_job.sql index 65c74f3b..9a19829a 100644 --- a/database/install/sys_job.sql +++ b/database/install/sys_job.sql @@ -39,7 +39,7 @@ CREATE TABLE `sys_job` ( `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', PRIMARY KEY (`job_id`) USING BTREE, UNIQUE INDEX `idx_uni_name_group`(`job_name`, `job_group`) USING BTREE COMMENT 'unique index for job_name and job_group' -) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '调度任务调度表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '调度任务调度表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_job @@ -50,7 +50,7 @@ INSERT INTO `sys_job` VALUES (5, 'job.deleteExpiredAlarmRecord', 'SYSTEM', 'dele INSERT INTO `sys_job` VALUES (6, 'job.deleteExpiredKpiRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":30,\"tableName\":\"gold_kpi\",\"colName\":\"date\"}', '0 15 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'supervisor', 1700570673113, 'job.deleteExpiredKpiRecordRemark'); INSERT INTO `sys_job` VALUES (7, 'job.backupEtcFromNE', 'SYSTEM', 'backupEtcFromNE', NULL, '0 30 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134843, NULL, 0, 'job.backupEtcFromNERemark'); INSERT INTO `sys_job` VALUES (8, 'job.deleteExpiredNeStateRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":1,\"tableName\":\"ne_state\",\"colName\":\"timestamp\"}', '0 25 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1703668901929, 'job.deleteExpiredNeStateRecordRemark'); -INSERT INTO `sys_job` VALUES (9, 'job.getStateFromNE', 'SYSTEM', 'getStateFromNE', '', '0/10 * * * * ?', '3', '0', '1', '0', 'supervisor', 1698478134842, 'admin', 1713231120503, 'job.getStateFromNERemark'); -INSERT INTO `sys_job` VALUES (10, 'job.genNeStateAlarm', 'SYSTEM', 'genNeStateAlarm', '{\"alarmID\":\"HXEMSSM10000\",\"alarmCode\":10000,\"alarmTitle\":\"The system state is abnormal\",\"neType\":\"OMC\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\": \"Major\",\"objectName\":\"EMS;SystemManagement;Heartbeat\",\"objectType\":\"SystemState\",\"specificProblem\":\"Alarm cause: the system state of target NE has not been received for {threshold} seconds\", \"specificProblemID\":\"AC10000\",\"threshold\":30}', '0/5 * * * * ?', '3', '0', '1', '0', 'supervisor', 1698478134842, 'admin', 1713781643031, 'job.genNeStateAlarmRemark'); +INSERT INTO `sys_job` VALUES (9, 'job.getStateFromNE', 'SYSTEM', 'getStateFromNE', '', '0/10 * * * * ?', '3', '0', '0', '0', 'supervisor', 1698478134842, 'admin', 1713231120503, 'job.getStateFromNERemark'); +INSERT INTO `sys_job` VALUES (10, 'job.genNeStateAlarm', 'SYSTEM', 'genNeStateAlarm', '{\"alarmID\":\"HXEMSSM10000\",\"alarmCode\":10000,\"alarmTitle\":\"The system state is abnormal\",\"neType\":\"OMC\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\": \"Major\",\"objectName\":\"EMS;SystemManagement;Heartbeat\",\"objectType\":\"SystemState\",\"specificProblem\":\"Alarm cause: the system state of target NE has not been received for {threshold} seconds\", \"specificProblemID\":\"AC10000\",\"threshold\":30}', '0/5 * * * * ?', '3', '0', '0', '0', 'supervisor', 1698478134842, 'admin', 1713781643031, 'job.genNeStateAlarmRemark'); SET FOREIGN_KEY_CHECKS = 1; From 8b1b1286ac39933e817f6fce358422e034a41a37 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 1 Jun 2024 16:28:10 +0800 Subject: [PATCH 129/130] =?UTF-8?q?style:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=8A=B6=E6=80=81=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 2 +- database/install/sys_dict_data2_i18n_en.sql | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index c88e842f..30892d17 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -658,7 +658,7 @@ INSERT INTO `sys_dict_data` VALUES (2131, 2131, 'role.export.time', '创建时 INSERT INTO `sys_dict_data` VALUES (2132, 2132, 'dictData.ne_host_authMode.2', '免密认证', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2133, 2133, 'menu.ne.neConfPara5G', '网元公共配置', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2134, 2134, 'dictData.ne_version_status.0', '无', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.1', '当前版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.1', '已是最新', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2136, 2136, 'dictData.ne_version_status.2', '上一版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2137, 2137, 'dictData.ne_version_status.3', '有新版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2138, 2138, 'menu.fault.event', '事件通知', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index 1e8298d5..f33959cb 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -656,9 +656,9 @@ INSERT INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Event', ' INSERT INTO `sys_dict_data` VALUES (4130, 4130, 'post.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4131, 4131, 'role.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4132, 4132, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4133, 4133, 'menu.ne.neConfPara5G', 'NE Config Public 5G', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4133, 4133, 'menu.ne.neConfPara5G', 'NE Public Config', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4134, 4134, 'dictData.ne_version_status.0', 'Nothing', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.1', 'Current', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.1', 'Updated', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4136, 4136, 'dictData.ne_version_status.2', 'Previous', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4137, 4137, 'dictData.ne_version_status.3', 'Has New', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4138, 4138, 'menu.fault.event', 'Event Notification', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); From 8f2067e362e7e19e9cd45d8b5255a61858f66420 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 1 Jun 2024 16:48:40 +0800 Subject: [PATCH 130/130] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=89=E8=A3=85UPF=E7=B1=BB=E5=9E=8B=E9=80=89?= =?UTF-8?q?=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_element/service/ne_version.impl.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index bdae5dc1..473f109a 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -387,7 +387,7 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_PCI"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MAC"])) // 标准版 N6 - if para5GData["UPF_IP"] == "StandardUPF" { + if para5GData["UPF_TYPE"] == "StandardUPF" { cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) @@ -397,7 +397,7 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo ip route add '%s/%s' via '%s' \n", para5GData["UE_IP"], para5GData["UE_CIDR"], para5GData["N6_IP"])) } // 轻量版 - if para5GData["UPF_IP"] == "LightUPF" { + if para5GData["UPF_TYPE"] == "LightUPF" { cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n")