xingzai 1 vuosi sitten
vanhempi
commit
57084768ca

+ 257 - 0
controllers/statistic_company_merge.go

@@ -1195,3 +1195,260 @@ func PermissionCompanyListListExport(this *StatisticCompanyMergerController, dat
 	br.Success = true
 	br.Msg = "导出成功"
 }
+
+// @Title 权益客户续约率统计
+// @Description 权益客户续约率统计接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   AdminId   query   string  true       "销售id,多个用英文逗号隔开,空字符串为全部"
+// @Param   StartDate   query   string  false       "开始日期"
+// @Param   EndDate   query   string  false       "结束日期"
+// @Param   ContractDataType   query   string  false       "合同类型,枚举值:`续约合同`,`到期合同`"
+// @Success 200 {object} response.IncrementalCompanyListResp
+// @router /merge_company/company_contract_percentage/list [get]
+func (this *StatisticCompanyMergerController) CompanyContractPercentageList() {
+	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
+	}
+
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	adminId := this.GetString("AdminId")
+	contractDataType := this.GetString("ContractDataType")
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+	if startDate == "" || endDate == "" {
+		br.Msg = "开始时间或结束时间不能为空"
+		return
+	}
+
+	if contractDataType == "" {
+		contractDataType = "续约合同"
+	}
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	var condition string
+	var pars []interface{}
+
+	//条件
+	if adminId != "" {
+		condition += ` AND c.seller_id in  (` + adminId + `) `
+	} else {
+		//根据当前角色来获取查询条件
+		condition, pars = getQueryParams(condition, pars, sysUser, "c.")
+	}
+
+	//权益有效合同
+	condition += ` AND c.product_id = 2   AND  a.status = 1 `
+
+	var list []*models.IncrementalList
+	var renewalRateMoney string        //合同金额续约率
+	var renewalRateMoneyContent string //合同金额续约率详情
+	var renewalRateTotal string        //合同数量续约率
+	var renewalRateTotalContent string //合同数量续约率详情
+	var renewalContractTotal int       //续约合同数量
+	var renewalContractMoney int       //续约合同数量
+	var expireRenewalContractTotal int //到期合同数量
+	var expireRenewalContractMoney int //到期合同数量
+	var dataTotal int                  //分页数据
+
+	conditionRenewal := condition // 续约合同查询条件查询条件
+	parsRenewal := pars
+	conditionRenewal += ` AND a.start_date >= ? AND a.start_date <= ? `
+	parsRenewal = append(parsRenewal, startDate, endDate)
+	conditionRenewal += ` AND a.rai_contract_type = ? `
+	parsRenewal = append(parsRenewal, "续约合同")
+	totalRenewal, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionRenewal, parsRenewal)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	totalMoneyRenewal, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionRenewal, parsRenewal)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	//续约合同查询条件查询条件 end
+
+	conditionRenewalEnd := condition // 今年结束的续约合同查询条件
+	parsRenewalEnd := pars
+	conditionRenewalEnd += ` AND a.end_date >= ? AND a.end_date <= ? `
+	parsRenewalEnd = append(parsRenewalEnd, startDate, endDate)
+	conditionRenewalEnd += ` AND a.rai_contract_type = ? `
+	parsRenewalEnd = append(parsRenewalEnd, "续约合同")
+	totalRenewalEnd, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionRenewalEnd, parsRenewalEnd)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	totalMoneyRenewalEnd, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionRenewalEnd, parsRenewalEnd)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	} // 今年结束的续约合同查询条件end
+
+	conditionNew := condition // 新签合同查询条件
+	parsNew := pars
+	conditionNew += ` AND a.end_date >= ? AND a.end_date <= ? `
+	parsNew = append(parsNew, startDate, endDate)
+	conditionNew += ` AND a.rai_contract_type = ? `
+	parsNew = append(parsNew, "新签合同")
+	totalNew, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionNew, parsNew)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	totalMoneyNew, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionNew, parsNew)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	} // 新签合同查询条件 end
+
+	//分子或者分母为零的时候,不做计算
+	if totalRenewal == 0 || totalNew+totalRenewalEnd == 0 {
+		renewalRateMoney = "0%"
+		renewalRateTotal = "0%"
+	} else {
+		renewalRateMoney = fmt.Sprint(utils.SubFloatToString(float64(totalMoneyRenewal)/float64(totalMoneyNew+totalMoneyRenewalEnd)*100, 2), "%")
+		renewalRateTotal = fmt.Sprint(utils.SubFloatToString(float64(totalRenewal)/float64(totalNew+totalRenewalEnd)*100, 2), "%")
+	}
+	renewalRateTotalContent = fmt.Sprint(totalMoneyRenewal/10000, "万元/", (totalMoneyNew+totalMoneyRenewalEnd)/10000, "万元")
+	renewalRateMoneyContent = fmt.Sprint(totalRenewal, "份/", totalNew+totalRenewalEnd, "份")
+
+	if contractDataType == "续约合同" {
+		condition1 := condition
+		pars1 := pars
+		condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
+		pars1 = append(pars1, startDate, endDate)
+		condition1 += ` AND a.rai_contract_type = ? `
+		pars1 = append(pars1, "续约合同")
+
+		total, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		totalMoney, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+
+		renewalContractTotal = total
+		renewalContractMoney = int(totalMoney)
+
+		//列表页数据
+		tmpList, err := models.GetIncrementalCompanyMergeList(condition1, pars1, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		list = tmpList
+		dataTotal = total
+	}
+
+	if contractDataType == "到期合同" {
+		condition1 := condition
+		pars1 := pars
+
+		//判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。并且当前这天的到期的合同,不查询
+		endDateTime, _ := time.Parse(utils.FormatDate, endDate)
+		if endDateTime.After(time.Now()) {
+			endDate = time.Now().Format(utils.FormatDate)
+			condition1 += ` AND a.end_date >= ? AND a.end_date < ? `
+		} else {
+			condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
+		}
+		pars1 = append(pars1, startDate, endDate)
+
+		total, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		totalMoney, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		expireRenewalContractTotal = total
+		expireRenewalContractMoney = int(totalMoney)
+
+		//列表页数据
+		tmpList, err := models.GetIncrementalCompanyMergeList(condition1, pars1, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		list = tmpList
+		dataTotal = total
+	}
+
+	listLen := len(list)
+	if listLen == 0 {
+		list = make([]*models.IncrementalList, 0)
+	}
+	var companyContractIds []int
+	for i := 0; i < listLen; i++ {
+		item := list[i]
+		companyContractIds = append(companyContractIds, item.CompanyContractId)
+	}
+
+	//合并合同所对应的权限
+	mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	for _, v := range list {
+		v.PermissionName = mappermissionName[v.CompanyContractId]
+	}
+	page := paging.GetPaging(currentIndex, pageSize, dataTotal)
+	resp := response.IncrementalCompanyPercentageListResp{
+		Paging:                     page,
+		RenewalContractTotal:       renewalContractTotal,
+		RenewalContractMoney:       renewalContractMoney,
+		ExpireRenewalContractTotal: expireRenewalContractTotal,
+		ExpireRenewalContractMoney: expireRenewalContractMoney,
+		RenewalRateMoney:           renewalRateMoney,
+		RenewalRateMoneyContent:    renewalRateMoneyContent,
+		RenewalRateTotal:           renewalRateTotal,
+		RenewalRateTotalContent:    renewalRateTotalContent,
+		List:                       list,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 19 - 0
models/company/company_contract_merge.go

@@ -94,3 +94,22 @@ func GetIncrementalNewCompanyProductPermissionCount(condition string, pars []int
 	err = o.Raw(sql, pars).QueryRow(&total)
 	return
 }
+
+// GetIncrementalRenewalCompanyProductMergeSumMoney 对于签约的合同金额进行求和运算
+func GetIncrementalRenewalCompanyProductMergeSumMoney(condition string, pars []interface{}) (total float64, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			SUM( a.money ) AS total 
+		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
+	}
+	err = o.Raw(sql, pars).QueryRow(&total)
+	return
+}

+ 14 - 0
models/response/statistic_report.go

@@ -129,3 +129,17 @@ type RenewReasonItemResp struct {
 type CompanyPreviousDetailResp struct {
 	Detail *models.IncrementalList
 }
+
+// 权益客户统计,续约率,返回类
+type IncrementalCompanyPercentageListResp struct {
+	Paging                     *paging.PagingItem `description:"分页数据"`
+	List                       []*models.IncrementalList
+	RenewalRateMoney           string `description:"合同金额续约率"`
+	RenewalRateMoneyContent    string `description:"合同金额续约率详情"`
+	RenewalRateTotal           string `description:"合同数量续约率"`
+	RenewalRateTotalContent    string `description:"合同数量续约率详情"`
+	RenewalContractTotal       int    `description:"续约合同数量"`
+	RenewalContractMoney       int    `description:"续约合同总金额"`
+	ExpireRenewalContractTotal int    `description:"到期合同数量"`
+	ExpireRenewalContractMoney int    `description:"到期合同总金额"`
+}

+ 9 - 0
routers/commentsRouter.go

@@ -10375,6 +10375,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"],
+        beego.ControllerComments{
+            Method: "CompanyContractPercentageList",
+            Router: `/merge_company/company_contract_percentage/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"],
         beego.ControllerComments{
             Method: "CompanyContractPermissionList",