|
@@ -5,6 +5,7 @@ import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
"github.com/rdlucklib/rdluck_tools/paging"
|
|
|
+ "github.com/shopspring/decimal"
|
|
|
"github.com/tealeg/xlsx"
|
|
|
"hongze/hz_crm_api/models"
|
|
|
"hongze/hz_crm_api/models/company"
|
|
@@ -5394,12 +5395,15 @@ func (this *StatisticReportController) RenewCompanyStatistics() {
|
|
|
tmpAllRenewFollowNumMap := make(map[int]int)
|
|
|
tmpAllExpireNumMap := make(map[int]int)
|
|
|
tmpAllRenewNumMap := make(map[int]int)
|
|
|
+ tmpAllUnusualRenewNumMap := make(map[int]int) // 续约异常客户数量汇总
|
|
|
+ tmpAllFormalCompanyNumMap := make(map[int]int) // 当期正式客户数量汇总
|
|
|
|
|
|
//id集合汇总
|
|
|
tmpAllNotRenewIdMap := make(map[int]string)
|
|
|
tmpAllRenewFollowIdMap := make(map[int]string)
|
|
|
tmpAllExpireIdMap := make(map[int]string)
|
|
|
tmpAllRenewIdMap := make(map[int]string)
|
|
|
+ tmpAllUnusualRenewIdMap := make(map[int]string) // 续约异常客户id汇总
|
|
|
|
|
|
for _, v := range group {
|
|
|
v.ResearcherList = groupMap[v.GroupId]
|
|
@@ -5411,18 +5415,21 @@ func (this *StatisticReportController) RenewCompanyStatistics() {
|
|
|
tmpGroupRenewFollowNumMap := make(map[int]int)
|
|
|
tmpGroupExpireNumMap := make(map[int]int)
|
|
|
tmpGroupRenewNumMap := make(map[int]int)
|
|
|
+ tmpGroupUnusualRenewNumMap := make(map[int]int) //组内续约异常客户数
|
|
|
|
|
|
//id集合
|
|
|
tmpGroupNotRenewIdSliceMap := make(map[int][]string)
|
|
|
tmpGroupRenewFollowIdSliceMap := make(map[int][]string)
|
|
|
tmpGroupExpireIdSliceMap := make(map[int][]string)
|
|
|
tmpGroupRenewIdSliceMap := make(map[int][]string)
|
|
|
+ tmpGroupUnusualRenewIdSliceMap := make(map[int][]string) // 组内续约异常客户id汇总
|
|
|
|
|
|
//id集合
|
|
|
tmpGroupNotRenewIdMap := make(map[int]string)
|
|
|
tmpGroupRenewFollowIdMap := make(map[int]string)
|
|
|
tmpGroupExpireIdMap := make(map[int]string)
|
|
|
tmpGroupRenewIdMap := make(map[int]string)
|
|
|
+ tmpGroupUnusualRenewIdMap := make(map[int]string) // 组内续约异常客户id汇总
|
|
|
|
|
|
for _, researcher := range groupMap[v.GroupId] {
|
|
|
//组内研究员数据
|
|
@@ -5433,10 +5440,10 @@ func (this *StatisticReportController) RenewCompanyStatistics() {
|
|
|
startDateIndexList[index] = adminData.StartDate
|
|
|
endDateIndexList[index] = adminData.EndDate
|
|
|
|
|
|
- var tmpNotRenewNum, tmpRenewFollowNum, tmpExpireStatus, tmpRenewStatus int
|
|
|
+ var tmpNotRenewNum, tmpRenewFollowNum, tmpExpireStatus, tmpRenewStatus, tmpUnusualRenewStatus int
|
|
|
//var tmpNotRenewIds, tmpRenewFollowIds, tmpExpireIds string
|
|
|
- var tmpNotRenewIdSlice, tmpRenewFollowIdSlice, tmpExpireIdSlice, tmpRenewIdSlice []string
|
|
|
- var tmpNotRenewId, tmpRenewFollowId, tmpExpireId, tmpRenewId string
|
|
|
+ var tmpNotRenewIdSlice, tmpRenewFollowIdSlice, tmpExpireIdSlice, tmpRenewIdSlice, tmpUnusualRenewIdSlice []string
|
|
|
+ var tmpNotRenewId, tmpRenewFollowId, tmpExpireId, tmpRenewId, tmpUnusualRenewId string
|
|
|
|
|
|
if num, ok := adminData.NotRenewMap[researcher.AdminId]; ok {
|
|
|
tmpNotRenewNum = num
|
|
@@ -5458,18 +5465,26 @@ func (this *StatisticReportController) RenewCompanyStatistics() {
|
|
|
tmpRenewIdSlice = append(tmpRenewIdSlice, adminData.RenewIdMap[researcher.AdminId])
|
|
|
tmpRenewId = strings.Join(tmpRenewIdSlice, ",")
|
|
|
}
|
|
|
+ // 续约异常客户
|
|
|
+ if num, ok := adminData.UnusualRenewMap[researcher.AdminId]; ok {
|
|
|
+ tmpUnusualRenewStatus = num
|
|
|
+ tmpUnusualRenewIdSlice = append(tmpUnusualRenewIdSlice, adminData.UnusualRenewIdMap[researcher.AdminId])
|
|
|
+ tmpUnusualRenewId = strings.Join(tmpUnusualRenewIdSlice, ",")
|
|
|
+ }
|
|
|
|
|
|
tmpAdminRsRenewRecordNum := statistic_report.CompanyRenewRecordNum{
|
|
|
- NotRenewNum: tmpNotRenewNum,
|
|
|
- NotRenewIds: tmpNotRenewId,
|
|
|
- RenewFollowNum: tmpRenewFollowNum,
|
|
|
- RenewFollowIds: tmpRenewFollowId,
|
|
|
- ExpireNum: tmpExpireStatus,
|
|
|
- ExpireIds: tmpExpireId,
|
|
|
- RenewNum: tmpRenewStatus,
|
|
|
- RenewIds: tmpRenewId,
|
|
|
- StartDate: adminData.StartDate,
|
|
|
- EndDate: adminData.EndDate,
|
|
|
+ NotRenewNum: tmpNotRenewNum,
|
|
|
+ NotRenewIds: tmpNotRenewId,
|
|
|
+ RenewFollowNum: tmpRenewFollowNum,
|
|
|
+ RenewFollowIds: tmpRenewFollowId,
|
|
|
+ ExpireNum: tmpExpireStatus,
|
|
|
+ ExpireIds: tmpExpireId,
|
|
|
+ RenewNum: tmpRenewStatus,
|
|
|
+ RenewIds: tmpRenewId,
|
|
|
+ UnusualRenewNum: tmpUnusualRenewStatus,
|
|
|
+ UnusualRenewIds: tmpUnusualRenewId,
|
|
|
+ StartDate: adminData.StartDate,
|
|
|
+ EndDate: adminData.EndDate,
|
|
|
}
|
|
|
tmpCompanyRenewRecordNumList = append(tmpCompanyRenewRecordNumList, tmpAdminRsRenewRecordNum)
|
|
|
|
|
@@ -5486,11 +5501,15 @@ func (this *StatisticReportController) RenewCompanyStatistics() {
|
|
|
if _, ok := tmpGroupRenewNumMap[index]; !ok {
|
|
|
tmpGroupRenewNumMap[index] = 0
|
|
|
}
|
|
|
+ if _, ok := tmpGroupUnusualRenewNumMap[index]; !ok {
|
|
|
+ tmpGroupUnusualRenewNumMap[index] = 0
|
|
|
+ }
|
|
|
|
|
|
tmpGroupNotRenewNumMap[index] += tmpNotRenewNum
|
|
|
tmpGroupRenewFollowNumMap[index] += tmpRenewFollowNum
|
|
|
tmpGroupExpireNumMap[index] += tmpExpireStatus
|
|
|
tmpGroupRenewNumMap[index] += tmpRenewStatus
|
|
|
+ tmpGroupUnusualRenewNumMap[index] += tmpUnusualRenewStatus
|
|
|
|
|
|
//组内数据汇总
|
|
|
if _, ok := tmpGroupNotRenewIdMap[index]; !ok {
|
|
@@ -5514,6 +5533,9 @@ func (this *StatisticReportController) RenewCompanyStatistics() {
|
|
|
if tmpRenewId != "" {
|
|
|
tmpGroupRenewIdSliceMap[index] = append(tmpGroupRenewIdSliceMap[index], tmpRenewId)
|
|
|
}
|
|
|
+ if tmpUnusualRenewId != "" {
|
|
|
+ tmpGroupUnusualRenewIdSliceMap[index] = append(tmpGroupUnusualRenewIdSliceMap[index], tmpUnusualRenewId)
|
|
|
+ }
|
|
|
|
|
|
//总数据汇总
|
|
|
if _, ok := tmpAllNotRenewNumMap[index]; !ok {
|
|
@@ -5533,20 +5555,8 @@ func (this *StatisticReportController) RenewCompanyStatistics() {
|
|
|
tmpAllRenewFollowNumMap[index] += tmpRenewFollowNum
|
|
|
tmpAllExpireNumMap[index] += tmpExpireStatus
|
|
|
tmpAllRenewNumMap[index] += tmpRenewStatus
|
|
|
-
|
|
|
- ////总数据汇总
|
|
|
- //if _, ok := tmpAllNotRenewIdMap[index]; !ok {
|
|
|
- // tmpAllNotRenewIdMap[index] = ""
|
|
|
- //}
|
|
|
- //if _, ok := tmpAllRenewFollowIdMap[index]; !ok {
|
|
|
- // tmpAllRenewFollowIdMap[index] = ""
|
|
|
- //}
|
|
|
- //if _, ok := tmpAllExpireIdMap[index]; !ok {
|
|
|
- // tmpAllExpireIdMap[index] = ""
|
|
|
- //}
|
|
|
- //tmpAllNotRenewIdMap[index] += tmpNotRenewId
|
|
|
- //tmpAllRenewFollowIdMap[index] += tmpRenewFollowId
|
|
|
- //tmpAllExpireIdMap[index] += tmpExpireId
|
|
|
+ tmpAllUnusualRenewNumMap[index] = adminData.UnusualRenewTotal
|
|
|
+ tmpAllFormalCompanyNumMap[index] = adminData.FormalCompanyTotal
|
|
|
}
|
|
|
tmpAdminRenewRecord := statistic_report.AdminRenewRecord{
|
|
|
Name: researcher.RealName,
|
|
@@ -5561,18 +5571,21 @@ func (this *StatisticReportController) RenewCompanyStatistics() {
|
|
|
tmpGroupRenewFollowIdMap[i] = strings.Join(tmpGroupRenewFollowIdSliceMap[i], ",")
|
|
|
tmpGroupExpireIdMap[i] = strings.Join(tmpGroupExpireIdSliceMap[i], ",")
|
|
|
tmpGroupRenewIdMap[i] = strings.Join(tmpGroupRenewIdSliceMap[i], ",")
|
|
|
+ tmpGroupUnusualRenewIdMap[i] = strings.Join(tmpGroupUnusualRenewIdSliceMap[i], ",")
|
|
|
|
|
|
tmpGroupCompanyRenewRecordNum := statistic_report.CompanyRenewRecordNum{
|
|
|
- NotRenewNum: tmpGroupNotRenewNumMap[i],
|
|
|
- NotRenewIds: tmpGroupNotRenewIdMap[i],
|
|
|
- RenewFollowNum: tmpGroupRenewFollowNumMap[i],
|
|
|
- RenewFollowIds: tmpGroupRenewFollowIdMap[i],
|
|
|
- ExpireNum: tmpGroupExpireNumMap[i],
|
|
|
- ExpireIds: tmpGroupExpireIdMap[i],
|
|
|
- RenewNum: tmpGroupRenewNumMap[i],
|
|
|
- RenewIds: tmpGroupRenewIdMap[i],
|
|
|
- StartDate: startDateIndexList[i],
|
|
|
- EndDate: endDateIndexList[i],
|
|
|
+ NotRenewNum: tmpGroupNotRenewNumMap[i],
|
|
|
+ NotRenewIds: tmpGroupNotRenewIdMap[i],
|
|
|
+ RenewFollowNum: tmpGroupRenewFollowNumMap[i],
|
|
|
+ RenewFollowIds: tmpGroupRenewFollowIdMap[i],
|
|
|
+ ExpireNum: tmpGroupExpireNumMap[i],
|
|
|
+ ExpireIds: tmpGroupExpireIdMap[i],
|
|
|
+ RenewNum: tmpGroupRenewNumMap[i],
|
|
|
+ RenewIds: tmpGroupRenewIdMap[i],
|
|
|
+ UnusualRenewNum: tmpGroupUnusualRenewNumMap[i],
|
|
|
+ UnusualRenewIds: tmpGroupUnusualRenewIdMap[i],
|
|
|
+ StartDate: startDateIndexList[i],
|
|
|
+ EndDate: endDateIndexList[i],
|
|
|
}
|
|
|
tmpGroupCompanyRenewRecordNumList = append(tmpGroupCompanyRenewRecordNumList, tmpGroupCompanyRenewRecordNum)
|
|
|
}
|
|
@@ -5587,17 +5600,24 @@ func (this *StatisticReportController) RenewCompanyStatistics() {
|
|
|
|
|
|
//总体汇总数据
|
|
|
for i := 0; i < len(tmpAllRenewFollowNumMap); i++ {
|
|
|
+ unusualRate := ``
|
|
|
+ if tmpAllUnusualRenewNumMap[i] > 0 && tmpAllFormalCompanyNumMap[i] > 0 {
|
|
|
+ unusualRate = decimal.NewFromInt(int64(tmpAllUnusualRenewNumMap[i])*100).Div(decimal.NewFromInt(int64(tmpAllFormalCompanyNumMap[i]))).Round(2).String() + "%"
|
|
|
+ }
|
|
|
tmpGroupCompanyRenewRecordNum := statistic_report.CompanyRenewRecordNum{
|
|
|
- NotRenewNum: tmpAllNotRenewNumMap[i],
|
|
|
- NotRenewIds: tmpAllNotRenewIdMap[i],
|
|
|
- RenewFollowNum: tmpAllRenewFollowNumMap[i],
|
|
|
- RenewFollowIds: tmpAllRenewFollowIdMap[i],
|
|
|
- ExpireNum: tmpAllExpireNumMap[i],
|
|
|
- ExpireIds: tmpAllExpireIdMap[i],
|
|
|
- RenewNum: tmpAllRenewNumMap[i],
|
|
|
- RenewIds: tmpAllRenewIdMap[i],
|
|
|
- StartDate: startDateIndexList[i],
|
|
|
- EndDate: endDateIndexList[i],
|
|
|
+ NotRenewNum: tmpAllNotRenewNumMap[i],
|
|
|
+ NotRenewIds: tmpAllNotRenewIdMap[i],
|
|
|
+ RenewFollowNum: tmpAllRenewFollowNumMap[i],
|
|
|
+ RenewFollowIds: tmpAllRenewFollowIdMap[i],
|
|
|
+ ExpireNum: tmpAllExpireNumMap[i],
|
|
|
+ ExpireIds: tmpAllExpireIdMap[i],
|
|
|
+ RenewNum: tmpAllRenewNumMap[i],
|
|
|
+ RenewIds: tmpAllRenewIdMap[i],
|
|
|
+ UnusualRenewNum: tmpAllUnusualRenewNumMap[i],
|
|
|
+ UnusualRenewIds: tmpAllUnusualRenewIdMap[i],
|
|
|
+ UnusualRate: unusualRate, // 异常率
|
|
|
+ StartDate: startDateIndexList[i],
|
|
|
+ EndDate: endDateIndexList[i],
|
|
|
}
|
|
|
allCompanyRenewRecordNum = append(allCompanyRenewRecordNum, tmpGroupCompanyRenewRecordNum)
|
|
|
}
|
|
@@ -6123,7 +6143,7 @@ func (this *StatisticReportController) InvoicePaymentList() {
|
|
|
br.Data = results
|
|
|
}
|
|
|
|
|
|
-// ServiceList
|
|
|
+// SimpleList
|
|
|
// @Title 合同套餐列表
|
|
|
// @Description 合同套餐列表
|
|
|
// @Param ProductId query int false "套餐类型: 1-FICC(默认); 2-权益"
|
|
@@ -6195,3 +6215,145 @@ func (this *StatisticReportController) SimpleList() {
|
|
|
br.Msg = "获取成功"
|
|
|
br.Data = respList
|
|
|
}
|
|
|
+
|
|
|
+// UnusualRenewCompanyStatistics
|
|
|
+// @Title 获取续约异常的客户统计数据
|
|
|
+// @Description 获取续约客户统计数据接口
|
|
|
+// @Param DataType query string true "枚举值:week、month、time_interval"
|
|
|
+// @Param StartDate query string true "开始日期,格式:2022-04-06"
|
|
|
+// @Param EndDate query string true "结束日期,格式:2022-04-06"
|
|
|
+// @Success 200 {object} statistic_report.CompanyUnusualRenewRecordResp
|
|
|
+// @router /report/unusual_renew_company [get]
|
|
|
+func (this *StatisticReportController) UnusualRenewCompanyStatistics() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ dataType := this.GetString("DataType")
|
|
|
+ productId, _ := this.GetInt("ProductId", 1)
|
|
|
+ startDate := this.GetString("StartDate")
|
|
|
+ endDate := this.GetString("EndDate")
|
|
|
+
|
|
|
+ var companyUnusualRenewDataMapList []statistic_report.UnusualCompanyRenewDataMap
|
|
|
+ var err error
|
|
|
+ //var firstDate time.Time
|
|
|
+ switch dataType {
|
|
|
+ //获取列表
|
|
|
+ case "week":
|
|
|
+ nowWeekMonday := utils.GetNowWeekMonday() //本周周一
|
|
|
+ //companyRenewDataMapList, firstDate, err = statistic_report.GetWeekData()
|
|
|
+ companyUnusualRenewDataMapList, _, err = statistic_report.GetUnusualRenewWeekDataNum(nowWeekMonday, productId, 6)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "数据异常"
|
|
|
+ br.ErrMsg = "数据异常,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ case "month":
|
|
|
+ nowMonthFirstDay := utils.GetNowMonthFirstDay() //本月第一天
|
|
|
+ companyUnusualRenewDataMapList, _, err = statistic_report.GetUnusualRenewMonthDataNum(nowMonthFirstDay, productId, 6)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "数据异常"
|
|
|
+ br.ErrMsg = "数据异常,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ case "time_interval":
|
|
|
+ if startDate == `` || endDate == `` {
|
|
|
+ br.Msg = "开始日期或结束日期不能为空"
|
|
|
+ br.ErrMsg = "开始日期或结束日期不能为空,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ companyUnusualRenewDataMapList, _, err = statistic_report.GetUnusualRenewTimeIntervalData(productId, startDate, endDate)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "数据异常"
|
|
|
+ br.ErrMsg = "数据异常,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ groupId := 0
|
|
|
+ if utils.RunMode == "release" {
|
|
|
+ groupId = 37
|
|
|
+ } else {
|
|
|
+ groupId = 61
|
|
|
+ }
|
|
|
+ subAdmins, err := system.GetAdminByGroupId(groupId)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取销售失败"
|
|
|
+ br.ErrMsg = "获取销售失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //数据处理
|
|
|
+ list := make([]statistic_report.GroupUnusualRenewRecord, 0)
|
|
|
+ summaryList := make([]statistic_report.SummaryUnusualRenewRecordNum, 0)
|
|
|
+ companyRenewRecordResp := statistic_report.CompanyUnusualRenewRecordResp{
|
|
|
+ List: list,
|
|
|
+ SummaryList: summaryList,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 每日期组数据的汇总客户id
|
|
|
+ companyIdIndexMap := make(map[int][]string)
|
|
|
+ for k, v := range subAdmins {
|
|
|
+ tmpGroupCompanyRenewRecordNumList := make([]statistic_report.CompanyUnusualRenewRecordNum, 0)
|
|
|
+
|
|
|
+ for index, adminData := range companyUnusualRenewDataMapList {
|
|
|
+ tmpGroupCompanyRenewRecordNumList = append(tmpGroupCompanyRenewRecordNumList, statistic_report.CompanyUnusualRenewRecordNum{
|
|
|
+ UnusualRenewNum: adminData.UnusualRenewMap[v.AdminId],
|
|
|
+ UnusualRenewIds: adminData.UnusualRenewIdMap[v.AdminId],
|
|
|
+ StartDate: adminData.StartDate,
|
|
|
+ EndDate: adminData.EndDate,
|
|
|
+ })
|
|
|
+
|
|
|
+ if adminData.UnusualRenewIdMap[v.AdminId] != `` {
|
|
|
+ tmpCompanyIdList, ok := companyIdIndexMap[index]
|
|
|
+ if !ok {
|
|
|
+ tmpCompanyIdList = make([]string, 0)
|
|
|
+ }
|
|
|
+ companyIdIndexMap[index] = append(tmpCompanyIdList, adminData.UnusualRenewIdMap[v.AdminId])
|
|
|
+ }
|
|
|
+
|
|
|
+ if k == 0 {
|
|
|
+ unusualRate := ``
|
|
|
+ if adminData.UnusualRenewTotal > 0 && adminData.FormalCompanyTotal > 0 {
|
|
|
+ unusualRate = decimal.NewFromInt(int64(adminData.UnusualRenewTotal)*100).Div(decimal.NewFromInt(int64(adminData.FormalCompanyTotal))).Round(2).String() + `%`
|
|
|
+ }
|
|
|
+ summaryList = append(summaryList, statistic_report.SummaryUnusualRenewRecordNum{
|
|
|
+ UnusualRenewNum: adminData.UnusualRenewTotal,
|
|
|
+ UnusualRate: unusualRate,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ list = append(list, statistic_report.GroupUnusualRenewRecord{
|
|
|
+ SellerId: v.AdminId,
|
|
|
+ SellerName: v.RealName,
|
|
|
+ CompanyRenewRecordNumList: tmpGroupCompanyRenewRecordNumList,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ // 汇总数据
|
|
|
+ for index, _ := range summaryList {
|
|
|
+ tmpCompanyIdList, ok := companyIdIndexMap[index]
|
|
|
+ if ok {
|
|
|
+ summaryList[index].UnusualRenewIds = strings.Join(tmpCompanyIdList, ",")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ companyRenewRecordResp.List = list
|
|
|
+ companyRenewRecordResp.SummaryList = summaryList
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = companyRenewRecordResp
|
|
|
+}
|