123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- package statistic_report
- import (
- "fmt"
- "hongze/hz_crm_api/models/company"
- "hongze/hz_crm_api/models/contract"
- "hongze/hz_crm_api/utils"
- "strings"
- "time"
- )
- type UnusualCompanyRenewDataMap struct {
- UnusualRenewMap map[int]int `description:"续约异常客户数"`
- UnusualRenewIdMap map[int]string `description:"续约异常客户ids"`
- UnusualRenewTotal int `description:"续约异常客户总数(去重)"`
- FormalCompanyTotal int `description:"当前正常客户总数(去重)"`
- StartDate string `description:"开始日期"`
- EndDate string `description:"开始日期"`
- }
- // GetUnusualRenewWeekDataNum 周度数据
- func GetUnusualRenewWeekDataNum(nowWeekMonday time.Time, productId, source, dataNum int) (adminDataList []UnusualCompanyRenewDataMap, firstDate time.Time, err error) {
- nowWeekSunday := nowWeekMonday.AddDate(0, 0, 7).Add(-1 * time.Second) //本周周日
- chanList := make([]chan UnusualCompanyRenewDataMap, 0)
- for i := 0; i < dataNum; i++ {
- tmpCh := make(chan UnusualCompanyRenewDataMap, 0)
- chanList = append(chanList, tmpCh)
- lastWeekMonday := nowWeekMonday.AddDate(0, 0, -7*i)
- lastWeekSunday := nowWeekSunday.AddDate(0, 0, -7*i)
- // 第一个开始日期
- firstDate = lastWeekMonday
- go getUnusualRenewSectionData(productId, source, lastWeekMonday, lastWeekSunday, tmpCh)
- }
- adminDataList = make([]UnusualCompanyRenewDataMap, 0)
- for _, vChan := range chanList {
- var weekUnusualCompanyRenewDataMap UnusualCompanyRenewDataMap
- weekUnusualCompanyRenewDataMap = <-vChan
- close(vChan)
- adminDataList = append(adminDataList, weekUnusualCompanyRenewDataMap)
- }
- return
- }
- // GetUnusualRenewMonthDataNum 月度数据
- func GetUnusualRenewMonthDataNum(nowMonthFirstDay time.Time, productId, source, dataNum int) (adminDataList []UnusualCompanyRenewDataMap, firstDate time.Time, err error) { //三个协程返回
- //nowMonthLastDay := nowMonthFirstDay.AddDate(0, 1, 0).Add(-1 * time.Second) //本月最后一天
- chanList := make([]chan UnusualCompanyRenewDataMap, 0)
- for i := 0; i < dataNum; i++ {
- tmpCh := make(chan UnusualCompanyRenewDataMap, 0)
- chanList = append(chanList, tmpCh)
- lastMonthFirstDay := nowMonthFirstDay.AddDate(0, -1*i, 0) //上个月第一天
- lastMonthLastDay := nowMonthFirstDay.AddDate(0, -1*(i-1), 0).Add(-1 * time.Second) //上个月最后一天
- // 第一个开始日期
- firstDate = lastMonthFirstDay
- go getUnusualRenewSectionData(productId, source, lastMonthFirstDay, lastMonthLastDay, tmpCh)
- }
- adminDataList = make([]UnusualCompanyRenewDataMap, 0)
- for _, vChan := range chanList {
- var weekUnusualCompanyRenewDataMap UnusualCompanyRenewDataMap
- weekUnusualCompanyRenewDataMap = <-vChan
- close(vChan)
- adminDataList = append(adminDataList, weekUnusualCompanyRenewDataMap)
- }
- return
- }
- // GetUnusualRenewTimeIntervalData 区间数据
- func GetUnusualRenewTimeIntervalData(productId, source int, startDate, endDate string) (adminDataMapList []UnusualCompanyRenewDataMap, firstDate time.Time, err error) { //三个协程返回
- startDateTimer, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
- endDateTimer, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
- endDateTimer = endDateTimer.AddDate(0, 0, 1).Add(-1 * time.Second) //本月最后一天
- //最早的一天
- firstDate = startDateTimer
- ch1 := make(chan UnusualCompanyRenewDataMap, 0)
- go getUnusualRenewSectionData(productId, source, startDateTimer, endDateTimer, ch1)
- var adminDataMap UnusualCompanyRenewDataMap
- adminDataMap = <-ch1
- close(ch1)
- adminDataMapList = make([]UnusualCompanyRenewDataMap, 0)
- adminDataMapList = append(adminDataMapList, adminDataMap)
- return
- }
- // getUnusualRenewSectionData 获取周期数据
- func getUnusualRenewSectionData(productId, source int, startDate, endDate time.Time, ch chan UnusualCompanyRenewDataMap) (adminDataMap UnusualCompanyRenewDataMap, err error) {
- defer func() {
- ch <- adminDataMap
- }()
- unusualRenewMap := make(map[int]int) // 续约异常客户
- unusualRenewCompanyIdMap := make(map[int]string) // 续约异常客户id
- var unusualRenewCompanyTotal, formalCompanyTotal int //续约异常客户总数 , 当前正式的客户数
- // 当前正式的客户数
- formalCompanyTotal, err = contract.GetCountFormalCompany(endDate, productId)
- if err != nil {
- utils.FileLog.Error(err.Error())
- return
- }
- // 续约异常
- {
- data, tmpErr := company.GetUnusualRenewCompanyByShareSellerList(startDate, endDate, productId, source)
- if tmpErr != nil {
- err = tmpErr
- utils.FileLog.Error(err.Error())
- return
- }
- unusualRenewCompanyIdListMap := make(map[int][]string) // 续约异常客户
- for _, v := range data {
- // 共享人id为空
- if v.ShareSellerId <= 0 {
- continue
- }
- // 共享人id不为空,且不是所属销售
- tmp, ok := unusualRenewMap[v.ShareSellerId]
- if !ok {
- tmp = 0
- }
- companyIdSlice := strings.Split(v.CompanyIds, ",")
- unusualRenewMap[v.ShareSellerId] = tmp + len(companyIdSlice)
- // 客户id
- tmpCompanyIdList2, ok := unusualRenewCompanyIdListMap[v.ShareSellerId]
- if !ok {
- tmpCompanyIdList2 = make([]string, 0)
- }
- unusualRenewCompanyIdListMap[v.ShareSellerId] = append(tmpCompanyIdList2, fmt.Sprint(v.CompanyIds))
- unusualRenewCompanyTotal += len(companyIdSlice)
- }
- for sellerId, tmpCompanyIdList := range unusualRenewCompanyIdListMap {
- unusualRenewCompanyIdMap[sellerId] = strings.Join(tmpCompanyIdList, ",")
- }
- }
- adminDataMap = UnusualCompanyRenewDataMap{
- UnusualRenewMap: unusualRenewMap,
- UnusualRenewIdMap: unusualRenewCompanyIdMap,
- UnusualRenewTotal: unusualRenewCompanyTotal,
- FormalCompanyTotal: formalCompanyTotal,
- StartDate: startDate.Format(utils.FormatDate),
- EndDate: endDate.Format(utils.FormatDate),
- }
- return
- }
|