|
@@ -11,6 +11,9 @@ import (
|
|
|
cygxService "hongze/hz_crm_api/services/cygx"
|
|
|
"os"
|
|
|
"path/filepath"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+
|
|
|
//"hongze/hz_crm_api/services"
|
|
|
"hongze/hz_crm_api/utils"
|
|
|
//"strings"
|
|
@@ -204,7 +207,7 @@ func (this *StatisticCompanyMergerController) MergeCompanyList() {
|
|
|
pars1 := pars
|
|
|
condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
|
|
|
pars1 = append(pars1, startDate, endDate)
|
|
|
- condition1 += ` AND a.contract_type = ? `
|
|
|
+ condition1 += ` AND a.rai_contract_type = ? `
|
|
|
pars1 = append(pars1, "新签合同")
|
|
|
newCompanyTotal, err = company.GetIncrementalNewCompanyProductMergeCount(condition1, pars1)
|
|
|
if err != nil && err.Error() != utils.ErrNoRow() {
|
|
@@ -240,7 +243,7 @@ func (this *StatisticCompanyMergerController) MergeCompanyList() {
|
|
|
pars1 := pars
|
|
|
condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
|
|
|
pars1 = append(pars1, startDate, endDate)
|
|
|
- condition1 += ` AND a.contract_type = ? `
|
|
|
+ condition1 += ` AND a.rai_contract_type = ? `
|
|
|
pars1 = append(pars1, "续约合同")
|
|
|
////额外条件(续约合同的起始日期包含在所选时间段内且不包含在新签合同存续期内的客户)
|
|
|
//pars1 = append(pars1, endDate)
|
|
@@ -1195,3 +1198,339 @@ 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")
|
|
|
+ initendDate := this.GetString("EndDate")
|
|
|
+ if startDate == "" || endDate == "" {
|
|
|
+ br.Msg = "开始时间或结束时间不能为空"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果传的查询方式是今年,那么就以当前时间作为截止时间
|
|
|
+ //if endDate == strconv.Itoa(time.Now().Year())+"-12-31" {
|
|
|
+ // endDate = time.Now().Format(utils.FormatDate)
|
|
|
+ //}
|
|
|
+
|
|
|
+ //判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。
|
|
|
+ endDateTime, _ := time.Parse(utils.FormatDate, endDate)
|
|
|
+ if endDateTime.After(time.Now()) {
|
|
|
+ endDate = time.Now().Format(utils.FormatDate)
|
|
|
+ }
|
|
|
+ //fmt.Println("endDate", endDate)
|
|
|
+ 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(int(totalMoneyRenewal), "/", int(totalMoneyNew+totalMoneyRenewalEnd))
|
|
|
+ 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, initendDate)
|
|
|
+ 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 <= ? `
|
|
|
+ }
|
|
|
+
|
|
|
+ //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
|
|
|
+}
|
|
|
+
|
|
|
+// @Title 权益客户续约率统计所能查询的年份
|
|
|
+// @Description权益客户续约率统计所能查询的年份接口
|
|
|
+// @Success 200 {object} response.IncrementalCompanyListResp
|
|
|
+// @router /merge_company/get_year_list [get]
|
|
|
+func (this *StatisticCompanyMergerController) GetYearList() {
|
|
|
+ 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
|
|
|
+ }
|
|
|
+ thisYear := time.Now().Year()
|
|
|
+ startYear := 2022 //初始查询年份
|
|
|
+
|
|
|
+ resp := new(company.SearchYearListResp)
|
|
|
+ var yearList []int
|
|
|
+ for i := startYear; i <= thisYear; i++ {
|
|
|
+ yearList = append(yearList, i)
|
|
|
+ }
|
|
|
+ resp.List = yearList
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+func init213() {
|
|
|
+ var condition string
|
|
|
+ var pars []interface{}
|
|
|
+
|
|
|
+ condition = " AND rai_contract_type = '续约合同' AND product_id = 2 "
|
|
|
+
|
|
|
+ var companyContractIds []string
|
|
|
+ companyContractList, e := company.GetCompanyContractList(condition, pars)
|
|
|
+ if e != nil && e.Error() != utils.ErrNoRow() {
|
|
|
+ fmt.Println(e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range companyContractList {
|
|
|
+ fmt.Println(v.CompanyContractId)
|
|
|
+ startDateTime, _ := time.Parse(utils.FormatDate, v.StartDate)
|
|
|
+ startDateTime = startDateTime.AddDate(-1, 0, 0)
|
|
|
+ totalLastYear, err := company.GetCompanyContractCountRaiByLastYear(v.CompanyId, startDateTime.Format(utils.FormatDate))
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if totalLastYear > 0 {
|
|
|
+ companyContractIds = append(companyContractIds, strconv.Itoa(v.CompanyContractId))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fmt.Println("companyContractIds", len(companyContractIds))
|
|
|
+
|
|
|
+ fmt.Println(strings.Join(companyContractIds, ","))
|
|
|
+ err := company.UpdateCompanyContractRaiContractTypeInit(strings.Join(companyContractIds, ","))
|
|
|
+ fmt.Println(err)
|
|
|
+ return
|
|
|
+}
|