zhangchuanxing 4 päivää sitten
vanhempi
commit
bf28324b04

+ 61 - 18
controllers/statistic/rai_data_summary.go

@@ -232,13 +232,15 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 	for _, v := range companyConfirmList {
 		mapNoRenewedcompanyContractIds[v.CompanyContractId] = true
 	}
-
+	mapRenewedContractId := make(map[int]bool)                      // 出现在续约客户的合同
 	mapAddTrialNum := make(map[string]float64)                      // 新增试用-(数据)
 	mapNewContractMoney := make(map[string]float64)                 // 新签合同(金额)
 	mapNewContractNum := make(map[string]int)                       // 新签合同(数量)
 	mapExpiredContractMoney := make(map[string]float64)             // 到期合同(金额)
+	mapExpiredContractMoney2 := make(map[string]float64)            // 到期合同(金额)(处理永续合同使用)
 	mapExpiredContractNum := make(map[string]int)                   // 到期合同(数量)
 	mapExpiredContractCompanyNum := make(map[string]int)            // 到期公司(数量)
+	mapExpiredContractCompanyNum2 := make(map[string]int)           // 到期公司(数量)处理永续合同使用)
 	mapRenewedContractMoney := make(map[string]float64)             // 续约合同(金额)
 	mapRenewedContractNum := make(map[string]int)                   // 续约合同(数量)
 	mapRenewedContractCompanyNum := make(map[string]int)            // 续约公司(数量)
@@ -255,8 +257,10 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 	mapNewContractMoneyServer := make(map[string]float64)              // 新签合同(金额)
 	mapNewContractNumServer := make(map[string]int)                    // 新签合同(数量)
 	mapExpiredContractMoneyServer := make(map[string]float64)          // 到期合同(金额)
+	mapExpiredContractMoneyServer2 := make(map[string]float64)         // 到期合同(金额)(处理永续合同使用)
 	mapExpiredContractNumServer := make(map[string]int)                // 到期合同(数量)_服务组
 	mapExpiredContractCompanyNumServer := make(map[string]int)         // 到期公司(数量)_服务组
+	mapExpiredContractCompanyNumServer2 := make(map[string]int)        // 到期公司(数量)_服务组
 	mapRenewedContractMoneyServer := make(map[string]float64)          // 续约合同(金额)_服务组
 	mapRenewedContractNumServer := make(map[string]int)                // 续约合同(数量)_服务组
 	mapRenewedContractCompanyNumServer := make(map[string]int)         // 续约公司(数量)_服务组
@@ -375,12 +379,16 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 
 	//续约部分的数据(服务组)
 	for _, v := range listInheritData {
+
 		if len(serviceAdminIdArr) > 0 && !utils.InArrayByStr(serviceAdminIdArr, strconv.Itoa(v.ShareSellerIdInit)) {
 			continue
 		}
 		if !mapsellerService[v.ShareSellerIdInit] {
 			continue
 		}
+		if v.Status != "永续" || v.ContractType != "打分派点" {
+			mapRenewedContractId[v.CompanyContractId] = true
+		}
 		yearStr := getYearStar(utils.StrDateToDate(v.InheritEndDate), dataType, isCustomizeDate)
 
 		keyMap = fmt.Sprint(yearStr, "_Server_", v.ShareSellerIdInit)
@@ -436,6 +444,12 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 		mapExpiredContractMoney[keyMap] += v.Money
 		mapExpiredContractMoney[keyMapTtoal] += v.Money
 
+		//一份合同如果属于打分派点,并且当前状态是永续,同时还不属于续约合同,那就加在分子里面,如果是自定义的也可以进展示
+		if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
+			mapExpiredContractMoney2[keyMap] += v.Money
+			mapExpiredContractMoney2[keyMapTtoal] += v.Money
+		}
+
 		//一家公司同一个时间纬度,只统计一次
 		mapExpiredContractNum[keyMap]++
 		mapExpiredContractNum[keyMapTtoal]++
@@ -443,10 +457,16 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 		//一家公司同一个时间纬度,只统计一次
 		if !mapKeyMapCompanyEndData[keyMapCompany] {
 			mapExpiredContractCompanyNum[keyMap]++
+			if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
+				mapExpiredContractCompanyNum2[keyMap]++
+			}
 			mapKeyMapCompanyEndData[keyMapCompany] = true
 		}
 		if !mapKeyMapCompanyEndDataTotal[keyMapCompanyTotal] { //同一家共公司,在某个时段的多分合同下有不同的销售进行兼容
 			mapExpiredContractCompanyNum[keyMapTtoal]++
+			if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
+				mapExpiredContractCompanyNum2[keyMapCompanyTotal]++
+			}
 			mapKeyMapCompanyEndDataTotal[keyMapCompanyTotal] = true
 		}
 
@@ -484,6 +504,13 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 		//到期合同数据
 		mapExpiredContractMoneyServer[keyMap] += v.Money
 		mapExpiredContractMoneyServer[keyMapTtoal] += v.Money
+
+		//一份合同如果属于打分派点,并且当前状态是永续,同时还不属于续约合同,那就加在分子里面,如果是自定义的也可以进展示
+		if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
+			mapExpiredContractMoneyServer2[keyMap] += v.Money
+			mapExpiredContractMoneyServer2[keyMapTtoal] += v.Money
+		}
+
 		mapExpiredContractNumServer[keyMap]++
 		mapExpiredContractNumServer[keyMapTtoal]++
 
@@ -491,6 +518,11 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 		if !mapKeyMapCompanyEndData[keyMapCompany] {
 			mapExpiredContractCompanyNumServer[keyMap]++
 			mapExpiredContractCompanyNumServer[keyMapTtoal]++
+
+			if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
+				mapExpiredContractCompanyNumServer2[keyMap]++
+				mapExpiredContractCompanyNumServer2[keyMapTtoal]++
+			}
 			mapKeyMapCompanyEndData[keyMapCompany] = true
 		}
 
@@ -645,6 +677,8 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 	mapSortDateService := make(map[int]float64)
 	mapSortDateDevelop := make(map[int]float64)
 
+	fmt.Println("mapExpiredContractMoneyServer2", mapExpiredContractMoneyServer2)
+
 	for i := startYear; i <= endYear; i++ {
 		for _, Dv := range dataTypeArr {
 			item := new(statistic_report.RaiDataSummaryResp)
@@ -669,10 +703,10 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 				sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoney[keyMap], 2), " / ", mapRenewedContractNum[keyMap]) // "续约合同(金额/数量)-(数据)"
 				var renewalRateMoey string
 				var renewalRateNum string
-				if mapRenewedContractMoney[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
+				if mapRenewedContractMoney[keyMap]+mapExpiredContractMoney2[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
 					renewalRateMoey = "0%"
 				} else {
-					renewalRateMoey = utils.SubFloatToString(mapRenewedContractMoney[keyMap]/mapExpiredContractMoney[keyMap]*100, 2) + "%"
+					renewalRateMoey = utils.SubFloatToString((mapRenewedContractMoney[keyMap]+mapExpiredContractMoney2[keyMap])/mapExpiredContractMoney[keyMap]*100, 2) + "%"
 				}
 				if mapRenewedContractCompanyNum[keyMap] == 0 || mapExpiredContractCompanyNum[keyMap] == 0 {
 					renewalRateNum = "0%"
@@ -779,10 +813,10 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 				sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoney[keyMapTtoal], 2), " / ", mapRenewedContractNum[keyMapTtoal]) // "续约合同(金额/数量)-(数据)"
 				var renewalRateMoey string
 				var renewalRateNum string
-				if mapRenewedContractMoney[keyMapTtoal] == 0 || mapExpiredContractMoney[keyMapTtoal] == 0 {
+				if mapRenewedContractMoney[keyMapTtoal]+mapExpiredContractMoney2[keyMapTtoal] == 0 || mapExpiredContractMoney[keyMapTtoal] == 0 {
 					renewalRateMoey = "0%"
 				} else {
-					renewalRateMoey = utils.SubFloatToString(mapRenewedContractMoney[keyMapTtoal]/mapExpiredContractMoney[keyMapTtoal]*100, 2) + "%"
+					renewalRateMoey = utils.SubFloatToString((mapRenewedContractMoney[keyMapTtoal]+mapExpiredContractMoney2[keyMapTtoal])/mapExpiredContractMoney[keyMapTtoal]*100, 2) + "%"
 				}
 				if mapRenewedContractCompanyNum[keyMapTtoal] == 0 || mapExpiredContractCompanyNum[keyMapTtoal] == 0 {
 					renewalRateNum = "0%"
@@ -839,15 +873,15 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 				sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoneyServer[keyMap], 2), " / ", mapRenewedContractNumServer[keyMap]) // "续约合同(金额/数量)-(数据)"
 				var renewalRateMoey string
 				var renewalRateNum string
-				if mapRenewedContractMoneyServer[keyMap] == 0 || mapExpiredContractMoneyServer[keyMap] == 0 {
+				if mapRenewedContractMoneyServer[keyMap]+mapExpiredContractMoneyServer2[keyMap] == 0 || mapExpiredContractMoneyServer[keyMap] == 0 {
 					renewalRateMoey = "0%"
 				} else {
-					renewalRateMoey = utils.SubFloatToString(mapRenewedContractMoneyServer[keyMap]/mapExpiredContractMoneyServer[keyMap]*100, 2) + "%"
+					renewalRateMoey = utils.SubFloatToString((mapRenewedContractMoneyServer[keyMap]+mapExpiredContractMoneyServer2[keyMap])/mapExpiredContractMoneyServer[keyMap]*100, 2) + "%"
 				}
-				if mapRenewedContractCompanyNumServer[keyMap] == 0 || mapExpiredContractCompanyNumServer[keyMap] == 0 {
+				if mapRenewedContractCompanyNumServer[keyMap]+mapExpiredContractCompanyNumServer2[keyMap] == 0 || mapExpiredContractCompanyNumServer[keyMap] == 0 {
 					renewalRateNum = "0%"
 				} else {
-					renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNumServer[keyMap])/float64(mapExpiredContractCompanyNumServer[keyMap])*100, 2) + "%"
+					renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNumServer[keyMap]+mapExpiredContractCompanyNumServer2[keyMap])/float64(mapExpiredContractCompanyNumServer[keyMap])*100, 2) + "%"
 				}
 				sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum)                                                                                                            //"续约率(金额/数量)-(数据)"
 				sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.FormatNumberWithCommas(confirmedNoRenewalContractMoneyServer[keyMap], 2), " / ", confirmedNoRenewalContractNumServer[keyMap]) //"确认不续约合同(金额/数量)-(数据)"
@@ -950,15 +984,15 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 				sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoneyServer[keyMapTtoalServer], 2), " / ", mapRenewedContractNumServer[keyMapTtoalServer]) // "续约合同(金额/数量)-(数据)"
 				var renewalRateMoey string
 				var renewalRateNum string
-				if mapRenewedContractMoneyServer[keyMapTtoalServer] == 0 || mapExpiredContractMoneyServer[keyMapTtoalServer] == 0 {
+				if mapRenewedContractMoneyServer[keyMapTtoalServer]+mapExpiredContractMoneyServer2[keyMapTtoalServer] == 0 || mapExpiredContractMoneyServer[keyMapTtoalServer] == 0 {
 					renewalRateMoey = "0%"
 				} else {
-					renewalRateMoey = utils.SubFloatToString(mapRenewedContractMoneyServer[keyMapTtoalServer]/mapExpiredContractMoneyServer[keyMapTtoalServer]*100, 2) + "%"
+					renewalRateMoey = utils.SubFloatToString((mapRenewedContractMoneyServer[keyMapTtoalServer]+mapExpiredContractMoneyServer2[keyMapTtoalServer])/mapExpiredContractMoneyServer[keyMapTtoalServer]*100, 2) + "%"
 				}
-				if mapRenewedContractCompanyNumServer[keyMapTtoalServer] == 0 || mapExpiredContractCompanyNumServer[keyMapTtoalServer] == 0 {
+				if mapRenewedContractCompanyNumServer[keyMapTtoalServer]+mapExpiredContractCompanyNumServer2[keyMapTtoalServer] == 0 || mapExpiredContractCompanyNumServer[keyMapTtoalServer] == 0 {
 					renewalRateNum = "0%"
 				} else {
-					renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNumServer[keyMapTtoalServer])/float64(mapExpiredContractCompanyNumServer[keyMapTtoalServer])*100, 2) + "%"
+					renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNumServer[keyMapTtoalServer]+mapExpiredContractCompanyNumServer2[keyMapTtoalServer])/float64(mapExpiredContractCompanyNumServer[keyMapTtoalServer])*100, 2) + "%"
 				}
 				sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum)                                                                                                                                  //"续约率(金额/数量)-(数据)"
 				sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.FormatNumberWithCommas(confirmedNoRenewalContractMoneyServer[keyMapTtoalServer], 2), " / ", confirmedNoRenewalContractNumServer[keyMapTtoalServer]) //"确认不续约合同(金额/数量)-(数据)"
@@ -1415,16 +1449,19 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryDetail() {
 		var renewedContractCompany float64 // 续约客户数
 		maprenewedContractCompany := make(map[int]bool)
 
-		var expiredContractMoney float64   //到期金额
-		var expiredContractCompany float64 // 到期客户数
+		var expiredContractMoney float64    //到期金额
+		var expiredContractMoney2 float64   //到期金额
+		var expiredContractCompany float64  // 到期客户数
+		var expiredContractCompany2 float64 // 到期客户数
 		mapexpiredContractCompany := make(map[int]bool)
-
+		mapRenewedContractId := make(map[int]bool) // 出现在续约客户的合同
 		for _, v := range listRaiData {
 			renewedContractMoney += v.Money
 			if !maprenewedContractCompany[v.CompanyId] {
 				renewedContractCompany++
 				maprenewedContractCompany[v.CompanyId] = true
 			}
+			mapRenewedContractId[v.CompanyContractId] = true
 			//startDateTime := utils.StrDateToDate(v.StartDate)
 			//if startDateTime.Before(time.Now().AddDate(0, 0, -1)) { //到期合同数据
 			//	expiredContractMoney += v.Money
@@ -1437,12 +1474,18 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryDetail() {
 
 		for _, v := range listEndData {
 			expiredContractMoney += v.Money
+			if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
+				expiredContractMoney2 += v.Money
+			}
 			if !mapexpiredContractCompany[v.CompanyId] {
 				expiredContractCompany++
+				if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
+					expiredContractCompany2++
+				}
 				mapexpiredContractCompany[v.CompanyId] = true
 			}
 		}
-
+		renewedContractMoney += expiredContractMoney2
 		item := new(statistic_report.RaiDataSummaryDetailResp)
 		item.TbaleNameAText = "金额续约率"
 		item.RenewedContractMoney = fmt.Sprint(utils.SubFloatToString(renewedContractMoney, 2))
@@ -1454,7 +1497,7 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryDetail() {
 		}
 
 		listResp = append(listResp, item)
-
+		renewedContractCompany += expiredContractCompany2
 		item2 := new(statistic_report.RaiDataSummaryDetailResp)
 		item2.TbaleNameAText = "客户续约率"
 		item2.RenewedContractMoney = fmt.Sprint(renewedContractCompany)

+ 8 - 2
models/statistic_report/rai_data_summary.go

@@ -92,6 +92,7 @@ type IncrementalList struct {
 	RaiContractType   string `description:"权益合同类型:枚举值:'新签合同','续约合同','补充协议'"`
 	InheritEndDate    string `description:"所继承上一份合同的结束日期,权益自定义续约合同统计使用"`
 	DueEndDate        string `description:"所继承上一份合同的结束日期,权益自定义到期合同统计使用"`
+	RaiCountShowType  int    `description:"权益是否进行统计,0否,1是,默认0"`
 }
 
 // GetRaiDataSummaryList 获取增量客户报表列表数据(根据合同来展示)
@@ -104,6 +105,7 @@ func GetRaiDataSummaryList(condition string, pars []interface{}) (items []*Incre
 			   a.money,
 			   a.company_id,
 			   a.rai_contract_type,
+			   a.contract_type,
 			   a.seller_id_init,
 			   a.seller_name_init,
 			   a.share_seller_init,
@@ -111,7 +113,9 @@ func GetRaiDataSummaryList(condition string, pars []interface{}) (items []*Incre
 			   a.seller_id_last,
 			   a.seller_name_last, 
 			   a.share_seller_last,
-			   a.share_seller_id_last
+			   a.share_seller_id_last,
+			   a.rai_count_show_type,
+			   c.status
        FROM company_contract a
     	INNER JOIN  company_product c ON a.company_id = c.company_id and a.product_id=c.product_id and  c.product_id = 2 
 	   JOIN company b ON a.company_id = b.company_id
@@ -133,6 +137,7 @@ func GetRaiDataSummaryInheritList(condition string, pars []interface{}) (items [
 			   a.company_contract_id,
 			   a.money,
 		       a.company_id,
+			   a.contract_type,
 			   a.rai_contract_type,
 			   a.seller_id_init,
 			   a.seller_name_init,
@@ -141,7 +146,8 @@ func GetRaiDataSummaryInheritList(condition string, pars []interface{}) (items [
 			   a.seller_id_last,
 			   a.seller_name_last, 
 			   a.share_seller_last,
-			   a.share_seller_id_last
+			   a.rai_count_show_type,
+			   c.status
        FROM company_contract a
 	   JOIN company b ON a.company_id = b.company_id
 	   JOIN company_product c ON a.company_id = c.company_id and a.product_id=c.product_id WHERE 1 = 1 `