report.go 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095
  1. package roadshow
  2. import (
  3. "fmt"
  4. "hongze/hz_crm_api/models/company"
  5. "hongze/hz_crm_api/models/overseas_custom"
  6. "hongze/hz_crm_api/models/roadshow"
  7. "hongze/hz_crm_api/utils"
  8. "time"
  9. )
  10. // GetWeekData 周度数据
  11. func GetWeekData(adminType, dimensionType string) (adminDataList []AdminDataMap, firstDate time.Time, err error) {
  12. nowWeekMonday := utils.GetNowWeekMonday() //本周周一
  13. //fmt.Println(nowWeekMonday)
  14. nowWeekSunday := nowWeekMonday.AddDate(0, 0, 7).Add(-1 * time.Second) //本周周日
  15. //fmt.Println(nowWeekSunday)
  16. //nowWeekMonday = nowWeekMonday.AddDate(0, 0, -30) //上周周一
  17. //nowWeekSunday = nowWeekSunday.AddDate(0, 0, -30) //上周周日
  18. //adminDataMap, err := getSectionData(nowWeekMonday, nowWeekSunday)
  19. //if err != nil {
  20. // fmt.Println(err)
  21. // return
  22. //}
  23. //fmt.Println(adminDataMap)
  24. lastWeekMonday := nowWeekMonday.AddDate(0, 0, -7) //上周周一
  25. //fmt.Println(lastWeekMonday)
  26. //最早的一天
  27. firstDate = lastWeekMonday
  28. lastWeekSunday := nowWeekSunday.AddDate(0, 0, -7) //上周周日
  29. //fmt.Println(lastWeekSunday)
  30. nextWeekMonday := nowWeekMonday.AddDate(0, 0, 7) //下周周一
  31. //fmt.Println(nextWeekMonday)
  32. nextWeekSunday := nowWeekSunday.AddDate(0, 0, 7) //下周周日
  33. //fmt.Println(nextWeekSunday)
  34. ch1 := make(chan AdminDataMap, 0)
  35. ch2 := make(chan AdminDataMap, 0)
  36. ch3 := make(chan AdminDataMap, 0)
  37. go getSectionData(lastWeekMonday, lastWeekSunday, adminType, dimensionType, ch1)
  38. go getSectionData(nowWeekMonday, nowWeekSunday, adminType, dimensionType, ch2)
  39. go getSectionData(nextWeekMonday, nextWeekSunday, adminType, dimensionType, ch3)
  40. var nowWeekAdminDataMap, lastWeekAdminDataMap, nextWeekAdminDataMap AdminDataMap
  41. lastWeekAdminDataMap = <-ch1
  42. close(ch1)
  43. nowWeekAdminDataMap = <-ch2
  44. close(ch2)
  45. nextWeekAdminDataMap = <-ch3
  46. close(ch3)
  47. adminDataList = make([]AdminDataMap, 0)
  48. adminDataList = append(adminDataList, lastWeekAdminDataMap, nowWeekAdminDataMap, nextWeekAdminDataMap)
  49. return
  50. }
  51. // GetWeekDataV2 周度数据
  52. func GetWeekDataV2(adminType, dimensionType string, weekNum int) (adminDataList []AdminDataMap, firstDate time.Time, err error) {
  53. nowWeekMonday := utils.GetNowWeekMonday() //本周周一
  54. //fmt.Println(nowWeekMonday)
  55. nowWeekSunday := nowWeekMonday.AddDate(0, 0, 7).Add(-1 * time.Second) //本周周日
  56. chanList := make([]chan AdminDataMap, 0)
  57. for i := 0; i < weekNum; i++ {
  58. tmpCh := make(chan AdminDataMap, 0)
  59. chanList = append(chanList, tmpCh)
  60. lastWeekMonday := nowWeekMonday.AddDate(0, 0, -7*i)
  61. lastWeekSunday := nowWeekSunday.AddDate(0, 0, -7*i)
  62. // 第一个开始日期
  63. firstDate = lastWeekMonday
  64. go getSectionData(lastWeekMonday, lastWeekSunday, adminType, dimensionType, tmpCh)
  65. }
  66. adminDataList = make([]AdminDataMap, 0)
  67. for _, vChan := range chanList {
  68. var weekAdminDataMap AdminDataMap
  69. weekAdminDataMap = <-vChan
  70. close(vChan)
  71. adminDataList = append(adminDataList, weekAdminDataMap)
  72. }
  73. return
  74. }
  75. // GetMonthData 月度数据
  76. func GetMonthData(adminType, dimensionType string) (adminDataMapList []AdminDataMap, firstDate time.Time, err error) { //三个协程返回
  77. nowMonthFirstDay := utils.GetNowMonthFirstDay() //本月第一天
  78. nowMonthLastDay := nowMonthFirstDay.AddDate(0, 1, 0).Add(-1 * time.Second) //本月最后一天
  79. lastMonthFirstDay1 := nowMonthFirstDay.AddDate(0, -1, 0) //上个月第一天
  80. lastMonthLastDay1 := lastMonthFirstDay1.AddDate(0, 1, 0).Add(-1 * time.Second) //上个月最后一天
  81. lastMonthFirstDay2 := nowMonthFirstDay.AddDate(0, -2, 0) //上上个月第一天
  82. lastMonthLastDay2 := lastMonthFirstDay2.AddDate(0, 1, 0).Add(-1 * time.Second) //上上个月最后一天
  83. lastMonthFirstDay3 := nowMonthFirstDay.AddDate(0, -3, 0) //上上上个月第一天
  84. lastMonthLastDay3 := lastMonthFirstDay3.AddDate(0, 1, 0).Add(-1 * time.Second) //上上上个月最后一天
  85. //最早的一天
  86. firstDate = lastMonthFirstDay3
  87. ch1 := make(chan AdminDataMap, 0)
  88. ch2 := make(chan AdminDataMap, 0)
  89. ch3 := make(chan AdminDataMap, 0)
  90. ch4 := make(chan AdminDataMap, 0)
  91. go getSectionData(nowMonthFirstDay, nowMonthLastDay, adminType, dimensionType, ch1)
  92. go getSectionData(lastMonthFirstDay1, lastMonthLastDay1, adminType, dimensionType, ch2)
  93. go getSectionData(lastMonthFirstDay2, lastMonthLastDay2, adminType, dimensionType, ch3)
  94. go getSectionData(lastMonthFirstDay3, lastMonthLastDay3, adminType, dimensionType, ch4)
  95. var nowMonthAdminDataMap, lastMonthAdminDataMap1, lastMonthAdminDataMap2, lastMonthAdminDataMap3 AdminDataMap
  96. nowMonthAdminDataMap = <-ch1
  97. close(ch1)
  98. lastMonthAdminDataMap1 = <-ch2
  99. close(ch2)
  100. lastMonthAdminDataMap2 = <-ch3
  101. close(ch3)
  102. lastMonthAdminDataMap3 = <-ch4
  103. close(ch4)
  104. adminDataMapList = make([]AdminDataMap, 0)
  105. adminDataMapList = append(adminDataMapList, nowMonthAdminDataMap, lastMonthAdminDataMap1, lastMonthAdminDataMap2, lastMonthAdminDataMap3)
  106. return
  107. }
  108. // GetQuarterData 季度数据
  109. func GetQuarterData(adminType, dimensionType string) (adminDataMapList []AdminDataMap, firstDate time.Time, err error) { //三个协程返回
  110. nowQuarterFirstDay := utils.GetNowQuarterFirstDay() //本季度第一天
  111. nowQuarterLastDay := nowQuarterFirstDay.AddDate(0, 3, 0).Add(-1 * time.Second) //本季度最后一天
  112. lastQuarterFirstDay1 := nowQuarterFirstDay.AddDate(0, -3, 0) //上个季度第一天
  113. lastQuarterLastDay1 := nowQuarterFirstDay.AddDate(0, 0, 0).Add(-1 * time.Second) //上个季度最后一天
  114. lastQuarterFirstDay2 := nowQuarterFirstDay.AddDate(0, -6, 0) //上上个季度第一天
  115. lastQuarterLastDay2 := nowQuarterFirstDay.AddDate(0, -3, 0).Add(-1 * time.Second) //上上个季度最后一天
  116. ch1 := make(chan AdminDataMap, 0)
  117. ch2 := make(chan AdminDataMap, 0)
  118. ch3 := make(chan AdminDataMap, 0)
  119. go getSectionData(nowQuarterFirstDay, nowQuarterLastDay, adminType, dimensionType, ch1)
  120. go getSectionData(lastQuarterFirstDay1, lastQuarterLastDay1, adminType, dimensionType, ch2)
  121. go getSectionData(lastQuarterFirstDay2, lastQuarterLastDay2, adminType, dimensionType, ch3)
  122. var nowMonthAdminDataMap, lastMonthAdminDataMap1, lastMonthAdminDataMap2 AdminDataMap
  123. nowMonthAdminDataMap = <-ch1
  124. close(ch1)
  125. lastMonthAdminDataMap1 = <-ch2
  126. close(ch2)
  127. lastMonthAdminDataMap2 = <-ch3
  128. close(ch3)
  129. adminDataMapList = make([]AdminDataMap, 0)
  130. adminDataMapList = append(adminDataMapList, nowMonthAdminDataMap, lastMonthAdminDataMap1, lastMonthAdminDataMap2)
  131. return
  132. }
  133. // GetMonthDataV2 月度数据
  134. func GetMonthDataV2(adminType, dimensionType string, dataNum int) (adminDataMapList []AdminDataMap, firstDate time.Time, err error) { //三个协程返回
  135. nowMonthFirstDay := utils.GetNowMonthFirstDay() //本月第一天
  136. //nowMonthLastDay := nowMonthFirstDay.AddDate(0, 1, 0).Add(-1 * time.Second) //本月最后一天
  137. chanList := make([]chan AdminDataMap, 0)
  138. for i := 0; i < dataNum; i++ {
  139. tmpCh := make(chan AdminDataMap, 0)
  140. chanList = append(chanList, tmpCh)
  141. lastMonthFirstDay := nowMonthFirstDay.AddDate(0, -1*i, 0) //上个月第一天
  142. lastMonthLastDay := nowMonthFirstDay.AddDate(0, -1*(i-1), 0).Add(-1 * time.Second) //上个月最后一天
  143. // 第一个开始日期
  144. firstDate = lastMonthFirstDay
  145. go getSectionData(lastMonthFirstDay, lastMonthLastDay, adminType, dimensionType, tmpCh)
  146. }
  147. adminDataMapList = make([]AdminDataMap, 0)
  148. for _, vChan := range chanList {
  149. var monthAdminDataMap AdminDataMap
  150. monthAdminDataMap = <-vChan
  151. close(vChan)
  152. adminDataMapList = append(adminDataMapList, monthAdminDataMap)
  153. }
  154. return
  155. }
  156. // GetTimeIntervalData 区间数据
  157. func GetTimeIntervalData(startDate, endDate, adminType, dimensionType string) (adminDataMapList []AdminDataMap, firstDate time.Time, err error) { //三个协程返回
  158. startDateTimer, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
  159. endDateTimer, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  160. endDateTimer = endDateTimer.AddDate(0, 0, 1).Add(-1 * time.Second) //本月最后一天
  161. //最早的一天
  162. firstDate = startDateTimer
  163. ch1 := make(chan AdminDataMap, 0)
  164. go getSectionData(startDateTimer, endDateTimer, adminType, dimensionType, ch1)
  165. var adminDataMap AdminDataMap
  166. adminDataMap = <-ch1
  167. close(ch1)
  168. adminDataMapList = make([]AdminDataMap, 0)
  169. adminDataMapList = append(adminDataMapList, adminDataMap)
  170. return
  171. }
  172. type AdminDataMap struct {
  173. TryOutMap map[int]int `description:"试用路演次数"`
  174. FormalMap map[int]int `description:"正式路演次数"`
  175. MeetingMap map[int]int `description:"会议次数"`
  176. OnlineMap map[int]int `description:"线上路演次数"`
  177. OfflineMap map[int]int `description:"线上路演次数"`
  178. RoadShowMap map[int]int `description:"路演总次数"`
  179. SalonMap map[int]int `description:"沙龙路演次数"`
  180. AskTryOutMap map[int]int `description:"沙龙路演次数"`
  181. AskFormalMap map[int]int `description:"沙龙路演次数"`
  182. StartDate string `description:"开始日期"`
  183. EndDate string `description:"开始日期"`
  184. }
  185. // getSectionData 获取周期数据
  186. func getSectionData(startDate, endDate time.Time, adminType, dimensionType string, ch chan AdminDataMap) (adminDataMap AdminDataMap, err error) {
  187. defer func() {
  188. ch <- adminDataMap
  189. }()
  190. //adminType := `seller`
  191. switch adminType {
  192. case "researcher":
  193. adminDataMap, err = getResearcherSectionData(startDate, endDate)
  194. case "seller":
  195. adminDataMap, err = getSellerSectionData(startDate, endDate, dimensionType)
  196. }
  197. return
  198. }
  199. // getResearcherSectionData 获取研究员周期数据
  200. func getResearcherSectionData(startDate, endDate time.Time) (adminDataMap AdminDataMap, err error) {
  201. tryOutMap := make(map[int]int)
  202. formalMap := make(map[int]int)
  203. meetingMap := make(map[int]int)
  204. roadShowMap := make(map[int]int) // 路演总次数
  205. salonMap := make(map[int]int) //沙龙路演次数
  206. asktryOutMap := make(map[int]int) //填写过客户问答的路演次数(试用)
  207. askformalMap := make(map[int]int) //填写过客户问答的路演次数(正式)
  208. //正式客户
  209. {
  210. var condition string
  211. var pars []interface{}
  212. condition = ` and start_date >= ? and end_date <= ? and company_status = ? `
  213. pars = append(pars, startDate, endDate, "正式")
  214. data, tmpErr := roadshow.GetGroupResearcherRecordList(condition, pars)
  215. if tmpErr != nil {
  216. err = tmpErr
  217. return
  218. }
  219. for _, v := range data {
  220. formalMap[v.AdminId] = v.Num
  221. }
  222. var conditionAsk string
  223. var parsAsk []interface{}
  224. conditionAsk = ` and c.question_status = 1 and a.start_date >= ? and a.end_date <= ? and a.company_status = ? `
  225. parsAsk = append(parsAsk, startDate, endDate, "正式")
  226. dataAsk, tmpErr := roadshow.GetGroupResearcherRecordListAsk(conditionAsk, parsAsk)
  227. if tmpErr != nil {
  228. err = tmpErr
  229. return
  230. }
  231. for _, v := range dataAsk {
  232. askformalMap[v.AdminId] = v.Num
  233. }
  234. }
  235. //试用客户
  236. {
  237. var condition string
  238. var pars []interface{}
  239. condition = ` and start_date >= ? and end_date <= ? and company_status = ? `
  240. pars = append(pars, startDate, endDate, "试用")
  241. data, tmpErr := roadshow.GetGroupResearcherRecordList(condition, pars)
  242. if tmpErr != nil {
  243. err = tmpErr
  244. return
  245. }
  246. for _, v := range data {
  247. //fmt.Println(v)
  248. tryOutMap[v.AdminId] = v.Num
  249. }
  250. var conditionAsk string
  251. var parsAsk []interface{}
  252. conditionAsk = ` and c.question_status = 1 and a.start_date >= ? and a.end_date <= ? and a.company_status = ? `
  253. parsAsk = append(parsAsk, startDate, endDate, "试用")
  254. dataAsk, tmpErr := roadshow.GetGroupResearcherRecordListAsk(conditionAsk, parsAsk)
  255. if tmpErr != nil {
  256. err = tmpErr
  257. return
  258. }
  259. for _, v := range dataAsk {
  260. asktryOutMap[v.AdminId] = v.Num
  261. }
  262. }
  263. //试用客户
  264. {
  265. var condition string
  266. var pars []interface{}
  267. condition = ` and start_date >= ? and end_date <= ? and activity_type = ? `
  268. pars = append(pars, startDate, endDate, "公开会议")
  269. data, tmpErr := roadshow.GetGroupResearcherRecordList(condition, pars)
  270. if tmpErr != nil {
  271. err = tmpErr
  272. return
  273. }
  274. for _, v := range data {
  275. //fmt.Println(v)
  276. meetingMap[v.AdminId] = v.Num
  277. }
  278. }
  279. //路演总次数
  280. {
  281. var condition string
  282. var pars []interface{}
  283. condition = ` and start_date >= ? and end_date <= ? and activity_type = ? `
  284. pars = append(pars, startDate, endDate, "路演")
  285. data, tmpErr := roadshow.GetGroupResearcherRecordList(condition, pars)
  286. if tmpErr != nil {
  287. err = tmpErr
  288. return
  289. }
  290. for _, v := range data {
  291. //fmt.Println(v)
  292. roadShowMap[v.AdminId] = v.Num
  293. }
  294. }
  295. //沙龙路演次数
  296. {
  297. var condition string
  298. var pars []interface{}
  299. condition = ` and start_date >= ? and end_date <= ? and activity_type = ? `
  300. pars = append(pars, startDate, endDate, "沙龙")
  301. data, tmpErr := roadshow.GetGroupResearcherRecordList(condition, pars)
  302. if tmpErr != nil {
  303. err = tmpErr
  304. return
  305. }
  306. for _, v := range data {
  307. //fmt.Println(v)
  308. salonMap[v.AdminId] = v.Num
  309. }
  310. }
  311. adminDataMap = AdminDataMap{
  312. TryOutMap: tryOutMap,
  313. FormalMap: formalMap,
  314. MeetingMap: meetingMap,
  315. RoadShowMap: roadShowMap,
  316. SalonMap: salonMap,
  317. AskTryOutMap: asktryOutMap,
  318. AskFormalMap: askformalMap,
  319. StartDate: startDate.Format(utils.FormatDate),
  320. EndDate: endDate.Format(utils.FormatDate),
  321. }
  322. return
  323. }
  324. // getSellerSectionData 获取销售周期数据
  325. func getSellerSectionData(startDate, endDate time.Time, dimensionType string) (adminDataMap AdminDataMap, err error) {
  326. tryOutMap := make(map[int]int)
  327. formalMap := make(map[int]int)
  328. meetingMap := make(map[int]int)
  329. onlineMap := make(map[int]int)
  330. offlineMap := make(map[int]int)
  331. roadShowMap := make(map[int]int) // 路演总次数
  332. salonMap := make(map[int]int) //沙龙路演次数
  333. //fmt.Println()
  334. //客户状态维度
  335. if dimensionType == "company_status" {
  336. //正式客户
  337. {
  338. var condition string
  339. var pars []interface{}
  340. condition = ` and start_date >= ? and end_date <= ? and company_status = ? `
  341. pars = append(pars, startDate, endDate, "正式")
  342. data, tmpErr := roadshow.GetGroupSellerRecordList(condition, pars)
  343. if tmpErr != nil {
  344. err = tmpErr
  345. return
  346. }
  347. for _, v := range data {
  348. formalMap[v.AdminId] = v.Num
  349. }
  350. }
  351. //试用客户
  352. {
  353. var condition string
  354. var pars []interface{}
  355. condition = ` and start_date >= ? and end_date <= ? and company_status = ? `
  356. pars = append(pars, startDate, endDate, "试用")
  357. data, tmpErr := roadshow.GetGroupSellerRecordList(condition, pars)
  358. if tmpErr != nil {
  359. err = tmpErr
  360. return
  361. }
  362. for _, v := range data {
  363. //fmt.Println(v)
  364. tryOutMap[v.AdminId] = v.Num
  365. }
  366. }
  367. }
  368. //路演形式维度
  369. if dimensionType == "roadshow_type" {
  370. //线上路演
  371. {
  372. var condition string
  373. var pars []interface{}
  374. condition = ` and start_date >= ? and end_date <= ? and roadshow_type = ? `
  375. pars = append(pars, startDate, endDate, "线上")
  376. data, tmpErr := roadshow.GetGroupSellerRecordList(condition, pars)
  377. if tmpErr != nil {
  378. err = tmpErr
  379. return
  380. }
  381. for _, v := range data {
  382. //fmt.Println(v)
  383. onlineMap[v.AdminId] = v.Num
  384. }
  385. }
  386. //线下路演
  387. {
  388. var condition string
  389. var pars []interface{}
  390. condition = ` and start_date >= ? and end_date <= ? and roadshow_type = ? `
  391. pars = append(pars, startDate, endDate, "线下")
  392. data, tmpErr := roadshow.GetGroupSellerRecordList(condition, pars)
  393. if tmpErr != nil {
  394. err = tmpErr
  395. return
  396. }
  397. for _, v := range data {
  398. //fmt.Println(v)
  399. offlineMap[v.AdminId] = v.Num
  400. }
  401. }
  402. }
  403. //销售专项路演统计
  404. if dimensionType == "seller_special" {
  405. detail, errdetail := company.GetConfigDetailByCode("choice_researcher_adminid")
  406. if errdetail != nil {
  407. err = errdetail
  408. return
  409. }
  410. //正式客户
  411. {
  412. var condition string
  413. var pars []interface{}
  414. condition = ` and start_date >= ? and end_date <= ? and company_status = ? ` + ` and researcher_id IN (` + detail.ConfigValue + `) `
  415. pars = append(pars, startDate, endDate, "正式")
  416. data, tmpErr := roadshow.GetGroupSellerRecordList(condition, pars)
  417. if tmpErr != nil {
  418. err = tmpErr
  419. return
  420. }
  421. for _, v := range data {
  422. formalMap[v.AdminId] = v.Num
  423. }
  424. }
  425. //试用客户
  426. {
  427. var condition string
  428. var pars []interface{}
  429. condition = ` and start_date >= ? and end_date <= ? and company_status = ? ` + ` and researcher_id IN (` + detail.ConfigValue + `) `
  430. pars = append(pars, startDate, endDate, "试用")
  431. data, tmpErr := roadshow.GetGroupSellerRecordList(condition, pars)
  432. if tmpErr != nil {
  433. err = tmpErr
  434. return
  435. }
  436. for _, v := range data {
  437. //fmt.Println(v)
  438. tryOutMap[v.AdminId] = v.Num
  439. }
  440. }
  441. //公开会议
  442. {
  443. var condition string
  444. var pars []interface{}
  445. condition = ` and start_date >= ? and end_date <= ? and activity_type = ? ` + ` and researcher_id IN (` + detail.ConfigValue + `) `
  446. pars = append(pars, startDate, endDate, "公开会议")
  447. data, tmpErr := roadshow.GetGroupSellerRecordList(condition, pars)
  448. if tmpErr != nil {
  449. err = tmpErr
  450. return
  451. }
  452. for _, v := range data {
  453. //fmt.Println(v)
  454. meetingMap[v.AdminId] = v.Num
  455. }
  456. }
  457. } else {
  458. //公开会议
  459. {
  460. var condition string
  461. var pars []interface{}
  462. condition = ` and start_date >= ? and end_date <= ? and activity_type = ? `
  463. pars = append(pars, startDate, endDate, "公开会议")
  464. data, tmpErr := roadshow.GetGroupSellerRecordList(condition, pars)
  465. if tmpErr != nil {
  466. err = tmpErr
  467. return
  468. }
  469. for _, v := range data {
  470. //fmt.Println(v)
  471. meetingMap[v.AdminId] = v.Num
  472. }
  473. }
  474. }
  475. //权益路演
  476. if dimensionType == "roadshow_rai" {
  477. //路演总次数
  478. {
  479. var condition string
  480. var pars []interface{}
  481. condition = ` and start_date >= ? and end_date <= ? and activity_type = ? `
  482. pars = append(pars, startDate, endDate, "路演")
  483. data, tmpErr := roadshow.GetGroupSellerRecordList(condition, pars)
  484. if tmpErr != nil {
  485. err = tmpErr
  486. return
  487. }
  488. for _, v := range data {
  489. //fmt.Println(v)
  490. roadShowMap[v.AdminId] = v.Num
  491. }
  492. }
  493. //沙龙路演次数
  494. {
  495. var condition string
  496. var pars []interface{}
  497. condition = ` and start_date >= ? and end_date <= ? and activity_type = ? `
  498. pars = append(pars, startDate, endDate, "沙龙")
  499. data, tmpErr := roadshow.GetGroupSellerRecordList(condition, pars)
  500. if tmpErr != nil {
  501. err = tmpErr
  502. return
  503. }
  504. for _, v := range data {
  505. //fmt.Println(v)
  506. salonMap[v.AdminId] = v.Num
  507. }
  508. }
  509. }
  510. adminDataMap = AdminDataMap{
  511. TryOutMap: tryOutMap,
  512. FormalMap: formalMap,
  513. MeetingMap: meetingMap,
  514. OfflineMap: offlineMap,
  515. OnlineMap: onlineMap,
  516. RoadShowMap: roadShowMap,
  517. SalonMap: salonMap,
  518. StartDate: startDate.Format(utils.FormatDate),
  519. EndDate: endDate.Format(utils.FormatDate),
  520. }
  521. return
  522. }
  523. type OverseasAdminDataMap struct {
  524. TryOutMap map[int]int `description:"试用路演次数"`
  525. FormalMap map[int]int `description:"正式路演次数"`
  526. CloseMap map[int]int `description:"关闭客户次数"`
  527. OnlineMap map[int]int `description:"线上路演次数"`
  528. OfflineMap map[int]int `description:"线上路演次数"`
  529. StartDate string `description:"开始日期"`
  530. EndDate string `description:"开始日期"`
  531. }
  532. // GetOverseasWeekDataV2 周度数据
  533. func GetOverseasWeekDataV2(adminType, dimensionType string, weekNum int) (adminDataList []OverseasAdminDataMap, firstDate time.Time, err error) {
  534. nowWeekMonday := utils.GetNowWeekMonday() //本周周一
  535. //fmt.Println(nowWeekMonday)
  536. nowWeekSunday := nowWeekMonday.AddDate(0, 0, 7).Add(-1 * time.Second) //本周周日
  537. chanList := make([]chan OverseasAdminDataMap, 0)
  538. for i := 0; i < weekNum; i++ {
  539. tmpCh := make(chan OverseasAdminDataMap, 0)
  540. chanList = append(chanList, tmpCh)
  541. lastWeekMonday := nowWeekMonday.AddDate(0, 0, -7*i)
  542. lastWeekSunday := nowWeekSunday.AddDate(0, 0, -7*i)
  543. // 第一个开始日期
  544. firstDate = lastWeekMonday
  545. go getOverseasSectionData(lastWeekMonday, lastWeekSunday, adminType, dimensionType, tmpCh)
  546. }
  547. adminDataList = make([]OverseasAdminDataMap, 0)
  548. for _, vChan := range chanList {
  549. var weekAdminDataMap OverseasAdminDataMap
  550. weekAdminDataMap = <-vChan
  551. close(vChan)
  552. adminDataList = append(adminDataList, weekAdminDataMap)
  553. }
  554. return
  555. }
  556. // getOverseasSectionData 获取周期数据
  557. func getOverseasSectionData(startDate, endDate time.Time, adminType, dimensionType string, ch chan OverseasAdminDataMap) (adminDataMap OverseasAdminDataMap, err error) {
  558. defer func() {
  559. ch <- adminDataMap
  560. }()
  561. //adminType := `seller`
  562. switch adminType {
  563. case "researcher":
  564. adminDataMap, err = getOverseasResearcherSectionData(startDate, endDate)
  565. case "seller":
  566. adminDataMap, err = getOverseasSellerSectionData(startDate, endDate, dimensionType)
  567. }
  568. return
  569. }
  570. // getOverseasSellerSectionData 获取销售周期数据
  571. func getOverseasSellerSectionData(startDate, endDate time.Time, dimensionType string) (adminDataMap OverseasAdminDataMap, err error) {
  572. tryOutMap := make(map[int]int)
  573. formalMap := make(map[int]int)
  574. closeMap := make(map[int]int)
  575. onlineMap := make(map[int]int)
  576. offlineMap := make(map[int]int)
  577. //fmt.Println()
  578. //客户状态维度
  579. companylist, err := overseas_custom.GetOverseasCustomList("", nil)
  580. if err != nil {
  581. return
  582. }
  583. formalIdsArr := make([]int, 0)
  584. tryoutIdsArr := make([]int, 0)
  585. closeIdsArr := make([]int, 0)
  586. for _, v := range companylist {
  587. if v.OverseasStatus == "正式" {
  588. formalIdsArr = append(formalIdsArr, v.CompanyId)
  589. } else if v.OverseasStatus == "试用" {
  590. tryoutIdsArr = append(tryoutIdsArr, v.CompanyId)
  591. } else if v.OverseasStatus == "关闭" {
  592. closeIdsArr = append(closeIdsArr, v.CompanyId)
  593. }
  594. }
  595. if dimensionType == "company_status" {
  596. //正式客户
  597. {
  598. //var condition string
  599. //var pars []interface{}
  600. //condition = ` and start_date >= ? and end_date <= ? and company_status = ? and company_id IN (` + utils.GetOrmInReplace(len(formalIdsArr)) + `)`
  601. //pars = append(pars, startDate, endDate, "正式", formalIdsArr)
  602. data, tmpErr := roadshow.GetOverseasGroupSellerRecordList(startDate.Format(utils.FormatDate), endDate.Format(utils.FormatDate), "正式")
  603. if tmpErr != nil {
  604. err = tmpErr
  605. return
  606. }
  607. for _, v := range data {
  608. fmt.Println(v)
  609. formalMap[v.AdminId] = v.Num
  610. }
  611. }
  612. //试用客户
  613. {
  614. //var condition string
  615. //var pars []interface{}
  616. //condition = ` and start_date >= ? and end_date <= ? and company_status = ? and company_id IN (` + utils.GetOrmInReplace(len(tryoutIdsArr)) + `)`
  617. //pars = append(pars, startDate, endDate, "试用", tryoutIdsArr)
  618. data, tmpErr := roadshow.GetOverseasGroupSellerRecordList(startDate.Format(utils.FormatDate), endDate.Format(utils.FormatDate), "试用")
  619. if tmpErr != nil {
  620. err = tmpErr
  621. return
  622. }
  623. for _, v := range data {
  624. //fmt.Println(v)
  625. tryOutMap[v.AdminId] = v.Num
  626. }
  627. }
  628. //关闭客户
  629. {
  630. //var condition string
  631. //var pars []interface{}
  632. //condition = ` and start_date >= ? and end_date <= ? and company_status = ? and company_id IN (` + utils.GetOrmInReplace(len(closeIdsArr)) + `)`
  633. //pars = append(pars, startDate, endDate, "关闭", closeIdsArr)
  634. data, tmpErr := roadshow.GetOverseasGroupSellerRecordList(startDate.Format(utils.FormatDate), endDate.Format(utils.FormatDate), "关闭")
  635. if tmpErr != nil {
  636. err = tmpErr
  637. return
  638. }
  639. for _, v := range data {
  640. //fmt.Println(v)
  641. closeMap[v.AdminId] = v.Num
  642. }
  643. }
  644. }
  645. //路演形式维度
  646. //if dimensionType == "roadshow_type" {
  647. // //线上路演
  648. // {
  649. // var condition string
  650. // var pars []interface{}
  651. // condition = ` and start_date >= ? and end_date <= ? and roadshow_type = ? and company_id IN (` + utils.GetOrmInReplace(len(idsArr)) + `)`
  652. // pars = append(pars, startDate, endDate, "线上", idsArr)
  653. // data, tmpErr := roadshow.GetOverseasGroupSellerRecordList(condition, pars)
  654. // if tmpErr != nil {
  655. // err = tmpErr
  656. // return
  657. // }
  658. // for _, v := range data {
  659. // //fmt.Println(v)
  660. // onlineMap[v.AdminId] = v.Num
  661. // }
  662. // }
  663. //
  664. // //线下路演
  665. // {
  666. // var condition string
  667. // var pars []interface{}
  668. // condition = ` and start_date >= ? and end_date <= ? and roadshow_type = ? and company_id IN (` + utils.GetOrmInReplace(len(idsArr)) + `)`
  669. // pars = append(pars, startDate, endDate, "线下", idsArr)
  670. // data, tmpErr := roadshow.GetOverseasGroupSellerRecordList(condition, pars)
  671. // if tmpErr != nil {
  672. // err = tmpErr
  673. // return
  674. // }
  675. // for _, v := range data {
  676. // //fmt.Println(v)
  677. // offlineMap[v.AdminId] = v.Num
  678. // }
  679. // }
  680. //}
  681. ////销售专项路演统计
  682. //if dimensionType == "seller_special" {
  683. //
  684. // detail, errdetail := company.GetConfigDetailByCode("choice_researcher_adminid")
  685. // if errdetail != nil {
  686. // err = errdetail
  687. // return
  688. // }
  689. // //正式客户
  690. // {
  691. // var condition string
  692. // var pars []interface{}
  693. // condition = ` and start_date >= ? and end_date <= ? and company_status = ? ` + ` and researcher_id IN (` + detail.ConfigValue + `) `
  694. // pars = append(pars, startDate, endDate, "正式")
  695. // data, tmpErr := roadshow.GetOverseasGroupSellerRecordList(condition, pars)
  696. // if tmpErr != nil {
  697. // err = tmpErr
  698. // return
  699. // }
  700. // for _, v := range data {
  701. // formalMap[v.AdminId] = v.Num
  702. // }
  703. // }
  704. //
  705. // //试用客户
  706. // {
  707. // var condition string
  708. // var pars []interface{}
  709. // condition = ` and start_date >= ? and end_date <= ? and company_status = ? ` + ` and researcher_id IN (` + detail.ConfigValue + `) `
  710. // pars = append(pars, startDate, endDate, "试用")
  711. // data, tmpErr := roadshow.GetOverseasGroupSellerRecordList(condition, pars)
  712. //
  713. // if tmpErr != nil {
  714. // err = tmpErr
  715. // return
  716. // }
  717. // for _, v := range data {
  718. // //fmt.Println(v)
  719. // tryOutMap[v.AdminId] = v.Num
  720. // }
  721. // }
  722. //
  723. // //公开会议
  724. // {
  725. // var condition string
  726. // var pars []interface{}
  727. // condition = ` and start_date >= ? and end_date <= ? and activity_type = ? ` + ` and researcher_id IN (` + detail.ConfigValue + `) `
  728. // pars = append(pars, startDate, endDate, "公开会议")
  729. // data, tmpErr := roadshow.GetOverseasGroupSellerRecordList(condition, pars)
  730. // if tmpErr != nil {
  731. // err = tmpErr
  732. // return
  733. // }
  734. // for _, v := range data {
  735. // //fmt.Println(v)
  736. // meetingMap[v.AdminId] = v.Num
  737. // }
  738. // }
  739. //} else {
  740. // //公开会议
  741. // {
  742. // var condition string
  743. // var pars []interface{}
  744. // condition = ` and start_date >= ? and end_date <= ? and activity_type = ? `
  745. // pars = append(pars, startDate, endDate, "公开会议")
  746. // data, tmpErr := roadshow.GetOverseasGroupSellerRecordList(condition, pars)
  747. // if tmpErr != nil {
  748. // err = tmpErr
  749. // return
  750. // }
  751. // for _, v := range data {
  752. // //fmt.Println(v)
  753. // meetingMap[v.AdminId] = v.Num
  754. // }
  755. // }
  756. //}
  757. adminDataMap = OverseasAdminDataMap{
  758. TryOutMap: tryOutMap,
  759. FormalMap: formalMap,
  760. CloseMap: closeMap,
  761. OfflineMap: offlineMap,
  762. OnlineMap: onlineMap,
  763. StartDate: startDate.Format(utils.FormatDate),
  764. EndDate: endDate.Format(utils.FormatDate),
  765. }
  766. return
  767. }
  768. // getOverseasResearcherSectionData 获取研究员周期数据
  769. func getOverseasResearcherSectionData(startDate, endDate time.Time) (adminDataMap OverseasAdminDataMap, err error) {
  770. tryOutMap := make(map[int]int)
  771. formalMap := make(map[int]int)
  772. closemap := make(map[int]int)
  773. //companylist, err := overseas_custom.GetOverseasCustomList("", nil)
  774. //if err != nil {
  775. // return
  776. //}
  777. //formalIdsArr := make([]int, 0)
  778. //tryoutIdsArr := make([]int, 0)
  779. //closeIdsArr := make([]int, 0)
  780. //for _, v := range companylist {
  781. // if v.OverseasStatus == "正式" {
  782. // formalIdsArr = append(formalIdsArr, v.CompanyId)
  783. // } else if v.OverseasStatus == "试用" {
  784. // tryoutIdsArr = append(tryoutIdsArr, v.CompanyId)
  785. // } else if v.OverseasStatus == "关闭" {
  786. // closeIdsArr = append(closeIdsArr, v.CompanyId)
  787. // }
  788. //}
  789. //正式客户
  790. {
  791. //var condition string
  792. //var pars []interface{}
  793. //condition = ` and start_date >= ? and end_date <= ? and company_status = ? and company_id IN (` + utils.GetOrmInReplace(len(formalIdsArr)) + `)`
  794. //pars = append(pars, startDate, endDate, "正式", formalIdsArr)
  795. data, tmpErr := roadshow.GetOverseasGroupResearcherRecordList(startDate.Format(utils.FormatDate), endDate.Format(utils.FormatDate), "正式")
  796. if tmpErr != nil {
  797. err = tmpErr
  798. return
  799. }
  800. for _, v := range data {
  801. formalMap[v.AdminId] = v.Num
  802. }
  803. }
  804. //试用客户
  805. {
  806. //var condition string
  807. //var pars []interface{}
  808. //condition = ` and start_date >= ? and end_date <= ? and company_status = ? and company_id IN (` + utils.GetOrmInReplace(len(tryoutIdsArr)) + `)`
  809. //pars = append(pars, startDate, endDate, "试用", tryoutIdsArr)
  810. data, tmpErr := roadshow.GetOverseasGroupResearcherRecordList(startDate.Format(utils.FormatDate), endDate.Format(utils.FormatDate), "试用")
  811. if tmpErr != nil {
  812. err = tmpErr
  813. return
  814. }
  815. for _, v := range data {
  816. //fmt.Println(v)
  817. tryOutMap[v.AdminId] = v.Num
  818. }
  819. }
  820. //试用客户
  821. {
  822. //var condition string
  823. //var pars []interface{}
  824. //condition = ` and start_date >= ? and end_date <= ? and company_status = ? and company_id IN (` + utils.GetOrmInReplace(len(closeIdsArr)) + `)`
  825. //pars = append(pars, startDate, endDate, "关闭", closeIdsArr)
  826. data, tmpErr := roadshow.GetOverseasGroupResearcherRecordList(startDate.Format(utils.FormatDate), endDate.Format(utils.FormatDate), "关闭")
  827. if tmpErr != nil {
  828. err = tmpErr
  829. return
  830. }
  831. for _, v := range data {
  832. //fmt.Println(v)
  833. closemap[v.AdminId] = v.Num
  834. }
  835. }
  836. adminDataMap = OverseasAdminDataMap{
  837. TryOutMap: tryOutMap,
  838. FormalMap: formalMap,
  839. CloseMap: closemap,
  840. StartDate: startDate.Format(utils.FormatDate),
  841. EndDate: endDate.Format(utils.FormatDate),
  842. }
  843. return
  844. }
  845. // GetOverseasMonthDataV2 月度数据
  846. func GetOverseasMonthDataV2(adminType, dimensionType string, dataNum int) (adminDataMapList []OverseasAdminDataMap, firstDate time.Time, err error) { //三个协程返回
  847. nowMonthFirstDay := utils.GetNowMonthFirstDay() //本月第一天
  848. //nowMonthLastDay := nowMonthFirstDay.AddDate(0, 1, 0).Add(-1 * time.Second) //本月最后一天
  849. chanList := make([]chan OverseasAdminDataMap, 0)
  850. for i := 0; i < dataNum; i++ {
  851. tmpCh := make(chan OverseasAdminDataMap, 0)
  852. chanList = append(chanList, tmpCh)
  853. lastMonthFirstDay := nowMonthFirstDay.AddDate(0, -1*i, 0) //上个月第一天
  854. lastMonthLastDay := nowMonthFirstDay.AddDate(0, -1*(i-1), 0).Add(-1 * time.Second) //上个月最后一天
  855. // 第一个开始日期
  856. firstDate = lastMonthFirstDay
  857. go getOverseasSectionData(lastMonthFirstDay, lastMonthLastDay, adminType, dimensionType, tmpCh)
  858. }
  859. adminDataMapList = make([]OverseasAdminDataMap, 0)
  860. for _, vChan := range chanList {
  861. var monthAdminDataMap OverseasAdminDataMap
  862. monthAdminDataMap = <-vChan
  863. close(vChan)
  864. adminDataMapList = append(adminDataMapList, monthAdminDataMap)
  865. }
  866. return
  867. }
  868. // GetOverseasTimeIntervalData 区间数据
  869. func GetOverseasTimeIntervalData(startDate, endDate, adminType, dimensionType string) (adminDataMapList []OverseasAdminDataMap, firstDate time.Time, err error) { //三个协程返回
  870. startDateTimer, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
  871. endDateTimer, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  872. endDateTimer = endDateTimer.AddDate(0, 0, 1).Add(-1 * time.Second) //本月最后一天
  873. //最早的一天
  874. firstDate = startDateTimer
  875. ch1 := make(chan OverseasAdminDataMap, 0)
  876. go getOverseasSectionData(startDateTimer, endDateTimer, adminType, dimensionType, ch1)
  877. var adminDataMap OverseasAdminDataMap
  878. adminDataMap = <-ch1
  879. close(ch1)
  880. adminDataMapList = make([]OverseasAdminDataMap, 0)
  881. adminDataMapList = append(adminDataMapList, adminDataMap)
  882. return
  883. }
  884. // GetOverseasWeekData 周度数据
  885. func GetOverseasWeekData(adminType, dimensionType string) (adminDataList []OverseasAdminDataMap, firstDate time.Time, err error) {
  886. nowWeekMonday := utils.GetNowWeekMonday() //本周周一
  887. //fmt.Println(nowWeekMonday)
  888. nowWeekSunday := nowWeekMonday.AddDate(0, 0, 7).Add(-1 * time.Second) //本周周日
  889. //fmt.Println(nowWeekSunday)
  890. //nowWeekMonday = nowWeekMonday.AddDate(0, 0, -30) //上周周一
  891. //nowWeekSunday = nowWeekSunday.AddDate(0, 0, -30) //上周周日
  892. //adminDataMap, err := getSectionData(nowWeekMonday, nowWeekSunday)
  893. //if err != nil {
  894. // fmt.Println(err)
  895. // return
  896. //}
  897. //fmt.Println(adminDataMap)
  898. lastWeekMonday := nowWeekMonday.AddDate(0, 0, -7) //上周周一
  899. //fmt.Println(lastWeekMonday)
  900. //最早的一天
  901. firstDate = lastWeekMonday
  902. lastWeekSunday := nowWeekSunday.AddDate(0, 0, -7) //上周周日
  903. //fmt.Println(lastWeekSunday)
  904. nextWeekMonday := nowWeekMonday.AddDate(0, 0, 7) //下周周一
  905. //fmt.Println(nextWeekMonday)
  906. nextWeekSunday := nowWeekSunday.AddDate(0, 0, 7) //下周周日
  907. //fmt.Println(nextWeekSunday)
  908. ch1 := make(chan OverseasAdminDataMap, 0)
  909. ch2 := make(chan OverseasAdminDataMap, 0)
  910. ch3 := make(chan OverseasAdminDataMap, 0)
  911. go getOverseasSectionData(lastWeekMonday, lastWeekSunday, adminType, dimensionType, ch1)
  912. go getOverseasSectionData(nowWeekMonday, nowWeekSunday, adminType, dimensionType, ch2)
  913. go getOverseasSectionData(nextWeekMonday, nextWeekSunday, adminType, dimensionType, ch3)
  914. var nowWeekAdminDataMap, lastWeekAdminDataMap, nextWeekAdminDataMap OverseasAdminDataMap
  915. lastWeekAdminDataMap = <-ch1
  916. close(ch1)
  917. nowWeekAdminDataMap = <-ch2
  918. close(ch2)
  919. nextWeekAdminDataMap = <-ch3
  920. close(ch3)
  921. adminDataList = make([]OverseasAdminDataMap, 0)
  922. adminDataList = append(adminDataList, lastWeekAdminDataMap, nowWeekAdminDataMap, nextWeekAdminDataMap)
  923. return
  924. }
  925. // GetOverseasMonthData 月度数据
  926. func GetOverseasMonthData(adminType, dimensionType string) (adminDataMapList []OverseasAdminDataMap, firstDate time.Time, err error) { //三个协程返回
  927. nowMonthFirstDay := utils.GetNowMonthFirstDay() //本月第一天
  928. nowMonthLastDay := nowMonthFirstDay.AddDate(0, 1, 0).Add(-1 * time.Second) //本月最后一天
  929. lastMonthFirstDay1 := nowMonthFirstDay.AddDate(0, -1, 0) //上个月第一天
  930. lastMonthLastDay1 := lastMonthFirstDay1.AddDate(0, 1, 0).Add(-1 * time.Second) //上个月最后一天
  931. lastMonthFirstDay2 := nowMonthFirstDay.AddDate(0, -2, 0) //上上个月第一天
  932. lastMonthLastDay2 := lastMonthFirstDay2.AddDate(0, 1, 0).Add(-1 * time.Second) //上上个月最后一天
  933. lastMonthFirstDay3 := nowMonthFirstDay.AddDate(0, -3, 0) //上上上个月第一天
  934. lastMonthLastDay3 := lastMonthFirstDay3.AddDate(0, 1, 0).Add(-1 * time.Second) //上上上个月最后一天
  935. //最早的一天
  936. firstDate = lastMonthFirstDay3
  937. ch1 := make(chan OverseasAdminDataMap, 0)
  938. ch2 := make(chan OverseasAdminDataMap, 0)
  939. ch3 := make(chan OverseasAdminDataMap, 0)
  940. ch4 := make(chan OverseasAdminDataMap, 0)
  941. go getOverseasSectionData(nowMonthFirstDay, nowMonthLastDay, adminType, dimensionType, ch1)
  942. go getOverseasSectionData(lastMonthFirstDay1, lastMonthLastDay1, adminType, dimensionType, ch2)
  943. go getOverseasSectionData(lastMonthFirstDay2, lastMonthLastDay2, adminType, dimensionType, ch3)
  944. go getOverseasSectionData(lastMonthFirstDay3, lastMonthLastDay3, adminType, dimensionType, ch4)
  945. var nowMonthAdminDataMap, lastMonthAdminDataMap1, lastMonthAdminDataMap2, lastMonthAdminDataMap3 OverseasAdminDataMap
  946. nowMonthAdminDataMap = <-ch1
  947. close(ch1)
  948. lastMonthAdminDataMap1 = <-ch2
  949. close(ch2)
  950. lastMonthAdminDataMap2 = <-ch3
  951. close(ch3)
  952. lastMonthAdminDataMap3 = <-ch4
  953. close(ch4)
  954. adminDataMapList = make([]OverseasAdminDataMap, 0)
  955. adminDataMapList = append(adminDataMapList, nowMonthAdminDataMap, lastMonthAdminDataMap1, lastMonthAdminDataMap2, lastMonthAdminDataMap3)
  956. return
  957. }