report.go 35 KB

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