user_service.go 8.6 KB

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