Browse Source

no message

xingzai 1 year ago
parent
commit
bbc8fdfdf0

+ 475 - 0
controllers/statistic_company_merge.go

@@ -0,0 +1,475 @@
+package controllers
+
+import (
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/models/response"
+	"hongze/hz_crm_api/services"
+	"strings"
+	//"hongze/hz_crm_api/services"
+	"hongze/hz_crm_api/utils"
+	"strconv"
+	//"strings"
+	"time"
+)
+
+// 统计报表模块下权益合同合并
+// StatisticReportController 统计报告基类
+type StatisticCompanyMergerController struct {
+	BaseAuthController
+}
+
+// IncrementalCompanyList
+// @Title 获取增量客户数据列表
+// @Description 获取增量客户数据列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   Keyword   query   string  true       "客户名称"
+// @Param   CompanyType   query   string  true       "客户类型:传空字符串或者不传为全部,'ficc','权益'"
+// @Param   AdminId   query   string  true       "销售id,多个用英文逗号隔开,空字符串为全部"
+// @Param   RegionType   query   string  false       "所属区域:传空字符串或者不传为全部,'国内','海外'"
+// @Param   StartDate   query   string  false       "开始日期"
+// @Param   EndDate   query   string  false       "结束日期"
+// @Param   DataType   query   string  false       "报表类型,枚举值:`新增试用`,`新签客户`,`续约客户`,`未续约客户`"
+// @Param   TryOutType   query   string  false       " '试用', '非试用' 非试用即为冻结/流失"
+// @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
+// @Param   IsConfirm   query   int  false       "是否确认续约: -1-默认全部; 0-待确认; 1-已确认"
+// @Param   CompanyAscribeId   query   int  false       "归因ID"
+// @Param   PackageDifference   query   string  false       "和上一份合同的区别,枚举值:`增加套餐`,`减少套餐`,`维持套餐`"
+// @Success 200 {object} response.IncrementalCompanyListResp
+// @router /merge_company_list [get]
+func (this *StatisticCompanyMergerController) IncrementalCompanyList() {
+	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")
+	regionType := this.GetString("RegionType")
+	companyType := this.GetString("CompanyType")
+	dataType := this.GetString("DataType")
+	tryOutType := this.GetString("TryOutType")
+	keyword := this.GetString("Keyword")
+
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+
+	isConfirm, _ := this.GetInt("IsConfirm", -1)
+	companyAscribeId, _ := this.GetInt("CompanyAscribeId", -1)
+	//if startDate == "" || endDate == "" {
+	//	br.Msg = "获取失败,开始日期或结束日期未传"
+	//	br.ErrMsg = "获取失败,开始日期或结束日期未传"
+	//	return
+	//}
+	if startDate == "" {
+		startDate = "2015-01-01"
+	}
+	if endDate == "" {
+		endDate = time.Now().Format(utils.FormatDate)
+	}
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	//是否导出报表
+	isExport, _ := this.GetBool("IsExport")
+	if isExport {
+		pageSize = 10000
+		currentIndex = 1
+	}
+
+	var condition string
+	var pars []interface{}
+
+	//条件
+	if adminId != "" {
+		condition += ` AND c.seller_id in  (` + adminId + `) `
+		//pars = append(pars, adminId)
+	} else {
+
+		//根据当前角色来获取查询条件
+		condition, pars = getQueryParams(condition, pars, sysUser, "c.")
+
+	}
+	if regionType != "" {
+		condition += ` AND b.region_type = ? `
+		pars = append(pars, regionType)
+	}
+	//关键字搜索
+	if keyword != "" {
+		condition += ` and b.company_name like "%` + keyword + `%" `
+	}
+
+	var conditionAscribRai string      // 处理权益未续约客户检索列表SQL查询条件
+	var conditionAscribRaiTotal string // 处理权益未续约客户总量查询条件
+	var parsAscribeRai []interface{}
+	var parsAscribeRaiTotal []interface{} // 处理权益未续约客户总量查询条件
+	var conditionConfirm string
+	var parsConfirm []interface{}
+
+	companyConfirmList, err := company.GetCompanyNoRenewedAscribeList(conditionConfirm, parsConfirm, 0, 0)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,GetCompanyNoRenewedAscribeList Err:" + err.Error()
+		return
+	}
+	var noRenewedcompanyIds []int //已经确定未续约的公司ID
+	if len(companyConfirmList) == 0 {
+		noRenewedcompanyIds = append(noRenewedcompanyIds, 0) // 给一个不存在的ID
+	} else {
+		for _, v := range companyConfirmList {
+			noRenewedcompanyIds = append(noRenewedcompanyIds, v.CompanyId)
+		}
+	}
+	//是否确认续约 CRM 13.9
+	conditionAscribRaiTotal += ` AND ( c.company_id IN (` + utils.GetOrmInReplace(len(noRenewedcompanyIds)) + `)   OR c.product_id = 1  OR  a.create_time <  '2023-01-01'  )   ` // 已确认
+	parsAscribeRaiTotal = append(parsAscribeRaiTotal, noRenewedcompanyIds)
+	if isConfirm != -1 {
+		if isConfirm == 0 {
+			conditionAscribRai += ` AND ( c.company_id NOT IN (` + utils.GetOrmInReplace(len(noRenewedcompanyIds)) + `)  AND  c.product_id = 2  AND  a.create_time >=  '2023-01-01' )  ` // 待确认
+		} else {
+			conditionAscribRai += ` AND ( c.company_id IN (` + utils.GetOrmInReplace(len(noRenewedcompanyIds)) + `)   OR c.product_id = 1  OR   a.create_time <  '2023-01-01' )    ` // 已确认
+		}
+		parsAscribeRai = append(parsAscribeRai, noRenewedcompanyIds)
+	}
+
+	//归因ID CRM 13.9
+	if companyAscribeId > 0 {
+		var conditionAscribe string
+		var parsAscribe []interface{}
+		conditionAscribe = "  AND  company_ascribe_id = ? "
+		parsAscribe = append(parsAscribe, companyAscribeId)
+		companyNoRenewedAscribeList, err := company.GetCompanyNoRenewedAscribeList(conditionAscribe, parsAscribe, 0, 0)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetCompanyNoRenewedAscribeList Err:" + err.Error()
+			return
+		}
+		var companyIds []int
+		if len(companyNoRenewedAscribeList) == 0 {
+			companyIds = append(companyIds, 0) // 给一个不存在的ID
+		} else {
+			for _, v := range companyNoRenewedAscribeList {
+				companyIds = append(companyIds, v.CompanyId)
+			}
+		}
+		conditionAscribRai += ` AND c.company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
+		parsAscribeRai = append(parsAscribeRai, companyIds)
+	}
+
+	switch companyType {
+	case "ficc":
+		condition += ` AND c.product_id = ? `
+		pars = append(pars, 1)
+	case "权益":
+		condition += ` AND c.product_id = ? `
+		pars = append(pars, 2)
+	case "":
+	default:
+		br.Msg = "获取失败,客户类型异常"
+		br.ErrMsg = "获取失败,客户类型异常"
+		return
+	}
+
+	var list []*models.IncrementalList
+	//moreListMap := make(map[int][]*models.IncrementalList)
+
+	var newCompanyTotal int //新签合同数量
+	var dataTotal, trialTotal, renewalCompanyTotal, notRenewalCompanyTotal int
+	var notRenewalTryOut, notRenewalNotTryOut int
+
+	//新签客户数
+	{
+		condition1 := condition
+		pars1 := pars
+		condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
+		pars1 = append(pars1, startDate, endDate)
+		condition1 += ` AND a.contract_type = ? `
+		pars1 = append(pars1, "新签合同")
+		newCompanyTotal, err = company.GetIncrementalNewCompanyProductMergeCount(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+
+		if dataType == "新签客户" {
+			//列表数据数量
+			total, err := company.GetIncrementalNewCompanyProductMergeCount(condition1, pars1)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+
+			//列表页数据
+			tmpList, err := models.GetIncrementalCompanyMergeList(condition1, pars1, startSize, pageSize)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			list = tmpList
+			dataTotal = total
+		}
+	}
+
+	//续约客户数
+	{
+		condition1 := condition
+		pars1 := pars
+		condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
+		pars1 = append(pars1, startDate, endDate)
+		condition1 += ` AND a.contract_type = ? `
+		pars1 = append(pars1, "续约合同")
+
+		////额外条件(续约合同的起始日期包含在所选时间段内且不包含在新签合同存续期内的客户)
+		//pars1 = append(pars1, endDate)
+
+		total, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		renewalCompanyTotal = total
+
+		if dataType == "续约客户" {
+			//列表数据数量
+			total, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			//列表页数据
+			tmpList, err := models.GetIncrementalCompanyMergeList(condition1, pars1, startSize, pageSize)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			list = tmpList
+			dataTotal = total
+
+			var ids []string
+			companyMap := make(map[int]*models.IncrementalList)
+			oldCompanyMap := make(map[int]*models.IncrementalList)
+			countMap := make(map[int]int)
+			for _, item := range tmpList {
+				ids = append(ids, strconv.Itoa(item.CompanyId))
+				companyMap[item.CompanyId] = item
+			}
+			if len(ids) > 0 {
+				idStr := strings.Join(ids, ",")
+				lists, err := models.GetLastContractMoney(idStr)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取失败,Err:" + err.Error()
+					return
+				}
+
+				for _, item := range lists {
+					_, countOk := countMap[item.CompanyId]
+					_, ok := oldCompanyMap[item.CompanyId]
+					if !ok {
+						oldCompanyMap[item.CompanyId] = item
+					} else if !countOk {
+						countMap[item.CompanyId] = 1
+						oldCompanyMap[item.CompanyId] = item
+					}
+				}
+				//给list赋值
+				for _, item := range list {
+					if item.ProductName == "权益" {
+						lastContract, _ := oldCompanyMap[item.CompanyId]
+						if item.Money > lastContract.Money {
+							item.PackageDifference = "增加套餐"
+						} else if item.Money < lastContract.Money {
+							item.PackageDifference = "减少套餐"
+						} else {
+							item.PackageDifference = "维持套餐"
+						}
+					}
+				}
+			}
+
+		}
+	}
+
+	//未续约客户数
+	{
+		condition1 := condition
+		pars1 := pars
+
+		endDateTime, err := time.Parse(utils.FormatDate, endDate)
+		if err != nil {
+			br.Msg = "结束时间异常"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		//选择的日期加一天的原因是因为:筛选条件是截止到时分秒的,如果要把选择的这一天也统计进去,那么需要在选择的结束日期基础上加上一天
+		tryOutEndDate := endDateTime.AddDate(0, 0, 1).Format(utils.FormatDate)
+
+		condition1 += ` AND a.create_time >= ? AND a.create_time < ? `
+		pars1 = append(pars1, startDate, tryOutEndDate)
+		condition1 += ` AND a.operation = ? `
+		pars1 = append(pars1, "try_out")
+		condition1 += ` AND c.status not in ("永续","正式","关闭")  `
+
+		//未续约这里只统计已经确定的
+		notRenewalCondition := condition1
+		notRenewalPars := pars1
+		notRenewalCondition += conditionAscribRaiTotal
+		notRenewalPars = append(notRenewalPars, parsAscribeRaiTotal)
+		total, err := models.GetIncrementalCompanyCountByOperationRecord(notRenewalCondition, notRenewalPars)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		notRenewalCompanyTotal = total
+
+		condition1 += conditionAscribRai
+		pars1 = append(pars1, parsAscribeRai)
+		if dataType == "未续约客户" {
+			//统计数据
+			for _, v := range []string{"试用", "非试用"} {
+				totalCondition1 := condition1
+				totalPars1 := pars1
+				var tmpTotal int
+				if v == "试用" {
+					totalCondition1 += ` AND c.status = "试用" `
+					tmpTotal, err = models.GetIncrementalCompanyProductCountByOperationRecord(totalCondition1, totalPars1)
+					if err != nil && err.Error() != utils.ErrNoRow() {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取失败,Err:" + err.Error()
+						return
+					}
+					notRenewalTryOut = tmpTotal
+				} else if v == "非试用" {
+					totalCondition1 += ` AND c.status IN ("冻结","流失") `
+					tmpTotal, err = models.GetIncrementalCompanyProductCountByOperationRecord(totalCondition1, totalPars1)
+					if err != nil && err.Error() != utils.ErrNoRow() {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取失败,Err:" + err.Error()
+						return
+					}
+					notRenewalNotTryOut = tmpTotal
+				}
+
+			}
+			//列表数据数量
+			if tryOutType == "试用" {
+				condition1 += ` AND c.status = "试用" `
+				total = notRenewalTryOut
+			} else if tryOutType == "非试用" {
+				condition1 += ` AND c.status IN ("冻结","流失") `
+				total = notRenewalNotTryOut
+			}
+
+			//total, err := models.GetIncrementalCompanyProductCountByOperationRecord(condition1, pars1)
+			//if err != nil && err.Error() != utils.ErrNoRow() {
+			//	br.Msg = "获取失败"
+			//	br.ErrMsg = "获取失败,Err:" + err.Error()
+			//	return
+			//}
+
+			//分页total单独计算
+			total, err = models.GetIncrementalCompanyProductCountByOperationRecord(condition1, pars1)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			//列表页数据
+			tmpList, err := models.GetIncrementalCompanyListByOperationRecord(condition1, pars1, startSize, pageSize)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+
+			var ascribecompanyIds []int
+			for _, item := range tmpList {
+				endDateTime, _ := time.Parse(utils.FormatDateTime, item.CreateTime)
+				item.EndDate = endDateTime.Format(utils.FormatDate)
+				ascribecompanyIds = append(ascribecompanyIds, item.CompanyId)
+			}
+			//归因标签
+			mapGetCompanyAscribeContent, mapContent := services.GetCompanyAscribeContentMap(ascribecompanyIds)
+			mapNoRenewedNote := services.GetCompanyNoRenewedNoteMap(ascribecompanyIds)
+
+			for _, item := range tmpList {
+				item.AscribeContent = mapGetCompanyAscribeContent[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
+				item.Content = mapContent[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
+				item.IsShowNoRenewedNote = mapNoRenewedNote[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
+			}
+
+			list = tmpList
+			dataTotal = total
+
+		}
+	}
+
+	listLen := len(list)
+
+	if listLen == 0 {
+		list = make([]*models.IncrementalList, 0)
+	}
+	for i := 0; i < listLen; i++ {
+		item := list[i]
+
+		//新增试用不需要计算剩余日期
+		if dataType != "新增试用" {
+			//剩余可用天数
+			endDateTime, _ := time.Parse(utils.FormatDate, item.EndDate)
+			endDateTime = endDateTime.AddDate(0, 0, 1)
+			sub := endDateTime.Sub(time.Now())
+			expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
+			list[i].ExpireDay = expireDay
+		}
+
+	}
+	page := paging.GetPaging(currentIndex, pageSize, dataTotal)
+	resp := response.IncrementalCompanyListResp{
+		Paging:                 page,
+		List:                   list,
+		TrialTotal:             trialTotal,
+		NewCompanyTotal:        newCompanyTotal,
+		RenewalCompanyTotal:    renewalCompanyTotal,
+		NotRenewalCompanyTotal: notRenewalCompanyTotal,
+		NotRenewalTryOut:       notRenewalTryOut,
+		NotRenewalNotTryOut:    notRenewalNotTryOut,
+	}
+	//fmt.Println()
+	//导出excel
+	if isExport {
+		//IncrementalCompanyListExport(this, dataType, resp, br)
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 112 - 0
models/company/company_contract_merge.go

@@ -3,6 +3,7 @@ package company
 import (
 	//"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"time"
 )
 
@@ -47,3 +48,114 @@ func MultiAddCompanyContractMerge(items []*CompanyContractMerge) (err error) {
 	_, err = o.InsertMulti(len(items), items)
 	return
 }
+
+// 增量客户统计报表列表数据结构
+type IncrementalList struct {
+	CompanyContractId   int                        `description:"合同id"`
+	ContractType        string                     `description:"合同类型"`
+	CompanyId           int                        `description:"企业客户id"`
+	CompanyName         string                     `description:"企业客户名称"`
+	ProductId           int                        `description:"产品id"`
+	ProductName         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:"归属销售名称"`
+	ExpireDay           string                     `description:"剩余可用天数"`
+	PermissionList      []*CompanyReportPermission `description:"产品权限"`
+	Count               int                        `json:"-" description:"合同数"`
+	RenewalReason       string                     `description:"未续约说明"`
+	RenewalTodo         string                     `description:"未续约说明中的待办事项说明"`
+	PackageDifference   string                     `description:"和上一份合同的区别"`
+	AscribeContent      string                     `description:"归因标签说明"`
+	IsShowNoRenewedNote bool                       `description:"是否展示未续约备注按钮"`
+	Content             string                     `description:"归因内容说明"`
+}
+
+// 增量客户统计报表返回类
+type IncrementalCompanyListResp struct {
+	List                   []*IncrementalList
+	Paging                 *paging.PagingItem `description:"分页数据"`
+	TrialTotal             int                `description:"新增试用客户数"`
+	NewCompanyTotal        int                `description:"新签客户数"`
+	RenewalCompanyTotal    int                `description:"续约客户数"`
+	NotRenewalCompanyTotal int                `description:"未续约客户数"`
+	NotRenewalTryOut       int                `description:"未续约客户(试用)数"`
+	NotRenewalNotTryOut    int                `description:"未续约客户(非试用)数"`
+}
+
+// GetIncrementalNewCompanyProductMergeCount 获取增量客户产品报表列表统计数据(根据合同来展示)
+func GetIncrementalNewCompanyProductMergeCount(condition string, pars []interface{}) (total int, err error) {
+	o := orm.NewOrm()
+
+	sql := `SELECT a.*,b.region_type,c.seller_id,c.seller_name,b.company_name FROM company_contract_merge 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 = `select count(1) count from (` + sql + ` group by company_id,product_id) f`
+	err = o.Raw(sql, pars).QueryRow(&total)
+	return
+}
+
+// GetIncrementalNewCompanyList 获取增量客户报表列表数据(根据合同来展示)
+func GetIncrementalNewCompanyMergeList(condition string, pars []interface{}, startSize, pageSize int) (items []*IncrementalList, err error) {
+	o := orm.NewOrm()
+
+	sql := `SELECT a.*,b.region_type,c.seller_id,c.seller_name,b.company_name,c.renewal_reason FROM company_contract_merge 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 += " order by a.start_date desc "
+	sql = `select *,count(*) count from (` + sql + `) b group by company_id,product_id  order by start_date desc,company_id desc limit ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+// GetIncrementalRenewalCompanyProductMergeCount 续约合同数量
+func GetIncrementalRenewalCompanyProductMergeCount(condition string, pars []interface{}) (total int, err error) {
+	o := orm.NewOrm()
+
+	sql := `SELECT a.*,b.region_type,c.seller_id,c.seller_name,b.company_name FROM company_contract_merge 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 = `select count(1) count from (` + sql + ` group by company_id,product_id) f`
+	err = o.Raw(sql, pars).QueryRow(&total)
+	return
+}
+
+// GetIncrementalRenewalCompanyMergeList续约合同列表
+func GetIncrementalRenewalCompanyMergeList(condition string, pars []interface{}, startSize, pageSize int) (items []*IncrementalList, err error) {
+	o := orm.NewOrm()
+
+	sql := `SELECT a.*,b.region_type,c.seller_id,c.seller_name,b.company_name,c.renewal_reason FROM company_contract_merge 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 += " order by a.start_date desc "
+	sql = `select *,count(*) count from (` + sql + `) b group by company_id,product_id  order by start_date desc,company_id desc limit ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 17 - 0
models/statistic_report.go

@@ -844,3 +844,20 @@ func GetLastContractMoney(CompanyIds string) (items []*IncrementalList, err erro
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+// GetIncrementalNewCompanyList 获取增量客户报表列表数据(根据合同来展示)
+func GetIncrementalCompanyMergeList(condition string, pars []interface{}, startSize, pageSize int) (items []*IncrementalList, err error) {
+	o := orm.NewOrm()
+
+	sql := `SELECT a.*,b.region_type,c.seller_id,c.seller_name,b.company_name,c.renewal_reason FROM company_contract_merge 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 += " order by a.start_date desc "
+	sql = `select *,count(*) count from (` + sql + `) b group by company_id,product_id  order by start_date desc,company_id desc limit ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 9 - 0
routers/commentsRouter.go

@@ -9853,6 +9853,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: "IncrementalCompanyList",
+            Router: `/merge_company_list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticReportController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticReportController"],
         beego.ControllerComments{
             Method: "InvoicePaymentList",

+ 1 - 0
routers/router.go

@@ -68,6 +68,7 @@ func init() {
 				&controllers.StatisticReportController{},
 				&controllers.StatisticYbLogController{},
 				&controllers.StatisticReportCommonController{},
+				&controllers.StatisticCompanyMergerController{},
 			),
 		),
 		web.NSNamespace("/voice",