|
@@ -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
|
|
|
+}
|