user.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. package db
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/caixw/lib.go/conv"
  6. "github.com/sirupsen/logrus"
  7. "gorm.io/gorm"
  8. "reflect"
  9. "time"
  10. "youngee_m_api/model/common_model"
  11. "youngee_m_api/model/gorm_model"
  12. "youngee_m_api/model/http_model"
  13. "youngee_m_api/pack"
  14. "youngee_m_api/util"
  15. )
  16. //GetUser 查找用户,查不到返回空
  17. func GetUser(ctx context.Context, User string) (*gorm_model.YounggeeUser, error) {
  18. db := GetReadDB(ctx)
  19. user := &gorm_model.YounggeeUser{}
  20. err := db.Model(user).Where("user = ?", User).First(user).Error
  21. if err != nil {
  22. if err == gorm.ErrRecordNotFound {
  23. fmt.Println("record not found")
  24. return nil, nil
  25. }
  26. return nil, err
  27. }
  28. return user, nil
  29. }
  30. //GetUserByID 查不到返回空
  31. func GetUserByID(ctx context.Context, ID int64) (*gorm_model.YounggeeUser, error) {
  32. db := GetReadDB(ctx)
  33. user := &gorm_model.YounggeeUser{}
  34. err := db.Model(user).Where("id = ?", ID).First(user).Error
  35. if err != nil {
  36. if err == gorm.ErrRecordNotFound {
  37. fmt.Println("record not found")
  38. return nil, nil
  39. }
  40. return nil, err
  41. }
  42. return user, nil
  43. }
  44. // GetAllUser 查找所有用户
  45. func GetAllUser(ctx context.Context) ([]string, error) {
  46. db := GetReadDB(ctx)
  47. db = db.Debug().Model([]gorm_model.YounggeeUser{}).Where("role = ? or role = ?", "1", "2")
  48. var user []gorm_model.YounggeeUser
  49. db.Find(&user)
  50. var total int64
  51. if err := db.Count(&total).Error; err != nil {
  52. logrus.WithContext(ctx).Errorf("[GetAllUser] error query mysql total, err:%+v", err)
  53. return nil, err
  54. }
  55. var userList []string
  56. for _, User := range user {
  57. userList = append(userList, User.User)
  58. }
  59. return userList, nil
  60. }
  61. // GetUserList 获取员工用户列表
  62. func GetUserList(ctx context.Context, pageNum, pageSize int32) (*http_model.UserListData, error) {
  63. db := GetReadDB(ctx)
  64. db = db.Debug().Model([]gorm_model.YounggeeUser{}).Where("role = ? or role = ?", "1", "2")
  65. var user []gorm_model.YounggeeUser
  66. // 查询总数
  67. var total int64
  68. if err := db.Count(&total).Error; err != nil {
  69. logrus.WithContext(ctx).Errorf("[GetUserList] error query mysql total, err:%+v", err)
  70. return nil, err
  71. }
  72. // 查询该页数据
  73. limit := pageSize
  74. offset := pageSize * pageNum // assert pageNum start with 0
  75. err := db.Order("created_at desc").Limit(int(limit)).Offset(int(offset)).Find(&user).Error
  76. if err != nil {
  77. logrus.WithContext(ctx).Errorf("[GetUserList] error query mysql find, err:%+v", err)
  78. return nil, err
  79. }
  80. userList := new(http_model.UserListData)
  81. userList.UserListPreview = pack.MGormUserListToHttpUserListPreview(user)
  82. userList.Total = conv.MustString(total, "")
  83. return userList, nil
  84. }
  85. func UpdateUserInfo(ctx context.Context, req *http_model.UpdateUserInfoRequest) (string, error) {
  86. db := GetReadDB(ctx)
  87. user, username, role, password, email, phone := req.User, req.Username, req.Role, req.Password, req.Email, req.Phone
  88. db = db.Debug().Model([]gorm_model.YounggeeUser{}).Where("user = ?", user)
  89. err := db.Updates(map[string]interface{}{
  90. "username": username, "password": password, "email": email, "phone": phone, "role": role}).Error
  91. if err != nil {
  92. return "", err
  93. }
  94. return "更新成功", nil
  95. }
  96. func CreateUser(ctx context.Context, req *http_model.CreateUserRequest) (string, error) {
  97. db := GetReadDB(ctx)
  98. username, role, password, email, phone := req.Username, req.Role, req.Password, req.Email, req.Phone
  99. var IsUserPhone gorm_model.YounggeeUser
  100. err := db.Debug().Where(" phone = ?", req.Phone).First(&IsUserPhone).Error
  101. if err == nil {
  102. return "手机号已存在,不能再次创建", nil
  103. }
  104. var user gorm_model.YounggeeUser
  105. var userInfo gorm_model.YounggeeUser
  106. getMonth := time.Now().Format("01") //获取月
  107. getDay := time.Now().Day() //获取日
  108. dayString := ""
  109. if getDay < 10 {
  110. dayString = conv.MustString(getDay, "")
  111. dayString = "0" + dayString
  112. } else {
  113. dayString = conv.MustString(getDay, "")
  114. }
  115. monthAndDay := conv.MustString(getMonth, "") + dayString
  116. err = db.Debug().Where(fmt.Sprintf(" user like '%s%%'", monthAndDay)).Last(&userInfo).Error
  117. num := 1
  118. if userInfo.User != "" {
  119. num = conv.MustInt(userInfo.User[4:6], 0)
  120. num = num + 1 //获取日
  121. } else {
  122. num = 1
  123. }
  124. numString := ""
  125. if num < 10 {
  126. numString = conv.MustString(num, "")
  127. numString = "0" + numString
  128. } else {
  129. numString = conv.MustString(num, "")
  130. }
  131. user.Username = username
  132. user.RealName = username
  133. user.User = monthAndDay + numString
  134. user.Role = role
  135. user.Password = password
  136. user.Email = email
  137. user.Phone = phone
  138. user.LastLoginTime = time.Now()
  139. user.CreatedAt = time.Now()
  140. user.UpdatedAt = time.Now()
  141. err = db.Debug().Create(&user).Error
  142. if err != nil {
  143. return "创建失败", err
  144. }
  145. return "创建成功", nil
  146. }
  147. func DisabledUser(ctx context.Context, user string) (string, error) {
  148. db := GetReadDB(ctx)
  149. err := db.Debug().Model(gorm_model.YounggeeUser{}).Where("user = ?", user).Update("user_state", "0").Error
  150. if err != nil {
  151. logrus.WithContext(ctx).Errorf("[DisabledUser] error Update mysql find, err:%+v", err)
  152. return "禁用失败", err
  153. }
  154. return "账号已禁止使用", nil
  155. }
  156. func GetEnterpriseUserList(ctx context.Context, pageSize, pageNum int32, conditions *common_model.EnterpriseUserConditions) ([]*http_model.EnterpriseUserPreview, int64, error) {
  157. db := GetReadDB(ctx)
  158. // 查询user表信息,筛选出企业用户
  159. db = db.Debug().Model([]gorm_model.YounggeeUser{}).Where("role = ? ", "3")
  160. // 根据 查询条件过滤
  161. conditionType := reflect.TypeOf(conditions).Elem()
  162. conditionValue := reflect.ValueOf(conditions).Elem()
  163. for i := 0; i < conditionType.NumField(); i++ {
  164. field := conditionType.Field(i)
  165. tag := field.Tag.Get("condition")
  166. value := conditionValue.FieldByName(field.Name)
  167. if !util.IsBlank(value) && tag != "created_at" {
  168. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  169. } else if tag == "created_at" && value.Interface() != nil {
  170. db = db.Where(fmt.Sprintf("created_at like '%s%%'", value.Interface()))
  171. }
  172. }
  173. var users []gorm_model.YounggeeUser
  174. var totalUser int64
  175. if err := db.Count(&totalUser).Error; err != nil {
  176. logrus.WithContext(ctx).Errorf("[GetEnterpriseUserList] error query mysql total, err:%+v", err)
  177. return nil, 0, err
  178. }
  179. db.Order("user").Find(&users)
  180. // 查询 用户自增的id
  181. var userIds []int64
  182. userMap := make(map[int64]gorm_model.YounggeeUser)
  183. for _, user := range users {
  184. userIds = append(userIds, user.ID)
  185. userMap[user.ID] = user
  186. }
  187. db1 := GetReadDB(ctx)
  188. var enterprises []gorm_model.Enterprise
  189. db1 = db1.Debug().Model(gorm_model.Enterprise{}).Where("user_id IN ?", userIds).Find(&enterprises)
  190. // 查询该页数据
  191. limit := pageSize
  192. offset := pageSize * pageNum // assert pageNum start with 0
  193. err := db.Order("user").Limit(int(limit)).Offset(int(offset)).Error
  194. if err != nil {
  195. logrus.WithContext(ctx).Errorf("[GetEnterpriseUserList] error query mysql total, err:%+v", err)
  196. return nil, 0, err
  197. }
  198. enterpriseMap := make(map[int64]gorm_model.Enterprise)
  199. for _, enterprise := range enterprises {
  200. enterpriseMap[enterprise.UserID] = enterprise
  201. }
  202. var enterpriseUsers []*http_model.EnterpriseUser
  203. for _, userId := range userIds {
  204. enterpriseUser := new(http_model.EnterpriseUser)
  205. _, ok1 := userMap[userId]
  206. _, ok2 := enterpriseMap[userId]
  207. if ok1 && ok2 {
  208. enterpriseUser.Enterprise = enterpriseMap[userId]
  209. enterpriseUser.YoungeeUser = userMap[userId]
  210. }
  211. enterpriseUsers = append(enterpriseUsers, enterpriseUser)
  212. }
  213. var enterpriseUserDatas []*http_model.EnterpriseUserPreview
  214. enterpriseUserDatas = pack.EnterpriseUserToEnterpriseUserData(enterpriseUsers)
  215. return enterpriseUserDatas, totalUser, nil
  216. }
  217. func GetCreatorList(ctx context.Context, pageSize, pageNum int32, conditions *common_model.CreatorListConditions) ([]*http_model.CreatorListPreview, int64, error) {
  218. db := GetReadDB(ctx)
  219. db = db.Debug().Model(gorm_model.YoungeeTalentInfo{})
  220. // 根据 条件过滤
  221. conditionType := reflect.TypeOf(conditions).Elem()
  222. conditionValue := reflect.ValueOf(conditions).Elem()
  223. for i := 0; i < conditionType.NumField(); i++ {
  224. field := conditionType.Field(i)
  225. tag := field.Tag.Get("condition")
  226. value := conditionValue.FieldByName(field.Name)
  227. if !util.IsBlank(value) && tag != "create_date" {
  228. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  229. } else if tag == "create_date" && value.Interface() != nil {
  230. db = db.Where(fmt.Sprintf("create_date like '%s%%'", value.Interface()))
  231. }
  232. }
  233. // 查询总数
  234. var total int64
  235. var talentList []gorm_model.YoungeeTalentInfo
  236. if err := db.Count(&total).Error; err != nil {
  237. logrus.WithContext(ctx).Errorf("[GetCreatorList] error query mysql total, err:%+v", err)
  238. return nil, 0, err
  239. }
  240. // 查询该页数据
  241. limit := pageSize
  242. offset := pageSize * pageNum // assert pageNum start with 0
  243. err := db.Order("id").Limit(int(limit)).Offset(int(offset)).Find(&talentList).Error
  244. if err != nil {
  245. logrus.WithContext(ctx).Errorf("[GetCreatorList] error query mysql total, err:%+v", err)
  246. return nil, 0, err
  247. }
  248. var CreatorList []*http_model.CreatorListPreview
  249. CreatorList = pack.TalentListToCreatorListData(talentList)
  250. return CreatorList, total, nil
  251. }