|
@@ -4,9 +4,13 @@ import (
|
|
|
"fmt"
|
|
|
"hongze/hz_crm_api/controllers"
|
|
|
"hongze/hz_crm_api/models"
|
|
|
+ "hongze/hz_crm_api/models/company"
|
|
|
"hongze/hz_crm_api/models/statistic_report"
|
|
|
"hongze/hz_crm_api/models/system"
|
|
|
+ "hongze/hz_crm_api/utils"
|
|
|
+ "strconv"
|
|
|
"strings"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
// 权益数据汇总
|
|
@@ -48,12 +52,20 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
endYear, _ := this.GetInt("EndYear")
|
|
|
|
|
|
dataTypeArr := []string{}
|
|
|
+ var dateIntervalArr []statistic_report.DateInterval //时间区间
|
|
|
if dataType == "季度" {
|
|
|
dataTypeArr = []string{"Q1", "Q2", "Q3", "Q4"}
|
|
|
+ dateIntervalArr = []statistic_report.DateInterval{statistic_report.DateInterval{StartDate: "01-01", EndDate: "03-31"}, statistic_report.DateInterval{StartDate: "04-01", EndDate: "06-30"}, statistic_report.DateInterval{StartDate: "07-01", EndDate: "09-30"}, statistic_report.DateInterval{StartDate: "10-01", EndDate: "12-31"}}
|
|
|
} else if dataType == "半年度" {
|
|
|
dataTypeArr = []string{"H1", "H2"}
|
|
|
+ dateIntervalArr = []statistic_report.DateInterval{statistic_report.DateInterval{StartDate: "01-01", EndDate: "06-30"}, statistic_report.DateInterval{StartDate: "07-01", EndDate: "12-31"}}
|
|
|
} else {
|
|
|
dataTypeArr = []string{""}
|
|
|
+ dateIntervalArr = []statistic_report.DateInterval{statistic_report.DateInterval{StartDate: "01-01", EndDate: "12-31"}}
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range dateIntervalArr {
|
|
|
+ fmt.Println(v)
|
|
|
}
|
|
|
|
|
|
condition := " AND role_type_code IN ('rai_seller','rai_group') AND enabled = 1 AND rai_enabled = 1"
|
|
@@ -65,6 +77,88 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ //拼接起始时间查询
|
|
|
+ startData := fmt.Sprintf("%d-01-01", startYear)
|
|
|
+ endData := fmt.Sprintf("%d-12-31", endYear)
|
|
|
+
|
|
|
+ var conditionRai string
|
|
|
+ var parsRai []interface{}
|
|
|
+ conditionRai = " AND a.product_id = 2 AND a.status = 1 AND a.start_date >= ? AND a.start_date <= ? "
|
|
|
+ parsRai = append(parsRai, startData, endData)
|
|
|
+ listRaiData, err := statistic_report.GetRaiDataSummaryList(conditionRai, parsRai)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取数据信息失败"
|
|
|
+ br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var conditionConfirm string
|
|
|
+ var parsConfirm []interface{}
|
|
|
+ mapNoRenewedcompanyContractIds := make(map[int]bool) //已经确定未续约的合同ID
|
|
|
+ conditionConfirm = " AND company_ascribe_id != 9 "
|
|
|
+ companyConfirmList, err := company.GetCompanyContractNoRenewedAscribeList(conditionConfirm, parsConfirm, 0, 0)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取失败,GetCompanyNoRenewedAscribeList Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range companyConfirmList {
|
|
|
+ mapNoRenewedcompanyContractIds[v.CompanyContractId] = true
|
|
|
+ }
|
|
|
+
|
|
|
+ mapNewContractMoney := make(map[string]float64) // 新签合同(金额)
|
|
|
+ mapNewContractNum := make(map[string]int) // 新签合同(数量)
|
|
|
+ expiredContractMoney := make(map[string]float64) // 到期合同(金额)
|
|
|
+ expiredContractNum := make(map[string]int) // 到期合同(数量)
|
|
|
+ renewedContractMoney := make(map[string]float64) // 续约合同(金额)
|
|
|
+ renewedContractNum := make(map[string]int) // 续约合同(数量)
|
|
|
+
|
|
|
+ confirmedNoRenewalContractMoney := make(map[string]float64) // 确认不续约合同(金额)
|
|
|
+ confirmedNoRenewalContractNum := make(map[string]int) // 确认不续约合同(数量)
|
|
|
+ for _, v := range listRaiData {
|
|
|
+ startDateTime := utils.StrDateToDate(v.StartDate)
|
|
|
+ monthNum := startDateTime.Month()
|
|
|
+ yearStr := strconv.Itoa(startDateTime.Year())
|
|
|
+ if dataType == "季度" {
|
|
|
+ if monthNum < 4 {
|
|
|
+ yearStr += "Q1"
|
|
|
+ } else if monthNum > 3 && monthNum < 7 {
|
|
|
+ yearStr += "Q2"
|
|
|
+ } else if monthNum > 6 && monthNum < 10 {
|
|
|
+ yearStr += "Q3"
|
|
|
+ } else if monthNum > 9 {
|
|
|
+ yearStr += "Q4"
|
|
|
+ }
|
|
|
+ } else if dataType == "半年度" {
|
|
|
+ if monthNum < 7 {
|
|
|
+ yearStr += "H1"
|
|
|
+ } else {
|
|
|
+ yearStr += "H2"
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ keyMap := fmt.Sprint(yearStr, "_", v.SellerIdLast)
|
|
|
+
|
|
|
+ if v.RaiContractType == "新签合同" {
|
|
|
+ mapNewContractMoney[keyMap] += v.Money
|
|
|
+ mapNewContractNum[keyMap]++
|
|
|
+ } else if v.RaiContractType == "续约合同" {
|
|
|
+ renewedContractMoney[keyMap] += v.Money
|
|
|
+ renewedContractNum[keyMap]++
|
|
|
+ }
|
|
|
+
|
|
|
+ if startDateTime.Before(time.Now().AddDate(0, 0, -1)) { //到期合同数据
|
|
|
+ expiredContractMoney[keyMap] += v.Money
|
|
|
+ expiredContractNum[keyMap]++
|
|
|
+ }
|
|
|
+
|
|
|
+ if mapNoRenewedcompanyContractIds[v.CompanyContractId] { // 确认不续约合同
|
|
|
+ confirmedNoRenewalContractMoney[keyMap] += v.Money
|
|
|
+ confirmedNoRenewalContractNum[keyMap]++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fmt.Println(time.Now().AddDate(0, 0, -1))
|
|
|
+ //return
|
|
|
var sellerDevelop []*system.AdminItem // 开拓组销售
|
|
|
var sellerService []*system.AdminItem // 服务组销售
|
|
|
for _, v := range sellerList {
|
|
@@ -73,7 +167,6 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
} else {
|
|
|
sellerDevelop = append(sellerDevelop, v)
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
resp := new(statistic_report.RaiDataSummaryListResp)
|
|
@@ -84,15 +177,42 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
item := new(statistic_report.RaiDataSummaryResp)
|
|
|
item.DataType = fmt.Sprint(i, Dv)
|
|
|
for _, vS := range sellerDevelop {
|
|
|
+ keyMap := fmt.Sprint(item.DataType, "_", vS.AdminId)
|
|
|
sellerItem := new(statistic_report.RaiDataSummaryDetail)
|
|
|
sellerItem.SellerName = vS.RealName
|
|
|
sellerItem.AddTrialCount = "新增试用-(数据)"
|
|
|
- sellerItem.NewContractData = "新签合同(金额/数量)-(数据)"
|
|
|
- sellerItem.ExpiredContractData = "到期合同(金额/数量)-(数据)"
|
|
|
- sellerItem.RenewedContractData = "续约合同(金额/数量)-(数据)"
|
|
|
- sellerItem.RenewalRateData = "续约率(金额/数量)-(数据)"
|
|
|
- sellerItem.ConfirmedNoRenewalContractData = "确认不续约合同(金额/数量)-(数据)"
|
|
|
- sellerItem.ConfirmNonRenewalRateData = "确认不续约率(金额/数量)-(数据)"
|
|
|
+ sellerItem.NewContractData = fmt.Sprint(utils.SubFloatToString(mapNewContractMoney[keyMap], 2), "/", mapNewContractNum[keyMap]) // 新签合同(金额/数量)-(数据)
|
|
|
+ sellerItem.ExpiredContractData = fmt.Sprint(utils.SubFloatToString(expiredContractMoney[keyMap], 2), "/", expiredContractNum[keyMap]) //"到期合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.RenewedContractData = fmt.Sprint(utils.SubFloatToString(renewedContractMoney[keyMap], 2), "/", renewedContractNum[keyMap]) // "续约合同(金额/数量)-(数据)"
|
|
|
+ var renewalRateMoey string
|
|
|
+ var renewalRateNum string
|
|
|
+ if renewedContractMoney[keyMap] == 0 || expiredContractMoney[keyMap] == 0 {
|
|
|
+ renewalRateMoey = "0%"
|
|
|
+ } else {
|
|
|
+ renewalRateMoey = utils.SubFloatToString(renewedContractMoney[keyMap]/expiredContractMoney[keyMap]*100, 2) + "%"
|
|
|
+ }
|
|
|
+ if renewedContractNum[keyMap] == 0 || expiredContractNum[keyMap] == 0 {
|
|
|
+ renewalRateNum = "0%"
|
|
|
+ } else {
|
|
|
+ renewalRateNum = utils.SubFloatToString(float64(renewedContractNum[keyMap])/float64(expiredContractNum[keyMap])*100, 2) + "%"
|
|
|
+ }
|
|
|
+ sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, "/", renewalRateNum) //"续约率(金额/数量)-(数据)"
|
|
|
+ sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.SubFloatToString(confirmedNoRenewalContractMoney[keyMap], 2), "/", confirmedNoRenewalContractNum[keyMap]) //"确认不续约合同(金额/数量)-(数据)"
|
|
|
+
|
|
|
+ var confirmNonRenewalRateMoey string
|
|
|
+ var confirmNonRenewalRateNum string
|
|
|
+ if confirmedNoRenewalContractMoney[keyMap] == 0 || expiredContractMoney[keyMap] == 0 {
|
|
|
+ confirmNonRenewalRateMoey = "0%"
|
|
|
+ } else {
|
|
|
+ confirmNonRenewalRateMoey = utils.SubFloatToString(confirmedNoRenewalContractMoney[keyMap]/expiredContractMoney[keyMap]*100, 2) + "%"
|
|
|
+ }
|
|
|
+ if confirmedNoRenewalContractNum[keyMap] == 0 || expiredContractNum[keyMap] == 0 {
|
|
|
+ confirmNonRenewalRateNum = "0%"
|
|
|
+ } else {
|
|
|
+ confirmNonRenewalRateNum = utils.SubFloatToString(float64(confirmedNoRenewalContractNum[keyMap])/float64(expiredContractNum[keyMap])*100, 2) + "%"
|
|
|
+ }
|
|
|
+ sellerItem.ConfirmNonRenewalRateData = fmt.Sprint(confirmNonRenewalRateMoey, "/", confirmNonRenewalRateNum) //确认不续约率(金额/数量)-(数据)"
|
|
|
+
|
|
|
sellerItem.SignedClientCount = "签约客户数量-(数据)"
|
|
|
sellerItem.AverageRevenueCount = "客单价-(数据)"
|
|
|
sellerItem.InvoiceAmountCount = "开票金额-(数据)"
|