admin.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. package admin
  2. import (
  3. "errors"
  4. "strings"
  5. "zhiyuan/models"
  6. "zhiyuan/pkg/app"
  7. "zhiyuan/pkg/db"
  8. adminParam "zhiyuan/pkg/param/admin"
  9. "zhiyuan/pkg/utils"
  10. "zhiyuan/services/form"
  11. )
  12. var Admin models.Admin
  13. func CheckLogin(phone string, password string) (int, error) {
  14. where := map[string]interface{}{}
  15. where["state"] = 1
  16. if phone == "admin" {
  17. where["username"] = phone
  18. } else {
  19. where["phone"] = phone
  20. }
  21. where["password"] = utils.MD5(password)
  22. admin, err := GetOne(where, nil, nil)
  23. if err != nil || admin == nil {
  24. return 0, errors.New("用户名或密码错误")
  25. }
  26. if !CheckAuth([]string{"system:login"}, admin.ID) {
  27. return 0, errors.New("没有权限登录")
  28. }
  29. return admin.ID, nil
  30. }
  31. func Login(phone string, password string) (string, error) {
  32. adminID, err := CheckLogin(phone, password)
  33. if err != nil {
  34. return "", err
  35. }
  36. return UpdateToken(adminID, adminParam.Entry.PC)
  37. }
  38. func CheckShop(shopId int, id int) bool {
  39. admin, _ := GetInfoByID(id, nil, nil)
  40. if admin == nil {
  41. return false
  42. }
  43. if IsSuperAdmin(admin.ID) {
  44. return true
  45. }
  46. for _, v := range strings.Split(admin.ShopIds, ",") {
  47. s, _ := db.ToInt64(v)
  48. if int(s) == shopId {
  49. return true
  50. }
  51. }
  52. return false
  53. }
  54. func Logout(id int) error {
  55. admin, err := GetInfoByID(id, []string{"id"}, nil)
  56. if err != nil || admin == nil {
  57. return errors.New("invalid access_token")
  58. }
  59. ClearAuthCacheByAdmin(id)
  60. return ClearToken(admin.ID, adminParam.Entry.PC)
  61. }
  62. func GetAdmins(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.Admin, error) {
  63. if page.PageNum > 0 && page.PageSize > 0 {
  64. where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize))
  65. }
  66. return Admin.GetMulti(where, fields, retVal)
  67. }
  68. func CountRaw(where string, param map[string]interface{}) (int64, error) {
  69. query := "zy_admin WHERE " + where
  70. return db.CountRaw(query, param)
  71. }
  72. func GetAdminsRaw(where map[string]string, param map[string]interface{}, retVal interface{}) ([]*models.Admin, error) {
  73. return Admin.GetMultiRaw(where, param, retVal)
  74. }
  75. func GetOneRaw(where map[string]string, param map[string]interface{}, retVal interface{}) (*models.Admin, error) {
  76. return Admin.GetOneRaw(where, param, retVal)
  77. }
  78. func GetAdminMapByIds(adminIds []int) map[int]string {
  79. adminListMap := make(map[int]string, 0)
  80. if len(adminIds) > 0 {
  81. if adminList, err := GetAdmins(map[string]interface{}{"id in": adminIds}, nil, app.Page{}, nil); err == nil {
  82. for _, v := range adminList {
  83. adminListMap[v.ID] = v.Username
  84. }
  85. }
  86. }
  87. return adminListMap
  88. }
  89. func Add(form form.AdminAdd) (int64, error) {
  90. if CheckAdminDuplicate(form.Phone) {
  91. return 0, errors.New("手机号码已存在")
  92. }
  93. if form.Password == "" {
  94. form.Password = form.Phone[len(form.Phone)-6:]
  95. }
  96. adminMap := map[string]interface{}{
  97. "username": form.Username,
  98. "password": utils.MD5(form.Password),
  99. "phone": form.Phone,
  100. "dept_id": form.DeptID,
  101. "site_id": form.SiteID,
  102. "account_name": form.AccountName,
  103. "account_bank": form.AccountBank,
  104. "account_no": form.AccountNo,
  105. "role_ids": utils.JoinIntSlice(form.RoleIds, ","),
  106. "shop_ids": utils.JoinIntSlice(form.ShopIds, ","),
  107. "entry_date": form.EntryDate,
  108. "rest_day": form.RestDay,
  109. "log_ids": form.LogIds,
  110. }
  111. adminID, err := db.InsertOne(Admin.TableName(), adminMap)
  112. if err != nil {
  113. return 0, nil
  114. }
  115. return adminID, nil
  116. }
  117. func AddSalesman(form form.SalesmanAdd) (int64, error) {
  118. if form.RoleId != 2 && form.RoleId != 3 && form.RoleId != 6 {
  119. return 0, errors.New("只能添加业务员、设计师或项目监理")
  120. }
  121. if CheckAdminNameDuplicate(form.Username) {
  122. return 0, errors.New("员工已存在")
  123. }
  124. adminMap := map[string]interface{}{
  125. "username": form.Username,
  126. "role_ids": form.RoleId,
  127. "deleted_at": 1,
  128. }
  129. adminID, err := db.InsertOne(Admin.TableName(), adminMap)
  130. if err != nil {
  131. return 0, nil
  132. }
  133. return adminID, nil
  134. }
  135. func InsertOne(adminMap map[string]interface{}) (int64, error) {
  136. return db.InsertOne(Admin.TableName(), adminMap)
  137. }
  138. func Update(where, data map[string]interface{}) (int64, error) {
  139. return db.Update(Admin.TableName(), where, data)
  140. }
  141. func EditByID(form form.AdminAdd, id int) error {
  142. if IsSuperAdmin(id) {
  143. return errors.New("不能编辑超级管理员")
  144. }
  145. info, err := GetInfoByID(id, nil, nil)
  146. if info == nil {
  147. return errors.New("invalid admin id")
  148. }
  149. if info.Phone != form.Phone && CheckAdminDuplicate(form.Phone) {
  150. return errors.New("手机号码已存在")
  151. }
  152. adminMap := map[string]interface{}{
  153. "phone": form.Phone,
  154. "username": form.Username,
  155. "dept_id": form.DeptID,
  156. "site_id": form.SiteID,
  157. "account_name": form.AccountName,
  158. "account_bank": form.AccountBank,
  159. "account_no": form.AccountNo,
  160. "role_ids": utils.JoinIntSlice(form.RoleIds, ","),
  161. "shop_ids": utils.JoinIntSlice(form.ShopIds, ","),
  162. "entry_date": form.EntryDate,
  163. "rest_day": form.RestDay,
  164. "log_ids": form.LogIds,
  165. }
  166. if info.Password == "" && form.Password == "" {
  167. form.Password = form.Phone[len(form.Phone)-6:]
  168. }
  169. if form.Password != "" {
  170. adminMap["password"] = utils.MD5(form.Password)
  171. }
  172. _, err = db.Update(Admin.TableName(), map[string]interface{}{"id": id}, adminMap)
  173. ClearAdminCache(id)
  174. ClearAuthCacheByAdmin(id)
  175. return err
  176. }
  177. func EditStateByID(id int, state int) error {
  178. adminMap := map[string]interface{}{
  179. "state": state,
  180. }
  181. _, err := db.Update(Admin.TableName(), map[string]interface{}{"id": id}, adminMap)
  182. ClearAdminCache(id)
  183. ClearAuthCacheByAdmin(id)
  184. return err
  185. }
  186. func Count(where map[string]interface{}) (int64, error) {
  187. return db.Count(Admin.TableName(), where)
  188. }
  189. func GetOne(where map[string]interface{}, fields []string, retVal interface{}) (*models.Admin, error) {
  190. return Admin.GetOne(where, fields, retVal)
  191. }
  192. func GetInfoByToken(token string, fields []string, retVal interface{}) (*models.Admin, error) {
  193. return GetOne(map[string]interface{}{"access_token": token}, fields, retVal)
  194. }
  195. func GetInfoByID(id int, fields []string, retVal interface{}) (*models.Admin, error) {
  196. return GetOne(map[string]interface{}{"id": id}, fields, retVal)
  197. }
  198. func Password(id int, form form.Password) error {
  199. if IsSuperAdmin(id) {
  200. return errors.New("不能修改超级管理员密码")
  201. }
  202. adminInfo, err := GetInfoByID(id, []string{"id", "password"}, nil)
  203. if err != nil || adminInfo == nil {
  204. return errors.New("登录状态有误")
  205. }
  206. if form.NewPassword != form.NewPasswordRepeat {
  207. return errors.New("两次输入的新密码不一致")
  208. }
  209. if adminInfo.Password != utils.MD5(form.OldPassword) {
  210. return errors.New("原密码有误")
  211. }
  212. db.Update(Admin.TableName(), map[string]interface{}{"id": id}, map[string]interface{}{"password": utils.MD5(form.NewPassword)})
  213. ClearToken(id, adminParam.Entry.PC)
  214. return nil
  215. }
  216. func DeleteByID(id int) error {
  217. if IsSuperAdmin(id) {
  218. return errors.New("不能删除超级管理员")
  219. }
  220. info, _ := GetInfoByID(id, nil, nil)
  221. if info == nil {
  222. return errors.New("invalid admin id")
  223. }
  224. _, err := db.DeleteSoft(Admin.TableName(), map[string]interface{}{"id": id})
  225. return err
  226. }
  227. func CheckAdminDuplicate(phone string) bool {
  228. adminInfo, err := GetOne(map[string]interface{}{"phone": phone}, nil, nil)
  229. return adminInfo != nil && err == nil
  230. }
  231. func CheckAdminNameDuplicate(username string) bool {
  232. adminInfo, err := GetOne(map[string]interface{}{"username": username}, nil, nil)
  233. return adminInfo != nil && err == nil
  234. }
  235. func GetNameByID(id int) string {
  236. ret, err := GetInfoByID(id, []string{"username"}, nil)
  237. if err != nil {
  238. return ""
  239. }
  240. return ret.Username
  241. }