system.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. package services
  2. import (
  3. "fmt"
  4. "hongze/hz_crm_api/models/company"
  5. "hongze/hz_crm_api/models/roadshow"
  6. "hongze/hz_crm_api/models/system"
  7. "hongze/hz_crm_api/utils"
  8. "time"
  9. )
  10. func GetRoleTypeCode(roleType string) string {
  11. var roleTypeCode string
  12. switch roleType {
  13. case utils.ROLE_TYPE_ADMIN:
  14. roleTypeCode = utils.ROLE_TYPE_CODE_ADMIN
  15. case utils.ROLE_TYPE_FICC_ADMIN:
  16. roleTypeCode = utils.ROLE_TYPE_CODE_FICC_ADMIN
  17. case utils.ROLE_TYPE_FICC_SELLER:
  18. roleTypeCode = utils.ROLE_TYPE_CODE_FICC_SELLER
  19. case utils.ROLE_TYPE_RAI_ADMIN:
  20. roleTypeCode = utils.ROLE_TYPE_CODE_RAI_ADMIN
  21. case utils.ROLE_TYPE_FICC_GROUP, utils.ROLE_TYPE_FICC_MANAGER:
  22. roleTypeCode = utils.ROLE_TYPE_CODE_FICC_GROUP
  23. case utils.ROLE_TYPE_RAI_GROUP:
  24. roleTypeCode = utils.ROLE_TYPE_CODE_RAI_GROUP
  25. case utils.ROLE_TYPE_FICC_DEPARTMENT:
  26. roleTypeCode = utils.ROLE_TYPE_CODE_FICC_DEPARTMENT
  27. case utils.ROLE_TYPE_RAI_DEPARTMENT:
  28. roleTypeCode = utils.ROLE_TYPE_CODE_RAI_DEPARTMENT
  29. case utils.ROLE_TYPE_FICC_RESEARCHR:
  30. roleTypeCode = utils.ROLE_TYPE_CODE_FICC_RESEARCHR
  31. case utils.ROLE_TYPE_RAI_RESEARCHR:
  32. roleTypeCode = utils.ROLE_TYPE_CODE_RAI_RESEARCHR
  33. default:
  34. roleTypeCode = utils.ROLE_TYPE_ADMIN
  35. }
  36. return roleTypeCode
  37. }
  38. type AdminGroup struct {
  39. GroupId int `description:"分组id"`
  40. GroupName string `description:"分组名称"`
  41. ResearcherList []*roadshow.Researcher
  42. }
  43. // GetFiccSystemGroup 获取ficc的大分组
  44. func GetFiccSystemGroup() (adminGroupList []AdminGroup, groupMap map[int]int, err error) {
  45. list, err := system.GetSysGroupListByDepartmentId(2)
  46. if err != nil {
  47. return
  48. }
  49. groupMap = make(map[int]int)
  50. adminGroupList = make([]AdminGroup, 0)
  51. for _, v := range list {
  52. if v.ParentId == 0 {
  53. researcherList := make([]*roadshow.Researcher, 0)
  54. adminGroup := AdminGroup{
  55. GroupId: v.GroupId,
  56. GroupName: v.GroupName,
  57. ResearcherList: researcherList,
  58. }
  59. adminGroupList = append(adminGroupList, adminGroup)
  60. groupMap[v.GroupId] = v.GroupId
  61. } else {
  62. groupMap[v.GroupId] = v.ParentId
  63. }
  64. }
  65. return
  66. }
  67. // GetFiccSystemGroupIdsByGroupId 获取groupIp相关的分组ID
  68. func GetFiccSystemGroupIdsByGroupId(groupId int) (groupIds []int, err error) {
  69. list, err := system.GetSysGroupListByDepartmentId(2)
  70. if err != nil {
  71. return
  72. }
  73. groupMap := make(map[int]int) //整理三级分组对应的二级分组
  74. for _, v := range list {
  75. if v.ParentId == 0 {
  76. groupMap[v.GroupId] = v.GroupId
  77. } else {
  78. groupMap[v.GroupId] = v.ParentId
  79. }
  80. }
  81. parentId := 0
  82. for k, v := range groupMap {
  83. if k == groupId {
  84. parentId = v //找到当前相关的二级分组
  85. break
  86. }
  87. }
  88. if parentId > 0 { //根据二级分组,查三级和二级的组
  89. for k, v := range groupMap {
  90. if v == parentId {
  91. groupIds = append(groupIds, k)
  92. }
  93. }
  94. }
  95. return
  96. }
  97. // GetFiccSeller 获取ficc的销售(需要吧小分组的group_id给处理成大分组group_id)
  98. func GetFiccSeller(firstDate time.Time, groupMap map[int]int) (researcherList []*roadshow.Researcher, err error) {
  99. roleTypeCode := "('ficc_seller','ficc_group','ficc_team')"
  100. researcherList, err = roadshow.GetSellerList(roleTypeCode, "")
  101. if err != nil {
  102. return
  103. }
  104. for index, v := range researcherList {
  105. tmpGroupId, ok := groupMap[v.GroupId]
  106. if !ok {
  107. tmpGroupId = v.GroupId
  108. }
  109. researcherList[index].GroupId = tmpGroupId
  110. }
  111. return
  112. }
  113. // GetRaiSystemGroup 获取权益的大分组
  114. func GetRaiSystemGroup() (adminGroupList []AdminGroup, groupMap map[int]int, err error) {
  115. list, err := system.GetSysGroupListByDepartmentId(5)
  116. if err != nil {
  117. return
  118. }
  119. groupMap = make(map[int]int)
  120. adminGroupList = make([]AdminGroup, 0)
  121. for _, v := range list {
  122. if v.ParentId == 0 {
  123. researcherList := make([]*roadshow.Researcher, 0)
  124. adminGroup := AdminGroup{
  125. GroupId: v.GroupId,
  126. GroupName: v.GroupName,
  127. ResearcherList: researcherList,
  128. }
  129. adminGroupList = append(adminGroupList, adminGroup)
  130. groupMap[v.GroupId] = v.GroupId
  131. } else {
  132. groupMap[v.GroupId] = v.ParentId
  133. }
  134. }
  135. return
  136. }
  137. // GetRaiSeller 获取权益的销售(需要吧小分组的group_id给处理成大分组group_id)
  138. func GetRaiSeller(groupMap map[int]int) (researcherList []*roadshow.Researcher, err error) {
  139. roleTypeCode := "('rai_seller','rai_group')"
  140. researcherList, err = roadshow.GetRaiSellerList(roleTypeCode, "")
  141. if err != nil {
  142. return
  143. }
  144. for index, v := range researcherList {
  145. tmpGroupId, ok := groupMap[v.GroupId]
  146. if !ok {
  147. tmpGroupId = v.GroupId
  148. }
  149. researcherList[index].GroupId = tmpGroupId
  150. }
  151. return
  152. }
  153. // CheckAdminIsSameBigGroup 判断是否两个系统用户是否同一个大组内
  154. func CheckAdminIsSameBigGroup(adminInfo1, adminInfo2 *system.Admin) (isSame bool, err error) {
  155. // 如果销售和创建人是同一个小组
  156. if adminInfo1.GroupId == adminInfo2.GroupId {
  157. isSame = true
  158. return
  159. }
  160. var admin1BigGroupId, admin2BigGroupId int
  161. //获取第一个系统用户的大组id
  162. {
  163. //获取该账号的大组id
  164. pid, tmpErr := company.GetParentIdFromGroup(adminInfo1.GroupId)
  165. if tmpErr != nil {
  166. err = tmpErr
  167. return
  168. }
  169. if pid != nil && *pid > 0 {
  170. //该账号放在了三级分组下
  171. admin1BigGroupId = *pid
  172. } else {
  173. //该账号放在了二级分组下
  174. admin1BigGroupId = adminInfo1.GroupId
  175. }
  176. }
  177. //获取第二个系统用户的大组id
  178. {
  179. //获取该账号的大组id
  180. pid, tmpErr := company.GetParentIdFromGroup(adminInfo2.GroupId)
  181. if tmpErr != nil {
  182. err = tmpErr
  183. return
  184. }
  185. if pid != nil && *pid > 0 {
  186. //该账号放在了三级分组下
  187. admin2BigGroupId = *pid
  188. } else {
  189. //该账号放在了二级分组下
  190. admin2BigGroupId = adminInfo2.GroupId
  191. }
  192. }
  193. if admin1BigGroupId == admin2BigGroupId {
  194. isSame = true
  195. return
  196. }
  197. return
  198. }
  199. // GetBigGroupAllGroupInfo 根据分组id 获取该分组下所有关联的分组(包含上级分组和自己的分组)
  200. func GetBigGroupAllGroupInfo(groupId int) (groupMap map[int]*system.SysGroup, err error) {
  201. groupInfo, err := system.GetSysGroupById(groupId)
  202. if err != nil {
  203. return
  204. }
  205. groupMap = make(map[int]*system.SysGroup)
  206. if groupInfo.ParentId == 0 { //当前就是处于大分组下的第一级分组
  207. groupMap[groupInfo.GroupId] = groupInfo
  208. childSysGroupList, tmpErr := system.GetChildSysGroupByGroupId(groupInfo.GroupId)
  209. if tmpErr != nil {
  210. err = tmpErr
  211. return
  212. }
  213. for _, v := range childSysGroupList {
  214. groupMap[v.GroupId] = v
  215. }
  216. } else { //当前处于二级分组
  217. childSysGroupList, tmpErr := system.GetChildSysGroupByGroupId(groupInfo.ParentId)
  218. if tmpErr != nil {
  219. err = tmpErr
  220. return
  221. }
  222. for _, v := range childSysGroupList {
  223. groupMap[v.GroupId] = v
  224. }
  225. //父级分组信息
  226. parentGroupInfo, tmpErr := system.GetSysGroupById(groupInfo.ParentId)
  227. if tmpErr != nil {
  228. err = tmpErr
  229. return
  230. }
  231. groupMap[groupInfo.GroupId] = parentGroupInfo
  232. }
  233. return
  234. }
  235. // GetBigGroupByFiccGroupId 根据主管分组id获取用户的大组
  236. func GetBigGroupByFiccGroupId(groupId int) (groupMap map[int]*system.SysGroup, err error) {
  237. bigGroupId := 0
  238. //获取该账号的大组id
  239. pid, err := company.GetParentIdFromGroup(groupId)
  240. if err != nil {
  241. return
  242. }
  243. if pid != nil && *pid > 0 {
  244. //该账号放在了三级分组下
  245. bigGroupId = *pid
  246. } else {
  247. //该账号放在了二级分组下
  248. bigGroupId = groupId
  249. }
  250. groupMap, err = GetBigGroupAllGroupInfo(bigGroupId)
  251. return
  252. }
  253. // CheckRaiAdmin 判断是否为权益内部人员
  254. func CheckRaiAdmin(adminId int) (isRai bool, err error) {
  255. raiAdmins, e := system.GetRaiAdmin()
  256. if e != nil {
  257. err = fmt.Errorf("获取权益内部人员失败, GetRaiAdmin Err: %s", e.Error())
  258. return
  259. }
  260. for _, r := range raiAdmins {
  261. if adminId == r.AdminId {
  262. isRai = true
  263. break
  264. }
  265. }
  266. return
  267. }