user_service.go 9.1 KB

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