From 1e1264cee43cda3688f8b3d7896bfa61222d1f2c Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 27 Oct 2023 09:48:53 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E7=94=A8=E6=88=B7=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/excel/user_import_template.xlsx | Bin 9417 -> 9441 bytes src/modules/system/controller/sys_user.go | 18 +++++----- src/modules/system/service/sys_user.impl.go | 32 +++++++++--------- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/assets/template/excel/user_import_template.xlsx b/src/assets/template/excel/user_import_template.xlsx index eea2c6ec0359631109ff373a7f24cf611f32b52e..758a4b5a6333e2c98c7444a10cc8af58556ce05c 100644 GIT binary patch delta 2359 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

ZLAgS)q=7oG`E5+K2~;|u&hW@` z?9I6Q+h8WVu2SAi04xQpD4Bt201lx8z5|>?0RR78}a=+PvcTy!=JnU-92!jw~Pw zhXJ0bL;Fm5KJpYIE=805BLFZ$>9-CPXhG?Lb%0Hj@}A$O0|@j1uri>JHUg7?OK61L WzuEj-`+wprpc<{Vw?gUH*?$1%%`?FO diff --git a/src/modules/system/controller/sys_user.go b/src/modules/system/controller/sys_user.go index 470d1644..c6eafc6b 100644 --- a/src/modules/system/controller/sys_user.go +++ b/src/modules/system/controller/sys_user.go @@ -400,10 +400,11 @@ func (s *SysUserController) Export(c *gin.Context) { "E1": "手机号码", "F1": "用户性别", "G1": "帐号状态", - "H1": "最后登录IP", - "I1": "最后登录时间", - "J1": "部门名称", - "K1": "部门负责人", + "H1": "部门编号", + "I1": "部门名称", + "J1": "部门负责人", + "K1": "最后登录IP", + "L1": "最后登录时间", } // 读取用户性别字典数据 dictSysUserSex := s.sysDictDataService.SelectDictDataByType("sys_user_sex") @@ -432,10 +433,11 @@ func (s *SysUserController) Export(c *gin.Context) { "E" + idx: row.PhoneNumber, "F" + idx: sysUserSex, "G" + idx: statusValue, - "H" + idx: row.LoginIP, - "I" + idx: date.ParseDateToStr(row.LoginDate, date.YYYY_MM_DD_HH_MM_SS), - "J" + idx: row.Dept.DeptName, - "K" + idx: row.Dept.Leader, + "H" + idx: row.Dept.DeptID, + "I" + idx: row.Dept.DeptName, + "J" + idx: row.Dept.Leader, + "K" + idx: row.LoginIP, + "L" + idx: date.ParseDateToStr(row.LoginDate, date.YYYY_MM_DD_HH_MM_SS), }) } diff --git a/src/modules/system/service/sys_user.impl.go b/src/modules/system/service/sys_user.impl.go index 9f2cfa4f..666fbaf6 100644 --- a/src/modules/system/service/sys_user.impl.go +++ b/src/modules/system/service/sys_user.impl.go @@ -198,7 +198,7 @@ func (r *SysUserImpl) ImportUser(rows []map[string]string, isUpdateSupport bool, failureNum := 0 successMsgArr := []string{} failureMsgArr := []string{} - mustItemArr := []string{"C", "D"} + mustItemArr := []string{"B", "C"} for _, row := range rows { // 检查必填列 ownItem := true @@ -218,13 +218,13 @@ func (r *SysUserImpl) ImportUser(rows []map[string]string, isUpdateSupport bool, // 用户性别转值 sysUserSex := "0" for _, v := range dictSysUserSex { - if row["G"] == v.DictLabel { + if row["F"] == v.DictLabel { sysUserSex = v.DictValue break } } sysUserStatus := common.STATUS_NO - if row["H"] == "正常" { + if row["G"] == "正常" { sysUserStatus = common.STATUS_YES } @@ -232,11 +232,11 @@ func (r *SysUserImpl) ImportUser(rows []map[string]string, isUpdateSupport bool, newSysUser := model.SysUser{ UserType: "sys", Password: initPassword, - DeptID: row["B"], - UserName: row["C"], - NickName: row["D"], - PhoneNumber: row["F"], - Email: row["E"], + DeptID: row["H"], + UserName: row["B"], + NickName: row["C"], + PhoneNumber: row["E"], + Email: row["D"], Status: sysUserStatus, Sex: sysUserSex, } @@ -246,13 +246,13 @@ func (r *SysUserImpl) ImportUser(rows []map[string]string, isUpdateSupport bool, if regular.ValidMobile(newSysUser.PhoneNumber) { uniquePhone := r.CheckUniquePhone(newSysUser.PhoneNumber, "") if !uniquePhone { - msg := fmt.Sprintf("序号:%s 手机号码 %s 已存在", row["A"], row["F"]) + msg := fmt.Sprintf("序号:%s 手机号码 %s 已存在", row["A"], row["E"]) failureNum++ failureMsgArr = append(failureMsgArr, msg) continue } } else { - msg := fmt.Sprintf("序号:%s 手机号码 %s 格式错误", row["A"], row["F"]) + msg := fmt.Sprintf("序号:%s 手机号码 %s 格式错误", row["A"], row["E"]) failureNum++ failureMsgArr = append(failureMsgArr, msg) continue @@ -264,13 +264,13 @@ func (r *SysUserImpl) ImportUser(rows []map[string]string, isUpdateSupport bool, if regular.ValidEmail(newSysUser.Email) { uniqueEmail := r.CheckUniqueEmail(newSysUser.Email, "") if !uniqueEmail { - msg := fmt.Sprintf("序号:%s 用户邮箱 %s 已存在", row["A"], row["E"]) + msg := fmt.Sprintf("序号:%s 用户邮箱 %s 已存在", row["A"], row["D"]) failureNum++ failureMsgArr = append(failureMsgArr, msg) continue } } else { - msg := fmt.Sprintf("序号:%s 用户邮箱 %s 格式错误", row["A"], row["E"]) + msg := fmt.Sprintf("序号:%s 用户邮箱 %s 格式错误", row["A"], row["D"]) failureNum++ failureMsgArr = append(failureMsgArr, msg) continue @@ -283,11 +283,11 @@ func (r *SysUserImpl) ImportUser(rows []map[string]string, isUpdateSupport bool, newSysUser.CreateBy = operName insertId := r.InsertUser(newSysUser) if insertId != "" { - msg := fmt.Sprintf("序号:%s 登录名称 %s 导入成功", row["A"], row["C"]) + msg := fmt.Sprintf("序号:%s 登录名称 %s 导入成功", row["A"], row["B"]) successNum++ successMsgArr = append(successMsgArr, msg) } else { - msg := fmt.Sprintf("序号:%s 登录名称 %s 导入失败", row["A"], row["E"]) + msg := fmt.Sprintf("序号:%s 登录名称 %s 导入失败", row["A"], row["B"]) failureNum++ failureMsgArr = append(failureMsgArr, msg) } @@ -300,11 +300,11 @@ func (r *SysUserImpl) ImportUser(rows []map[string]string, isUpdateSupport bool, newSysUser.UpdateBy = operName rows := r.UpdateUser(newSysUser) if rows > 0 { - msg := fmt.Sprintf("序号:%s 登录名称 %s 更新成功", row["A"], row["C"]) + msg := fmt.Sprintf("序号:%s 登录名称 %s 更新成功", row["A"], row["B"]) successNum++ successMsgArr = append(successMsgArr, msg) } else { - msg := fmt.Sprintf("序号:%s 登录名称 %s 更新失败", row["A"], row["E"]) + msg := fmt.Sprintf("序号:%s 登录名称 %s 更新失败", row["A"], row["B"]) failureNum++ failureMsgArr = append(failureMsgArr, msg) } From 144b324c5f8b4038ca2809de90905dabbcae9e42 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 27 Oct 2023 09:59:06 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E7=B3=BB=E7=BB=9F=E5=8F=AF=E6=9A=B4?= =?UTF-8?q?=E9=9C=B2=E7=9A=84=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/common/common.go | 4 +++- src/modules/common/controller/common.go | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/modules/common/common.go b/src/modules/common/common.go index 13f0b9cf..ffdec896 100644 --- a/src/modules/common/common.go +++ b/src/modules/common/common.go @@ -23,6 +23,9 @@ func Setup(router *gin.Engine) { controller.NewIndex.Handler, ) + // 系统可暴露的配置信息 + indexGroup.GET("/sys-conf", controller.NewCommont.SysConfig) + // 验证码操作处理 indexGroup.GET("/captchaImage", middleware.RateLimit(middleware.LimitOption{ @@ -71,7 +74,6 @@ func Setup(router *gin.Engine) { commonGroup := router.Group("/common") { commonGroup.GET("/hash", middleware.PreAuthorize(nil), controller.NewCommont.Hash) - indexGroup.GET("/sysConf", controller.NewCommont.SysConfig) } // 文件操作处理 diff --git a/src/modules/common/controller/common.go b/src/modules/common/controller/common.go index 0e677f83..8975ced0 100644 --- a/src/modules/common/controller/common.go +++ b/src/modules/common/controller/common.go @@ -28,7 +28,7 @@ func (s *CommontController) Hash(c *gin.Context) { // 系统可暴露的配置信息 // -// GET /sysConf +// GET /sys-conf func (s *CommontController) SysConfig(c *gin.Context) { data := s.commontService.SystemConfigInfo() c.JSON(200, result.OkData(data)) From 4197644a9219f0792e2f1965c092b84beacc5dda Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 27 Oct 2023 10:07:34 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E8=B7=AF=E7=94=B1=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/routes/routes.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/routes/routes.go b/lib/routes/routes.go index f55ade66..37798bbb 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -116,7 +116,7 @@ func init() { Register("DELETE", dbrest.CustomXormExtDataUri, dbrest.ExtDatabaseDeleteData, deletePermission) // alarm restful Register - Register("POST", fm.UriAlarms, fm.PostAlarmFromNF, nil) + Register("POST", fm.UriAlarms, fm.PostAlarmFromNF, midware.LogOperate(collectlogs.OptionNew("Alarm", collectlogs.BUSINESS_TYPE_UPDATE))) Register("Get", fm.UriAlarms, fm.GetAlarmFromNF, nil) Register("POST", fm.CustomUriAlarms, fm.PostAlarmFromNF, nil) @@ -156,9 +156,9 @@ func init() { // Get/Create/Modify/Delete NE info Register("GET", cm.UriNeInfo, cm.GetNeInfo, nil) - Register("POST", cm.UriNeInfo, cm.PostNeInfo, nil) - Register("PUT", cm.UriNeInfo, cm.PutNeInfo, nil) - Register("DELETE", cm.UriNeInfo, cm.DeleteNeInfo, nil) + Register("POST", cm.UriNeInfo, cm.PostNeInfo, midware.LogOperate(collectlogs.OptionNew("NE info", collectlogs.BUSINESS_TYPE_INSERT))) + Register("PUT", cm.UriNeInfo, cm.PutNeInfo, midware.LogOperate(collectlogs.OptionNew("NE info", collectlogs.BUSINESS_TYPE_UPDATE))) + Register("DELETE", cm.UriNeInfo, cm.DeleteNeInfo, midware.LogOperate(collectlogs.OptionNew("NE info", collectlogs.BUSINESS_TYPE_DELETE))) // Get/Create/Modify/Delete NE info Register("GET", cm.CustomUriNeInfo, cm.GetNeInfo, nil) @@ -183,10 +183,10 @@ func init() { // Import/Export NF CM Register("GET", cm.NeCmUri, cm.ExportCmFromNF, nil) - Register("POST", cm.NeCmUri, cm.ImportCmToNF, nil) + Register("POST", cm.NeCmUri, cm.ImportCmToNF, midware.LogOperate(collectlogs.OptionNew("Import NF", collectlogs.BUSINESS_TYPE_INSERT))) Register("GET", cm.UriNeCmFile, cm.DownloadNeBackupFile, nil) - Register("DELETE", cm.UriNeCmFile, cm.DeleteNeBackupFile, nil) + Register("DELETE", cm.UriNeCmFile, cm.DeleteNeBackupFile, midware.LogOperate(collectlogs.OptionNew("Delete NF Backup", collectlogs.BUSINESS_TYPE_DELETE))) Register("GET", cm.CustomNeCmUri, cm.ExportCmFromNF, nil) Register("POST", cm.CustomNeCmUri, cm.ImportCmToNF, nil) @@ -197,12 +197,12 @@ func init() { // Software management Register("GET", cm.UriSoftware, cm.DownloadSoftwareFile, nil) //Register("POST", cm.UriSoftware, cm.UploadSoftwareFile, nil) - Register("POST", cm.UriSoftware, cm.UploadSoftwareMultiFile, nil) - Register("DELETE", cm.UriSoftware, cm.DeleteSoftwareFile, nil) + Register("POST", cm.UriSoftware, cm.UploadSoftwareMultiFile, midware.LogOperate(collectlogs.OptionNew("Software management", collectlogs.BUSINESS_TYPE_UPDATE))) + Register("DELETE", cm.UriSoftware, cm.DeleteSoftwareFile, midware.LogOperate(collectlogs.OptionNew("Software management", collectlogs.BUSINESS_TYPE_DELETE))) - Register("POST", cm.UriSoftwareNE, cm.DistributeSoftwareToNF, nil) - Register("PUT", cm.UriSoftwareNE, cm.ActiveSoftwareToNF, nil) - Register("PATCH", cm.UriSoftwareNE, cm.RollBackSoftwareToNF, nil) + Register("POST", cm.UriSoftwareNE, cm.DistributeSoftwareToNF, midware.LogOperate(collectlogs.OptionNew("Software management", collectlogs.BUSINESS_TYPE_OTHER))) + Register("PUT", cm.UriSoftwareNE, cm.ActiveSoftwareToNF, midware.LogOperate(collectlogs.OptionNew("Software management", collectlogs.BUSINESS_TYPE_OTHER))) + Register("PATCH", cm.UriSoftwareNE, cm.RollBackSoftwareToNF, midware.LogOperate(collectlogs.OptionNew("Software management", collectlogs.BUSINESS_TYPE_OTHER))) Register("GET", cm.CustomUriSoftware, cm.DownloadSoftwareFile, nil) Register("POST", cm.CustomUriSoftware, cm.UploadSoftwareFile, nil) @@ -213,8 +213,8 @@ func init() { Register("PATCH", cm.CustomUriSoftwareNE, cm.RollBackSoftwareToNF, nil) // License management - Register("POST", cm.UriLicense, cm.UploadLicenseFileData, nil) - Register("POST", cm.UriLicenseExt, cm.UploadLicenseFileData, nil) + Register("POST", cm.UriLicense, cm.UploadLicenseFileData, midware.LogOperate(collectlogs.OptionNew("License management", collectlogs.BUSINESS_TYPE_INSERT))) + Register("POST", cm.UriLicenseExt, cm.UploadLicenseFileData, midware.LogOperate(collectlogs.OptionNew("License management", collectlogs.BUSINESS_TYPE_INSERT))) Register("POST", cm.CustomUriLicense, cm.UploadLicenseFileData, nil) Register("POST", cm.CustomUriLicenseExt, cm.UploadLicenseFileData, nil)