report.go 68 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135
  1. package roadshow
  2. import (
  3. "encoding/json"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "github.com/tealeg/xlsx"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/company"
  8. "hongze/hz_crm_api/models/cygx"
  9. "hongze/hz_crm_api/models/roadshow"
  10. "hongze/hz_crm_api/models/system"
  11. "hongze/hz_crm_api/services"
  12. roadshowService "hongze/hz_crm_api/services/roadshow"
  13. "hongze/hz_crm_api/utils"
  14. "os"
  15. "path/filepath"
  16. "strconv"
  17. "strings"
  18. "time"
  19. )
  20. // ResearcherReportList
  21. // @Title 研究员路演统计
  22. // @Description 研究员路演统计接口
  23. // @Param DataType query string true "枚举值:week、month、time_interval、quarter(季度)"
  24. // @Param StartDate query string true "开始日期,格式:2022-04-06"
  25. // @Param EndDate query string true "结束日期,格式:2022-04-06"
  26. // @Param CompanyType query string true "客户类型:'ficc','权益',传空默认为ficc,"
  27. // @Success 200 {object} roadshow.RsReportRecordResp
  28. // @router /report/researcher/list [get]
  29. func (this *CalendarController) ResearcherReportList() {
  30. br := new(models.BaseResponse).Init()
  31. defer func() {
  32. this.Data["json"] = br
  33. this.ServeJSON()
  34. }()
  35. sysUser := this.SysUser
  36. if sysUser == nil {
  37. br.Msg = "请登录"
  38. br.ErrMsg = "请登录,SysUser Is Empty"
  39. br.Ret = 408
  40. return
  41. }
  42. dataType := this.GetString("DataType")
  43. startDate := this.GetString("StartDate")
  44. endDate := this.GetString("EndDate")
  45. companyType := this.GetString("CompanyType", "ficc")
  46. var adminDataList []roadshowService.AdminDataMap
  47. var err error
  48. //var firstDate time.Time
  49. //获取列表
  50. switch dataType {
  51. case "week":
  52. adminDataList, _, err = roadshowService.GetWeekData("researcher", "company_status")
  53. if err != nil {
  54. br.Msg = "数据异常"
  55. br.ErrMsg = "数据异常,Err:" + err.Error()
  56. return
  57. }
  58. case "month":
  59. adminDataList, _, err = roadshowService.GetMonthData("researcher", "company_status")
  60. if err != nil {
  61. br.Msg = "数据异常"
  62. br.ErrMsg = "数据异常,Err:" + err.Error()
  63. return
  64. }
  65. case "time_interval":
  66. if startDate == `` || endDate == `` {
  67. br.Msg = "开始日期或结束日期不能为空"
  68. br.ErrMsg = "开始日期或结束日期不能为空,Err:" + err.Error()
  69. return
  70. }
  71. adminDataList, _, err = roadshowService.GetTimeIntervalData(startDate, endDate, "researcher", "company_status")
  72. if err != nil {
  73. br.Msg = "数据异常"
  74. br.ErrMsg = "数据异常,Err:" + err.Error()
  75. return
  76. }
  77. case "quarter":
  78. adminDataList, _, err = roadshowService.GetQuarterData("researcher", "company_status")
  79. if err != nil {
  80. br.Msg = "数据异常"
  81. br.ErrMsg = "数据异常,Err:" + err.Error()
  82. return
  83. }
  84. if err != nil {
  85. br.Msg = "数据异常"
  86. br.ErrMsg = "数据异常,Err:" + err.Error()
  87. return
  88. }
  89. }
  90. var group []*roadshow.ResearcherGroup
  91. var researcherList []*roadshow.ResearcherGroup
  92. switch companyType {
  93. case utils.COMPANY_CLASSIFY_FICC:
  94. group, err = roadshow.GetResearcherGroup()
  95. if err != nil {
  96. br.Msg = "获取信息失败!"
  97. br.ErrMsg = "获取分组信息失败!Err:" + err.Error()
  98. return
  99. }
  100. researcherList, err = roadshow.GetResearcherV2()
  101. if err != nil {
  102. br.Msg = "获取信息失败!"
  103. br.ErrMsg = "获取分组信息失败!,GetResearcherV2 Err:" + err.Error()
  104. return
  105. }
  106. case utils.COMPANY_CLASSIFY_RAI:
  107. mapPermissionUser := make(map[string][]*roadshow.ResearcherGroup)
  108. listPermission, err := cygx.GetChartPermissionAll()
  109. if err != nil {
  110. br.Msg = "获取信息失败"
  111. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  112. return
  113. }
  114. mapPermissionId := make(map[string]int)
  115. for _, v := range listPermission {
  116. mapPermissionId[v.PermissionName] = v.ChartPermissionId
  117. }
  118. askUserList, err := cygx.GetAskEmailListResearcher()
  119. if err != nil {
  120. br.Msg = "获取失败"
  121. br.ErrMsg = "获取失败,GetAskEmailListResearcher Err: " + err.Error()
  122. return
  123. }
  124. sysUserList, err := system.GetAdminList()
  125. if err != nil {
  126. br.Msg = "获取失败"
  127. br.ErrMsg = "获取admin列表失败, Err:" + err.Error()
  128. return
  129. }
  130. adminMap := make(map[int]*system.Admin, 0)
  131. for _, v := range sysUserList {
  132. if v.Enabled == 0 {
  133. continue // 被禁用的不展示
  134. }
  135. adminMap[v.AdminId] = v
  136. }
  137. for _, v := range askUserList {
  138. if admin, ok := adminMap[v.AdminId]; ok {
  139. item := &roadshow.ResearcherGroup{
  140. AdminId: v.AdminId,
  141. RealName: v.Name,
  142. GroupId: mapPermissionId[v.ChartPermissionName], //行业ID作为组别,进行关系映射
  143. GroupName: admin.GroupName,
  144. RoleTypeCode: admin.RoleTypeCode,
  145. }
  146. mapPermissionUser[v.ChartPermissionName] = append(mapPermissionUser[v.ChartPermissionName], item)
  147. researcherList = append(researcherList, item)
  148. }
  149. }
  150. //for _, vP := range listPermission {
  151. for k, v := range mapPermissionUser {
  152. //if vP.PermissionName != k {
  153. // continue //统一排序顺序
  154. //}
  155. respItem := new(roadshow.ResearcherGroup)
  156. respItem.GroupName = k + "组"
  157. respItem.GroupId = mapPermissionId[k]
  158. respItem.ResearcherList = v
  159. group = append(group, respItem)
  160. }
  161. //}
  162. }
  163. groupMap := make(map[int][]*roadshow.ResearcherGroup)
  164. for _, v := range researcherList {
  165. item := &roadshow.ResearcherGroup{
  166. GroupId: v.GroupId,
  167. GroupName: v.GroupName,
  168. AdminId: v.AdminId,
  169. RealName: v.RealName,
  170. RoleTypeCode: v.RoleTypeCode,
  171. }
  172. if findItems, ok := groupMap[v.GroupId]; ok {
  173. findItems = append(findItems, item)
  174. groupMap[v.GroupId] = findItems
  175. } else {
  176. findItems = append(findItems, item)
  177. groupMap[v.GroupId] = findItems
  178. }
  179. //}
  180. }
  181. for _, v := range group {
  182. v.ResearcherList = groupMap[v.GroupId]
  183. }
  184. groupReportRecordList := make([]roadshow.GroupReportRecord, 0)
  185. rsAllReportRecordNumList := make([]roadshow.RsReportRecordNum, 0)
  186. RsReportRecordResp := roadshow.RsReportRecordResp{
  187. List: groupReportRecordList,
  188. RsReportRecordNumList: rsAllReportRecordNumList,
  189. }
  190. startDateIndexList := make(map[int]string) //开始时间间隔map
  191. endDateIndexList := make(map[int]string) //结束时间间隔map
  192. tmpAllTryOutNumMap := make(map[int]int)
  193. tmpAllFormalNumMap := make(map[int]int)
  194. tmpAllMeetingNumMap := make(map[int]int)
  195. tmpAllRoadShowNumMap := make(map[int]int)
  196. tmpAllSalonNumMap := make(map[int]int)
  197. tmpAllAskNumMap := make(map[int]int)
  198. for _, v := range group {
  199. v.ResearcherList = groupMap[v.GroupId]
  200. tmpGroupAdminReportRecord := make([]roadshow.AdminReportRecord, 0)
  201. tmpGroupRsReportRecordNumList := make([]roadshow.RsReportRecordNum, 0)
  202. //roadShowMap := make(map[int]int) // 路演总次数
  203. //salonMap := make(map[int]int) //沙龙路演次数
  204. tmpGroupTryOutNumMap := make(map[int]int)
  205. tmpGroupFormalNumMap := make(map[int]int)
  206. tmpGroupMeetingNumMap := make(map[int]int)
  207. tmpGroupRoadShowNumMap := make(map[int]int)
  208. tmpGroupSalonMapNumMap := make(map[int]int)
  209. tmpGroupAskMapNumMap := make(map[int]int)
  210. for _, researcher := range groupMap[v.GroupId] {
  211. //组内研究员数据
  212. //每个区间的数据
  213. tmpAdminRsReportRecordNumList := make([]roadshow.RsReportRecordNum, 0)
  214. for index, adminData := range adminDataList {
  215. startDateIndexList[index] = adminData.StartDate
  216. endDateIndexList[index] = adminData.EndDate
  217. var tmpTryOutNum, tmpFormalNum, tmpMeetingNum, tmpRoadShowNum, tmpSalonNum, tmpAskNum int
  218. if num, ok := adminData.TryOutMap[researcher.AdminId]; ok {
  219. tmpTryOutNum = num
  220. }
  221. if num, ok := adminData.FormalMap[researcher.AdminId]; ok {
  222. tmpFormalNum = num
  223. }
  224. if num, ok := adminData.MeetingMap[researcher.AdminId]; ok {
  225. tmpMeetingNum = num
  226. }
  227. if num, ok := adminData.RoadShowMap[researcher.AdminId]; ok { //路演总次数
  228. tmpRoadShowNum = num
  229. }
  230. if num, ok := adminData.SalonMap[researcher.AdminId]; ok { //路演总次数
  231. tmpSalonNum = num
  232. }
  233. if num, ok := adminData.AskMap[researcher.AdminId]; ok { //路演总次数
  234. tmpAskNum = num
  235. }
  236. tmpAdminRsReportRecordNum := roadshow.RsReportRecordNum{
  237. TryOutNum: tmpTryOutNum,
  238. FormalNum: tmpFormalNum,
  239. MeetingNum: tmpMeetingNum,
  240. RoadShowNum: tmpRoadShowNum,
  241. SalonNum: tmpSalonNum,
  242. AskNum: tmpAskNum,
  243. StartDate: adminData.StartDate,
  244. EndDate: adminData.EndDate,
  245. }
  246. tmpAdminRsReportRecordNumList = append(tmpAdminRsReportRecordNumList, tmpAdminRsReportRecordNum)
  247. //组内数据汇总
  248. if _, ok := tmpGroupTryOutNumMap[index]; !ok {
  249. tmpGroupTryOutNumMap[index] = 0
  250. }
  251. if _, ok := tmpGroupFormalNumMap[index]; !ok {
  252. tmpGroupFormalNumMap[index] = 0
  253. }
  254. if _, ok := tmpGroupMeetingNumMap[index]; !ok {
  255. tmpGroupMeetingNumMap[index] = 0
  256. }
  257. if _, ok := tmpGroupRoadShowNumMap[index]; !ok {
  258. tmpGroupRoadShowNumMap[index] = 0
  259. }
  260. if _, ok := tmpGroupSalonMapNumMap[index]; !ok {
  261. tmpGroupSalonMapNumMap[index] = 0
  262. }
  263. if _, ok := tmpGroupAskMapNumMap[index]; !ok {
  264. tmpGroupAskMapNumMap[index] = 0
  265. }
  266. tmpGroupTryOutNumMap[index] += tmpTryOutNum
  267. tmpGroupFormalNumMap[index] += tmpFormalNum
  268. tmpGroupMeetingNumMap[index] += tmpMeetingNum
  269. tmpGroupRoadShowNumMap[index] += tmpRoadShowNum
  270. tmpGroupSalonMapNumMap[index] += tmpSalonNum
  271. tmpGroupAskMapNumMap[index] += tmpAskNum
  272. //总数据汇总
  273. if _, ok := tmpAllTryOutNumMap[index]; !ok {
  274. tmpAllTryOutNumMap[index] = 0
  275. }
  276. if _, ok := tmpAllFormalNumMap[index]; !ok {
  277. tmpAllFormalNumMap[index] = 0
  278. }
  279. if _, ok := tmpAllMeetingNumMap[index]; !ok {
  280. tmpAllMeetingNumMap[index] = 0
  281. }
  282. if _, ok := tmpGroupRoadShowNumMap[index]; !ok {
  283. tmpGroupRoadShowNumMap[index] = 0
  284. }
  285. if _, ok := tmpGroupSalonMapNumMap[index]; !ok {
  286. tmpGroupSalonMapNumMap[index] = 0
  287. }
  288. if _, ok := tmpGroupAskMapNumMap[index]; !ok {
  289. tmpGroupAskMapNumMap[index] = 0
  290. }
  291. tmpAllTryOutNumMap[index] += tmpTryOutNum
  292. tmpAllFormalNumMap[index] += tmpFormalNum
  293. tmpAllMeetingNumMap[index] += tmpMeetingNum
  294. tmpAllRoadShowNumMap[index] += tmpRoadShowNum
  295. tmpAllSalonNumMap[index] += tmpSalonNum
  296. tmpAllAskNumMap[index] += tmpAskNum
  297. }
  298. tmpAdminReportRecord := roadshow.AdminReportRecord{
  299. Name: researcher.RealName,
  300. AdminId: researcher.AdminId,
  301. RsReportRecordNumList: tmpAdminRsReportRecordNumList,
  302. }
  303. tmpGroupAdminReportRecord = append(tmpGroupAdminReportRecord, tmpAdminReportRecord)
  304. }
  305. for i := 0; i < len(tmpGroupMeetingNumMap); i++ {
  306. tmpGroupRsReportRecordNum := roadshow.RsReportRecordNum{
  307. TryOutNum: tmpGroupTryOutNumMap[i],
  308. FormalNum: tmpGroupFormalNumMap[i],
  309. MeetingNum: tmpGroupMeetingNumMap[i],
  310. RoadShowNum: tmpGroupRoadShowNumMap[i],
  311. SalonNum: tmpGroupSalonMapNumMap[i],
  312. AskNum: tmpGroupAskMapNumMap[i],
  313. StartDate: startDateIndexList[i],
  314. EndDate: endDateIndexList[i],
  315. }
  316. tmpGroupRsReportRecordNumList = append(tmpGroupRsReportRecordNumList, tmpGroupRsReportRecordNum)
  317. }
  318. groupReportRecord := roadshow.GroupReportRecord{
  319. Item: tmpGroupAdminReportRecord,
  320. Name: v.GroupName,
  321. RsReportRecordNumList: tmpGroupRsReportRecordNumList,
  322. }
  323. RsReportRecordResp.List = append(RsReportRecordResp.List, groupReportRecord)
  324. }
  325. //总体汇总数据
  326. for i := 0; i < len(tmpAllFormalNumMap); i++ {
  327. tmpGroupRsReportRecordNum := roadshow.RsReportRecordNum{
  328. TryOutNum: tmpAllTryOutNumMap[i],
  329. FormalNum: tmpAllFormalNumMap[i],
  330. MeetingNum: tmpAllMeetingNumMap[i],
  331. RoadShowNum: tmpAllRoadShowNumMap[i],
  332. SalonNum: tmpAllSalonNumMap[i],
  333. StartDate: startDateIndexList[i],
  334. EndDate: endDateIndexList[i],
  335. }
  336. rsAllReportRecordNumList = append(rsAllReportRecordNumList, tmpGroupRsReportRecordNum)
  337. }
  338. RsReportRecordResp.RsReportRecordNumList = rsAllReportRecordNumList
  339. br.Ret = 200
  340. br.Success = true
  341. br.Msg = "获取成功"
  342. br.Data = RsReportRecordResp
  343. return
  344. }
  345. // SellerReportList
  346. // @Title 销售路演统计
  347. // @Description 销售路演统计接口
  348. // @Param DataType query string true "枚举值:week、month、time_interval、online、offline"
  349. // @Param DimensionType query string true "维度枚举值:company_status、roadshow_type"
  350. // @Param StartDate query string true "开始日期,格式:2022-04-06"
  351. // @Param EndDate query string true "结束日期,格式:2022-04-06"
  352. // @Param CompanyType query string true "客户类型:'ficc','权益',传空默认为ficc,"
  353. // @Success 200 {object} roadshow.RsReportRecordResp
  354. // @router /report/seller/list [get]
  355. func (this *CalendarController) SellerReportList() {
  356. br := new(models.BaseResponse).Init()
  357. defer func() {
  358. this.Data["json"] = br
  359. this.ServeJSON()
  360. }()
  361. sysUser := this.SysUser
  362. if sysUser == nil {
  363. br.Msg = "请登录"
  364. br.ErrMsg = "请登录,SysUser Is Empty"
  365. br.Ret = 408
  366. return
  367. }
  368. dataType := this.GetString("DataType")
  369. dimensionType := this.GetString("DimensionType")
  370. startDate := this.GetString("StartDate")
  371. endDate := this.GetString("EndDate")
  372. companyType := this.GetString("CompanyType", "ficc")
  373. if dimensionType == "" {
  374. dimensionType = "company_status"
  375. }
  376. if companyType == utils.COMPANY_CLASSIFY_RAI {
  377. dimensionType = "roadshow_rai" // 类型传了权益,就强制查询权益的路演
  378. }
  379. var adminDataList []roadshowService.AdminDataMap
  380. var err error
  381. var firstDate time.Time
  382. //获取列表
  383. switch dataType {
  384. case "week":
  385. adminDataList, firstDate, err = roadshowService.GetWeekDataV2("seller", dimensionType, 6)
  386. if err != nil {
  387. br.Msg = "数据异常"
  388. br.ErrMsg = "数据异常,Err:" + err.Error()
  389. return
  390. }
  391. case "month":
  392. adminDataList, firstDate, err = roadshowService.GetMonthDataV2("seller", dimensionType, 6)
  393. if err != nil {
  394. br.Msg = "数据异常"
  395. br.ErrMsg = "数据异常,Err:" + err.Error()
  396. return
  397. }
  398. case "time_interval":
  399. if startDate == `` || endDate == `` {
  400. br.Msg = "开始日期或结束日期不能为空"
  401. br.ErrMsg = "开始日期或结束日期不能为空,Err:" + err.Error()
  402. return
  403. }
  404. adminDataList, firstDate, err = roadshowService.GetTimeIntervalData(startDate, endDate, "seller", dimensionType)
  405. if err != nil {
  406. br.Msg = "数据异常"
  407. br.ErrMsg = "数据异常,Err:" + err.Error()
  408. return
  409. }
  410. }
  411. var group []services.AdminGroup
  412. var groupIdRelationMap map[int]int
  413. var researcherList []*roadshow.Researcher
  414. switch companyType {
  415. case utils.COMPANY_CLASSIFY_FICC:
  416. group, groupIdRelationMap, err = services.GetFiccSystemGroup()
  417. if err != nil {
  418. br.Msg = "获取信息失败!"
  419. br.ErrMsg = "获取FICC销售信息失败!Err:" + err.Error()
  420. return
  421. }
  422. researcherList, err = services.GetFiccSeller(firstDate, groupIdRelationMap)
  423. case utils.COMPANY_CLASSIFY_RAI:
  424. group, groupIdRelationMap, err = services.GetRaiSystemGroup()
  425. if err != nil {
  426. br.Msg = "获取信息失败!"
  427. br.ErrMsg = "获取分组信息失败!Err:" + err.Error()
  428. return
  429. }
  430. researcherList, err = services.GetRaiSeller(groupIdRelationMap)
  431. if err != nil {
  432. br.Msg = "获取信息失败!"
  433. br.ErrMsg = "获取权益销售信息失败!Err:" + err.Error()
  434. return
  435. }
  436. }
  437. groupMap := make(map[int][]*roadshow.Researcher)
  438. for _, v := range researcherList {
  439. if v.RoleTypeCode == "ficc_admin" {
  440. findItems := groupMap[1]
  441. findItems = append(findItems, v)
  442. groupMap[1] = findItems
  443. } else {
  444. if findItems, ok := groupMap[v.GroupId]; ok {
  445. findItems = append(findItems, v)
  446. groupMap[v.GroupId] = findItems
  447. } else {
  448. findItems = append(findItems, v)
  449. groupMap[v.GroupId] = findItems
  450. }
  451. }
  452. }
  453. groupReportRecordList := make([]roadshow.GroupReportRecord, 0)
  454. rsAllReportRecordNumList := make([]roadshow.RsReportRecordNum, 0)
  455. RsReportRecordResp := roadshow.RsReportRecordResp{
  456. List: groupReportRecordList,
  457. RsReportRecordNumList: rsAllReportRecordNumList,
  458. }
  459. startDateIndexList := make(map[int]string) //开始时间间隔map
  460. endDateIndexList := make(map[int]string) //结束时间间隔map
  461. tmpAllTryOutNumMap := make(map[int]int)
  462. tmpAllFormalNumMap := make(map[int]int)
  463. tmpAllMeetingNumMap := make(map[int]int)
  464. tmpAllOnlineNumMap := make(map[int]int)
  465. tmpAllOfflineNumMap := make(map[int]int)
  466. tmpAllRoadShowNumMap := make(map[int]int)
  467. tmpAllSalonNumMap := make(map[int]int)
  468. for _, v := range group {
  469. v.ResearcherList = groupMap[v.GroupId]
  470. tmpGroupAdminReportRecord := make([]roadshow.AdminReportRecord, 0)
  471. tmpGroupRsReportRecordNumList := make([]roadshow.RsReportRecordNum, 0)
  472. tmpGroupTryOutNumMap := make(map[int]int)
  473. tmpGroupFormalNumMap := make(map[int]int)
  474. tmpGroupMeetingNumMap := make(map[int]int)
  475. tmpGroupOnlineNumMap := make(map[int]int)
  476. tmpGroupOfflineNumMap := make(map[int]int)
  477. tmpGroupRoadShowNumMap := make(map[int]int)
  478. tmpGroupSalonNumMap := make(map[int]int)
  479. for _, researcher := range groupMap[v.GroupId] {
  480. //组内研究员数据
  481. //每个区间的数据
  482. tmpAdminRsReportRecordNumList := make([]roadshow.RsReportRecordNum, 0)
  483. for index, adminData := range adminDataList {
  484. startDateIndexList[index] = adminData.StartDate
  485. endDateIndexList[index] = adminData.EndDate
  486. var tmpTryOutNum, tmpFormalNum, tmpMeetingNum, tmpOnlineNum, tmpOfflineNum, tmpRoadShowNum, tmpSalonNum int
  487. if num, ok := adminData.TryOutMap[researcher.AdminId]; ok {
  488. tmpTryOutNum = num
  489. }
  490. if num, ok := adminData.FormalMap[researcher.AdminId]; ok {
  491. tmpFormalNum = num
  492. }
  493. if num, ok := adminData.MeetingMap[researcher.AdminId]; ok {
  494. tmpMeetingNum = num
  495. }
  496. if num, ok := adminData.OnlineMap[researcher.AdminId]; ok {
  497. tmpOnlineNum = num
  498. }
  499. if num, ok := adminData.OfflineMap[researcher.AdminId]; ok {
  500. tmpOfflineNum = num
  501. }
  502. if num, ok := adminData.RoadShowMap[researcher.AdminId]; ok {
  503. tmpRoadShowNum = num
  504. }
  505. if num, ok := adminData.SalonMap[researcher.AdminId]; ok {
  506. tmpSalonNum = num
  507. }
  508. tmpAdminRsReportRecordNum := roadshow.RsReportRecordNum{
  509. TryOutNum: tmpTryOutNum,
  510. FormalNum: tmpFormalNum,
  511. MeetingNum: tmpMeetingNum,
  512. OnlineNum: tmpOnlineNum,
  513. OfflineNum: tmpOfflineNum,
  514. RoadShowNum: tmpRoadShowNum,
  515. SalonNum: tmpSalonNum,
  516. StartDate: adminData.StartDate,
  517. EndDate: adminData.EndDate,
  518. }
  519. tmpAdminRsReportRecordNumList = append(tmpAdminRsReportRecordNumList, tmpAdminRsReportRecordNum)
  520. //组内数据汇总
  521. if _, ok := tmpGroupTryOutNumMap[index]; !ok {
  522. tmpGroupTryOutNumMap[index] = 0
  523. }
  524. if _, ok := tmpGroupFormalNumMap[index]; !ok {
  525. tmpGroupFormalNumMap[index] = 0
  526. }
  527. if _, ok := tmpGroupMeetingNumMap[index]; !ok {
  528. tmpGroupMeetingNumMap[index] = 0
  529. }
  530. if _, ok := tmpGroupOnlineNumMap[index]; !ok {
  531. tmpGroupOnlineNumMap[index] = 0
  532. }
  533. if _, ok := tmpGroupOfflineNumMap[index]; !ok {
  534. tmpGroupOfflineNumMap[index] = 0
  535. }
  536. if _, ok := tmpGroupRoadShowNumMap[index]; !ok {
  537. tmpGroupRoadShowNumMap[index] = 0
  538. }
  539. if _, ok := tmpGroupSalonNumMap[index]; !ok {
  540. tmpGroupSalonNumMap[index] = 0
  541. }
  542. tmpGroupTryOutNumMap[index] += tmpTryOutNum
  543. tmpGroupFormalNumMap[index] += tmpFormalNum
  544. tmpGroupMeetingNumMap[index] += tmpMeetingNum
  545. tmpGroupOnlineNumMap[index] += tmpOnlineNum
  546. tmpGroupOfflineNumMap[index] += tmpOfflineNum
  547. tmpGroupRoadShowNumMap[index] += tmpRoadShowNum
  548. tmpGroupSalonNumMap[index] += tmpSalonNum
  549. //总数据汇总
  550. if _, ok := tmpAllTryOutNumMap[index]; !ok {
  551. tmpAllTryOutNumMap[index] = 0
  552. }
  553. if _, ok := tmpAllFormalNumMap[index]; !ok {
  554. tmpAllFormalNumMap[index] = 0
  555. }
  556. if _, ok := tmpAllMeetingNumMap[index]; !ok {
  557. tmpAllMeetingNumMap[index] = 0
  558. }
  559. if _, ok := tmpAllOnlineNumMap[index]; !ok {
  560. tmpAllOnlineNumMap[index] = 0
  561. }
  562. if _, ok := tmpAllOfflineNumMap[index]; !ok {
  563. tmpAllOfflineNumMap[index] = 0
  564. }
  565. if _, ok := tmpAllRoadShowNumMap[index]; !ok {
  566. tmpAllRoadShowNumMap[index] = 0
  567. }
  568. if _, ok := tmpAllSalonNumMap[index]; !ok {
  569. tmpAllSalonNumMap[index] = 0
  570. }
  571. tmpAllTryOutNumMap[index] += tmpTryOutNum
  572. tmpAllFormalNumMap[index] += tmpFormalNum
  573. tmpAllMeetingNumMap[index] += tmpMeetingNum
  574. tmpAllOnlineNumMap[index] += tmpOnlineNum
  575. tmpAllOfflineNumMap[index] += tmpOfflineNum
  576. tmpAllRoadShowNumMap[index] += tmpRoadShowNum
  577. tmpAllSalonNumMap[index] += tmpSalonNum
  578. }
  579. tmpAdminReportRecord := roadshow.AdminReportRecord{
  580. Name: researcher.RealName,
  581. AdminId: researcher.AdminId,
  582. RsReportRecordNumList: tmpAdminRsReportRecordNumList,
  583. }
  584. tmpGroupAdminReportRecord = append(tmpGroupAdminReportRecord, tmpAdminReportRecord)
  585. }
  586. for i := 0; i < len(tmpGroupMeetingNumMap); i++ {
  587. tmpGroupRsReportRecordNum := roadshow.RsReportRecordNum{
  588. TryOutNum: tmpGroupTryOutNumMap[i],
  589. FormalNum: tmpGroupFormalNumMap[i],
  590. MeetingNum: tmpGroupMeetingNumMap[i],
  591. OnlineNum: tmpGroupOnlineNumMap[i],
  592. OfflineNum: tmpGroupOfflineNumMap[i],
  593. RoadShowNum: tmpGroupRoadShowNumMap[i],
  594. SalonNum: tmpGroupSalonNumMap[i],
  595. StartDate: startDateIndexList[i],
  596. EndDate: endDateIndexList[i],
  597. }
  598. tmpGroupRsReportRecordNumList = append(tmpGroupRsReportRecordNumList, tmpGroupRsReportRecordNum)
  599. }
  600. groupReportRecord := roadshow.GroupReportRecord{
  601. Item: tmpGroupAdminReportRecord,
  602. Name: v.GroupName,
  603. GruopId: v.GroupId,
  604. RsReportRecordNumList: tmpGroupRsReportRecordNumList,
  605. }
  606. groupReportRecordList = append(groupReportRecordList, groupReportRecord)
  607. }
  608. //总体汇总数据
  609. for i := 0; i < len(tmpAllFormalNumMap); i++ {
  610. tmpGroupRsReportRecordNum := roadshow.RsReportRecordNum{
  611. TryOutNum: tmpAllTryOutNumMap[i],
  612. FormalNum: tmpAllFormalNumMap[i],
  613. MeetingNum: tmpAllMeetingNumMap[i],
  614. OnlineNum: tmpAllOnlineNumMap[i],
  615. OfflineNum: tmpAllOfflineNumMap[i],
  616. RoadShowNum: tmpAllRoadShowNumMap[i],
  617. SalonNum: tmpAllSalonNumMap[i],
  618. StartDate: startDateIndexList[i],
  619. EndDate: endDateIndexList[i],
  620. }
  621. rsAllReportRecordNumList = append(rsAllReportRecordNumList, tmpGroupRsReportRecordNum)
  622. }
  623. RsReportRecordResp.RsReportRecordNumList = rsAllReportRecordNumList
  624. //tmpList := groupReportRecordList
  625. //因为RoleTypeCode不一样,所以需要重新从数据库取数据
  626. //adminInfo, _ := system.GetSysAdminById(sysUser.AdminId)
  627. //adminGroupId := adminInfo.GroupId
  628. //if tmpGroupId, ok := groupIdRelationMap[adminGroupId]; ok {
  629. // adminGroupId = tmpGroupId
  630. //}
  631. //switch adminInfo.RoleTypeCode {
  632. //case utils.ROLE_TYPE_CODE_FICC_GROUP, utils.ROLE_TYPE_CODE_FICC_TEAM:
  633. // for index, v := range tmpList {
  634. // //如果不是同一个分组,那么就移除该分组下的人员数据
  635. // if v.GruopId != adminGroupId {
  636. // tmpList[index].Item = make([]roadshow.AdminReportRecord, 0)
  637. // }
  638. // }
  639. // RsReportRecordResp.List = tmpList
  640. //case utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_ADMIN:
  641. // //管理员、超管看全部数据
  642. // RsReportRecordResp.List = groupReportRecordList
  643. //}
  644. // 20230529-有权限查看该页面的用户权限同admin
  645. RsReportRecordResp.List = groupReportRecordList
  646. br.Ret = 200
  647. br.Success = true
  648. br.Msg = "获取成功"
  649. br.Data = RsReportRecordResp
  650. return
  651. }
  652. // ReportCalendarList
  653. // @Title 路演详情列表
  654. // @Description 路演详情列表接口
  655. // @Param AdminType query string true "枚举值:researcher、seller、 special:专项路演"
  656. // @Param DataType query string true "枚举值:try_out、formal、meeting、online、offline"
  657. // @Param AdminId query int true "用户id"
  658. // @Param StartDate query string true "开始日期,格式:2022-04-06"
  659. // @Param EndDate query string true "结束日期,格式:2022-04-06"
  660. // @Param Status query int true "0:全部,1:已完成"
  661. // @Param EnglishCompany query int true "-1:全部,0:国内,1:海外"
  662. // @Success 200 {object} []roadshow.RsReportRecordList
  663. // @router /report/calendar/list [get]
  664. func (this *CalendarController) ReportCalendarList() {
  665. br := new(models.BaseResponse).Init()
  666. defer func() {
  667. this.Data["json"] = br
  668. this.ServeJSON()
  669. }()
  670. sysUser := this.SysUser
  671. if sysUser == nil {
  672. br.Msg = "请登录"
  673. br.ErrMsg = "请登录,SysUser Is Empty"
  674. br.Ret = 408
  675. return
  676. }
  677. adminType := this.GetString("AdminType")
  678. dataType := this.GetString("DataType")
  679. startDate := this.GetString("StartDate")
  680. endDate := this.GetString("EndDate")
  681. adminId, _ := this.GetInt("AdminId")
  682. if adminId <= 0 {
  683. br.Msg = "请传入对应的人员"
  684. return
  685. }
  686. status, _ := this.GetInt("Status")
  687. englishCompany, _ := this.GetInt("EnglishCompany")
  688. //正式客户
  689. var condition string
  690. var pars []interface{}
  691. condition = ` and a.start_date >= ? and a.end_date <= ? `
  692. pars = append(pars, startDate, endDate)
  693. //选择的人员类型(发起人还是被发起人)
  694. if adminType == "seller" {
  695. condition += ` and a.seller_id = ? `
  696. } else if adminType == "special" {
  697. condition += ` and a.seller_id = ? `
  698. detail, err := company.GetConfigDetailByCode("choice_researcher_adminid")
  699. if err != nil {
  700. br.Msg = "获取研究员信息失败!"
  701. br.ErrMsg = "选择研究员失败,Err:" + err.Error()
  702. return
  703. }
  704. condition += ` and a.researcher_id IN (` + detail.ConfigValue + `) `
  705. } else {
  706. condition += ` and a.researcher_id = ? `
  707. }
  708. pars = append(pars, adminId)
  709. //获取列表
  710. switch dataType {
  711. case "try_out":
  712. condition += ` and a.company_status = ? `
  713. pars = append(pars, "试用")
  714. case "formal":
  715. condition += ` and a.company_status = ? `
  716. pars = append(pars, "正式")
  717. case "meeting":
  718. condition += ` and a.activity_type = ? `
  719. pars = append(pars, "公开会议")
  720. case "online":
  721. condition += ` and a.roadshow_type = ? `
  722. pars = append(pars, "线上")
  723. case "offline":
  724. condition += ` and a.roadshow_type = ? `
  725. pars = append(pars, "线下")
  726. case "road_show":
  727. condition += ` and a.activity_type = ? `
  728. pars = append(pars, "路演")
  729. case "salon":
  730. condition += ` and a.activity_type = ? `
  731. pars = append(pars, "沙龙")
  732. default:
  733. br.Msg = "请传入类型"
  734. br.ErrMsg = "请传入类型DataType"
  735. return
  736. }
  737. if status == 1 {
  738. condition += ` and c.question_status = ? `
  739. pars = append(pars, 1)
  740. }
  741. if englishCompany > 0 {
  742. condition += ` and b.english_company = ? `
  743. pars = append(pars, englishCompany)
  744. }
  745. list, err := roadshow.GetRsReportRecordList(condition, pars)
  746. if err != nil {
  747. br.Msg = "获取失败"
  748. br.ErrMsg = "获取失败,ERR:" + err.Error()
  749. return
  750. }
  751. ficcSellerMap := make(map[int]int)
  752. //raiSellerMap := make(map[int]int)
  753. _, groupIdRelationMap, err := services.GetFiccSystemGroup()
  754. if err != nil {
  755. br.Msg = "获取信息失败!"
  756. br.ErrMsg = "获取FICC销售信息失败!Err:" + err.Error()
  757. return
  758. }
  759. ficcSellerList, err := services.GetFiccSeller(time.Now(), groupIdRelationMap)
  760. for _, v := range ficcSellerList {
  761. ficcSellerMap[v.AdminId] = v.AdminId
  762. }
  763. for _, v := range list {
  764. if _, ok := ficcSellerMap[v.SellerId]; ok {
  765. v.CompanyType = "FICC"
  766. } else {
  767. v.CompanyType = "权益"
  768. }
  769. }
  770. br.Ret = 200
  771. br.Success = true
  772. br.Msg = "获取成功"
  773. br.Data = list
  774. return
  775. }
  776. // ChoiceResearcher
  777. // @Title 选择的研究员
  778. // @Description 选择的研究员接口
  779. // @Param AdminIds query string true "研究员ID ,多个用 , 隔开"
  780. // @Success 200 操作成功
  781. // @router /report/choice/researcher [post]
  782. func (this *CalendarController) ChoiceResearcher() {
  783. br := new(models.BaseResponse).Init()
  784. defer func() {
  785. this.Data["json"] = br
  786. this.ServeJSON()
  787. }()
  788. sysUser := this.SysUser
  789. if sysUser == nil {
  790. br.Msg = "请登录"
  791. br.ErrMsg = "请登录,SysUser Is Empty"
  792. br.Ret = 408
  793. return
  794. }
  795. var req roadshow.ResearcherIds
  796. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  797. if err != nil {
  798. br.Msg = "参数解析异常!"
  799. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  800. return
  801. }
  802. if req.AdminIds == "" {
  803. req.AdminIds = "0"
  804. }
  805. adminIdArr := strings.Split(req.AdminIds, ",")
  806. for _, v := range adminIdArr {
  807. _, err := strconv.Atoi(v)
  808. if err != nil {
  809. br.Msg = "选择研究员失败!"
  810. br.ErrMsg = "选择研究员失败,Err:" + err.Error()
  811. return
  812. }
  813. }
  814. err = company.CrmConfigUpdate(req.AdminIds, "choice_researcher_adminid")
  815. if err != nil {
  816. br.Msg = "操作失败"
  817. br.ErrMsg = "操作失败,Err:" + err.Error()
  818. return
  819. }
  820. br.Ret = 200
  821. br.Success = true
  822. br.Msg = "操作成功"
  823. return
  824. }
  825. // AdminList
  826. // @Title 选择的研究员列表
  827. // @Description 获取选择的研究员列表
  828. // @Success 200 {object} roadshow.Researcher
  829. // @Success 200 操作成功
  830. // @router /report/admin/list [get]
  831. func (this *CalendarController) AdminList() {
  832. br := new(models.BaseResponse).Init()
  833. defer func() {
  834. this.Data["json"] = br
  835. this.ServeJSON()
  836. }()
  837. sysUser := this.SysUser
  838. if sysUser == nil {
  839. br.Msg = "请登录"
  840. br.ErrMsg = "请登录,SysUser Is Empty"
  841. br.Ret = 408
  842. return
  843. }
  844. detail, err := company.GetConfigDetailByCode("choice_researcher_adminid")
  845. if err != nil {
  846. br.Msg = "获取研究员信息失败!"
  847. br.ErrMsg = "选择研究员失败,Err:" + err.Error()
  848. return
  849. }
  850. list, err := roadshow.GetChoiceResearcher(detail.ConfigValue)
  851. if err != nil {
  852. br.Msg = "操作失败"
  853. br.ErrMsg = "操作失败,Err:" + err.Error()
  854. return
  855. }
  856. br.Ret = 200
  857. br.Success = true
  858. br.Msg = "操作成功"
  859. br.Data = list
  860. return
  861. }
  862. // SellerReportList
  863. // @Title 专项路演统计
  864. // @Description 专项路演统计接口
  865. // @Success 200 {object} roadshow.RsReportRecordResp
  866. // @router /report/special/list [get]
  867. func (this *CalendarController) SpecialReportList() {
  868. br := new(models.BaseResponse).Init()
  869. defer func() {
  870. this.Data["json"] = br
  871. this.ServeJSON()
  872. }()
  873. sysUser := this.SysUser
  874. if sysUser == nil {
  875. br.Msg = "请登录"
  876. br.ErrMsg = "请登录,SysUser Is Empty"
  877. br.Ret = 408
  878. return
  879. }
  880. dimensionType := this.GetString("DimensionType")
  881. if dimensionType == "" {
  882. dimensionType = "seller_special"
  883. }
  884. var adminDataList []roadshowService.AdminDataMap
  885. var err error
  886. var firstDate time.Time
  887. //获取列表
  888. adminDataList, firstDate, err = roadshowService.GetWeekData("seller", dimensionType)
  889. if err != nil {
  890. br.Msg = "数据异常"
  891. br.ErrMsg = "数据异常,Err:" + err.Error()
  892. return
  893. }
  894. var haveData bool
  895. detail, err := company.GetConfigDetailByCode("choice_researcher_adminid")
  896. if err != nil {
  897. br.Msg = "获取信息失败!"
  898. br.ErrMsg = "获取选择研究员信息失败,Err:" + err.Error()
  899. return
  900. }
  901. adminMap := make(map[int]int)
  902. adminIdArr := strings.Split(detail.ConfigValue, ",")
  903. for _, v := range adminIdArr {
  904. adminId, err := strconv.Atoi(v)
  905. if err != nil {
  906. br.Msg = "获取信息失败!"
  907. br.ErrMsg = "获取选择研究员信息失败,Err:" + err.Error()
  908. return
  909. }
  910. adminMap[adminId] = adminId
  911. }
  912. group, groupIdRelationMap, err := services.GetFiccSystemGroup()
  913. if err != nil {
  914. br.Msg = "获取信息失败!"
  915. br.ErrMsg = "获取分组信息失败!Err:" + err.Error()
  916. return
  917. }
  918. researcherList, err := services.GetFiccSeller(firstDate, groupIdRelationMap)
  919. groupMap := make(map[int][]*roadshow.Researcher)
  920. for _, v := range researcherList {
  921. //if v.RoleTypeCode == "ficc_admin" {
  922. // findItems := groupMap[1]
  923. // findItems = append(findItems, v)
  924. // groupMap[1] = findItems
  925. //} else {
  926. if findItems, ok := groupMap[v.GroupId]; ok {
  927. findItems = append(findItems, v)
  928. groupMap[v.GroupId] = findItems
  929. } else {
  930. findItems = append(findItems, v)
  931. groupMap[v.GroupId] = findItems
  932. }
  933. //}
  934. }
  935. groupReportRecordList := make([]roadshow.GroupReportRecord, 0)
  936. rsAllReportRecordNumList := make([]roadshow.RsReportRecordNum, 0)
  937. RsReportRecordResp := roadshow.RsReportRecordResp{
  938. List: groupReportRecordList,
  939. RsReportRecordNumList: rsAllReportRecordNumList,
  940. }
  941. startDateIndexList := make(map[int]string) //开始时间间隔map
  942. endDateIndexList := make(map[int]string) //结束时间间隔map
  943. tmpAllTryOutNumMap := make(map[int]int)
  944. tmpAllFormalNumMap := make(map[int]int)
  945. tmpAllMeetingNumMap := make(map[int]int)
  946. tmpAllOnlineNumMap := make(map[int]int)
  947. tmpAllOfflineNumMap := make(map[int]int)
  948. for _, v := range group {
  949. v.ResearcherList = groupMap[v.GroupId]
  950. tmpGroupAdminReportRecord := make([]roadshow.AdminReportRecord, 0)
  951. tmpGroupRsReportRecordNumList := make([]roadshow.RsReportRecordNum, 0)
  952. tmpGroupTryOutNumMap := make(map[int]int)
  953. tmpGroupFormalNumMap := make(map[int]int)
  954. tmpGroupMeetingNumMap := make(map[int]int)
  955. tmpGroupOnlineNumMap := make(map[int]int)
  956. tmpGroupOfflineNumMap := make(map[int]int)
  957. for _, researcher := range groupMap[v.GroupId] {
  958. //组内研究员数据
  959. var isLook bool
  960. //如果是管理员或者本组的可以查看详情
  961. if sysUser.GroupId == v.GroupId || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
  962. isLook = true
  963. }
  964. //每个区间的数据
  965. tmpAdminRsReportRecordNumList := make([]roadshow.RsReportRecordNum, 0)
  966. var isAppend bool
  967. for index, adminData := range adminDataList {
  968. startDateIndexList[index] = adminData.StartDate
  969. endDateIndexList[index] = adminData.EndDate
  970. var tmpTryOutNum, tmpFormalNum, tmpMeetingNum, tmpOnlineNum, tmpOfflineNum int
  971. if num, ok := adminData.TryOutMap[researcher.AdminId]; ok {
  972. tmpTryOutNum = num
  973. }
  974. if num, ok := adminData.FormalMap[researcher.AdminId]; ok {
  975. tmpFormalNum = num
  976. }
  977. if num, ok := adminData.MeetingMap[researcher.AdminId]; ok {
  978. tmpMeetingNum = num
  979. }
  980. if num, ok := adminData.OnlineMap[researcher.AdminId]; ok {
  981. tmpOnlineNum = num
  982. }
  983. if num, ok := adminData.OfflineMap[researcher.AdminId]; ok {
  984. tmpOfflineNum = num
  985. }
  986. tmpAdminRsReportRecordNum := roadshow.RsReportRecordNum{
  987. TryOutNum: tmpTryOutNum,
  988. FormalNum: tmpFormalNum,
  989. MeetingNum: tmpMeetingNum,
  990. OnlineNum: tmpOnlineNum,
  991. OfflineNum: tmpOfflineNum,
  992. StartDate: adminData.StartDate,
  993. EndDate: adminData.EndDate,
  994. IsLook: isLook,
  995. }
  996. if tmpTryOutNum > 0 || tmpFormalNum > 0 || tmpMeetingNum > 0 || tmpOnlineNum > 0 || tmpOfflineNum > 0 {
  997. isAppend = true
  998. haveData = true
  999. }
  1000. tmpAdminRsReportRecordNumList = append(tmpAdminRsReportRecordNumList, tmpAdminRsReportRecordNum)
  1001. //组内数据汇总
  1002. if _, ok := tmpGroupTryOutNumMap[index]; !ok {
  1003. tmpGroupTryOutNumMap[index] = 0
  1004. }
  1005. if _, ok := tmpGroupFormalNumMap[index]; !ok {
  1006. tmpGroupFormalNumMap[index] = 0
  1007. }
  1008. if _, ok := tmpGroupMeetingNumMap[index]; !ok {
  1009. tmpGroupMeetingNumMap[index] = 0
  1010. }
  1011. if _, ok := tmpGroupOnlineNumMap[index]; !ok {
  1012. tmpGroupOnlineNumMap[index] = 0
  1013. }
  1014. if _, ok := tmpGroupOfflineNumMap[index]; !ok {
  1015. tmpGroupOfflineNumMap[index] = 0
  1016. }
  1017. tmpGroupTryOutNumMap[index] += tmpTryOutNum
  1018. tmpGroupFormalNumMap[index] += tmpFormalNum
  1019. tmpGroupMeetingNumMap[index] += tmpMeetingNum
  1020. tmpGroupOnlineNumMap[index] += tmpOnlineNum
  1021. tmpGroupOfflineNumMap[index] += tmpOfflineNum
  1022. //总数据汇总
  1023. if _, ok := tmpAllTryOutNumMap[index]; !ok {
  1024. tmpAllTryOutNumMap[index] = 0
  1025. }
  1026. if _, ok := tmpAllFormalNumMap[index]; !ok {
  1027. tmpAllFormalNumMap[index] = 0
  1028. }
  1029. if _, ok := tmpAllMeetingNumMap[index]; !ok {
  1030. tmpAllMeetingNumMap[index] = 0
  1031. }
  1032. if _, ok := tmpAllOnlineNumMap[index]; !ok {
  1033. tmpAllOnlineNumMap[index] = 0
  1034. }
  1035. if _, ok := tmpAllOfflineNumMap[index]; !ok {
  1036. tmpAllOfflineNumMap[index] = 0
  1037. }
  1038. tmpAllTryOutNumMap[index] += tmpTryOutNum
  1039. tmpAllFormalNumMap[index] += tmpFormalNum
  1040. tmpAllMeetingNumMap[index] += tmpMeetingNum
  1041. tmpAllOnlineNumMap[index] += tmpOnlineNum
  1042. tmpAllOfflineNumMap[index] += tmpOfflineNum
  1043. }
  1044. tmpAdminReportRecord := roadshow.AdminReportRecord{
  1045. Name: researcher.RealName,
  1046. AdminId: researcher.AdminId,
  1047. RsReportRecordNumList: tmpAdminRsReportRecordNumList,
  1048. }
  1049. if isAppend {
  1050. tmpGroupAdminReportRecord = append(tmpGroupAdminReportRecord, tmpAdminReportRecord)
  1051. }
  1052. }
  1053. for i := 0; i < len(tmpGroupMeetingNumMap); i++ {
  1054. tmpGroupRsReportRecordNum := roadshow.RsReportRecordNum{
  1055. TryOutNum: tmpGroupTryOutNumMap[i],
  1056. FormalNum: tmpGroupFormalNumMap[i],
  1057. MeetingNum: tmpGroupMeetingNumMap[i],
  1058. OnlineNum: tmpGroupOnlineNumMap[i],
  1059. OfflineNum: tmpGroupOfflineNumMap[i],
  1060. StartDate: startDateIndexList[i],
  1061. EndDate: endDateIndexList[i],
  1062. }
  1063. tmpGroupRsReportRecordNumList = append(tmpGroupRsReportRecordNumList, tmpGroupRsReportRecordNum)
  1064. }
  1065. groupReportRecord := roadshow.GroupReportRecord{
  1066. Item: tmpGroupAdminReportRecord,
  1067. Name: v.GroupName,
  1068. GruopId: v.GroupId,
  1069. RsReportRecordNumList: tmpGroupRsReportRecordNumList,
  1070. }
  1071. if len(tmpGroupAdminReportRecord) > 0 {
  1072. groupReportRecordList = append(groupReportRecordList, groupReportRecord)
  1073. }
  1074. }
  1075. //总体汇总数据
  1076. for i := 0; i < len(tmpAllFormalNumMap); i++ {
  1077. tmpGroupRsReportRecordNum := roadshow.RsReportRecordNum{
  1078. TryOutNum: tmpAllTryOutNumMap[i],
  1079. FormalNum: tmpAllFormalNumMap[i],
  1080. MeetingNum: tmpAllMeetingNumMap[i],
  1081. OnlineNum: tmpAllOnlineNumMap[i],
  1082. OfflineNum: tmpAllOfflineNumMap[i],
  1083. StartDate: startDateIndexList[i],
  1084. EndDate: endDateIndexList[i],
  1085. }
  1086. rsAllReportRecordNumList = append(rsAllReportRecordNumList, tmpGroupRsReportRecordNum)
  1087. }
  1088. RsReportRecordResp.RsReportRecordNumList = rsAllReportRecordNumList
  1089. tmpList := groupReportRecordList
  1090. //因为RoleTypeCode不一样,所以需要重新从数据库取数据
  1091. adminInfo, _ := system.GetSysAdminById(sysUser.AdminId)
  1092. adminGroupId := adminInfo.GroupId
  1093. if tmpGroupId, ok := groupIdRelationMap[adminGroupId]; ok {
  1094. adminGroupId = tmpGroupId
  1095. }
  1096. switch adminInfo.RoleTypeCode {
  1097. case utils.ROLE_TYPE_CODE_FICC_GROUP, utils.ROLE_TYPE_CODE_FICC_TEAM:
  1098. for index, v := range tmpList {
  1099. //如果不是同一个分组,那么就移除该分组下的人员数据
  1100. if v.GruopId != adminGroupId {
  1101. tmpList[index].Item = make([]roadshow.AdminReportRecord, 0)
  1102. }
  1103. }
  1104. RsReportRecordResp.List = tmpList
  1105. case utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_ADMIN:
  1106. //管理员、超管看全部数据
  1107. RsReportRecordResp.List = groupReportRecordList
  1108. }
  1109. //判断是否有数据如果没有,处理数据为空
  1110. if !haveData {
  1111. RsReportRecordResp = roadshow.RsReportRecordResp{
  1112. List: make([]roadshow.GroupReportRecord, 0),
  1113. RsReportRecordNumList: make([]roadshow.RsReportRecordNum, 0),
  1114. }
  1115. }
  1116. br.Ret = 200
  1117. br.Success = true
  1118. br.Msg = "获取成功"
  1119. br.Data = RsReportRecordResp
  1120. return
  1121. }
  1122. // ResearcherReportList
  1123. // @Title 研究员出差表
  1124. // @Description 研究员出差表接口
  1125. // @Param AdminId query int true "研究员id"
  1126. // @Param WeekQuery query int false "周查询: 0-本期(本周及下周); 1-前两周; 2-后两周"
  1127. // @Param BaseQueryDate query string false "周查询时的开始日期"
  1128. // @Success 200 {object} roadshow.BusinessTripResp
  1129. // @router /report/researcher/business_trip [get]
  1130. func (this *CalendarController) ResearcherBusinessTrip() {
  1131. br := new(models.BaseResponse).Init()
  1132. defer func() {
  1133. this.Data["json"] = br
  1134. this.ServeJSON()
  1135. }()
  1136. sysUser := this.SysUser
  1137. if sysUser == nil {
  1138. br.Msg = "请登录"
  1139. br.ErrMsg = "请登录,SysUser Is Empty"
  1140. br.Ret = 408
  1141. return
  1142. }
  1143. adminId, _ := this.GetInt("AdminId")
  1144. weekQuery, _ := this.GetInt("WeekQuery")
  1145. baseQueryDate := this.GetString("BaseQueryDate")
  1146. //fmt.Println(adminId)
  1147. group, err := roadshow.GetResearcherGroup()
  1148. if err != nil {
  1149. br.Msg = "获取信息失败!"
  1150. br.ErrMsg = "获取分组信息失败!Err:" + err.Error()
  1151. return
  1152. }
  1153. researcherList, err := roadshow.GetBusinessTripResearcher()
  1154. if err != nil {
  1155. br.Msg = "获取信息失败!"
  1156. br.ErrMsg = "获取分组信息失败!,GetBusinessTripResearcher Err:" + err.Error()
  1157. return
  1158. }
  1159. ////获取当天周日期
  1160. //nowWeekStart := utils.GetNowWeekMonday().AddDate(0, 0, -2)
  1161. ////nowWeekEnd := utils.GetNowWeekLastDay()
  1162. ////获取下周日期
  1163. //nextWeekStart := utils.GetNextWeekMonday().AddDate(0, 0, -2)
  1164. //nextWeekEnd := utils.GetNextWeekLastDay().AddDate(0, 0, -2)
  1165. var nowWeekStart time.Time
  1166. if baseQueryDate == "" {
  1167. now := time.Now()
  1168. weekDay := int(now.Weekday())
  1169. if weekDay == 6 {
  1170. nowWeekStart, _ = time.ParseInLocation(utils.FormatDate, now.Format(utils.FormatDate), time.Local)
  1171. } else {
  1172. nowWeekStart, _ = time.ParseInLocation(utils.FormatDate, now.AddDate(0, 0, -(weekDay+1)).Format(utils.FormatDate), time.Local)
  1173. }
  1174. }
  1175. // 查询需求是可以无限往前后两周查询, 以入参为本周开始日期
  1176. if baseQueryDate != "" {
  1177. t, e := time.ParseInLocation(utils.FormatDate, baseQueryDate, time.Local)
  1178. if e != nil {
  1179. br.Msg = "查询开始日期格式有误"
  1180. return
  1181. }
  1182. nowWeekStart = t
  1183. }
  1184. // 前/后两周
  1185. if weekQuery == 1 {
  1186. nowWeekStart = nowWeekStart.AddDate(0, 0, -14)
  1187. }
  1188. if weekQuery == 2 {
  1189. nowWeekStart = nowWeekStart.AddDate(0, 0, +14)
  1190. }
  1191. //nowWeekEnd := utils.GetNowWeekLastDay()
  1192. //获取下周日期
  1193. nextWeekStart := nowWeekStart.AddDate(0, 0, +7)
  1194. nextWeekEnd := nowWeekStart.AddDate(0, 0, +13)
  1195. //获取路演信息
  1196. roadshowList, err := roadshow.GetBusinessTripList(adminId, nowWeekStart.Format(utils.FormatDate), nextWeekEnd.Format(utils.FormatDateTime))
  1197. if err != nil {
  1198. br.Msg = "获取信息失败!"
  1199. br.ErrMsg = "获取路演信息失败!,GetBusinessTripList Err:" + err.Error()
  1200. return
  1201. }
  1202. roadshowMap := make(map[int][]*roadshow.BusinessTripResearcherList)
  1203. for _, v := range roadshowList {
  1204. if findVals, ok := roadshowMap[v.ResearcherId]; ok {
  1205. findVals = append(findVals, v)
  1206. roadshowMap[v.ResearcherId] = findVals
  1207. } else {
  1208. roadsItems := make([]*roadshow.BusinessTripResearcherList, 0)
  1209. roadsItems = append(roadsItems, v)
  1210. roadshowMap[v.ResearcherId] = roadsItems
  1211. }
  1212. }
  1213. //fmt.Println("roadshow json start")
  1214. //jsonBody, err := json.Marshal(roadshowMap)
  1215. //fmt.Println("json body:" + string(jsonBody))
  1216. //fmt.Println("roadshow json end")
  1217. groupMap := make(map[int][]*roadshow.BusinessTripResearcher)
  1218. for _, v := range researcherList {
  1219. if findRoadshowList, ok := roadshowMap[v.AdminId]; ok {
  1220. tripList := make([]*roadshow.BusinessTrip, 0)
  1221. researcherMap := make(map[string]string)
  1222. for i := 0; i < 7; i++ {
  1223. newDay, _ := time.ParseInLocation(utils.FormatDate, nowWeekStart.AddDate(0, 0, i).Format(utils.FormatDate), time.Local)
  1224. weekDate := newDay.Format(utils.FormatDate)
  1225. tripItem := new(roadshow.BusinessTrip)
  1226. for _, r := range findRoadshowList {
  1227. startDateT, _ := time.ParseInLocation(utils.FormatDate, r.StartDate, time.Local)
  1228. endDateT, _ := time.ParseInLocation(utils.FormatDate, r.EndDate, time.Local)
  1229. if int(endDateT.Sub(startDateT)) <= 0 {
  1230. skey := strconv.Itoa(r.ResearcherId) + r.StartDate
  1231. if _, sok := researcherMap[skey]; !sok {
  1232. if r != nil && (newDay.Equal(startDateT) || (newDay.Equal(endDateT)) || (newDay.Before(endDateT) && newDay.After(startDateT))) {
  1233. tripItem.City = r.City
  1234. researcherMap[skey] = skey
  1235. }
  1236. }
  1237. } else {
  1238. if r != nil && (newDay.Equal(startDateT) || (newDay.Equal(endDateT)) || (newDay.Before(endDateT) && newDay.After(startDateT))) {
  1239. tripItem.City = r.City
  1240. //researcherMap[skey] = skey
  1241. }
  1242. }
  1243. }
  1244. tripItem.WeekDate = weekDate
  1245. tripItem.WeekType = "current"
  1246. tripItem.Week = newDay.Weekday().String()
  1247. tripList = append(tripList, tripItem)
  1248. }
  1249. for i := 0; i < 7; i++ {
  1250. newDay := nextWeekStart.AddDate(0, 0, i)
  1251. weekDate := newDay.Format(utils.FormatDate)
  1252. tripItem := new(roadshow.BusinessTrip)
  1253. for _, r := range findRoadshowList {
  1254. startDateT, _ := time.ParseInLocation(utils.FormatDate, r.StartDate, time.Local)
  1255. endDateT, _ := time.ParseInLocation(utils.FormatDate, r.EndDate, time.Local)
  1256. if int(endDateT.Sub(startDateT)) <= 0 {
  1257. skey := strconv.Itoa(r.ResearcherId) + r.StartDate
  1258. if _, sok := researcherMap[skey]; !sok {
  1259. if r != nil && (newDay.Equal(startDateT) || (newDay.Equal(endDateT)) || (newDay.Before(endDateT) && newDay.After(startDateT))) {
  1260. tripItem.City = r.City
  1261. researcherMap[skey] = skey
  1262. }
  1263. }
  1264. } else {
  1265. if r != nil && (newDay.Equal(startDateT) || (newDay.Equal(endDateT)) || (newDay.Before(endDateT) && newDay.After(startDateT))) {
  1266. tripItem.City = r.City
  1267. //researcherMap[skey] = skey
  1268. }
  1269. }
  1270. }
  1271. tripItem.WeekDate = weekDate
  1272. tripItem.WeekType = "next"
  1273. tripItem.Week = newDay.Weekday().String()
  1274. tripList = append(tripList, tripItem)
  1275. }
  1276. v.BusinessTripList = tripList
  1277. //if v.RoleTypeCode == "ficc_admin" {
  1278. // findItems := groupMap[1]
  1279. // findItems = append(findItems, v)
  1280. // groupMap[1] = findItems
  1281. //} else {
  1282. if findItems, ok := groupMap[v.GroupId]; ok {
  1283. findItems = append(findItems, v)
  1284. groupMap[v.GroupId] = findItems
  1285. } else {
  1286. findItems = append(findItems, v)
  1287. groupMap[v.GroupId] = findItems
  1288. }
  1289. //}
  1290. }
  1291. }
  1292. groupList := make([]*roadshow.BusinessTripGroup, 0)
  1293. for _, v := range group {
  1294. item := new(roadshow.BusinessTripGroup)
  1295. item.GroupName = v.GroupName
  1296. item.GroupId = v.GroupId
  1297. item.ResearcherList = groupMap[v.GroupId]
  1298. groupList = append(groupList, item)
  1299. }
  1300. resp := new(roadshow.BusinessTripResp)
  1301. resp.GroupList = groupList
  1302. resp.BaseDate = nowWeekStart.Format(utils.FormatDate)
  1303. br.Ret = 200
  1304. br.Success = true
  1305. br.Msg = "获取成功"
  1306. br.Data = resp
  1307. return
  1308. }
  1309. // OverseasCustomReportCalendarList
  1310. // @Title 路演详情列表
  1311. // @Description 路演详情列表接口
  1312. // @Param Keyword query string true "关键字:客户名称"
  1313. // @Param CompanyStatus query string true "客户状态,枚举值:正式、试用、关闭"
  1314. // @Param SellerId query int true "销售id列表;多个用英文,分割"
  1315. // @Param ResearcherId query int true "销售id列表;多个用英文,分割"
  1316. // @Param StartDate query string true "开始日期,格式:2022-04-06"
  1317. // @Param EndDate query string true "结束日期,格式:2022-04-06"
  1318. // @Param SortField query string false "排序字段:start_date"
  1319. // @Param SortDesc query int false "1:降序,默认,2:升序"
  1320. // @Success 200 {object} []roadshow.RsReportRecordList
  1321. // @router /overseas_custom/calendar/list [get]
  1322. func (this *CalendarController) OverseasCustomReportCalendarList() {
  1323. br := new(models.BaseResponse).Init()
  1324. defer func() {
  1325. this.Data["json"] = br
  1326. this.ServeJSON()
  1327. }()
  1328. sysUser := this.SysUser
  1329. if sysUser == nil {
  1330. br.Msg = "请登录"
  1331. br.ErrMsg = "请登录,SysUser Is Empty"
  1332. br.Ret = 408
  1333. return
  1334. }
  1335. keyword := this.GetString("Keyword")
  1336. companyStatus := this.GetString("CompanyStatus")
  1337. startDate := this.GetString("StartDate")
  1338. endDate := this.GetString("EndDate")
  1339. sellerId := this.GetString("SellerId")
  1340. researcherId := this.GetString("ResearcherId")
  1341. pageSize, _ := this.GetInt("PageSize")
  1342. currentIndex, _ := this.GetInt("CurrentIndex")
  1343. sortField := this.GetString("SortField")
  1344. sortDesc, _ := this.GetInt("SortDesc")
  1345. var startSize int
  1346. if pageSize <= 0 {
  1347. pageSize = utils.PageSize20
  1348. }
  1349. if currentIndex <= 0 {
  1350. currentIndex = 1
  1351. }
  1352. startSize = paging.StartIndex(currentIndex, pageSize)
  1353. switch sortField {
  1354. case "start_date":
  1355. default:
  1356. sortField = "start_date"
  1357. }
  1358. // "1:降序,默认,2:升序"
  1359. sortDesStr := ` desc `
  1360. switch sortDesc {
  1361. case 2:
  1362. sortDesStr = ` asc `
  1363. default:
  1364. sortDesStr = "desc"
  1365. }
  1366. total, list, err := roadshow.GetOverseaCustomCalendarList(keyword, sellerId, researcherId, startDate, endDate, companyStatus, sortField, sortDesStr, startSize, pageSize)
  1367. if err != nil {
  1368. br.Msg = "获取失败"
  1369. br.ErrMsg = "获取失败,ERR:" + err.Error()
  1370. return
  1371. }
  1372. page := paging.GetPaging(currentIndex, pageSize, total)
  1373. resp := new(roadshow.OverseaCustomRecordInfoResp)
  1374. resp.Paging = page
  1375. resp.List = list
  1376. br.Ret = 200
  1377. br.Success = true
  1378. br.Msg = "获取成功"
  1379. br.Data = resp
  1380. return
  1381. }
  1382. // OverseasCustomCalendarAdminList
  1383. // @Title 海外客户路演用户列表接口
  1384. // @Description 海外客户路演用户列表接口
  1385. // @Param AdminType query string true "枚举值:researcher、seller"
  1386. // @Success 200 {object} []roadshow.AdminInfo
  1387. // @router /overseas_custom/sys_user/list [get]
  1388. func (this *CalendarController) OverseasCustomCalendarAdminList() {
  1389. br := new(models.BaseResponse).Init()
  1390. defer func() {
  1391. this.Data["json"] = br
  1392. this.ServeJSON()
  1393. }()
  1394. sysUser := this.SysUser
  1395. if sysUser == nil {
  1396. br.Msg = "请登录"
  1397. br.ErrMsg = "请登录,SysUser Is Empty"
  1398. br.Ret = 408
  1399. return
  1400. }
  1401. adminType := this.GetString("AdminType")
  1402. var list []*roadshow.AdminInfo
  1403. var err error
  1404. //选择的人员类型(发起人还是被发起人)
  1405. if adminType == "seller" {
  1406. list, err = roadshow.GetOverseaCustomCalendarSellerList()
  1407. } else if adminType == "researcher" {
  1408. list, err = roadshow.GetOverseaCustomCalendarResearcherList()
  1409. } else {
  1410. br.Msg = "错误的类型"
  1411. br.IsSendEmail = false
  1412. }
  1413. if err != nil {
  1414. br.Msg = "获取失败"
  1415. br.ErrMsg = "获取失败,ERR:" + err.Error()
  1416. return
  1417. }
  1418. br.Ret = 200
  1419. br.Success = true
  1420. br.Msg = "获取成功"
  1421. br.Data = list
  1422. return
  1423. }
  1424. // OverseasSellerReportList
  1425. // @Title 海外客户销售路演统计
  1426. // @Description 海外客户销售路演统计接口
  1427. // @Param DataType query string true "枚举值:week、month、time_interval、online、offline"
  1428. // @Param DimensionType query string true "维度枚举值:company_status、roadshow_type"
  1429. // @Param StartDate query string true "开始日期,格式:2022-04-06"
  1430. // @Param EndDate query string true "结束日期,格式:2022-04-06"
  1431. // @Success 200 {object} roadshow.RsReportRecordResp
  1432. // @router /overseas_custom/seller/list [get]
  1433. func (this *CalendarController) OverseasSellerReportList() {
  1434. br := new(models.BaseResponse).Init()
  1435. defer func() {
  1436. this.Data["json"] = br
  1437. this.ServeJSON()
  1438. }()
  1439. sysUser := this.SysUser
  1440. if sysUser == nil {
  1441. br.Msg = "请登录"
  1442. br.ErrMsg = "请登录,SysUser Is Empty"
  1443. br.Ret = 408
  1444. return
  1445. }
  1446. dataType := this.GetString("DataType")
  1447. dimensionType := this.GetString("DimensionType")
  1448. startDate := this.GetString("StartDate")
  1449. endDate := this.GetString("EndDate")
  1450. if dimensionType == "" {
  1451. dimensionType = "company_status"
  1452. }
  1453. var adminDataList []roadshowService.OverseasAdminDataMap
  1454. var err error
  1455. //获取列表
  1456. switch dataType {
  1457. case "week":
  1458. adminDataList, _, err = roadshowService.GetOverseasWeekDataV2("seller", dimensionType, 6)
  1459. if err != nil {
  1460. br.Msg = "数据异常"
  1461. br.ErrMsg = "数据异常,Err:" + err.Error()
  1462. return
  1463. }
  1464. case "month":
  1465. adminDataList, _, err = roadshowService.GetOverseasMonthDataV2("seller", dimensionType, 6)
  1466. if err != nil {
  1467. br.Msg = "数据异常"
  1468. br.ErrMsg = "数据异常,Err:" + err.Error()
  1469. return
  1470. }
  1471. case "time_interval":
  1472. if startDate == `` || endDate == `` {
  1473. br.Msg = "开始日期或结束日期不能为空"
  1474. br.ErrMsg = "开始日期或结束日期不能为空,Err:" + err.Error()
  1475. return
  1476. }
  1477. adminDataList, _, err = roadshowService.GetOverseasTimeIntervalData(startDate, endDate, "seller", dimensionType)
  1478. if err != nil {
  1479. br.Msg = "数据异常"
  1480. br.ErrMsg = "数据异常,Err:" + err.Error()
  1481. return
  1482. }
  1483. }
  1484. sellerList, err := roadshow.GetOverseaCustomCalendarSellerList()
  1485. adminReportRecordList := make([]roadshow.OverseasAdminReportRecord, 0)
  1486. rsAllReportRecordNumList := make([]roadshow.RsOverseasReportRecordNum, 0)
  1487. RsReportRecordResp := roadshow.RsOverseasReportRecordResp{
  1488. List: adminReportRecordList,
  1489. RsReportRecordNumList: rsAllReportRecordNumList,
  1490. }
  1491. startDateIndexList := make(map[int]string) //开始时间间隔map
  1492. endDateIndexList := make(map[int]string) //结束时间间隔map
  1493. tmpAllTryOutNumMap := make(map[int]int)
  1494. tmpAllFormalNumMap := make(map[int]int)
  1495. tmpAllCloseNumMap := make(map[int]int)
  1496. tmpAllOnlineNumMap := make(map[int]int)
  1497. tmpAllOfflineNumMap := make(map[int]int)
  1498. for _, researcher := range sellerList {
  1499. //每个区间的数据
  1500. tmpAdminRsReportRecordNumList := make([]roadshow.RsOverseasReportRecordNum, 0)
  1501. for index, adminData := range adminDataList {
  1502. startDateIndexList[index] = adminData.StartDate
  1503. endDateIndexList[index] = adminData.EndDate
  1504. var tmpTryOutNum, tmpFormalNum, tmpCloseNum, tmpOnlineNum, tmpOfflineNum int
  1505. if num, ok := adminData.TryOutMap[researcher.AdminId]; ok {
  1506. tmpTryOutNum = num
  1507. }
  1508. if num, ok := adminData.FormalMap[researcher.AdminId]; ok {
  1509. tmpFormalNum = num
  1510. }
  1511. if num, ok := adminData.CloseMap[researcher.AdminId]; ok {
  1512. tmpCloseNum = num
  1513. }
  1514. if num, ok := adminData.OnlineMap[researcher.AdminId]; ok {
  1515. tmpOnlineNum = num
  1516. }
  1517. if num, ok := adminData.OfflineMap[researcher.AdminId]; ok {
  1518. tmpOfflineNum = num
  1519. }
  1520. tmpAdminRsReportRecordNum := roadshow.RsOverseasReportRecordNum{
  1521. TryOutNum: tmpTryOutNum,
  1522. FormalNum: tmpFormalNum,
  1523. CloseNum: tmpCloseNum,
  1524. OnlineNum: tmpOnlineNum,
  1525. OfflineNum: tmpOfflineNum,
  1526. StartDate: adminData.StartDate,
  1527. EndDate: adminData.EndDate,
  1528. }
  1529. tmpAdminRsReportRecordNumList = append(tmpAdminRsReportRecordNumList, tmpAdminRsReportRecordNum)
  1530. //总数据汇总
  1531. if _, ok := tmpAllTryOutNumMap[index]; !ok {
  1532. tmpAllTryOutNumMap[index] = 0
  1533. }
  1534. if _, ok := tmpAllFormalNumMap[index]; !ok {
  1535. tmpAllFormalNumMap[index] = 0
  1536. }
  1537. if _, ok := tmpAllCloseNumMap[index]; !ok {
  1538. tmpAllCloseNumMap[index] = 0
  1539. }
  1540. if _, ok := tmpAllOnlineNumMap[index]; !ok {
  1541. tmpAllOnlineNumMap[index] = 0
  1542. }
  1543. if _, ok := tmpAllOfflineNumMap[index]; !ok {
  1544. tmpAllOfflineNumMap[index] = 0
  1545. }
  1546. tmpAllTryOutNumMap[index] += tmpTryOutNum
  1547. tmpAllFormalNumMap[index] += tmpFormalNum
  1548. tmpAllCloseNumMap[index] += tmpCloseNum
  1549. tmpAllOnlineNumMap[index] += tmpOnlineNum
  1550. tmpAllOfflineNumMap[index] += tmpOfflineNum
  1551. }
  1552. // 数据都为0的时候不显示
  1553. adminTotalNum := 0
  1554. for _, v := range tmpAdminRsReportRecordNumList {
  1555. adminTotalNum += v.TryOutNum + v.CloseNum + v.FormalNum
  1556. }
  1557. if adminTotalNum > 0 {
  1558. tmpAdminReportRecord := roadshow.OverseasAdminReportRecord{
  1559. Name: researcher.RealName,
  1560. AdminId: researcher.AdminId,
  1561. RsReportRecordNumList: tmpAdminRsReportRecordNumList,
  1562. }
  1563. RsReportRecordResp.List = append(RsReportRecordResp.List, tmpAdminReportRecord)
  1564. }
  1565. }
  1566. //总体汇总数据
  1567. for i := 0; i < len(tmpAllFormalNumMap); i++ {
  1568. tmpGroupRsReportRecordNum := roadshow.RsOverseasReportRecordNum{
  1569. TryOutNum: tmpAllTryOutNumMap[i],
  1570. FormalNum: tmpAllFormalNumMap[i],
  1571. CloseNum: tmpAllCloseNumMap[i],
  1572. OnlineNum: tmpAllOnlineNumMap[i],
  1573. OfflineNum: tmpAllOfflineNumMap[i],
  1574. StartDate: startDateIndexList[i],
  1575. EndDate: endDateIndexList[i],
  1576. }
  1577. rsAllReportRecordNumList = append(rsAllReportRecordNumList, tmpGroupRsReportRecordNum)
  1578. }
  1579. RsReportRecordResp.RsReportRecordNumList = rsAllReportRecordNumList
  1580. br.Ret = 200
  1581. br.Success = true
  1582. br.Msg = "获取成功"
  1583. br.Data = RsReportRecordResp
  1584. return
  1585. }
  1586. // OverseasResearcherReportList
  1587. // @Title 研究员路演统计
  1588. // @Description 研究员路演统计接口
  1589. // @Param DataType query string true "枚举值:week、month、time_interval"
  1590. // @Param StartDate query string true "开始日期,格式:2022-04-06"
  1591. // @Param EndDate query string true "结束日期,格式:2022-04-06"
  1592. // @Success 200 {object} roadshow.RsReportRecordResp
  1593. // @router /overseas_custom/researcher/list [get]
  1594. func (this *CalendarController) OverseasResearcherReportList() {
  1595. br := new(models.BaseResponse).Init()
  1596. defer func() {
  1597. this.Data["json"] = br
  1598. this.ServeJSON()
  1599. }()
  1600. sysUser := this.SysUser
  1601. if sysUser == nil {
  1602. br.Msg = "请登录"
  1603. br.ErrMsg = "请登录,SysUser Is Empty"
  1604. br.Ret = 408
  1605. return
  1606. }
  1607. dataType := this.GetString("DataType")
  1608. startDate := this.GetString("StartDate")
  1609. endDate := this.GetString("EndDate")
  1610. var adminDataList []roadshowService.OverseasAdminDataMap
  1611. var err error
  1612. //var firstDate time.Time
  1613. //获取列表
  1614. switch dataType {
  1615. case "week":
  1616. adminDataList, _, err = roadshowService.GetOverseasWeekData("researcher", "company_status")
  1617. if err != nil {
  1618. br.Msg = "数据异常"
  1619. br.ErrMsg = "数据异常,Err:" + err.Error()
  1620. return
  1621. }
  1622. case "month":
  1623. adminDataList, _, err = roadshowService.GetOverseasMonthData("researcher", "company_status")
  1624. if err != nil {
  1625. br.Msg = "数据异常"
  1626. br.ErrMsg = "数据异常,Err:" + err.Error()
  1627. return
  1628. }
  1629. case "time_interval":
  1630. if startDate == `` || endDate == `` {
  1631. br.Msg = "开始日期或结束日期不能为空"
  1632. br.ErrMsg = "开始日期或结束日期不能为空,Err:" + err.Error()
  1633. return
  1634. }
  1635. adminDataList, _, err = roadshowService.GetOverseasTimeIntervalData(startDate, endDate, "researcher", "company_status")
  1636. if err != nil {
  1637. br.Msg = "数据异常"
  1638. br.ErrMsg = "数据异常,Err:" + err.Error()
  1639. return
  1640. }
  1641. }
  1642. researcherList, err := roadshow.GetOverseaCustomCalendarResearcherList()
  1643. if err != nil {
  1644. br.Msg = "获取信息失败!"
  1645. br.ErrMsg = "获取分组信息失败!,GetResearcherV2 Err:" + err.Error()
  1646. return
  1647. }
  1648. adminReportRecordList := make([]roadshow.OverseasAdminReportRecord, 0)
  1649. rsAllReportRecordNumList := make([]roadshow.RsOverseasReportRecordNum, 0)
  1650. RsReportRecordResp := roadshow.RsOverseasReportRecordResp{
  1651. List: adminReportRecordList,
  1652. RsReportRecordNumList: rsAllReportRecordNumList,
  1653. }
  1654. startDateIndexList := make(map[int]string) //开始时间间隔map
  1655. endDateIndexList := make(map[int]string) //结束时间间隔map
  1656. tmpAllTryOutNumMap := make(map[int]int)
  1657. tmpAllFormalNumMap := make(map[int]int)
  1658. tmpAllMeetingNumMap := make(map[int]int)
  1659. for _, researcher := range researcherList {
  1660. //组内研究员数据
  1661. //每个区间的数据
  1662. tmpAdminRsReportRecordNumList := make([]roadshow.RsOverseasReportRecordNum, 0)
  1663. for index, adminData := range adminDataList {
  1664. startDateIndexList[index] = adminData.StartDate
  1665. endDateIndexList[index] = adminData.EndDate
  1666. var tmpTryOutNum, tmpFormalNum, tmpCloseNum int
  1667. if num, ok := adminData.TryOutMap[researcher.AdminId]; ok {
  1668. tmpTryOutNum = num
  1669. }
  1670. if num, ok := adminData.FormalMap[researcher.AdminId]; ok {
  1671. tmpFormalNum = num
  1672. }
  1673. if num, ok := adminData.CloseMap[researcher.AdminId]; ok {
  1674. tmpCloseNum = num
  1675. }
  1676. tmpAdminRsReportRecordNum := roadshow.RsOverseasReportRecordNum{
  1677. TryOutNum: tmpTryOutNum,
  1678. FormalNum: tmpFormalNum,
  1679. CloseNum: tmpCloseNum,
  1680. StartDate: adminData.StartDate,
  1681. EndDate: adminData.EndDate,
  1682. }
  1683. tmpAdminRsReportRecordNumList = append(tmpAdminRsReportRecordNumList, tmpAdminRsReportRecordNum)
  1684. //总数据汇总
  1685. if _, ok := tmpAllTryOutNumMap[index]; !ok {
  1686. tmpAllTryOutNumMap[index] = 0
  1687. }
  1688. if _, ok := tmpAllFormalNumMap[index]; !ok {
  1689. tmpAllFormalNumMap[index] = 0
  1690. }
  1691. if _, ok := tmpAllMeetingNumMap[index]; !ok {
  1692. tmpAllMeetingNumMap[index] = 0
  1693. }
  1694. tmpAllTryOutNumMap[index] += tmpTryOutNum
  1695. tmpAllFormalNumMap[index] += tmpFormalNum
  1696. tmpAllMeetingNumMap[index] += tmpCloseNum
  1697. }
  1698. // 数据都为0的时候不显示
  1699. adminTotalNum := 0
  1700. for _, v := range tmpAdminRsReportRecordNumList {
  1701. adminTotalNum += v.TryOutNum + v.CloseNum + v.FormalNum
  1702. }
  1703. if adminTotalNum > 0 {
  1704. tmpAdminReportRecord := roadshow.OverseasAdminReportRecord{
  1705. Name: researcher.RealName,
  1706. AdminId: researcher.AdminId,
  1707. RsReportRecordNumList: tmpAdminRsReportRecordNumList,
  1708. }
  1709. RsReportRecordResp.List = append(RsReportRecordResp.List, tmpAdminReportRecord)
  1710. }
  1711. }
  1712. //总体汇总数据
  1713. for i := 0; i < len(tmpAllFormalNumMap); i++ {
  1714. tmpGroupRsReportRecordNum := roadshow.RsOverseasReportRecordNum{
  1715. TryOutNum: tmpAllTryOutNumMap[i],
  1716. FormalNum: tmpAllFormalNumMap[i],
  1717. CloseNum: tmpAllMeetingNumMap[i],
  1718. StartDate: startDateIndexList[i],
  1719. EndDate: endDateIndexList[i],
  1720. }
  1721. rsAllReportRecordNumList = append(rsAllReportRecordNumList, tmpGroupRsReportRecordNum)
  1722. }
  1723. RsReportRecordResp.RsReportRecordNumList = rsAllReportRecordNumList
  1724. br.Ret = 200
  1725. br.Success = true
  1726. br.Msg = "获取成功"
  1727. br.Data = RsReportRecordResp
  1728. return
  1729. }
  1730. // OverseasCalendarList
  1731. // @Title 海外客户路演详情列表
  1732. // @Description 海外客户路演详情列表接口
  1733. // @Param AdminType query string true "枚举值:researcher、seller、 special:专项路演"
  1734. // @Param DataType query string true "枚举值:try_out、formal、close、online、offline"
  1735. // @Param AdminIds query string true "用户ids"
  1736. // @Param StartDate query string true "开始日期,格式:2022-04-06"
  1737. // @Param EndDate query string true "结束日期,格式:2022-04-06"
  1738. // @Success 200 {object} []roadshow.RsReportRecordList
  1739. // @router /overseas/calendar/list [get]
  1740. func (this *CalendarController) OverseasCalendarList() {
  1741. br := new(models.BaseResponse).Init()
  1742. defer func() {
  1743. this.Data["json"] = br
  1744. this.ServeJSON()
  1745. }()
  1746. sysUser := this.SysUser
  1747. if sysUser == nil {
  1748. br.Msg = "请登录"
  1749. br.ErrMsg = "请登录,SysUser Is Empty"
  1750. br.Ret = 408
  1751. return
  1752. }
  1753. adminType := this.GetString("AdminType")
  1754. dataType := this.GetString("DataType")
  1755. startDate := this.GetString("StartDate")
  1756. endDate := this.GetString("EndDate")
  1757. adminIds := this.GetString("AdminIds")
  1758. if adminIds == "" {
  1759. br.Msg = "请传入对应的人员"
  1760. return
  1761. }
  1762. //adminIdsArr := make([]int, 0)
  1763. //adminIdSlice := strings.Split(adminIds, ",")
  1764. //for _, v := range adminIdSlice {
  1765. // id,_ := strconv.Atoi(v)
  1766. // adminIdsArr = append(adminIdsArr, id)
  1767. //}
  1768. //正式客户
  1769. //var condition string
  1770. //var pars []interface{}
  1771. //condition = ` and a.start_date >= ? and a.end_date <= ? `
  1772. //pars = append(pars, startDate, endDate)
  1773. var sellerIds, researcherIds string
  1774. //选择的人员类型(发起人还是被发起人)
  1775. if adminType == "seller" {
  1776. //condition += ` and a.seller_id IN (` + utils.GetOrmInReplace(len(adminIdsArr)) + `)`
  1777. sellerIds = adminIds
  1778. } else {
  1779. //condition += ` and a.researcher_id IN (` + utils.GetOrmInReplace(len(adminIdsArr)) + `)`
  1780. researcherIds = adminIds
  1781. }
  1782. //pars = append(pars, adminIdsArr)
  1783. var status string
  1784. //获取列表
  1785. switch dataType {
  1786. case "try_out":
  1787. //condition += ` and a.company_status = ? )`
  1788. //pars = append(pars, "试用")
  1789. status = "试用"
  1790. case "formal":
  1791. //condition += ` and a.company_status = ? )`
  1792. //pars = append(pars, "正式")
  1793. status = "正式"
  1794. case "close":
  1795. //condition += ` and a.company_status = ? )`
  1796. //pars = append(pars, "关闭")
  1797. status = "关闭"
  1798. //case "online":
  1799. // condition += ` and a.roadshow_type = ? `
  1800. // pars = append(pars, "线上")
  1801. //case "offline":
  1802. // condition += ` and a.roadshow_type = ? `
  1803. // pars = append(pars, "线下")
  1804. default:
  1805. br.Msg = "请传入类型"
  1806. br.ErrMsg = "请传入类型DataType"
  1807. return
  1808. }
  1809. list, err := roadshow.GetOverseaCustomCalendarList2(sellerIds, researcherIds, startDate, endDate, status)
  1810. if err != nil {
  1811. br.Msg = "获取失败"
  1812. br.ErrMsg = "获取失败,ERR:" + err.Error()
  1813. return
  1814. }
  1815. br.Ret = 200
  1816. br.Success = true
  1817. br.Msg = "获取成功"
  1818. br.Data = list
  1819. return
  1820. }
  1821. // @Title 导出研究员路演统计
  1822. // @Description 导出研究员路演统计接口
  1823. // @Param DataType query string true "枚举值:week、month、time_interval"
  1824. // @Param StartDate query string true "开始日期,格式:2022-04-06"
  1825. // @Param EndDate query string true "结束日期,格式:2022-04-06"
  1826. // @Param CompanyType query string true "客户类型:'ficc','权益',传空默认为ficc,"
  1827. // @Success 200 {object} roadshow.RsReportRecordResp
  1828. // @router /report/researcher/export [get]
  1829. func (this *CalendarController) ResearcherReportExport() {
  1830. br := new(models.BaseResponse).Init()
  1831. defer func() {
  1832. this.Data["json"] = br
  1833. this.ServeJSON()
  1834. }()
  1835. sysUser := this.SysUser
  1836. if sysUser == nil {
  1837. br.Msg = "请登录"
  1838. br.ErrMsg = "请登录,SysUser Is Empty"
  1839. br.Ret = 408
  1840. return
  1841. }
  1842. dataType := this.GetString("DataType")
  1843. startDate := this.GetString("StartDate")
  1844. endDate := this.GetString("EndDate")
  1845. companyType := this.GetString("CompanyType", "ficc")
  1846. var err error
  1847. //获取列表
  1848. switch dataType {
  1849. case "week":
  1850. startDate = utils.GetNowWeekMonday().AddDate(0, 0, -7).Format(utils.FormatDate)
  1851. endDate = utils.GetNowWeekLastDay().AddDate(0, 0, 7).Format(utils.FormatDate)
  1852. case "month":
  1853. startDate = utils.GetNowMonthFirstDay().AddDate(0, -4, 0).Format(utils.FormatDate)
  1854. endDate = utils.GetNowMonthLastDay().Format(utils.FormatDate)
  1855. case "time_interval":
  1856. if startDate == `` || endDate == `` {
  1857. br.Msg = "开始日期或结束日期不能为空"
  1858. br.ErrMsg = "开始日期或结束日期不能为空,Err:" + err.Error()
  1859. return
  1860. }
  1861. }
  1862. var researcherIdArr []string
  1863. ficcSellerMap := make(map[int]int)
  1864. //raiSellerMap := make(map[int]int)
  1865. switch companyType {
  1866. case utils.COMPANY_CLASSIFY_FICC:
  1867. researcherList, err := roadshow.GetResearcherV2()
  1868. if err != nil {
  1869. br.Msg = "获取信息失败!"
  1870. br.ErrMsg = "获取分组信息失败!,GetResearcherV2 Err:" + err.Error()
  1871. return
  1872. }
  1873. for _, v := range researcherList {
  1874. if v.AdminId > 0 {
  1875. researcherId := strconv.Itoa(v.AdminId)
  1876. researcherIdArr = append(researcherIdArr, researcherId)
  1877. }
  1878. }
  1879. _, groupIdRelationMap, err := services.GetFiccSystemGroup()
  1880. if err != nil {
  1881. br.Msg = "获取信息失败!"
  1882. br.ErrMsg = "获取FICC销售信息失败!Err:" + err.Error()
  1883. return
  1884. }
  1885. ficcSellerList, err := services.GetFiccSeller(time.Now(), groupIdRelationMap)
  1886. for _, v := range ficcSellerList {
  1887. ficcSellerMap[v.AdminId] = v.AdminId
  1888. }
  1889. case utils.COMPANY_CLASSIFY_RAI:
  1890. askUserList, err := cygx.GetAskEmailListResearcher()
  1891. if err != nil {
  1892. br.Msg = "获取失败"
  1893. br.ErrMsg = "获取失败,GetAskEmailListResearcher Err: " + err.Error()
  1894. return
  1895. }
  1896. for _, v := range askUserList {
  1897. if v.AdminId > 0 {
  1898. researcherId := strconv.Itoa(v.AdminId)
  1899. researcherIdArr = append(researcherIdArr, researcherId)
  1900. }
  1901. }
  1902. //_, groupIdRelationMap, err := services.GetRaiSystemGroup()
  1903. //if err != nil {
  1904. // br.Msg = "获取信息失败!"
  1905. // br.ErrMsg = "获取分组信息失败!Err:" + err.Error()
  1906. // return
  1907. //}
  1908. //raiSellList, err := services.GetRaiSeller(groupIdRelationMap)
  1909. //if err != nil {
  1910. // br.Msg = "获取信息失败!"
  1911. // br.ErrMsg = "获取权益销售信息失败!Err:" + err.Error()
  1912. // return
  1913. //}
  1914. //
  1915. //for _, v := range raiSellList {
  1916. // raiSellerMap[v.AdminId] = v.AdminId
  1917. //}
  1918. }
  1919. var condition string
  1920. var pars []interface{}
  1921. condition += ` AND c.researcher_id IN(` + strings.Join(researcherIdArr, ",") + `) `
  1922. if startDate != "" {
  1923. condition += ` AND c.start_date >= ? `
  1924. pars = append(pars, startDate)
  1925. }
  1926. if endDate != "" {
  1927. condition += ` AND c.start_date <= ? `
  1928. pars = append(pars, endDate)
  1929. }
  1930. condition += ` AND b.activity_type = '路演' `
  1931. condition += ` AND b.roadshow_type <> '' `
  1932. condition += ` AND c.question_status = 1 `
  1933. list, err := roadshow.GetReportResearcherExport(condition, pars)
  1934. if err != nil {
  1935. br.Msg = "获取信息失败!"
  1936. br.ErrMsg = "获取数据失败!Err:" + err.Error()
  1937. return
  1938. }
  1939. dir, _ := os.Executable()
  1940. exPath := filepath.Dir(dir)
  1941. downloadPath := exPath + "/" + time.Now().Format(utils.FormatDateUnSpace) + "研究员已完成路演统计" + ".xlsx"
  1942. xlsxFile := xlsx.NewFile()
  1943. sheet, e := xlsxFile.AddSheet("已完成路演统计")
  1944. if e != nil {
  1945. br.Msg = "新增Sheet失败"
  1946. br.ErrMsg = "新增Sheet失败, Err: " + e.Error()
  1947. return
  1948. }
  1949. titleRow := sheet.AddRow()
  1950. titleRow.AddCell().SetString("研究员")
  1951. titleRow.AddCell().SetString("路演时间")
  1952. titleRow.AddCell().SetString("客户名称")
  1953. titleRow.AddCell().SetString("路演形式")
  1954. titleRow.AddCell().SetString("发起人")
  1955. titleRow.AddCell().SetString("客户类型")
  1956. titleRow.AddCell().SetString("客户状态")
  1957. titleRow.AddCell().SetString("客户行业")
  1958. titleRow.AddCell().SetString("客户分类")
  1959. titleRow.AddCell().SetString("所属区域")
  1960. for _, v := range list {
  1961. dataRow := sheet.AddRow()
  1962. dataRow.AddCell().SetString(v.ResearcherName)
  1963. dataRow.AddCell().SetString(v.StartDate + " " + v.StartTime)
  1964. dataRow.AddCell().SetString(v.CompanyName)
  1965. dataRow.AddCell().SetString(v.RoadshowType)
  1966. dataRow.AddCell().SetString(v.SellerName)
  1967. if _, ok := ficcSellerMap[v.SellerId]; ok {
  1968. dataRow.AddCell().SetString("FICC")
  1969. } else {
  1970. dataRow.AddCell().SetString("权益")
  1971. }
  1972. dataRow.AddCell().SetString(v.CompanyStatus)
  1973. dataRow.AddCell().SetString(v.CompanyIndustry)
  1974. dataRow.AddCell().SetString(v.CompanyClassify)
  1975. if v.EnglishCompany == 0 {
  1976. dataRow.AddCell().SetString("国内")
  1977. } else {
  1978. dataRow.AddCell().SetString("海外")
  1979. }
  1980. }
  1981. if e = xlsxFile.Save(downloadPath); e != nil {
  1982. br.Msg = "导出失败"
  1983. br.ErrMsg = "保存文件失败"
  1984. return
  1985. }
  1986. fileName := time.Now().Format(utils.FormatDateUnSpace) + "研究员已完成路演统计" + ".xlsx"
  1987. this.Ctx.Output.Download(downloadPath, fileName)
  1988. defer func() {
  1989. _ = os.Remove(downloadPath)
  1990. }()
  1991. return
  1992. }