user_service.go 9.4 KB

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