user_service.go 8.1 KB

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