1
0

feat: 多语言处理tkey

This commit is contained in:
TsMask
2023-11-21 14:42:37 +08:00
parent f490d9af0f
commit d5d3feb5fc
61 changed files with 1381 additions and 757 deletions

View File

@@ -8,6 +8,8 @@ import (
"ems.agt/src/framework/config"
"ems.agt/src/framework/constants/admin"
"ems.agt/src/framework/constants/common"
"ems.agt/src/framework/i18n"
"ems.agt/src/framework/utils/ctx"
"ems.agt/src/framework/utils/date"
"ems.agt/src/framework/utils/file"
@@ -27,6 +29,7 @@ var NewSysUser = &SysUserController{
sysRoleService: service.NewSysRoleImpl,
sysPostService: service.NewSysPostImpl,
sysDictDataService: service.NewSysDictDataImpl,
sysConfigService: service.NewSysConfigImpl,
}
// 用户信息
@@ -41,6 +44,8 @@ type SysUserController struct {
sysPostService service.ISysPost
// 字典数据服务
sysDictDataService service.ISysDictData
// 参数配置服务
sysConfigService service.ISysConfig
}
// 用户信息列表
@@ -50,6 +55,22 @@ func (s *SysUserController) List(c *gin.Context) {
querys := ctx.QueryMap(c)
dataScopeSQL := ctx.LoginUserToDataScopeSQL(c, "d", "u")
data := s.sysUserService.SelectUserPage(querys, dataScopeSQL)
rows := data["rows"].([]model.SysUser)
// 闭包函数处理多语言
language := ctx.AcceptLanguage(c)
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)
c.JSON(200, result.Ok(data))
}
@@ -57,11 +78,13 @@ func (s *SysUserController) List(c *gin.Context) {
//
// GET /:userId
func (s *SysUserController) Info(c *gin.Context) {
language := ctx.AcceptLanguage(c)
userId := c.Param("userId")
if userId == "" {
c.JSON(400, result.CodeMsg(400, "parameter error"))
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
// 查询系统角色列表
dataScopeSQL := ctx.LoginUserToDataScopeSQL(c, "d", "")
roles := s.sysRoleService.SelectRoleList(model.SysRole{}, dataScopeSQL)
@@ -77,9 +100,27 @@ func (s *SysUserController) Info(c *gin.Context) {
roles = rolesFilter
}
// 闭包函数处理多语言
converI18nRoles := func(language string, arr *[]model.SysRole) {
for i := range *arr {
(*arr)[i].RoleName = i18n.TKey(language, (*arr)[i].RoleName)
(*arr)[i].Remark = i18n.TKey(language, (*arr)[i].Remark)
}
}
converI18nRoles(language, &roles)
// 查询系统岗位列表
posts := s.sysPostService.SelectPostList(model.SysPost{})
// 闭包函数处理多语言
converI18nPosts := func(language string, arr *[]model.SysPost) {
for i := range *arr {
(*arr)[i].PostName = i18n.TKey(language, (*arr)[i].PostName)
(*arr)[i].Remark = i18n.TKey(language, (*arr)[i].Remark)
}
}
converI18nPosts(language, &posts)
// 新增用户时用户ID为0
if userId == "0" {
c.JSON(200, result.OkData(map[string]any{
@@ -95,10 +136,18 @@ func (s *SysUserController) Info(c *gin.Context) {
// 检查用户是否存在
user := s.sysUserService.SelectUserById(userId)
if user.UserID != userId {
c.JSON(200, result.ErrMsg("There is no accessible user data!"))
c.JSON(200, result.ErrMsg(i18n.TKey(language, "user.noData")))
return
}
// 处理多语言
user.NickName = i18n.TKey(language, user.NickName)
user.Remark = i18n.TKey(language, user.Remark)
user.Dept.DeptName = i18n.TKey(language, user.Dept.DeptName)
for ri := range user.Roles {
user.Roles[ri].RoleName = i18n.TKey(language, user.Roles[ri].RoleName)
}
// 角色ID组
roleIds := make([]string, 0)
for _, r := range user.Roles {
@@ -125,10 +174,11 @@ func (s *SysUserController) Info(c *gin.Context) {
//
// POST /
func (s *SysUserController) Add(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var body model.SysUser
err := c.ShouldBindBodyWith(&body, binding.JSON)
if err != nil || body.UserID != "" {
c.JSON(400, result.CodeMsg(400, "parameter error"))
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
@@ -137,7 +187,7 @@ func (s *SysUserController) Add(c *gin.Context) {
Password string `json:"password" binding:"required"`
}
if err := c.ShouldBindBodyWith(&bodyPassword, binding.JSON); err != nil {
c.JSON(400, result.CodeMsg(400, "parameter error"))
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
body.Password = bodyPassword.Password
@@ -146,7 +196,8 @@ func (s *SysUserController) Add(c *gin.Context) {
uniqueUserName := s.sysUserService.CheckUniqueUserName(body.UserName, "")
if !uniqueUserName {
// 新增用户【%s】失败登录账号已存在
msg := fmt.Sprintf("Failed to add user [%s], login account already exists", body.UserName)
// msg := fmt.Sprintf("Failed to add user [%s], login account already exists", body.UserName)
msg := i18n.TTemplate(language, "user.errNameExists", map[string]any{"name": body.UserName})
c.JSON(200, result.ErrMsg(msg))
return
}
@@ -157,13 +208,15 @@ func (s *SysUserController) Add(c *gin.Context) {
uniquePhone := s.sysUserService.CheckUniquePhone(body.PhoneNumber, "")
if !uniquePhone {
// 新增用户【%s】失败手机号码已存在
msg := fmt.Sprintf("Failed to add user [%s], cell phone number already exists", body.UserName)
// msg := fmt.Sprintf("Failed to add user [%s], cell phone number already exists", body.UserName)
msg := i18n.TTemplate(language, "user.errPhoneExists", map[string]any{"name": body.UserName})
c.JSON(200, result.ErrMsg(msg))
return
}
} else {
// 新增用户【%s】失败手机号码格式错误
msg := fmt.Sprintf("Failed to add user [%s], wrong format of cell phone number", body.UserName)
// msg := fmt.Sprintf("Failed to add user [%s], wrong format of cell phone number", body.UserName)
msg := i18n.TTemplate(language, "user.errPhoneFormat", map[string]any{"name": body.UserName})
c.JSON(200, result.ErrMsg(msg))
return
}
@@ -175,13 +228,15 @@ func (s *SysUserController) Add(c *gin.Context) {
uniqueEmail := s.sysUserService.CheckUniqueEmail(body.Email, "")
if !uniqueEmail {
// 新增用户【%s】失败邮箱已存在
msg := fmt.Sprintf("Failed to add user [%s], mailbox already exists", body.UserName)
// msg := fmt.Sprintf("Failed to add user [%s], mailbox already exists", body.UserName)
msg := i18n.TTemplate(language, "user.errEmailExists", map[string]any{"name": body.UserName})
c.JSON(200, result.ErrMsg(msg))
return
}
} else {
// 新增用户【%s】失败邮箱格式错误
msg := fmt.Sprintf("Failed to add user [%s], mailbox format error", body.UserName)
// msg := fmt.Sprintf("Failed to add user [%s], mailbox format error", body.UserName)
msg := i18n.TTemplate(language, "user.errEmailFormat", map[string]any{"name": body.UserName})
c.JSON(200, result.ErrMsg(msg))
return
}
@@ -200,24 +255,25 @@ func (s *SysUserController) Add(c *gin.Context) {
//
// POST /
func (s *SysUserController) Edit(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var body model.SysUser
err := c.ShouldBindBodyWith(&body, binding.JSON)
if err != nil || body.UserID == "" {
c.JSON(400, result.CodeMsg(400, "parameter error"))
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
// 检查是否管理员用户
if config.IsAdmin(body.UserID) {
// 不允许操作管理员用户
c.JSON(200, result.ErrMsg("Administrator users are not allowed to operate"))
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.errOperateAdmin")))
return
}
user := s.sysUserService.SelectUserById(body.UserID)
if user.UserID != body.UserID {
// 没有可访问用户数据!
c.JSON(200, result.ErrMsg("There is no accessible user data!"))
c.JSON(200, result.ErrMsg(i18n.TKey(language, "user.noData")))
return
}
@@ -225,7 +281,8 @@ func (s *SysUserController) Edit(c *gin.Context) {
uniqueUserName := s.sysUserService.CheckUniqueUserName(body.UserName, body.UserID)
if !uniqueUserName {
// 修改用户【%s】失败登录账号已存在
msg := fmt.Sprintf("Failed to modify user [%s], login account already exists", body.UserName)
// msg := fmt.Sprintf("Failed to modify user [%s], login account already exists", body.UserName)
msg := i18n.TTemplate(language, "user.errNameExists", map[string]any{"name": body.UserName})
c.JSON(200, result.ErrMsg(msg))
return
}
@@ -236,13 +293,15 @@ func (s *SysUserController) Edit(c *gin.Context) {
uniquePhone := s.sysUserService.CheckUniquePhone(body.PhoneNumber, body.UserID)
if !uniquePhone {
// 修改用户【%s】失败手机号码已存在
msg := fmt.Sprintf("Failed to modify user [%s], cell phone number already exists", body.UserName)
// msg := fmt.Sprintf("Failed to modify user [%s], cell phone number already exists", body.UserName)
msg := i18n.TTemplate(language, "user.errPhoneExists", map[string]any{"name": body.UserName})
c.JSON(200, result.ErrMsg(msg))
return
}
} else {
// 修改用户【%s】失败手机号码格式错误
msg := fmt.Sprintf("Failed to modify user [%s], wrong format of cell phone number", body.UserName)
// msg := fmt.Sprintf("Failed to modify user [%s], wrong format of cell phone number", body.UserName)
msg := i18n.TTemplate(language, "user.errPhoneFormat", map[string]any{"name": body.UserName})
c.JSON(200, result.ErrMsg(msg))
return
}
@@ -254,13 +313,15 @@ func (s *SysUserController) Edit(c *gin.Context) {
uniqueEmail := s.sysUserService.CheckUniqueEmail(body.Email, body.UserID)
if !uniqueEmail {
// 修改用户【%s】失败邮箱已存在
msg := fmt.Sprintf("Failed to modify user [%s], mailbox already exists", body.UserName)
// msg := fmt.Sprintf("Failed to modify user [%s], mailbox already exists", body.UserName)
msg := i18n.TTemplate(language, "user.errEmailExists", map[string]any{"name": body.UserName})
c.JSON(200, result.ErrMsg(msg))
return
}
} else {
// 修改用户【%s】失败邮箱格式错误
msg := fmt.Sprintf("Failed to modify user [%s], mailbox format error", body.UserName)
// msg := fmt.Sprintf("Failed to modify user [%s], mailbox format error", body.UserName)
msg := i18n.TTemplate(language, "user.errEmailFormat", map[string]any{"name": body.UserName})
c.JSON(200, result.ErrMsg(msg))
return
}
@@ -283,9 +344,10 @@ func (s *SysUserController) Edit(c *gin.Context) {
//
// DELETE /:userIds
func (s *SysUserController) Remove(c *gin.Context) {
language := ctx.AcceptLanguage(c)
userIds := c.Param("userIds")
if userIds == "" {
c.JSON(400, result.CodeMsg(400, "parameter error"))
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
// 处理字符转id数组后去重
@@ -295,13 +357,23 @@ func (s *SysUserController) Remove(c *gin.Context) {
c.JSON(200, result.Err(nil))
return
}
// 检查是否管理员用户
for _, id := range uniqueIDs {
if config.IsAdmin(id) {
// 不允许操作管理员用户
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.errOperateAdmin")))
return
}
}
rows, err := s.sysUserService.DeleteUserByIds(uniqueIDs)
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
// 删除成功:%d
msg := fmt.Sprintf("Deleted successfully: %d", rows)
msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows})
c.JSON(200, result.OkMsg(msg))
}
@@ -309,31 +381,32 @@ func (s *SysUserController) Remove(c *gin.Context) {
//
// PUT /resetPwd
func (s *SysUserController) ResetPwd(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var body struct {
UserID string `json:"userId" binding:"required"`
Password string `json:"password" binding:"required"`
}
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil {
c.JSON(400, result.CodeMsg(400, "parameter error"))
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
// 检查是否管理员用户
if config.IsAdmin(body.UserID) {
// 不允许操作管理员用户
c.JSON(200, result.ErrMsg("Administrator users are not allowed to operate"))
// 不允许操作内置用户
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.errOperateAdmin")))
return
}
user := s.sysUserService.SelectUserById(body.UserID)
if user.UserID != body.UserID {
// 没有可访问用户数据!
c.JSON(200, result.ErrMsg("There is no accessible user data!"))
c.JSON(200, result.ErrMsg(i18n.TKey(language, "user.noData")))
return
}
if !regular.ValidPassword(body.Password) {
// 登录密码至少包含大小写字母、数字、特殊符号且不少于6位
c.JSON(200, result.ErrMsg("Login password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits"))
c.JSON(200, result.ErrMsg(i18n.TKey(language, "user.errPasswd")))
return
}
@@ -355,12 +428,13 @@ func (s *SysUserController) ResetPwd(c *gin.Context) {
//
// PUT /changeStatus
func (s *SysUserController) Status(c *gin.Context) {
language := ctx.AcceptLanguage(c)
var body struct {
UserID string `json:"userId" binding:"required"`
Status string `json:"status" binding:"required"`
}
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil {
c.JSON(400, result.CodeMsg(400, "parameter error"))
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
@@ -368,14 +442,14 @@ func (s *SysUserController) Status(c *gin.Context) {
user := s.sysUserService.SelectUserById(body.UserID)
if user.UserID != body.UserID {
// 没有可访问用户数据!
c.JSON(200, result.ErrMsg("There is no accessible user data!"))
c.JSON(200, result.ErrMsg(i18n.TKey(language, "user.noData")))
return
}
// 与旧值相等不变更
if user.Status == body.Status {
// 变更状态与旧值相等!
c.JSON(200, result.ErrMsg("The change status is equal to the old value!"))
c.JSON(200, result.ErrMsg(i18n.TKey(language, "user.statusEq")))
return
}
@@ -397,33 +471,47 @@ func (s *SysUserController) Status(c *gin.Context) {
//
// POST /export
func (s *SysUserController) Export(c *gin.Context) {
language := ctx.AcceptLanguage(c)
// 查询结果,根据查询条件结果,单页最大值限制
querys := ctx.BodyJSONMap(c)
dataScopeSQL := ctx.LoginUserToDataScopeSQL(c, "d", "u")
data := s.sysUserService.SelectUserPage(querys, dataScopeSQL)
if data["total"].(int64) == 0 {
// 导出数据记录为空
c.JSON(200, result.ErrMsg("Export data record is empty"))
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": "UserID",
"B1": "UserName",
"C1": "NickName",
"D1": "Email",
"E1": "PhoneNumber",
"F1": "UserSex",
"G1": "Status",
"H1": "DeptID",
"I1": "DeptName",
"J1": "DeptLeader",
"K1": "LoginIP",
"L1": "LoginDate",
"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.email"),
"E1": i18n.TKey(language, "user.export.phone"),
"F1": i18n.TKey(language, "user.export.sex"),
"G1": i18n.TKey(language, "user.export.status"),
"H1": i18n.TKey(language, "user.export.deptID"),
"I1": i18n.TKey(language, "user.export.deptName"),
"J1": i18n.TKey(language, "user.export.deptLeader"),
"K1": i18n.TKey(language, "user.export.loginIP"),
"L1": i18n.TKey(language, "user.export.loginDate"),
}
// 读取用户性别字典数据
dictSysUserSex := s.sysDictDataService.SelectDictDataByType("sys_user_sex")
@@ -432,17 +520,17 @@ func (s *SysUserController) Export(c *gin.Context) {
for i, row := range rows {
idx := strconv.Itoa(i + 2)
// 用户性别
sysUserSex := "unknown"
sysUserSex := row.Sex
for _, v := range dictSysUserSex {
if row.Sex == v.DictValue {
sysUserSex = v.DictLabel
sysUserSex = i18n.TKey(language, v.DictLabel)
break
}
}
// 帐号状态
statusValue := "deactivate"
statusValue := i18n.TKey(language, "dictData.disable")
if row.Status == "1" {
statusValue = "normalcy"
statusValue = i18n.TKey(language, "dictData.normal")
}
dataCells = append(dataCells, map[string]any{
"A" + idx: row.UserID,
@@ -475,11 +563,13 @@ func (s *SysUserController) Export(c *gin.Context) {
// GET /importTemplate
func (s *SysUserController) Template(c *gin.Context) {
fileName := fmt.Sprintf("user_import_template_%d.xlsx", time.Now().UnixMilli())
asserPath := "assets/template/excel/user_import_template.xlsx"
// 多语言处理
language := ctx.AcceptLanguage(c)
asserPath := fmt.Sprintf("assets/template/excel/user_import_template_%s.xlsx", language)
// 从 embed.FS 中读取默认配置文件内容
assetsDir := config.GetAssetsDirFS()
// 读取内嵌文件
fileData, err := assetsDir.ReadFile(asserPath)
if err != nil {
@@ -499,12 +589,13 @@ func (s *SysUserController) Template(c *gin.Context) {
//
// POST /importData
func (s *SysUserController) ImportData(c *gin.Context) {
language := ctx.AcceptLanguage(c)
// 允许进行更新
updateSupport := c.PostForm("updateSupport")
// 上传的文件
formFile, err := c.FormFile("file")
if err != nil || updateSupport == "" {
c.JSON(400, result.CodeMsg(400, "parameter error"))
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
@@ -525,6 +616,152 @@ func (s *SysUserController) ImportData(c *gin.Context) {
// 获取操作人名称
operName := ctx.LoginUserToUserName(c)
isUpdateSupport := parse.Boolean(updateSupport)
message := s.sysUserService.ImportUser(rows, isUpdateSupport, operName)
// 读取默认初始密码
initPassword := s.sysConfigService.SelectConfigValueByKey("sys.user.initPassword")
// 读取用户性别字典数据
dictSysUserSex := s.sysDictDataService.SelectDictDataByType("sys_user_sex")
// 导入记录
successNum := 0
failureNum := 0
successMsgArr := []string{}
failureMsgArr := []string{}
mustItemArr := []string{"B", "C"}
for _, row := range rows {
// 检查必填列
ownItem := true
for _, item := range mustItemArr {
if v, ok := row[item]; !ok || v == "" {
ownItem = false
break
}
}
if !ownItem {
mustItemArrStr := strings.Join(mustItemArr, "、")
failureNum++
// 表格中必填列表项,
msg := i18n.TTemplate(language, "user.import.mustItem", map[string]any{"text": mustItemArrStr})
failureMsgArr = append(failureMsgArr, msg)
continue
}
// 用户性别转值
sysUserSex := "0"
for _, v := range dictSysUserSex {
label := i18n.TKey(language, v.DictLabel)
if row["F"] == label {
sysUserSex = v.DictValue
break
}
}
sysUserStatus := common.STATUS_NO
if row["G"] == "Normal" {
sysUserStatus = common.STATUS_YES
}
// 构建用户实体信息
newSysUser := model.SysUser{
UserType: "sys",
Password: initPassword,
DeptID: row["H"],
UserName: row["B"],
NickName: row["C"],
PhoneNumber: row["E"],
Email: row["D"],
Status: sysUserStatus,
Sex: sysUserSex,
}
// 检查手机号码格式并判断是否唯一
if newSysUser.PhoneNumber != "" {
if regular.ValidMobile(newSysUser.PhoneNumber) {
uniquePhone := s.sysUserService.CheckUniquePhone(newSysUser.PhoneNumber, "")
if !uniquePhone {
// 用户编号:%s 手机号码 %s 已存在
msg := i18n.TTemplate(language, "user.import.phoneExist", map[string]any{"id": row["A"], "phone": newSysUser.PhoneNumber})
failureNum++
failureMsgArr = append(failureMsgArr, msg)
continue
}
} else {
// 用户编号:%s 手机号码 %s 格式错误
msg := i18n.TTemplate(language, "user.import.phoneFormat", map[string]any{"id": row["A"], "phone": newSysUser.PhoneNumber})
failureNum++
failureMsgArr = append(failureMsgArr, msg)
continue
}
}
// 检查邮箱格式并判断是否唯一
if newSysUser.Email != "" {
if regular.ValidEmail(newSysUser.Email) {
uniqueEmail := s.sysUserService.CheckUniqueEmail(newSysUser.Email, "")
if !uniqueEmail {
// 用户编号:%s 用户邮箱 %s 已存在
msg := i18n.TTemplate(language, "user.import.emailExist", map[string]any{"id": row["A"], "email": newSysUser.Email})
failureNum++
failureMsgArr = append(failureMsgArr, msg)
continue
}
} else {
// 用户编号:%s 用户邮箱 %s 格式错误
msg := i18n.TTemplate(language, "user.import.emailFormat", map[string]any{"id": row["A"], "email": newSysUser.Email})
failureNum++
failureMsgArr = append(failureMsgArr, msg)
continue
}
}
// 验证是否存在这个用户
userInfo := s.sysUserService.SelectUserByUserName(newSysUser.UserName)
if userInfo.UserName != newSysUser.UserName {
newSysUser.CreateBy = operName
insertId := s.sysUserService.InsertUser(newSysUser)
if insertId != "" {
// 用户编号:%s 登录名称 %s 导入成功
msg := i18n.TTemplate(language, "user.import.success", map[string]any{"id": row["A"], "name": newSysUser.UserName})
successNum++
successMsgArr = append(successMsgArr, msg)
} else {
// 用户编号:%s 登录名称 %s 导入失败
msg := i18n.TTemplate(language, "user.import.fail", map[string]any{"id": row["A"], "email": newSysUser.UserName})
failureNum++
failureMsgArr = append(failureMsgArr, msg)
}
continue
}
// 如果用户已存在 同时 是否更新支持
if userInfo.UserName == newSysUser.UserName && isUpdateSupport {
newSysUser.UserID = userInfo.UserID
newSysUser.UpdateBy = operName
rows := s.sysUserService.UpdateUser(newSysUser)
if rows > 0 {
// 用户编号:%s 登录名称 %s 更新成功
msg := i18n.TTemplate(language, "user.import.successUpdate", map[string]any{"id": row["A"], "email": newSysUser.UserName})
successNum++
successMsgArr = append(successMsgArr, msg)
} else {
// 用户编号:%s 登录名称 %s 更新失败
msg := i18n.TTemplate(language, "user.import.failUpdate", map[string]any{"id": row["A"], "email": newSysUser.UserName})
failureNum++
failureMsgArr = append(failureMsgArr, msg)
}
continue
}
}
message := ""
if failureNum > 0 {
// 很抱歉,导入失败!共 %d 条数据格式不正确,错误如下:
msg := i18n.TTemplate(language, "user.import.failTip", map[string]any{"num": failureNum})
message = strings.Join(append([]string{msg}, failureMsgArr...), "<br/>")
} else {
// 恭喜您,数据已全部导入成功!共 %d 条,数据如下:
msg := i18n.TTemplate(language, "user.import.successTip", map[string]any{"num": failureNum})
message = strings.Join(append([]string{msg}, successMsgArr...), "<br/>")
}
c.JSON(200, result.OkMsg(message))
}