user_service.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. package service
  2. import (
  3. "time"
  4. "xps/cmd/constant"
  5. "xps/cmd/datasource"
  6. "xps/pkg/base"
  7. "xps/pkg/system/datamodel"
  8. "xps/pkg/system/repository"
  9. "xps/pkg/system/viewmodel"
  10. "xps/pkg/utils"
  11. )
  12. type UserService interface {
  13. GetList(m map[string]interface{}) ([]viewmodel.UserInfo, error)
  14. GetPage(m map[string]interface{}) (*base.PageResult, error)
  15. GetById(ocId, groupId, userId int64) (*viewmodel.UserInfo, error)
  16. Create(ocTypeId int64, user *viewmodel.UserInfo) error
  17. Update(user *viewmodel.UserInfo) error
  18. UpdatePassword(ocId, userId int64, pwd string) error
  19. ResetPassword(ocId, userId int64) error
  20. ChangeStatus(ocId, userId, status int64) error
  21. Delete(m map[string]interface{}) error
  22. IsUserNameExist(ocId int64, accountName string) (bool, error)
  23. IsUserPhoneExist(ocId int64, accountPhone string) (bool, error)
  24. IsStaffNoExist(ocId int64, staffNo string) (bool, error)
  25. IsEmailExist(ocId int64, staffNo string) (bool, error)
  26. SelectUser(ocId int64) ([]viewmodel.UserSelectVo, error)
  27. }
  28. type userService struct {
  29. userRepo *repository.UserRepo
  30. accountRepo *repository.AccountRepo
  31. roleMemberRepo *repository.RoleMemberRepo
  32. groupRepo *repository.GroupRepo
  33. groupMemberRepo *repository.GroupMemberRepo
  34. groupMemberPositionRepo *repository.GroupMemberPositionRepo
  35. }
  36. func NewUserService() UserService {
  37. return &userService{
  38. userRepo: repository.NewUserRepo(datasource.InstanceMaster()),
  39. accountRepo: repository.NewAccountRepo(datasource.InstanceMaster()),
  40. roleMemberRepo: repository.NewRoleMemberRepo(datasource.InstanceMaster()),
  41. groupRepo: repository.NewGroupRepo(datasource.InstanceMaster()),
  42. groupMemberRepo: repository.NewGroupMemberRepo(datasource.InstanceMaster()),
  43. groupMemberPositionRepo: repository.NewGroupMemberPositionRepo(datasource.InstanceMaster()),
  44. }
  45. }
  46. func (s *userService) GetList(m map[string]interface{}) ([]viewmodel.UserInfo, error) {
  47. ocId := m["ocId"].(int64)
  48. groupId := m["groupId"].(int64)
  49. group, err := s.groupRepo.GetById(ocId, groupId)
  50. if err != nil {
  51. return nil, err
  52. }
  53. nodeLeft := group.NodeLeft
  54. nodeRight := group.NodeRight
  55. m["nodeLeft"] = nodeLeft
  56. m["nodeRight"] = nodeRight
  57. return s.userRepo.GetList(m)
  58. }
  59. func (s *userService) GetPage(m map[string]interface{}) (*base.PageResult, error) {
  60. ocId := m["ocId"].(int64)
  61. groupId := m["groupId"].(int64)
  62. group, err := s.groupRepo.GetById(ocId, groupId)
  63. if err != nil {
  64. return nil, err
  65. }
  66. nodeLeft := group.NodeLeft
  67. nodeRight := group.NodeRight
  68. m["nodeLeft"] = nodeLeft
  69. m["nodeRight"] = nodeRight
  70. return s.userRepo.GetPage(m)
  71. }
  72. func (s *userService) GetById(ocId, groupId, userId int64) (*viewmodel.UserInfo, error) {
  73. return s.userRepo.GetById(ocId, groupId, userId)
  74. }
  75. func (s *userService) Create(ocTypeId int64, user *viewmodel.UserInfo) error {
  76. ocId := user.OcId
  77. userId := ocId //管理员ID同公司ID,只有管理员可以作账号管理
  78. newId := NewID()
  79. accountId := newId
  80. userRole := constant.ENT_USER_ROLE
  81. if ocTypeId == constant.OCTYPE_ADMIN {
  82. userRole = constant.OP_ROLE_USER
  83. } else if ocTypeId == constant.OCTYPE_ORG {
  84. userRole = constant.ORG_ROLE_USER
  85. } else if ocTypeId == constant.OCTYPE_ENT {
  86. userRole = constant.ENT_USER_ROLE
  87. } else if ocTypeId == constant.OCTYPE_PARTNER {
  88. userRole = constant.PARTNER_ROLE_USER
  89. }
  90. // 1.Account
  91. account := &datamodel.Account{
  92. OcId: ocId,
  93. AccountId: accountId,
  94. AccountName: user.AccountName,
  95. Password: "21218cca77804d2ba1922c33e0151105",
  96. AccountType: 0,
  97. AccountRealName: user.AccountRealName,
  98. AccountPhone: user.AccountPhone,
  99. AccountLastIp: "",
  100. AccountLoc: user.AccountLoc,
  101. AccountIntro: user.AccountIntro,
  102. AccountPhoto: user.AccountPhoto,
  103. AccountAvatar: user.AccountAvatar,
  104. AccountMail: user.AccountMail,
  105. AccountStaffNo: user.AccountStaffNo,
  106. Status: 1,
  107. IsFixed: 0,
  108. CreatedBy: userId,
  109. CreatedAt: time.Time{},
  110. }
  111. err := s.accountRepo.Create(account)
  112. if err != nil {
  113. return err
  114. }
  115. // 2. Role member
  116. roleMember := &datamodel.RoleMember{
  117. RmId: newId,
  118. OcId: ocId,
  119. RoleId: int64(userRole),
  120. AccountId: accountId,
  121. }
  122. err = s.roleMemberRepo.Create(roleMember)
  123. if err != nil {
  124. return err
  125. }
  126. // 3. Group Member
  127. groupId := user.GroupId
  128. groupMember := &datamodel.GroupMember{
  129. GmId: newId,
  130. OcId: ocId,
  131. GroupId: groupId,
  132. AccountId: accountId,
  133. }
  134. err = s.groupMemberRepo.Create(groupMember)
  135. if err != nil {
  136. return err
  137. }
  138. // 4. Group Member Position
  139. positionId := user.PositionId
  140. groupMemberPosition := &datamodel.GroupMemberPosition{
  141. GmpId: newId,
  142. OcId: ocId,
  143. GroupId: groupId,
  144. AccountId: accountId,
  145. PositionId: positionId,
  146. }
  147. err = s.groupMemberPositionRepo.Create(groupMemberPosition)
  148. return err
  149. }
  150. func (s *userService) Update(user *viewmodel.UserInfo) error {
  151. ocId := user.OcId
  152. accountId := user.AccountId
  153. groupId := user.GroupId
  154. positionId := user.PositionId
  155. userId := ocId //管理员ID同公司ID,只有管理员可以作账号管理
  156. // 1. update account
  157. account := &datamodel.Account{
  158. OcId: ocId,
  159. AccountId: accountId,
  160. AccountName: user.AccountName,
  161. AccountType: 0,
  162. AccountRealName: user.AccountRealName,
  163. AccountPhone: user.AccountPhone,
  164. AccountLastIp: "",
  165. AccountLoc: user.AccountLoc,
  166. AccountIntro: user.AccountIntro,
  167. AccountPhoto: user.AccountPhoto,
  168. AccountAvatar: user.AccountAvatar,
  169. AccountMail: user.AccountMail,
  170. AccountStaffNo: user.AccountStaffNo,
  171. Status: user.Status,
  172. UpdatedBy: userId,
  173. UpdatedAt: time.Time{},
  174. }
  175. err := s.accountRepo.Update(ocId, accountId, account)
  176. if err == nil {
  177. return err
  178. }
  179. // 2. update group member
  180. gmId := user.GmId
  181. groupMember := &datamodel.GroupMember{
  182. GmId: gmId,
  183. OcId: ocId,
  184. GroupId: groupId,
  185. AccountId: accountId,
  186. }
  187. err = s.groupMemberRepo.Update(ocId, gmId, groupMember)
  188. if err != nil {
  189. return err
  190. }
  191. // 3. update the group member position
  192. gmpId := user.GmpId
  193. groupMemberPosition := &datamodel.GroupMemberPosition{
  194. OcId: ocId,
  195. GmpId: gmpId,
  196. GroupId: groupId,
  197. AccountId: accountId,
  198. PositionId: positionId,
  199. }
  200. err = s.groupMemberPositionRepo.Update(ocId, gmpId, groupMemberPosition)
  201. return err
  202. }
  203. func (s *userService) UpdatePassword(ocId, userId int64, pwd string) error {
  204. hashedPwd := utils.GetMD5String(pwd)
  205. data := &datamodel.Account{
  206. Password: hashedPwd,
  207. }
  208. return s.accountRepo.Update(ocId, userId, data)
  209. }
  210. func (s *userService) ResetPassword(ocId, userId int64) error {
  211. pwd := utils.GetMD5String("888888")
  212. data := &datamodel.Account{
  213. Password: pwd,
  214. }
  215. return s.accountRepo.Update(ocId, userId, data)
  216. }
  217. func (s *userService) ChangeStatus(ocId, userId, status int64) error {
  218. data := &datamodel.Account{
  219. Status: status,
  220. }
  221. return s.accountRepo.Update(ocId, userId, data)
  222. }
  223. func (s *userService) Delete(m map[string]interface{}) error {
  224. err := s.accountRepo.Delete(m)
  225. return err
  226. }
  227. func (s *userService) IsUserNameExist(ocId int64, accountName string) (bool, error) {
  228. return s.accountRepo.IsUserNameExist(ocId, accountName)
  229. }
  230. func (s *userService) IsUserPhoneExist(ocId int64, accountPhone string) (bool, error) {
  231. return s.accountRepo.IsUserPhoneExist(ocId, accountPhone)
  232. }
  233. func (s *userService) IsStaffNoExist(ocId int64, staffNo string) (bool, error) {
  234. return s.accountRepo.IsStaffNoExist(ocId, staffNo)
  235. }
  236. func (s *userService) IsEmailExist(ocId int64, email string) (bool, error) {
  237. return s.accountRepo.IsEmailExist(ocId, email)
  238. }
  239. func (s *userService) SelectUser(ocId int64) ([]viewmodel.UserSelectVo, error) {
  240. m := make(map[string]interface{}, 0)
  241. m["ocId"] = ocId
  242. memberList, err := s.groupMemberPositionRepo.GetList(m)
  243. if err != nil {
  244. return nil, err
  245. }
  246. voList := make([]viewmodel.UserSelectVo, 0)
  247. itemList := make([]viewmodel.UserSelectItemVo, 0)
  248. positionId := int64(0)
  249. for _, member := range memberList {
  250. item := viewmodel.UserSelectItemVo{
  251. Name: member.AccountName,
  252. Value: member.AccountId,
  253. AccountId: member.AccountId,
  254. AccountName: member.AccountName,
  255. PositionId: member.PositionId,
  256. PositionName: member.PositionName,
  257. GroupId: member.GroupId,
  258. GroupName: member.GroupName,
  259. }
  260. itemList = append(itemList, item)
  261. if positionId != 0 && positionId != member.PositionId {
  262. vo := viewmodel.UserSelectVo{
  263. Name: member.PositionName,
  264. Children: itemList,
  265. }
  266. itemList = make([]viewmodel.UserSelectItemVo, 0)
  267. voList = append(voList, vo)
  268. }
  269. positionId = member.PositionId
  270. }
  271. return voList, nil
  272. }