company.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433
  1. package roadshow
  2. import (
  3. "fmt"
  4. "hongze/hz_crm_api/models"
  5. "hongze/hz_crm_api/models/company"
  6. "hongze/hz_crm_api/models/roadshow"
  7. "hongze/hz_crm_api/models/system"
  8. "hongze/hz_crm_api/services"
  9. "hongze/hz_crm_api/utils"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. // @Title 我的日历列表
  15. // @Description 我的日历列表接口
  16. // @Param KeyWord query string true "搜索关键词"
  17. // @Success 200 {object} roadshow.CalendarListResp
  18. // @router /company/search [get]
  19. func (this *CalendarController) CompanySearch() {
  20. br := new(models.BaseResponse).Init()
  21. defer func() {
  22. this.Data["json"] = br
  23. this.ServeJSON()
  24. }()
  25. sysUser := this.SysUser
  26. if sysUser == nil {
  27. br.Msg = "请登录"
  28. br.ErrMsg = "请登录,SysUser Is Empty"
  29. br.Ret = 408
  30. return
  31. }
  32. KeyWord := this.GetString("KeyWord")
  33. if KeyWord == "" {
  34. br.Msg = "请输入搜索词!"
  35. return
  36. }
  37. KeyWord = "%" + KeyWord + "%"
  38. var groupId int
  39. if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
  40. groupId = sysUser.GroupId
  41. } else {
  42. groupId = -1
  43. }
  44. list, err := roadshow.CompanySearchV2(sysUser.AdminId, groupId, KeyWord, sysUser.RoleTypeCode)
  45. if err != nil && err.Error() != utils.ErrNoRow() {
  46. br.Msg = "搜索客户失败!"
  47. br.ErrMsg = "搜索客户失败!Err:" + err.Error()
  48. return
  49. }
  50. if list == nil {
  51. list = make([]*roadshow.CompanySearchView, 0)
  52. }
  53. br.Ret = 200
  54. br.Success = true
  55. br.Msg = "获取成功"
  56. br.Data = list
  57. }
  58. // CompanyDetail
  59. // @Title 我的日历列表
  60. // @Description 我的日历列表接口
  61. // @Param CompanyId query int true "公司id"
  62. // @Param EnglishCompany query int true "是否为英文客户"
  63. // @Param CompanyType query string true "客户类型:'ficc','权益',传空默认为ficc,"
  64. // @Param RsReportRecordId query int true "路演统计Id"
  65. // @Param SellerId query int true "销售ID"
  66. // @Success 200 {object} roadshow.CompanyDetailView
  67. // @router /company/detail [get]
  68. func (this *CalendarController) CompanyDetail() {
  69. br := new(models.BaseResponse).Init()
  70. defer func() {
  71. if br.ErrMsg == "" {
  72. br.IsSendEmail = false
  73. }
  74. this.Data["json"] = br
  75. this.ServeJSON()
  76. }()
  77. sysUser := this.SysUser
  78. if sysUser == nil {
  79. br.Msg = "请登录"
  80. br.ErrMsg = "请登录,SysUser Is Empty"
  81. br.Ret = 408
  82. return
  83. }
  84. companyId, _ := this.GetInt("CompanyId")
  85. if companyId <= 0 {
  86. br.Msg = "参数错误!"
  87. return
  88. }
  89. englishCompany, _ := this.GetInt("EnglishCompany")
  90. companyType := this.GetString("CompanyType")
  91. rsReportRecordId, _ := this.GetInt("RsReportRecordId")
  92. sellerId, _ := this.GetInt("SellerId")
  93. productId := services.GetProductId(sysUser.RoleTypeCode)
  94. if productId == 0 {
  95. productId = 1
  96. }
  97. if companyType == utils.COMPANY_CLASSIFY_RAI {
  98. productId = 2
  99. }
  100. if sellerId > 0 {
  101. ficcSellerMap := make(map[int]int)
  102. //raiSellerMap := make(map[int]int)
  103. _, groupIdRelationMap, err := services.GetFiccSystemGroup()
  104. if err != nil {
  105. br.Msg = "获取信息失败!"
  106. br.ErrMsg = "获取FICC销售信息失败!Err:" + err.Error()
  107. return
  108. }
  109. ficcSellerList, err := services.GetFiccSeller(time.Now(), groupIdRelationMap)
  110. for _, v := range ficcSellerList {
  111. ficcSellerMap[v.AdminId] = v.AdminId
  112. }
  113. if _, ok := ficcSellerMap[sellerId]; ok {
  114. productId = 1
  115. } else {
  116. productId = 2
  117. }
  118. }
  119. detailView := new(roadshow.CompanyDetailView)
  120. if englishCompany == 0 {
  121. var companyStatus string
  122. var permissionName string
  123. var viewTotal int
  124. companyProductItem, err := company.GetCompanyProductByCompanyIdAndProductId(companyId, productId)
  125. if err != nil {
  126. if err.Error() == utils.ErrNoRow() {
  127. br.Msg = "该客户已被删除"
  128. return
  129. }
  130. br.Msg = "搜索客户失败!"
  131. br.ErrMsg = "搜索客户失败!Err:" + err.Error()
  132. return
  133. }
  134. if rsReportRecordId > 0 {
  135. rsReportRecordItem, err := roadshow.GetRsReportRecordDetailByRsReportRecordId(rsReportRecordId)
  136. if err != nil {
  137. br.Msg = "路演信息不存在!"
  138. br.ErrMsg = "路演信息不存在!Err:" + err.Error()
  139. return
  140. }
  141. companyStatus = rsReportRecordItem.CompanyStatus
  142. permissionName = rsReportRecordItem.PermissionName
  143. viewTotal = rsReportRecordItem.InteractionNum
  144. } else {
  145. permissionList, err := company.GetCompanyProductReportPermissionList(companyId, productId)
  146. if err != nil {
  147. br.Msg = "搜索客户权限失败!"
  148. br.ErrMsg = "搜索客户权限失败!Err:" + err.Error()
  149. return
  150. }
  151. var permissionArr []string
  152. for _, v := range permissionList {
  153. permissionArr = append(permissionArr, v.PermissionName)
  154. }
  155. companyStatus = companyProductItem.Status
  156. permissionName = strings.Join(permissionArr, "/")
  157. }
  158. detailView.CompanyId = companyProductItem.CompanyId
  159. detailView.CompanyName = companyProductItem.CompanyName
  160. detailView.Status = companyStatus
  161. detailView.IndustryId = companyProductItem.IndustryId
  162. detailView.IndustryName = companyProductItem.IndustryName
  163. //detailView.PermissionName = strings.Join(permissionArr, "/")
  164. detailView.PermissionName = permissionName
  165. detailView.ReportReadTotal = companyProductItem.ViewTotal //ficc报告-累计阅读次数
  166. if companyType == utils.COMPANY_CLASSIFY_RAI { //权益互动统计
  167. detailView.ReportReadTotal = viewTotal
  168. }
  169. if productId == 1 {
  170. detailView.CompanyType = "FICC"
  171. } else {
  172. detailView.CompanyType = "权益"
  173. }
  174. br.Ret = 200
  175. br.Success = true
  176. br.Msg = "获取成功"
  177. br.Data = detailView
  178. return
  179. }
  180. // 英文客户
  181. enItem, e := models.GetEnglishCompanyById(companyId)
  182. if e != nil {
  183. br.Msg = "搜索英文客户失败!"
  184. br.ErrMsg = "获取英文客户详情失败!Err:" + e.Error()
  185. return
  186. }
  187. detailView.CompanyId = enItem.CompanyId
  188. detailView.CompanyName = enItem.CompanyName
  189. detailView.Status = enItem.OverseasStatus
  190. detailView.EnglishCompany = 1
  191. detailView.EnglishCountry = enItem.Country
  192. detailView.EnglishViewTotal = enItem.ViewTotal
  193. br.Ret = 200
  194. br.Success = true
  195. br.Msg = "获取成功"
  196. br.Data = detailView
  197. }
  198. //func init() {
  199. // init16_01()
  200. //}
  201. func init16_0() {
  202. var condition string
  203. var pars []interface{}
  204. condition = ` AND a.company_id > 0 AND a.start_date > '2025-01-01' `
  205. list, err := roadshow.GetRsReportRecordList(condition, pars)
  206. if err != nil {
  207. fmt.Println(err)
  208. return
  209. }
  210. var companyIds []int
  211. mapcompanyIds := make(map[int]bool)
  212. for _, v := range list {
  213. if mapcompanyIds[v.CompanyId] {
  214. continue
  215. }
  216. companyIds = append(companyIds, v.CompanyId)
  217. mapcompanyIds[v.CompanyId] = true
  218. }
  219. listCompanyProductFicc, err := company.GetCompanyProductListByCompanyIds(companyIds, 1)
  220. if err != nil {
  221. fmt.Println(err)
  222. return
  223. }
  224. listCompanyProductRai, err := company.GetCompanyProductListByCompanyIds(companyIds, 2)
  225. if err != nil {
  226. fmt.Println(err)
  227. return
  228. }
  229. companyMap := make(map[int]*company.CompanyProduct)
  230. companyMapRai := make(map[int]*company.CompanyProduct)
  231. for _, v := range listCompanyProductFicc {
  232. companyMap[v.CompanyId] = v
  233. }
  234. for _, v := range listCompanyProductRai {
  235. companyMapRai[v.CompanyId] = v
  236. }
  237. mapPermissionNameFicc := make(map[int][]string)
  238. mapPermissionNameRai := make(map[int][]string)
  239. mapPermissionFicc := make(map[int][]*roadshow.RsReportRecordPermission)
  240. mapPermissionRai := make(map[int][]*roadshow.RsReportRecordPermission)
  241. listPermissionNameFicc, errFicc := company.GetCompanyProductReportPermissionListInit16_0(companyIds, 1) // FICC权限信息
  242. if errFicc != nil {
  243. err = errFicc
  244. return
  245. }
  246. mapPermissionArrFicc := make(map[string]bool)
  247. for _, v := range listPermissionNameFicc {
  248. if mapPermissionArrFicc[fmt.Sprint(v.CompanyId, v.PermissionName)] || v.PermissionName == "" {
  249. continue
  250. }
  251. if companyMap[v.CompanyId].Status == "正式" && v.Status != "正式" {
  252. continue // 正式客户只统计正式权限
  253. }
  254. mapPermissionNameFicc[v.CompanyId] = append(mapPermissionNameFicc[v.CompanyId], v.PermissionName)
  255. mapPermissionArrFicc[fmt.Sprint(v.CompanyId, v.PermissionName)] = true
  256. }
  257. listPermissionNameRai, errRai := company.GetCompanyProductReportPermissionListInit16_0(companyIds, 2) // 权益权限信息
  258. if errRai != nil {
  259. err = errRai
  260. return
  261. }
  262. mapPermissionArrRai := make(map[string]bool)
  263. for _, v := range listPermissionNameRai {
  264. if mapPermissionArrRai[fmt.Sprint(v.CompanyId, v.PermissionName)] || v.PermissionName == "" {
  265. continue
  266. }
  267. if companyMapRai[v.CompanyId].Status == "正式" && v.Status != "正式" {
  268. continue // 正式客户只统计正式权限
  269. }
  270. mapPermissionNameRai[v.CompanyId] = append(mapPermissionNameRai[v.CompanyId], v.PermissionName)
  271. mapPermissionArrRai[fmt.Sprint(v.CompanyId, v.PermissionName)] = true
  272. }
  273. listPermissionFicc, errFicc := roadshow.GetCompanyProductReportPermissionList(companyIds, 1) // FICC权限信息
  274. if errFicc != nil {
  275. err = errFicc
  276. return
  277. }
  278. for _, v := range listPermissionFicc {
  279. if companyMap[v.CompanyId] == nil {
  280. continue
  281. }
  282. mapPermissionFicc[v.CompanyId] = append(mapPermissionFicc[v.CompanyId], v)
  283. }
  284. listPermissionRai, errRai := roadshow.GetCompanyProductReportPermissionList(companyIds, 2) // 权益权限信息
  285. if errRai != nil {
  286. err = errRai
  287. return
  288. }
  289. for _, v := range listPermissionRai {
  290. if companyMapRai[v.CompanyId] == nil {
  291. continue
  292. }
  293. mapPermissionRai[v.CompanyId] = append(mapPermissionRai[v.CompanyId], v)
  294. }
  295. adminAll, err := system.GetAdminList()
  296. if err != nil {
  297. return
  298. }
  299. //adminMap := make(map[int]*system.AdminView)
  300. mapRaiSllerId := make(map[int]bool) // 是否为权益销售
  301. for _, v := range adminAll {
  302. //adminMap[v.AdminId] = v
  303. if v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER || v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP || v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
  304. mapRaiSllerId[v.AdminId] = true
  305. }
  306. }
  307. var updateItems []*roadshow.RsReportRecord
  308. var itemsRs []*roadshow.RsReportRecordPermission
  309. mapRsReportRecordPermission := make(map[string]bool) // 一个公司的一场路演,添加了多个研究员只记录一次
  310. for _, v := range list {
  311. item := new(roadshow.RsReportRecord)
  312. item.RsReportRecordId = v.RsReportRecordId
  313. if mapRaiSllerId[v.SellerId] {
  314. if len(mapPermissionNameRai[v.CompanyId]) > 0 {
  315. item.PermissionName = strings.Join(mapPermissionNameRai[v.CompanyId], "/")
  316. }
  317. } else {
  318. if len(mapPermissionNameFicc[v.CompanyId]) > 0 {
  319. item.PermissionName = strings.Join(mapPermissionNameFicc[v.CompanyId], "/")
  320. }
  321. }
  322. updateItems = append(updateItems, item)
  323. if mapRaiSllerId[v.SellerId] {
  324. for _, vP := range mapPermissionRai[v.CompanyId] {
  325. pKey := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(vP.ChartPermissionId)
  326. if mapRsReportRecordPermission[pKey] {
  327. continue
  328. }
  329. vP.RsCalendarId = v.RsCalendarId
  330. itemsRs = append(itemsRs, vP)
  331. mapRsReportRecordPermission[pKey] = true
  332. }
  333. } else {
  334. for _, vP := range mapPermissionFicc[v.CompanyId] {
  335. pKey := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(vP.ChartPermissionId)
  336. if mapRsReportRecordPermission[pKey] {
  337. continue
  338. }
  339. vP.RsCalendarId = v.RsCalendarId
  340. itemsRs = append(itemsRs, vP)
  341. mapRsReportRecordPermission[pKey] = true
  342. }
  343. }
  344. }
  345. fmt.Println(len(updateItems))
  346. err = roadshow.UpdateRsReportRecordPermissionMulti(updateItems)
  347. fmt.Println(err)
  348. if len(itemsRs) > 0 {
  349. err = roadshow.MultiRsReportRecordPermission(itemsRs) // 添加公司当时对应的权限信息
  350. }
  351. return
  352. }
  353. func init16_01() {
  354. var condition string
  355. var pars []interface{}
  356. condition = ` AND a.company_id > 0 AND a.start_date > '2025-01-01' `
  357. list, err := roadshow.GetRsReportRecordList(condition, pars)
  358. if err != nil {
  359. fmt.Println(err)
  360. return
  361. }
  362. var companyIds []int
  363. mapcompanyIds := make(map[int]bool)
  364. for _, v := range list {
  365. if mapcompanyIds[v.CompanyId] {
  366. continue
  367. }
  368. companyIds = append(companyIds, v.CompanyId)
  369. mapcompanyIds[v.CompanyId] = true
  370. }
  371. adminAll, err := system.GetAdminList()
  372. if err != nil {
  373. return
  374. }
  375. //adminMap := make(map[int]*system.AdminView)
  376. mapRaiSllerId := make(map[int]bool) // 是否为权益销售
  377. for _, v := range adminAll {
  378. if v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER || v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP || v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
  379. mapRaiSllerId[v.AdminId] = true
  380. }
  381. }
  382. listerrCompanyInteractionNum, errCompany := company.GetCompanyListByCompanyId(companyIds) // 权益客户互动信息
  383. if errCompany != nil {
  384. err = errCompany
  385. return
  386. }
  387. mapInteractionNum := make(map[int]int)
  388. for _, v := range listerrCompanyInteractionNum {
  389. mapInteractionNum[v.CompanyId] = v.InteractionNum
  390. }
  391. var updateItems []*roadshow.RsReportRecord
  392. for _, v := range list {
  393. if mapRaiSllerId[v.SellerId] == true {
  394. item := new(roadshow.RsReportRecord)
  395. item.RsReportRecordId = v.RsReportRecordId
  396. item.InteractionNum = mapInteractionNum[v.CompanyId]
  397. updateItems = append(updateItems, item)
  398. }
  399. }
  400. err = roadshow.UpdateRsReportRecordInteractionNumnMulti(updateItems)
  401. fmt.Println("end", err)
  402. }