From 28bc2abb51142b0c70c7d72873ea9737c9a15922 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 23 Nov 2024 11:56:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=95=99=E5=AD=A6=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/pt_sys_user.go | 102 ++++++++++++++++++ .../practical_training/practical_training.go | 6 ++ 2 files changed, 108 insertions(+) diff --git a/src/modules/practical_training/controller/pt_sys_user.go b/src/modules/practical_training/controller/pt_sys_user.go index 7e5ce306..139734b8 100644 --- a/src/modules/practical_training/controller/pt_sys_user.go +++ b/src/modules/practical_training/controller/pt_sys_user.go @@ -2,6 +2,7 @@ package controller import ( "fmt" + "strconv" "strings" "time" @@ -9,6 +10,7 @@ import ( "be.ems/src/framework/constants/common" "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" + "be.ems/src/framework/utils/date" "be.ems/src/framework/utils/file" "be.ems/src/framework/utils/parse" "be.ems/src/framework/vo/result" @@ -247,3 +249,103 @@ func (s *PtSysUserController) ImportData(c *gin.Context) { c.JSON(200, result.OkMsg(message)) } + +// 用户信息列表导出 +// +// POST /export +func (s *PtSysUserController) Export(c *gin.Context) { + language := ctx.AcceptLanguage(c) + // 查询结果,根据查询条件结果,单页最大值限制 + querys := ctx.BodyJSONMap(c) + querys["pageNum"] = 1 + querys["pageSize"] = 10000 + dataScopeSQL := ctx.LoginUserToDataScopeSQL(c, "d", "u") + data := s.sysUserService.SelectUserPage(querys, dataScopeSQL) + if parse.Number(data["total"]) == 0 { + // 导出数据记录为空 + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) + return + } + rows := data["rows"].([]model.SysUser) + + // 闭包函数处理多语言 + converI18n := func(language string, arr *[]model.SysUser) { + for i := range *arr { + (*arr)[i].NickName = i18n.TKey(language, (*arr)[i].NickName) + (*arr)[i].Remark = i18n.TKey(language, (*arr)[i].Remark) + (*arr)[i].Dept.DeptName = i18n.TKey(language, (*arr)[i].Dept.DeptName) + for ri := range (*arr)[i].Roles { + (*arr)[i].Roles[ri].RoleName = i18n.TKey(language, (*arr)[i].Roles[ri].RoleName) + } + } + } + converI18n(language, &rows) + + // 导出文件名称 + fileName := fmt.Sprintf("user_export_%d_%d.xlsx", len(rows), time.Now().UnixMilli()) + // 第一行表头标题 + headerCells := map[string]string{ + "A1": i18n.TKey(language, "user.export.id"), + "B1": i18n.TKey(language, "user.export.name"), + "C1": i18n.TKey(language, "user.export.nick"), + "D1": i18n.TKey(language, "user.export.role"), + "E1": i18n.TKey(language, "user.export.deptName"), + "F1": i18n.TKey(language, "user.export.loginIP"), + "G1": i18n.TKey(language, "user.export.loginDate"), + "H1": i18n.TKey(language, "user.export.status"), + // "F1": i18n.TKey(language, "user.export.sex"), + // "E1": i18n.TKey(language, "user.export.phone"), + // "D1": i18n.TKey(language, "user.export.email"), + // "I1": i18n.TKey(language, "user.export.deptID"), + // "K1": i18n.TKey(language, "user.export.deptLeader"), + } + // 读取用户性别字典数据 + // dictSysUserSex := s.sysDictDataService.SelectDictDataByType("sys_user_sex") + // 从第二行开始的数据 + dataCells := make([]map[string]any, 0) + for i, row := range rows { + idx := strconv.Itoa(i + 2) + // 用户性别 + // sysUserSex := row.Sex + // for _, v := range dictSysUserSex { + // if row.Sex == v.DictValue { + // sysUserSex = i18n.TKey(language, v.DictLabel) + // break + // } + // } + // 帐号状态 + statusValue := i18n.TKey(language, "dictData.disable") + if row.Status == "1" { + statusValue = i18n.TKey(language, "dictData.normal") + } + // 用户角色, 默认导出首个 + userRole := "" + if len(row.Roles) > 0 { + userRole = i18n.TKey(language, row.Roles[0].RoleName) + } + dataCells = append(dataCells, map[string]any{ + "A" + idx: row.UserID, + "B" + idx: row.UserName, + "C" + idx: row.NickName, + "D" + idx: userRole, + "E" + idx: row.Dept.DeptName, + "F" + idx: row.LoginIP, + "G" + idx: date.ParseDateToStr(row.LoginDate, date.YYYY_MM_DD_HH_MM_SS), + "H" + idx: statusValue, + // "E" + idx: row.PhoneNumber, + // "F" + idx: sysUserSex, + // "D" + idx: row.Email, + // "I" + idx: row.Dept.DeptID, + // "K" + idx: row.Dept.Leader, + }) + } + + // 导出数据表格 + saveFilePath, err := file.WriteSheet(headerCells, dataCells, fileName, "") + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + + c.FileAttachment(saveFilePath, fileName) +} diff --git a/src/modules/practical_training/practical_training.go b/src/modules/practical_training/practical_training.go index 0674caa2..710ab41d 100644 --- a/src/modules/practical_training/practical_training.go +++ b/src/modules/practical_training/practical_training.go @@ -107,7 +107,13 @@ func Setup(router *gin.Engine) { ) systemUserGroup.POST("/importData", middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysUser", collectlogs.BUSINESS_TYPE_INSERT)), controller.NewSysUser.ImportData, ) + systemUserGroup.POST("/export", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.sysUser", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewSysUser.Export, + ) } }