Browse Source

no message

zhangchuanxing 3 weeks ago
parent
commit
0a9f6cab5f
2 changed files with 214 additions and 7 deletions
  1. 127 7
      controllers/statistic/rai_data_summary.go
  2. 87 0
      models/statistic_report/rai_data_summary.go

+ 127 - 7
controllers/statistic/rai_data_summary.go

@@ -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 = "开票金额-(数据)"

+ 87 - 0
models/statistic_report/rai_data_summary.go

@@ -1,5 +1,16 @@
 package statistic_report
 
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hz_crm_api/models/company"
+)
+
+// 时间区间数据结构
+type DateInterval struct {
+	StartDate string `description:"合同开始日期"`
+	EndDate   string `description:"合同结束日期"`
+}
+
 type RaiDataSummaryListResp struct {
 	List []*RaiDataSummaryResp
 }
@@ -26,3 +37,79 @@ type RaiDataSummaryDetail struct {
 	NewCustomerInvoicingCount        string `description:"新客开票"`
 	NewCustomerPaymentsReceivedCount string `description:"新客到款"`
 }
+
+// 增量客户统计报表列表数据结构
+type IncrementalList struct {
+	CompanyContractId    int                                `description:"合同id"`
+	ContractType         string                             `description:"合同类型"`
+	CompanyId            int                                `description:"企业客户id"`
+	CompanyName          string                             `description:"企业客户名称"`
+	ProductId            int                                `description:"产品id"`
+	ProductName          string                             `description:"产品名称"`
+	ProductStatus        string                             `description:"产品名称"`
+	CompanyProductId     int                                `description:"客户购买产品授权id"`
+	ContractCode         string                             `description:"合同编码"`
+	StartDate            string                             `description:"合同开始日期"`
+	EndDate              string                             `description:"合同结束日期"`
+	Money                float64                            `description:"合同金额"`
+	PayMethod            string                             `description:"付款方式"`
+	PayChannel           string                             `description:"付款渠道"`
+	ImgUrl               string                             `description:"合同图片"`
+	CreateTime           string                             `description:"合同创建时间"`
+	ModifyTime           string                             `description:"合同修改时间"`
+	Status               string                             `description:"合同审批状态,0:待审批,1:已审批;默认:1"`
+	RegionType           string                             `description:"企业客户所属区域;可选范围:国内,海外"`
+	SellerId             int                                `description:"归属销售id"`
+	SellerName           string                             `description:"归属销售名称"`
+	SellerNameLast       string                             `description:"合同到期之前最后所属归属销售名称"`
+	ShareSeller          string                             `description:"合同到期之前最后所属共享销售员"`
+	ShareSellerLast      string                             `description:"共享销售员"`
+	ExpireDay            string                             `description:"剩余可用天数"`
+	PermissionList       []*company.CompanyReportPermission `description:"产品权限"`
+	Count                int                                `json:"-" description:"合同数"`
+	RenewalReason        string                             `description:"未续约说明"`
+	RenewalTodo          string                             `description:"未续约说明中的待办事项说明"`
+	PackageDifference    string                             `description:"和上一份合同的区别"`
+	AscribeContent       string                             `description:"归因标签说明"`
+	IsShowNoRenewedNote  bool                               `description:"是否展示未续约备注按钮"`
+	Content              string                             `description:"归因内容说明"`
+	PermissionName       string                             `description:"权限名"`
+	PermissionNameExport string                             `description:"权限名导出时使用"`
+	PermissionNameStatus string                             `description:"权限状态"`
+	CompanyProductStatus string                             `description:"客户状态"`
+	//CompanyContractIdGroup string                             `description:"表company_contract合并的 company_contract_id"`
+	IsUserMaker     int    `description:"近四周之内是否包含决策人互动过 ,0否,1是"`
+	SellerNameInit  string `description:"权益初始化销售"`
+	SellerIdInit    int    `description:"权益初始化销售ID"`
+	SellerIdLast    int    `description:"合同到期之前最后所属销售ID"`
+	ShareSellerInit string `description:"共享销售员"`
+	SysRealName     string `description:"操作者名称"`
+	Operation       string `description:"操作"`
+	RaiContractType string `description:"权益合同类型:枚举值:'新签合同','续约合同','补充协议'"`
+}
+
+// GetRaiDataSummaryList 获取增量客户报表列表数据(根据合同来展示)
+func GetRaiDataSummaryList(condition string, pars []interface{}) (items []*IncrementalList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT a.start_date,
+			   a.end_date,
+			   a.money,
+			   a.rai_contract_type,
+			   a.seller_id_init,
+			   a.seller_name_init,
+			   a.share_seller_init,
+			   a.share_seller_id_init,
+			   a.seller_id_last,
+			   a.seller_name_last, 
+			   a.share_seller_last,
+			   a.share_seller_id_last
+       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 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` group by a.company_contract_id  order by a.start_date desc,a.company_id desc `
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}