user_service.go 9.0 KB

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