mh_goadmin_server/app/admin/apis/system/sysuser.go
chenlin 0a5fe58bbe 优化生产反馈缺陷:
1.小程序调用erp登录接口不判断验证码;
2.修改原接口的翻页相关字段;
3.修复float64转int32精度丢失的缺陷;
4.注释库存导入时采购价需大于0的校验;
5.相关域名改成生产环境域名;
2024-07-03 18:56:33 +08:00

475 lines
14 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package system
import (
"encoding/json"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"github.com/google/uuid"
"go-admin/app/admin/models"
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/tools"
"go-admin/tools/app"
"net/http"
)
// GetSysUserList
// @Summary 列表用户信息数据(update)
// @Description 获取JSON
// @Tags system/用户
// @Param username query string false "用户名称"
// @Param status query int false "状态0-正常1-停用"
// @Param phone query string false "手机号"
// @Param pageIndex query string false "页码"
// @Param pageSize query string false "页面条数"
// @Param roleId query string false "角色id"
// @Param nickName query string false "昵称"
// @Param storeId query string false "门店id"
// @Success 200 {object} models.SysUserListResp
// @Router /api/v1/sysUserList [get]
// @Security Bearer
func GetSysUserList(c *gin.Context) {
var data models.SysUser
var err error
var pageSize = 10
var pageIndex = 1
size := c.Request.FormValue("pageSize")
if size != "" {
pageSize, err = tools.StringToInt(size)
}
index := c.Request.FormValue("pageIndex")
if index != "" {
pageIndex, err = tools.StringToInt(index)
}
data.Username = c.Request.FormValue("username") // 用户名称
data.Status = c.Request.FormValue("status") // 状态
data.Phone = c.Request.FormValue("phone") // 手机号
strRoleId := c.Request.FormValue("roleId") // 用户角色
data.RoleId, _ = tools.StringToInt(strRoleId)
data.NickName = c.Request.FormValue("nickName") // 用户昵称
strStoreId := c.Request.FormValue("storeId") // 门店id
nStoreId, _ := tools.StringToInt(strStoreId)
data.StoreId = uint32(nStoreId)
postId := c.Request.FormValue("postId")
data.PostId, _ = tools.StringToInt(postId)
deptId := c.Request.FormValue("deptId")
data.DeptId, _ = tools.StringToInt(deptId)
data.DataScope = tools.GetUserIdStr(c)
result, count, err := data.GetPage(pageSize, pageIndex)
tools.HasError(err, "", -1)
app.PageOK(c, result, count, pageIndex, pageSize, "")
}
// GetSysUser
// @Summary 获取用户
// @Description 获取JSON
// @Tags system/用户
// @Param userId path int true "用户编码"
// @Success 200 {object} app.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sysUser/{userId} [get]
// @Security Bearer
func GetSysUser(c *gin.Context) {
var SysUser models.SysUser
SysUser.UserId, _ = tools.StringToInt(c.Param("userId"))
result, err := SysUser.Get()
tools.HasError(err, "抱歉未找到相关信息", -1)
var SysRole models.SysRole
var Post models.Post
roles, err := SysRole.GetList()
posts, err := Post.GetList()
postIds := make([]int, 0)
postIds = append(postIds, result.PostId)
roleIds := make([]int, 0)
roleIds = append(roleIds, result.RoleId)
app.Custum(c, gin.H{
"code": 200,
"data": result,
"postIds": postIds,
"roleIds": roleIds,
"roles": roles,
"posts": posts,
})
}
// @Summary 获取个人中心用户
// @Description 获取JSON
// @Tags system/用户
// @Success 200 {object} app.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/user/profile [get]
// @Security Bearer
func GetSysUserProfile(c *gin.Context) {
var SysUser models.SysUser
userId := tools.GetUserIdStr(c)
SysUser.UserId, _ = tools.StringToInt(userId)
result, err := SysUser.Get()
tools.HasError(err, "抱歉未找到相关信息", -1)
var SysRole models.SysRole
var Post models.Post
var Dept models.SysDept
//获取角色列表
roles, err := SysRole.GetList()
//获取职位列表
posts, err := Post.GetList()
//获取部门列表
Dept.DeptId = result.DeptId
dept, err := Dept.Get()
postIds := make([]int, 0)
postIds = append(postIds, result.PostId)
roleIds := make([]int, 0)
roleIds = append(roleIds, result.RoleId)
app.Custum(c, gin.H{
"code": 200,
"data": result,
"postIds": postIds,
"roleIds": roleIds,
"roles": roles,
"posts": posts,
"dept": dept,
})
}
// @Summary 获取用户角色和职位
// @Description 获取JSON
// @Tags system/用户
// @Success 200 {object} app.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sysUser [get]
// @Security Bearer
func GetSysUserInit(c *gin.Context) {
var SysRole models.SysRole
var Post models.Post
roles, err := SysRole.GetList()
posts, err := Post.GetList()
tools.HasError(err, "抱歉未找到相关信息", -1)
mp := make(map[string]interface{}, 2)
mp["roles"] = roles
mp["posts"] = posts
app.OK(c, mp, "")
}
// InsertSysUser
// @Summary 创建用户(update)
// @Description 获取JSON
// @Tags system/用户
// @Accept application/json
// @Product application/json
// @Param data body models.InsertSysUserReq true "用户数据"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
// @Router /api/v1/sysUser [post]
func InsertSysUser(c *gin.Context) {
var req models.InsertSysUserReq
err := c.BindWith(&req, binding.JSON)
tools.HasError(err, "非法数据格式", 500)
SalesCommRateFloat, err := models.StringToFloat(req.SalesCommRate)
if err != nil {
//logger.Error("brokerage1 err:", err)
tools.HasError(err, "数据解析失败", 500)
}
// 判断小程序账号ID是否正常
if req.Uid != 0 {
userInfo, err := models.GetUserInfoByUid(req.Uid)
if err != nil {
logger.Error("get user info err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "小程序账号ID有误请检查")
return
}
// 是否是真实id
if userInfo.Uid != req.Uid {
app.Error(c, http.StatusInternalServerError, err, "小程序账号ID有误请检查")
return
}
// 是否已经绑定过账号
if userInfo.UserType == models.UserTypeShopAssistant {
app.Error(c, http.StatusInternalServerError, err, "小程序账号ID重复请检查")
return
}
}
sysUser := models.SysUser{
SysUserId: req.SysUserId,
LoginM: req.LoginM,
SysUserB: models.SysUserB{
NickName: req.NickName,
Phone: req.Phone,
RoleId: req.RoleId,
Salt: req.Salt,
Avatar: req.Avatar,
Sex: req.Sex,
Email: req.Email,
DeptId: req.DeptId,
PostId: req.PostId,
Remark: req.Remark,
Status: req.Status,
AccountType: req.AccountType,
CooperativeBusinessId: req.CooperativeBusinessId,
CooperativeName: req.CooperativeName,
SalesCommRate: SalesCommRateFloat,
},
}
if req.Uid != 0 {
sysUser.Uid = req.Uid
}
if len(req.StoreList) != 0 {
// 将 StoreData 转换为 JSON 字符串
storeDataJSON, err := json.Marshal(req.StoreList)
if err != nil {
tools.HasError(err, "数据解析失败", 500)
}
sysUser.StoreData = string(storeDataJSON)
} else {
sysUser.StoreData = ""
}
begin := orm.Eloquent.Begin()
sysUser.CreateBy = tools.GetUserIdStr(c)
id, err := sysUser.Insert(begin)
if err != nil {
begin.Rollback()
logger.Error("Insert err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "添加失败")
return
}
// 如果添加了小程序id则需要更新user表的user_type字段为2-店员
if req.Uid != 0 {
err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant, uint32(req.RoleId))
if err != nil {
begin.Rollback()
logger.Error("UpdateUserType err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "添加失败")
return
}
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "添加失败")
return
}
tools.HasError(err, "添加失败", 500)
app.OK(c, id, "添加成功")
}
// UpdateSysUser
// @Summary 修改用户数据(update)
// @Description 获取JSON
// @Tags system/用户
// @Accept application/json
// @Product application/json
// @Param data body models.InsertSysUserReq true "body"
// @Success 200 {string} string "{"code": 200, "message": "修改成功"}"
// @Success 200 {string} string "{"code": -1, "message": "修改失败"}"
// @Router /api/v1/sysuser/{userId} [put]
func UpdateSysUser(c *gin.Context) {
var req models.InsertSysUserReq
err := c.BindWith(&req, binding.JSON)
tools.HasError(err, "非法数据格式", 500)
SalesCommRateFloat, err := models.StringToFloat(req.SalesCommRate)
if err != nil {
//logger.Error("brokerage1 err:", err)
tools.HasError(err, "数据解析失败", 500)
}
sysInfo := models.GetUserById(uint32(req.UserId))
// 判断小程序账号ID是否正常
if req.Uid != 0 && sysInfo.Uid != req.Uid {
userInfo, err := models.GetUserInfoByUid(req.Uid)
if err != nil {
logger.Error("get user info err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "小程序账号ID有误请检查")
return
}
// 是否是真实id
if userInfo.Uid != req.Uid {
app.Error(c, http.StatusInternalServerError, err, "小程序账号ID有误请检查")
return
}
// 是否已经绑定过账号
if userInfo.UserType == models.UserTypeShopAssistant {
app.Error(c, http.StatusInternalServerError, err, "小程序账号ID重复请检查")
return
}
}
data := models.SysUser{
SysUserId: req.SysUserId,
LoginM: req.LoginM,
SysUserB: models.SysUserB{
NickName: req.NickName,
Phone: req.Phone,
RoleId: req.RoleId,
Salt: req.Salt,
Avatar: req.Avatar,
Sex: req.Sex,
Email: req.Email,
DeptId: req.DeptId,
PostId: req.PostId,
Remark: req.Remark,
Status: req.Status,
AccountType: req.AccountType,
CooperativeBusinessId: req.CooperativeBusinessId,
CooperativeName: req.CooperativeName,
SalesCommRate: SalesCommRateFloat,
Uid: req.Uid,
},
}
if len(req.StoreList) != 0 {
// 将 StoreData 转换为 JSON 字符串
storeDataJSON, err := json.Marshal(req.StoreList)
if err != nil {
tools.HasError(err, "数据解析失败", 500)
}
data.StoreData = string(storeDataJSON)
} else {
data.StoreData = ""
}
begin := orm.Eloquent.Begin()
data.UpdateBy = tools.GetUserIdStr(c)
result, err := data.Update(begin, data.UserId)
tools.HasError(err, "修改失败", 500)
// 判断是否修改了uid
if sysInfo.Uid == 0 && req.Uid != 0 { // 新增uid直接更新为2即可
err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant, uint32(req.RoleId))
} else if sysInfo.Uid != 0 {
if sysInfo.Uid != req.Uid {
// 原uid的状态更新为1
err = models.UpdateUserType(begin, sysInfo.Uid, models.UserTypeConsumer, 0)
if err != nil {
begin.Rollback()
logger.Error("UpdateUserType err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "修改失败")
return
}
if req.Uid != 0 {
// 新uid状态更新为2
err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant, uint32(req.RoleId))
}
} else if sysInfo.Uid == req.Uid && sysInfo.RoleId != req.RoleId { // 更改了用户角色
err = models.UpdateUserType(begin, sysInfo.Uid, models.UserTypeShopAssistant, uint32(req.RoleId))
}
}
if err != nil {
begin.Rollback()
logger.Error("UpdateUserType err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "修改失败")
return
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "修改失败")
return
}
app.OK(c, result, "修改成功")
}
// DeleteSysUser
// @Summary 删除用户数据
// @Description 删除数据
// @Tags system/用户
// @Param userId path int true "userId"
// @Success 200 {string} string "{"code": 200, "message": "删除成功"}"
// @Success 200 {string} string "{"code": -1, "message": "删除失败"}"
// @Router /api/v1/sysuser/{userId} [delete]
func DeleteSysUser(c *gin.Context) {
var data models.SysUser
data.UpdateBy = tools.GetUserIdStr(c)
IDS := tools.IdsStrToIdsIntGroup("userId", c)
begin := orm.Eloquent.Begin()
for _, item := range IDS {
data.UserId = item
result, err := data.Get()
if err != nil {
tools.HasError(err, "删除失败", 500)
}
err = models.UpdateUserType(begin, result.Uid, models.UserTypeConsumer, 0)
if err != nil {
begin.Rollback()
logger.Error("DeleteSysUser UpdateUserType err:", logger.Field("err", err))
tools.HasError(err, "删除失败", 500)
}
}
result, err := data.BatchDelete(begin, IDS)
if err != nil {
begin.Rollback()
logger.Error("DeleteSysUser BatchDelete err:", logger.Field("err", err))
tools.HasError(err, "删除失败", 500)
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("DeleteSysUser commit err:", logger.Field("err", err))
tools.HasError(err, "删除失败", 500)
}
app.OK(c, result, "删除成功")
}
// @Summary 修改头像
// @Description 获取JSON
// @Tags system/用户
// @Accept multipart/form-data
// @Param file formData file true "file"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
// @Router /api/v1/user/profileAvatar [post]
func InsetSysUserAvatar(c *gin.Context) {
form, _ := c.MultipartForm()
files := form.File["upload[]"]
guid := uuid.New().String()
filPath := "static/uploadfile/" + guid + ".jpg"
for _, file := range files {
logger.Debug(file.Filename)
// 上传文件至指定目录
_ = c.SaveUploadedFile(file, filPath)
}
sysuser := models.SysUser{}
sysuser.UserId = tools.GetUserId(c)
sysuser.Avatar = "/" + filPath
sysuser.UpdateBy = tools.GetUserIdStr(c)
sysuser.Update(nil, sysuser.UserId)
app.OK(c, filPath, "修改成功")
}
func SysUserUpdatePwd(c *gin.Context) {
var pwd models.SysUserPwd
err := c.Bind(&pwd)
tools.HasError(err, "数据解析失败", 500)
sysuser := models.SysUser{}
sysuser.UserId = tools.GetUserId(c)
sysuser.SetPwd(pwd)
app.OK(c, "", "密码修改成功")
}