company.go 12 KB

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