report.go 10 KB

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