report.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. package roadshow
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_task/models"
  7. "hongze/hongze_task/models/cygx"
  8. "hongze/hongze_task/models/roadshow"
  9. "hongze/hongze_task/utils"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. func AddReportRecord(cont context.Context) (err error) {
  15. defer func() {
  16. if err != nil {
  17. fmt.Println("AddReportRecord Err:" + err.Error())
  18. }
  19. }()
  20. adminAll, err := models.GetAdminList()
  21. if err != nil {
  22. return
  23. }
  24. adminMap := make(map[int]*models.AdminView)
  25. mapRaiSllerId := make(map[int]bool) // 是否为权益销售
  26. for _, v := range adminAll {
  27. adminMap[v.AdminId] = v
  28. 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 {
  29. mapRaiSllerId[v.AdminId] = true
  30. }
  31. }
  32. listEmail, err := cygx.GetAskEmail() //权益研究员姓名
  33. if err != nil {
  34. return
  35. }
  36. mapResearcherNameRai := make(map[string]bool)
  37. for _, v := range listEmail {
  38. mapResearcherNameRai[v.Name] = true
  39. }
  40. companyList, err := roadshow.RsCompanyList()
  41. if err != nil {
  42. return
  43. }
  44. companyListRai, err := roadshow.RsCompanyListRai() //权益客户信息
  45. if err != nil {
  46. return
  47. }
  48. companyMap := make(map[int]*roadshow.CompanySearchView)
  49. companyMapRai := make(map[int]*roadshow.CompanySearchView)
  50. for _, v := range companyList {
  51. companyMap[v.CompanyId] = v
  52. }
  53. for _, v := range companyListRai {
  54. companyMapRai[v.CompanyId] = v
  55. }
  56. endDate := time.Now().AddDate(-0, 0, -3).Format(utils.FormatDate)
  57. existList, err := roadshow.GetExistRsReportRecord(endDate)
  58. if err != nil {
  59. return
  60. }
  61. existMap := make(map[string]*roadshow.RsReportRecord)
  62. for _, v := range existList {
  63. key := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(v.RsCalendarResearcherId)
  64. existMap[key] = v
  65. }
  66. mapInteractionNum := make(map[int]int)
  67. mapPermissionNameFicc := make(map[int][]string)
  68. mapPermissionNameRai := make(map[int][]string)
  69. mapPermissionFicc := make(map[int][]*roadshow.RsReportRecordPermission)
  70. mapPermissionRai := make(map[int][]*roadshow.RsReportRecordPermission)
  71. var itemsRs []*roadshow.RsReportRecordPermission
  72. list, err := roadshow.GetRsCalendarDetail(endDate)
  73. if err != nil {
  74. return
  75. }
  76. var companyIds []int
  77. for _, v := range list {
  78. if v.CompanyId > 0 {
  79. companyIds = append(companyIds, v.CompanyId)
  80. }
  81. }
  82. if len(companyIds) > 0 {
  83. listPermissionNameFicc, errFicc := models.GetCompanyProductReportPermissionList(companyIds, 1) // FICC权限信息
  84. if errFicc != nil {
  85. err = errFicc
  86. return
  87. }
  88. mapPermissionArrFicc := make(map[string]bool)
  89. for _, v := range listPermissionNameFicc {
  90. if companyMap[v.CompanyId] == nil {
  91. continue
  92. }
  93. if mapPermissionArrFicc[fmt.Sprint(v.CompanyId, v.PermissionName)] || v.PermissionName == "" {
  94. continue
  95. }
  96. if companyMap[v.CompanyId].Status == "正式" && v.Status != "正式" {
  97. continue // 正式客户只统计正式权限
  98. }
  99. mapPermissionNameFicc[v.CompanyId] = append(mapPermissionNameFicc[v.CompanyId], v.PermissionName)
  100. mapPermissionArrFicc[fmt.Sprint(v.CompanyId, v.PermissionName)] = true
  101. }
  102. listPermissionNameRai, errRai := models.GetCompanyProductReportPermissionList(companyIds, 2) // 权益权限信息
  103. if errRai != nil {
  104. err = errRai
  105. return
  106. }
  107. mapPermissionArrRai := make(map[string]bool)
  108. for _, v := range listPermissionNameRai {
  109. if companyMapRai[v.CompanyId] == nil {
  110. continue
  111. }
  112. if mapPermissionArrRai[fmt.Sprint(v.CompanyId, v.PermissionName)] || v.PermissionName == "" {
  113. continue
  114. }
  115. if companyMapRai[v.CompanyId].Status == "正式" && v.Status != "正式" {
  116. continue // 正式客户只统计正式权限
  117. }
  118. mapPermissionNameRai[v.CompanyId] = append(mapPermissionNameRai[v.CompanyId], v.PermissionName)
  119. mapPermissionArrRai[fmt.Sprint(v.CompanyId, v.PermissionName)] = true
  120. }
  121. listPermissionFicc, errFicc := roadshow.GetCompanyProductReportPermissionList(companyIds, 1) // FICC权限信息
  122. if errFicc != nil {
  123. err = errFicc
  124. return
  125. }
  126. for _, v := range listPermissionFicc {
  127. if companyMap[v.CompanyId] == nil {
  128. continue
  129. }
  130. mapPermissionFicc[v.CompanyId] = append(mapPermissionFicc[v.CompanyId], v)
  131. }
  132. listPermissionRai, errRai := roadshow.GetCompanyProductReportPermissionList(companyIds, 2) // 权益权限信息
  133. if errRai != nil {
  134. err = errRai
  135. return
  136. }
  137. for _, v := range listPermissionRai {
  138. if companyMapRai[v.CompanyId] == nil {
  139. continue
  140. }
  141. mapPermissionRai[v.CompanyId] = append(mapPermissionRai[v.CompanyId], v)
  142. }
  143. listerrCompanyInteractionNum, errCompany := models.GetCompanyListByCompanyId(companyIds) // 权益客户互动信息
  144. if errCompany != nil {
  145. err = errCompany
  146. return
  147. }
  148. for _, v := range listerrCompanyInteractionNum {
  149. mapInteractionNum[v.CompanyId] = v.InteractionNum
  150. }
  151. }
  152. mapRsReportRecordPermission := make(map[string]bool) // 一个公司的一场路演,添加了多个研究员只记录一次
  153. for _, v := range list {
  154. if mapResearcherNameRai[v.ResearcherName] && v.CompanyName == "" && v.Source == 1 && v.ActivityType == "路演" {
  155. continue // 如果权益研究员的而且公司名称为空,而且是上海那边同步过来的路演就不做记录
  156. }
  157. company := new(roadshow.CompanySearchView)
  158. if v.CompanyId > 0 {
  159. if v.EnglishCompany == 1 { //如果是海外客户公司信息就直接拿存在海外的客户数据
  160. company.CompanyId = v.CompanyId
  161. company.CompanyName = v.CompanyName
  162. company.Status = v.CompanyStatus
  163. } else {
  164. if mapRaiSllerId[v.SysUserId] {
  165. company, _ = companyMapRai[v.CompanyId] // 如果是权益销售添加的信息,就用权益相关的客户信息
  166. if len(mapPermissionNameRai[v.CompanyId]) > 0 {
  167. company.PermissionName = strings.Join(mapPermissionNameRai[v.CompanyId], "/")
  168. }
  169. } else {
  170. company, _ = companyMap[v.CompanyId]
  171. if len(mapPermissionNameFicc[v.CompanyId]) > 0 {
  172. company.PermissionName = strings.Join(mapPermissionNameFicc[v.CompanyId], "/")
  173. }
  174. }
  175. }
  176. }
  177. researcher, ok := adminMap[v.ResearcherId]
  178. if !ok {
  179. err = errors.New("研究员信息不存在:" + strconv.Itoa(v.ResearcherId))
  180. //continue
  181. }
  182. seller, ok := adminMap[v.SysUserId]
  183. if !ok {
  184. err = errors.New("销售信息不存在:" + strconv.Itoa(v.SysUserId))
  185. //return
  186. //continue
  187. }
  188. key := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(v.RsCalendarResearcherId)
  189. if _, ok := existMap[key]; ok { //修改
  190. utils.FileLog.Info("update:" + strconv.Itoa(v.RsCalendarId))
  191. reportWhereParams := make(map[string]interface{})
  192. reportWhereParams["rs_calendar_id"] = v.RsCalendarId
  193. reportWhereParams["rs_calendar_researcher_id"] = v.RsCalendarResearcherId
  194. reportUpdateParams := make(map[string]interface{})
  195. if company != nil {
  196. reportUpdateParams["company_id"] = company.CompanyId
  197. reportUpdateParams["company_name"] = company.CompanyName
  198. reportUpdateParams["credit_code"] = company.CreditCode
  199. reportUpdateParams["company_status"] = company.Status //记录当时的状态
  200. reportUpdateParams["permission_name"] = company.PermissionName
  201. }
  202. reportUpdateParams["activity_type"] = v.ActivityType
  203. if researcher != nil {
  204. reportUpdateParams["researcher_id"] = researcher.AdminId
  205. reportUpdateParams["researcher_name"] = researcher.RealName
  206. reportUpdateParams["researcher_group_id"] = researcher.GroupId
  207. reportUpdateParams["researcher_group_name"] = researcher.GroupName
  208. } else {
  209. reportUpdateParams["researcher_id"] = v.ResearcherId
  210. reportUpdateParams["researcher_name"] = v.ResearcherName
  211. reportUpdateParams["researcher_group_id"] = 0
  212. reportUpdateParams["researcher_group_name"] = ""
  213. }
  214. if seller != nil {
  215. reportUpdateParams["seller_id"] = seller.AdminId
  216. reportUpdateParams["seller_name"] = seller.RealName
  217. reportUpdateParams["seller_group_id"] = seller.GroupId
  218. reportUpdateParams["seller_group_name"] = seller.GroupName
  219. } else {
  220. reportUpdateParams["seller_id"] = v.SysUserId
  221. reportUpdateParams["seller_name"] = v.SysUserRealName
  222. reportUpdateParams["seller_group_id"] = 0
  223. reportUpdateParams["seller_group_name"] = ""
  224. }
  225. reportUpdateParams["start_date"] = v.StartDate
  226. reportUpdateParams["end_date"] = v.EndDate
  227. reportUpdateParams["start_time"] = v.StartTime
  228. reportUpdateParams["end_time"] = v.EndTime
  229. reportUpdateParams["start_week"] = v.StartWeek
  230. reportUpdateParams["end_week"] = v.EndWeek
  231. reportUpdateParams["rs_calendar_researcher_status"] = v.Status
  232. reportUpdateParams["activity_type"] = v.ActivityType
  233. reportUpdateParams["roadshow_type"] = v.RoadshowType
  234. reportUpdateParams["question_status"] = v.QuestionStatus
  235. reportUpdateParams["modify_time"] = time.Now()
  236. err = roadshow.UpdateRsReportRecord(reportWhereParams, reportUpdateParams)
  237. } else { //新增
  238. item := new(roadshow.RsReportRecord)
  239. if company != nil {
  240. item.CompanyId = company.CompanyId
  241. item.CompanyName = company.CompanyName
  242. item.CreditCode = company.CreditCode
  243. item.CompanyStatus = company.Status
  244. item.PermissionName = company.PermissionName
  245. }
  246. item.ActivityType = v.ActivityType
  247. item.ResearcherId = v.ResearcherId
  248. item.ResearcherName = v.ResearcherName
  249. if researcher != nil {
  250. item.ResearcherGroupId = researcher.GroupId
  251. item.ResearcherGroupName = researcher.GroupName
  252. } else {
  253. item.ResearcherGroupId = 0
  254. item.ResearcherGroupName = ""
  255. }
  256. if seller != nil {
  257. item.SellerId = seller.AdminId
  258. item.SellerName = seller.RealName
  259. item.SellerGroupId = seller.GroupId
  260. item.SellerGroupName = seller.GroupName
  261. } else {
  262. item.SellerId = v.SysUserId
  263. item.SellerName = v.SysUserRealName
  264. item.SellerGroupId = 0
  265. item.SellerGroupName = ""
  266. }
  267. utils.FileLog.Info("add:" + strconv.Itoa(v.RsCalendarId))
  268. item.RsCalendarId = v.RsCalendarId
  269. item.RsCalendarResearcherId = v.RsCalendarResearcherId
  270. item.StartDate = v.StartDate
  271. item.EndDate = v.EndDate
  272. item.StartTime = v.StartTime
  273. item.EndTime = v.EndTime
  274. item.StartWeek = v.StartWeek
  275. item.EndWeek = v.EndWeek
  276. item.CreateTime = time.Now()
  277. item.ModifyTime = time.Now()
  278. item.RsCalendarResearcherStatus = v.Status
  279. item.RoadshowType = v.RoadshowType
  280. item.QuestionStatus = v.QuestionStatus
  281. item.InteractionNum = mapInteractionNum[v.CompanyId]
  282. _, err = roadshow.AddRsReportRecord(item)
  283. if err != nil {
  284. return
  285. }
  286. if mapRaiSllerId[v.SysUserId] {
  287. for _, vP := range mapPermissionRai[v.CompanyId] {
  288. pKey := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(vP.ChartPermissionId)
  289. if mapRsReportRecordPermission[pKey] {
  290. continue
  291. }
  292. vP.CreatedTime = time.Now()
  293. vP.ModifyTime = time.Now().Format(utils.FormatDateTime)
  294. vP.RsCalendarId = v.RsCalendarId
  295. itemsRs = append(itemsRs, vP)
  296. mapRsReportRecordPermission[pKey] = true
  297. }
  298. } else {
  299. for _, vP := range mapPermissionFicc[v.CompanyId] {
  300. pKey := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(vP.ChartPermissionId)
  301. if mapRsReportRecordPermission[pKey] {
  302. continue
  303. }
  304. vP.CreatedTime = time.Now()
  305. vP.ModifyTime = time.Now().Format(utils.FormatDateTime)
  306. vP.RsCalendarId = v.RsCalendarId
  307. itemsRs = append(itemsRs, vP)
  308. mapRsReportRecordPermission[pKey] = true
  309. }
  310. }
  311. }
  312. if len(itemsRs) > 0 {
  313. err = roadshow.MultiRsReportRecordPermission(itemsRs) // 添加公司当时对应的权限信息
  314. }
  315. }
  316. return err
  317. }