Browse Source

Merge branch 'master' of http://8.136.199.33:3000/hongze/hz_crm_api into cygx/mfyx_1.0

xingzai 1 year ago
parent
commit
e9081b9e93

+ 58 - 1
controllers/company_apply_v2.go

@@ -79,7 +79,7 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 	}
 	mapPermissionIdUpgrade := make(map[int]int, 0)
 	mapPermissionIdExpensive := make(map[int]int, 0)
-
+	var raicontractType string
 	if productId == 2 {
 		// CRM13.3改-是否为权益内部人员, 非权益内部人员只能勾选行业不能勾选单独的主客观, 勾选行业(即勾选主观的ID需要加入客观的权限ID)
 		isRai, e := services.CheckRaiAdmin(sysUser.AdminId)
@@ -97,6 +97,23 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 			return
 		}
 		req.PermissionIds = permissionIdsNew
+
+		//权益的新签合同重新定义,如果合同起始时间在新签合同起始日期 1年之内的,仍为新签合同。
+		raicontractType = req.ContractType
+		if raicontractType != "新签合同" {
+			startDateTime, _ := time.Parse(utils.FormatDate, req.StartDate)
+			startDateTime = startDateTime.AddDate(-1, 0, 0)
+			totalLastYear, err := company.GetCompanyContractCountRaiByLastYear(req.CompanyId, startDateTime.Format(utils.FormatDate))
+			if err != nil {
+				br.Msg = "获取合同信息失败"
+				br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
+				return
+			}
+			if totalLastYear > 0 {
+				raicontractType = "新签合同"
+			}
+		}
+
 	} else {
 		permissionStr, err := company.GetPermissionIdById(req.PermissionIds)
 		if err != nil {
@@ -217,6 +234,7 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 		contract.ProductName = companyProduct.ProductName
 		contract.CompanyProductId = companyProduct.CompanyProductId
 		contract.ContractType = req.ContractType
+		contract.RaiContractType = raicontractType
 		contract.ContractCode = contractCode
 		contract.StartDate = req.StartDate
 		contract.EndDate = req.EndDate
@@ -568,6 +586,7 @@ func (this *CompanyApplyController) ApplyTurnPositive() {
 
 	// 合同类型
 	contractType := req.ContractType
+	var raicontractType string // 权益合同类型
 	{
 		if contractType == "" {
 			contractType = "新签合同"
@@ -588,6 +607,24 @@ func (this *CompanyApplyController) ApplyTurnPositive() {
 			contractType = "续约合同"
 		}
 
+		if productId == 2 {
+			//权益的新签合同重新定义,如果合同起始时间在新签合同起始日期 1年之内的,仍为新签合同。
+			raicontractType = contractType
+			if raicontractType != "新签合同" {
+				startDateTime, _ := time.Parse(utils.FormatDate, req.StartDate)
+				startDateTime = startDateTime.AddDate(-1, 0, 0)
+				totalLastYear, err := company.GetCompanyContractCountRaiByLastYear(req.CompanyId, startDateTime.Format(utils.FormatDate))
+				if err != nil {
+					br.Msg = "获取合同信息失败"
+					br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
+					return
+				}
+				if totalLastYear > 0 {
+					raicontractType = "新签合同"
+				}
+			}
+		}
+
 		// 若上面的判断不是续约合同, 则继续查询是否存在正式转试用的记录,如果存在,那么合同类型是续约合同
 		if contractType != "续约合同" {
 			total, e := company.GetCompanyProductOperationRecordCount(companyProduct.CompanyId, companyProduct.ProductId)
@@ -634,6 +671,7 @@ func (this *CompanyApplyController) ApplyTurnPositive() {
 		contract.CompanyId = req.CompanyId
 		contract.ProductId = productId
 		contract.ContractType = contractType
+		contract.RaiContractType = raicontractType
 		contract.ProductName = companyProduct.ProductName
 		contract.CompanyProductId = companyProduct.CompanyProductId
 		contract.ContractCode = contractCode
@@ -1081,6 +1119,24 @@ func (this *CompanyApplyController) ApplyBySystemContract() {
 		}
 	}
 
+	var raicontractType string
+	if productId == 2 {
+		//权益的新签合同重新定义,如果合同起始时间在新签合同起始日期 1年之内的,仍为新签合同。
+		raicontractType = contractType
+		if raicontractType != "新签合同" {
+			startDateTime := contractDetail.StartDate.AddDate(-1, 0, 0)
+			totalLastYear, err := company.GetCompanyContractCountRaiByLastYear(req.CompanyId, startDateTime.Format(utils.FormatDate))
+			if err != nil {
+				br.Msg = "获取合同信息失败"
+				br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
+				return
+			}
+			if totalLastYear > 0 {
+				raicontractType = "新签合同"
+			}
+		}
+	}
+
 	var companyApprovalId int
 	if req.CompanyApprovalId <= 0 {
 		//当前是否存在待审批的单子
@@ -1105,6 +1161,7 @@ func (this *CompanyApplyController) ApplyBySystemContract() {
 			CompanyId:        req.CompanyId,
 			ProductId:        contractDetail.ProductId,
 			ContractType:     contractType,
+			RaiContractType:  raicontractType,
 			ProductName:      companyProduct.ProductName,
 			CompanyProductId: companyProduct.CompanyProductId,
 			ContractCode:     contractDetail.ContractCode,

+ 0 - 83
controllers/company_renewal.go

@@ -2,7 +2,6 @@ package controllers
 
 import (
 	"encoding/json"
-	"fmt"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/utils"
@@ -501,85 +500,3 @@ func (this *CompanyRenewalController) CompanyContractNoRenewedAscribeAddDetail()
 	br.Msg = "获取成功"
 	br.Data = resp
 }
-
-func init12123() {
-	var condition string
-	var pars []interface{}
-	list, e := company.GetCompanyNoRenewedAscribeList(condition, pars, 0, 0)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		fmt.Println(e)
-		return
-	}
-
-	for _, v := range list {
-		pars = make([]interface{}, 0)
-		condition = " AND  company_id = ? "
-		pars = append(pars, v.CompanyId)
-
-		companyContractList, e := company.GetCompanyContractList(condition, pars)
-		if e != nil && e.Error() != utils.ErrNoRow() {
-			fmt.Println(e)
-			return
-		}
-		for _, vC := range companyContractList {
-			item := new(company.CompanyContractNoRenewedAscribe)
-			item.CompanyAscribeId = v.CompanyAscribeId
-			item.AscribeContent = v.AscribeContent
-			item.Content = v.Content
-			item.ProductId = v.ProductId
-			item.CompanyId = v.CompanyId
-			item.CompanyContractId = vC.CompanyContractId
-			item.AdminId = v.AdminId
-			item.CreateTime = utils.StrTimeToTime(v.CreateTime)
-			item.ModifyTime = utils.StrTimeToTime(v.CreateTime)
-
-			itemLog := new(company.CompanyContractNoRenewedAscribeLog)
-			itemLog.CompanyAscribeId = v.CompanyAscribeId
-			itemLog.AscribeContent = v.AscribeContent
-			itemLog.Content = v.Content
-			itemLog.ProductId = v.ProductId
-			itemLog.CompanyId = v.CompanyId
-			itemLog.CompanyContractId = vC.CompanyContractId
-			itemLog.AdminId = v.AdminId
-			itemLog.CreateTime = utils.StrTimeToTime(v.CreateTime)
-			itemLog.ModifyTime = utils.StrTimeToTime(v.CreateTime)
-
-			err := company.AddCompanyContractNoRenewedAscribe(item, itemLog)
-			fmt.Println(err)
-		}
-	}
-	return
-}
-
-func init879() {
-
-	companyContractList, e := models.GetIncrementalCompanyListByOperationRecordMerge879()
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		fmt.Println(e)
-		return
-	}
-	fmt.Println(len(companyContractList))
-	//return
-	for _, v := range companyContractList {
-		item := new(company.CompanyContractNoRenewedAscribe)
-		item.CompanyContractId = v.CompanyContractId
-		item.ProductId = v.ProductId
-		item.CompanyId = v.CompanyId
-		item.CreateTime = time.Now()
-		item.ModifyTime = time.Now()
-
-		itemLog := new(company.CompanyContractNoRenewedAscribeLog)
-		itemLog.AscribeContent = v.AscribeContent
-		itemLog.Content = v.Content
-		itemLog.ProductId = v.ProductId
-		itemLog.CompanyId = v.CompanyId
-		itemLog.CompanyContractId = v.CompanyContractId
-		itemLog.CreateTime = time.Now()
-		itemLog.ModifyTime = time.Now()
-
-		err := company.AddCompanyContractNoRenewedAscribe(item, itemLog)
-		fmt.Println(err)
-	}
-
-	return
-}

+ 341 - 2
controllers/statistic_company_merge.go

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

+ 17 - 1
models/company/company_contract.go

@@ -26,6 +26,7 @@ type CompanyContract struct {
 	Source            string    `description:"合同来源,枚举值:上传附件、系统合同,默认上传附件"`
 	PackageType       int       `description:"套餐类型,0:无,1:大套餐,2:小套餐"`
 	RaiPackageType    int       `description:"权益套餐类型: 0-无; 1-70w大套餐; 2-45w大套餐"`
+	RaiContractType   string    `description:"权益合同类型:枚举值:'新签合同','续约合同','补充协议'"`
 }
 
 // 新增客户合同
@@ -259,7 +260,7 @@ func UpdateCompanyContractPermissionMulti(items []*CompanyContractPermission) (e
 		}
 	}()
 
-	//批量修改公司剩余点数
+	//批量修改
 	p, err := o.Raw("UPDATE company_contract_permission SET permission_name = ? ,contract_type = ? WHERE id = ?").Prepare()
 	if err != nil {
 		return
@@ -302,6 +303,21 @@ func GetLastContractListByEndDate(companyId, productId int, endDate string) (ite
 	o := orm.NewOrm()
 	sql := "SELECT * FROM company_contract where company_id = ? AND product_id= ? end_date < ? AND status = 1 ORDER BY end_date desc"
 	err = o.Raw(sql, companyId, productId, endDate).QueryRow(&item)
+	return
+}
 
+// 获取权益近一年是否有新签合同
+func GetCompanyContractCountRaiByLastYear(companyId int, startDate string) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT COUNT(1) AS total FROM company_contract AS a WHERE  product_id = 2  AND   contract_type = '新签合同'  AND  company_id = ?  AND start_date >= ? `
+	err = o.Raw(sql, companyId, startDate).QueryRow(&count)
+	return
+}
+
+// UpdateCompanyContractRaiContractType  更新某些合同权益的标识,为新签合同
+func UpdateCompanyContractRaiContractTypeInit(companyContractId string) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE company_contract SET rai_contract_type = '新签合同'  WHERE company_contract_id IN  (` + companyContractId + `) `
+	_, err = o.Raw(sql).Exec()
 	return
 }

+ 24 - 0
models/company/company_contract_merge.go

@@ -94,3 +94,27 @@ 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
+}
+
+// 权益客户统计,续约率搜索自然年的年份,返回类
+type SearchYearListResp struct {
+	List []int
+}

+ 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:"到期合同总金额"`
+}

+ 18 - 0
routers/commentsRouter.go

@@ -10393,6 +10393,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",
@@ -10402,6 +10411,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: "GetYearList",
+            Router: `/merge_company/get_year_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: "MergeCompanyList",

+ 29 - 0
services/cygx/activity_meet.go

@@ -7,6 +7,7 @@ import (
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/services/alarm_msg"
 	"hongze/hz_crm_api/utils"
+	"strconv"
 )
 
 // 获取线上活动到会更新时间
@@ -438,3 +439,31 @@ func AddctivitySignupDetailListByAdminSignup(activityIdsStr string) (err error)
 
 	return err
 }
+
+func init77777() {
+	var condition string
+	var pars []interface{}
+
+	listAct, errList := cygx.GetActivityListAll(condition+"AND active_state = 3 AND activity_id > 3000  AND publish_status = 1 ", pars, 0, 9999)
+	if errList != nil {
+		fmt.Println(errList)
+		return
+	}
+
+	fmt.Println(len(listAct))
+
+	for _, v := range listAct {
+		condition = ` AND a.activity_id  = ` + strconv.Itoa(v.ActivityId)
+		//pars = append(pars)
+		list, e := cygx.GetCygxActivityAttendanceDetailList(condition, pars, 0, 999)
+		if e != nil {
+			fmt.Println(e)
+			return
+		}
+
+		fmt.Println("ActivityId", v.ActivityId, "list", len(list))
+
+		AddctivitySignupDetailListByHand(list, v.ActivityId)
+	}
+
+}