system.go 9.2 KB

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