Browse Source

Merge branch 'crm/crm_14.4' of http://8.136.199.33:3000/hongze/hz_crm_api

# Conflicts:
#	models/statistic_report.go
xingzai 1 year ago
parent
commit
1ad333dacf

+ 528 - 0
controllers/statistic_company_merge.go

@@ -667,3 +667,531 @@ func (this *StatisticCompanyMergerController) CompanyPreviousDetail() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 权益行业套餐统计
+// @Description 权益客户统计列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   Keyword   query   string  true       "客户名称"
+// @Param   AdminId   query   string  true       "销售id,多个用英文逗号隔开,空字符串为全部"
+// @Param   StartDate   query   string  false       "开始日期"
+// @Param   EndDate   query   string  false       "结束日期"
+// @Param   DataType   query   string  false       "报表类型,枚举值:`行业新签`,`行业续约`,`行业未续约`"
+// @Param   PermissionName   query   string  false       "行业权限名称"
+// @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
+// @Success 200 {object} response.IncrementalCompanyListResp
+// @router /merge_company/company_contract_permission/list [get]
+func (this *StatisticCompanyMergerController) CompanyContractPermissionList() {
+	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")
+	keyword := this.GetString("Keyword")
+
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+	permissionName := this.GetString("PermissionName")
+	if permissionName == "" { //默认所筛选行业为医药
+		permissionName = "医药"
+	}
+
+	//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
+		permissionName = "" //点击下载的时候不做行业筛选
+	}
+
+	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{} // 处理权益未续约客户总量查询条件
+
+	condition += ` AND c.product_id = ?   AND  a.status = 1 `
+	pars = append(pars, 2)
+
+	var list []*models.IncrementalList
+	var listPessionGroup []*models.CompanyContractPermissionNameGroupCountResp
+
+	var newCompanyTotal int                   //新签合同数量
+	var notRenewalCompanyTotal int            //未续约客户数已确认
+	var notRenewalCompanyToBeConfirmTotal int //未续约客户数待确认
+	var dataTotal, trialTotal, renewalCompanyTotal int
+	var notRenewalTryOut, notRenewalNotTryOut int
+
+	//if dataType == "行业未续约" {
+	//	condition += ` AND a.end_date >= ? AND a.end_date  <= ? `
+	//	pars = append(pars, startDate, endDate)
+	//} else {
+	//	condition += ` AND a.start_date >= ? AND a.start_date <= ?  `
+	//	pars = append(pars, startDate, endDate)
+	//}
+	//
+	//conditionPerssion := condition
+	//parsPerssion := pars
+	//conditionPerssion += ` AND  d.permission_name IN ('医药','消费','科技','智造','策略','买方研选')`
+	//
+	//listPessionGroup, err := models.GetCompanyContractPermissionNameGroupCount(conditionPerssion, parsPerssion)
+	//if err != nil && err.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取失败"
+	//	br.ErrMsg = "获取失败,Err:" + err.Error()
+	//	return
+	//}
+
+	//if permissionName == "" {
+	condition += ` AND  d.permission_name IN ('医药','消费','科技','智造','策略','买方研选')`
+	//}
+
+	var err error
+	//新签客户数
+	{
+		condition1 := condition
+		pars1 := pars
+		condition1 += ` AND a.start_date >= ? AND a.start_date <= ?  `
+		pars1 = append(pars1, startDate, endDate)
+		condition1 += ` AND d.contract_type = ? `
+		pars1 = append(pars1, "行业新签")
+		newCompanyTotal, err = company.GetIncrementalNewCompanyProductPermissionCount(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+
+		if dataType == "行业新签" {
+			conditionPerssion := condition1
+			parsPerssion := pars1
+			conditionPerssion += ` AND  d.permission_name IN ('医药','消费','科技','智造','策略','买方研选')`
+
+			listPessionGroup, err = models.GetCompanyContractPermissionNameGroupCount(conditionPerssion, parsPerssion)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+
+			//行业筛选查询
+			if permissionName != "" {
+				condition1 += ` AND  d.permission_name = ? `
+				pars1 = append(pars1, permissionName)
+			}
+
+			total, err := company.GetIncrementalNewCompanyProductPermissionCount(condition1, pars1)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+
+			//列表页数据
+			tmpList, err := models.GetIncrementalCompanyPermissionList(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 d.contract_type = ? `
+		pars1 = append(pars1, "行业续约")
+		////额外条件(续约合同的起始日期包含在所选时间段内且不包含在新签合同存续期内的客户)
+		//pars1 = append(pars1, endDate)
+
+		total, err := company.GetIncrementalNewCompanyProductPermissionCount(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+
+		renewalCompanyTotal = total
+
+		if dataType == "行业续约" {
+			conditionPerssion := condition1
+			parsPerssion := pars1
+			conditionPerssion += ` AND  d.permission_name IN ('医药','消费','科技','智造','策略','买方研选')`
+
+			listPessionGroup, err = models.GetCompanyContractPermissionNameGroupCount(conditionPerssion, parsPerssion)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			//行业筛选查询
+			if permissionName != "" {
+				condition1 += ` AND  d.permission_name = ? `
+				pars1 = append(pars1, permissionName)
+			}
+			//列表数据数量
+			total, err := company.GetIncrementalNewCompanyProductPermissionCount(condition1, pars1)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			//列表页数据
+			tmpList, err := models.GetIncrementalCompanyPermissionList(condition1, pars1, startSize, pageSize)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			list = tmpList
+			dataTotal = total
+		}
+	}
+
+	//return
+
+	//行业未续约
+	{
+		condition1 := condition
+		pars1 := pars
+		condition1 += ` AND a.end_date >= ? AND a.end_date  <= ? `
+		pars1 = append(pars1, startDate, endDate)
+		condition1 += ` AND c.status not in ("永续","正式","关闭")  `
+
+		//未续约数量
+		notRenewalCondition := condition1
+		notRenewalPars := pars1
+		notRenewalCondition += conditionAscribRaiTotal
+		notRenewalPars = append(notRenewalPars, parsAscribeRaiTotal)
+		total, err := company.GetIncrementalNewCompanyProductPermissionCount(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 == "行业未续约" {
+			conditionPerssion := condition1
+			parsPerssion := pars1
+			conditionPerssion += ` AND  d.permission_name IN ('医药','消费','科技','智造','策略','买方研选')`
+
+			listPessionGroup, err = models.GetCompanyContractPermissionNameGroupCount(conditionPerssion, parsPerssion)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			//行业筛选查询
+			if permissionName != "" {
+				condition1 += ` AND  d.permission_name = ? `
+				pars1 = append(pars1, permissionName)
+			}
+
+			//分页total单独计算
+			total, err = company.GetIncrementalNewCompanyProductPermissionCount(condition1, pars1)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			//return
+			//列表页数据
+			tmpList, err := models.GetIncrementalCompanyPermissionList(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
+	var companyIds []int
+	for i := 0; i < listLen; i++ {
+		item := list[i]
+		companyContractIds = append(companyContractIds, item.CompanyContractId)
+		companyIds = append(companyIds, item.CompanyId)
+		//新增试用不需要计算剩余日期
+		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
+		}
+	}
+
+	//行业未续约 需要处理公司对应行业权限下的权限状态
+	if dataType == "行业未续约" {
+		mappermissionNameStatus, err := cygxService.GetCompanyPermissionNameStatusMapByCompanyId(companyIds)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range list {
+			v.PermissionNameStatus = mappermissionNameStatus[fmt.Sprint(v.CompanyId, v.PermissionNameExport)]
+		}
+	}
+
+	//合并合同所对应的权限
+	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]
+	}
+
+	//处理展示顺序
+	permissionNameSlice := []string{"医药", "消费", "科技", "智造", "策略", "买方研选"}
+	var itemspermissionNameSlice []*models.CompanyContractPermissionNameGroupCountResp
+	for _, vName := range permissionNameSlice {
+		item := new(models.CompanyContractPermissionNameGroupCountResp)
+		for _, v := range listPessionGroup {
+			if v.PermissionName != vName {
+				continue
+			}
+			item.Total = v.Total
+		}
+		item.PermissionName = vName
+		itemspermissionNameSlice = append(itemspermissionNameSlice, item)
+	}
+
+	page := paging.GetPaging(currentIndex, pageSize, dataTotal)
+	resp := response.IncrementalCompanyListResp{
+		Paging:                            page,
+		ListPermissionName:                itemspermissionNameSlice,
+		List:                              list,
+		TrialTotal:                        trialTotal,
+		NewCompanyTotal:                   newCompanyTotal,
+		RenewalCompanyTotal:               renewalCompanyTotal,
+		NotRenewalCompanyTotal:            notRenewalCompanyTotal,
+		NotRenewalCompanyToBeConfirmTotal: notRenewalCompanyToBeConfirmTotal,
+		NotRenewalTryOut:                  notRenewalTryOut,
+		NotRenewalNotTryOut:               notRenewalNotTryOut,
+	}
+	//fmt.Println()
+	//导出excel
+	if isExport {
+		PermissionCompanyListListExport(this, dataType, resp, br)
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// PermissionCompanyListListExport 导出增量客户数据报表excel
+func PermissionCompanyListListExport(this *StatisticCompanyMergerController, dataType string, resp response.IncrementalCompanyListResp, br *models.BaseResponse) {
+	dir, err := os.Executable()
+	exPath := filepath.Dir(dir)
+	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
+	xlsxFile := xlsx.NewFile()
+	if err != nil {
+		br.Msg = "生成文件失败"
+		br.ErrMsg = "生成文件失败"
+		return
+	}
+	style := xlsx.NewStyle()
+	alignment := xlsx.Alignment{
+		Horizontal: "center",
+		Vertical:   "center",
+		WrapText:   true,
+	}
+	permissionNameSlice := []string{"医药", "消费", "科技", "智造", "策略", "买方研选"}
+
+	mapExport := make(map[string][]*models.IncrementalList)
+	type IncrementalCompanyListExport struct {
+		PermissionName string `description:"权限名"`
+		List           []*models.IncrementalList
+	}
+
+	for _, v := range resp.List {
+		if v.PermissionNameExport == "" {
+			continue
+		}
+		mapExport[v.PermissionNameExport] = append(mapExport[v.PermissionNameExport], v)
+	}
+
+	style.Alignment = alignment
+	style.ApplyAlignment = true
+
+	for _, vName := range permissionNameSlice {
+		sheel, err := xlsxFile.AddSheet(vName)
+		if err != nil {
+			br.Msg = "新增Sheet失败"
+			br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
+			return
+		}
+		sheel.SetColWidth(0, 0, 30)
+		sheel.SetColWidth(1, 1, 15)
+		sheel.SetColWidth(2, 2, 15)
+		sheel.SetColWidth(3, 3, 18)
+		sheel.SetColWidth(4, 4, 40)
+		sheel.SetColWidth(5, 5, 18)
+
+		//表头
+
+		titleRow := sheel.AddRow()
+
+		cellName := titleRow.AddCell()
+		cellName.SetStyle(style)
+		cellName.SetValue("客户名称")
+
+		cellSellerName := titleRow.AddCell()
+		cellSellerName.SetStyle(style)
+		cellSellerName.SetValue("所属销售")
+
+		cellMoney := titleRow.AddCell()
+		cellMoney.SetStyle(style)
+		cellMoney.SetValue("合同金额")
+
+		cellTime := titleRow.AddCell()
+		cellTime.SetStyle(style)
+		cellTime.SetValue("合同期限")
+
+		cellPermissionName := titleRow.AddCell()
+		cellPermissionName.SetStyle(style)
+		cellPermissionName.SetValue("签约套餐")
+
+		if dataType == "行业未续约" {
+			cellPermissionNameStatus := titleRow.AddCell()
+			cellPermissionNameStatus.SetStyle(style)
+			cellPermissionNameStatus.SetValue("当前行业状态")
+
+			cellCompanyProductStatus := titleRow.AddCell()
+			cellCompanyProductStatus.SetStyle(style)
+			cellCompanyProductStatus.SetValue("当前客户状态")
+		}
+		for _, v := range mapExport[vName] {
+			dataRow := sheel.AddRow()
+			dataRow.SetHeight(20)
+
+			cellDataName := dataRow.AddCell()
+			cellDataName.SetStyle(style)
+			cellDataName.SetValue(v.CompanyName)
+
+			cellDataSellerName := dataRow.AddCell()
+			cellDataSellerName.SetStyle(style)
+			cellDataSellerName.SetValue(v.SellerName)
+
+			cellDataMoney := dataRow.AddCell()
+			cellDataMoney.SetStyle(style)
+			cellDataMoney.SetValue(v.Money)
+
+			cellDataTime := dataRow.AddCell()
+			cellDataTime.SetStyle(style)
+			cellDataTime.SetValue(v.StartDate + "~" + v.EndDate)
+
+			cellDataPermissionName := dataRow.AddCell()
+			cellDataPermissionName.SetStyle(style)
+			cellDataPermissionName.SetValue(v.PermissionName)
+
+			if dataType == "行业未续约" {
+				cellDataPermissionNameStatus := dataRow.AddCell()
+				cellDataPermissionNameStatus.SetStyle(style)
+				cellDataPermissionNameStatus.SetValue(v.PermissionNameStatus)
+
+				cellDataCompanyProductStatus := dataRow.AddCell()
+				cellDataCompanyProductStatus.SetStyle(style)
+				cellDataCompanyProductStatus.SetValue(v.CompanyProductStatus)
+			}
+		}
+	}
+
+	err = xlsxFile.Save(downLoadnFilePath)
+	if err != nil {
+		br.Msg = "保存文件失败"
+		br.ErrMsg = "保存文件失败"
+		return
+	}
+	randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
+	downloadFileName := dataType + "数据_" + randStr + ".xlsx"
+	this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
+	defer func() {
+		os.Remove(downLoadnFilePath)
+	}()
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "导出成功"
+}

+ 34 - 0
models/company/company_contract.go

@@ -65,6 +65,8 @@ type CompanyContractPermission struct {
 	EndDate           string    `description:"结束日期"`
 	CreateTime        time.Time `description:"创建时间"`
 	ModifyTime        time.Time `description:"修改时间"`
+	ContractType      string    `description:"签约合同时,当前行业类型:枚举值:'行业新签','行业续约'"`
+	PermissionName    string    `description:"权限名称"`
 }
 
 // 新增客户合同
@@ -243,6 +245,38 @@ func GetCompanyContractPermissionList(condition string, pars []interface{}) (ite
 	return
 }
 
+// UpdateCompanyContractPermissionMulti 批量修改
+func UpdateCompanyContractPermissionMulti(items []*CompanyContractPermission) (err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+
+	//批量修改公司剩余点数
+	p, err := o.Raw("UPDATE company_contract_permission SET permission_name = ? ,contract_type = ? WHERE id = ?").Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close() // 别忘记关闭 statement
+	}()
+
+	for _, v := range items {
+		_, err = p.Exec(v.PermissionName, v.ContractType, v.Id)
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
 // 通过ID获取详情
 func GetCompanyContracDetail(condition string, pars []interface{}) (item *CompanyContractResp, err error) {
 	o := orm.NewOrm()

+ 17 - 91
models/company/company_contract_merge.go

@@ -6,24 +6,6 @@ import (
 	"time"
 )
 
-type CompanyContractMerge struct {
-	CompanyContractMergeId int       `orm:"column(company_contract_merge_id);pk" description:"主键ID"`
-	ContractType           string    `description:"合同类型:枚举值:'新签合同','续约合同','补充协议'"`
-	ProductId              int       `description:"产品id"`
-	ProductName            string    `description:"产品名称"`
-	CompanyId              int       `description:"客户id"`
-	CompanyProductId       int       `description:"客户产品id"`
-	StartDate              string    `description:"合同开始时间"`
-	EndDate                string    `description:"合同结束时间"`
-	Money                  float64   `description:"合同金额"`
-	CreateTime             time.Time `description:"合同创建时间"`
-	ModifyTime             time.Time `description:"合同修改时间"`
-	CompanyContractIdGroup string    `description:"表company_contract合并的 company_contract_id"`
-	ChartPermissionName    string    `description:"权限类目名称"`
-	PackageDifference      string    `description:"和上一份合同的区别"`
-	IsBestNew              int       `description:"是否是最新的一条数据"`
-}
-
 type CompanyContractMergeResp struct {
 	CompanyContractMergeId int       `orm:"column(company_contract_merge_id);pk" description:"主键ID"`
 	ContractType           string    `description:"合同类型:枚举值:'新签合同','续约合同','补充协议'"`
@@ -59,56 +41,6 @@ type CompanyContractMergeDetailResp struct {
 	PermissionName         string    `description:"权限名"`
 }
 
-func AddCompanyContractMerge(item *CompanyContractMerge) (err error) {
-	o := orm.NewOrm()
-	_, err = o.Insert(item)
-	return
-}
-
-// MultiAddCompanyContractMerge 批量添加合同合并之后的数据
-func MultiAddCompanyContractMerge(items []*CompanyContractMerge) (err error) {
-	if len(items) == 0 {
-		return
-	}
-	o := orm.NewOrm()
-	_, err = o.InsertMulti(len(items), items)
-	return
-}
-
-// 修改
-func UpdateCompanyContractMerge(item *CompanyContractMerge) (err error) {
-	o := orm.NewOrm()
-	to, err := o.Begin()
-	if err != nil {
-		return
-	}
-	defer func() {
-		if err != nil {
-			_ = to.Rollback()
-		} else {
-			_ = to.Commit()
-		}
-	}()
-	updateParams := make(map[string]interface{})
-	updateParams["EndDate"] = item.EndDate
-	updateParams["Money"] = item.Money
-	updateParams["CompanyContractIdGroup"] = item.CompanyContractIdGroup
-	updateParams["PackageDifference"] = item.PackageDifference
-	updateParams["IsBestNew"] = item.IsBestNew
-	updateParams["ModifyTime"] = item.ModifyTime
-	ptrStructOrTableName := "company_contract_merge"
-	whereParam := map[string]interface{}{"company_contract_merge_id": item.CompanyContractMergeId}
-	qs := to.QueryTable(ptrStructOrTableName)
-	for expr, exprV := range whereParam {
-		qs = qs.Filter(expr, exprV)
-	}
-	_, err = qs.Update(updateParams)
-	if err != nil {
-		return
-	}
-	return
-}
-
 // GetIncrementalNewCompanyProductMergeCount 获取增量客户产品报表列表统计数据(根据合同来展示)
 func GetIncrementalNewCompanyProductMergeCount(condition string, pars []interface{}) (total int, err error) {
 	o := orm.NewOrm()
@@ -145,26 +77,20 @@ type GetCompanyContractMergeDetailResp struct {
 	Detail *CompanyContractMergeDetailResp
 }
 
-// 通过ID获取详情
-//func GetCompanyContractMergeDetail(condition string, pars []interface{}) (item *CompanyContractMergeDetailResp, err error) {
-//	o := orm.NewOrm()
-//	sql := `SELECT * FROM company_contract_merge  WHERE 1= 1 ` + condition
-//	err = o.Raw(sql, pars).QueryRow(&item)
-//	return
-//}
-//
-//// UpdateCompanyContractMergeIsBestNew 更改 is_best_new 状态
-//func UpdateCompanyContractMergeIsBestNew(isBestNew, companyId int) (err error) {
-//	o := orm.NewOrm()
-//	sql := `UPDATE company_contract_merge SET is_best_new = ?  WHERE company_id=? `
-//	_, err = o.Raw(sql, isBestNew, companyId).Exec()
-//	return
-//}
-//
-//// UpdateCompanyContractMergeIsBestNew 更改 is_best_new 状态
-//func UpdateCompanyContractMergeIsBestNewto1(companyContractMergeId int) (err error) {
-//	o := orm.NewOrm()
-//	sql := `UPDATE company_contract_merge SET is_best_new = 1  WHERE company_contract_merge_id=? `
-//	_, err = o.Raw(sql, companyContractMergeId).Exec()
-//	return
-//}
+// GetIncrementalNewCompanyProductMergeCount 获取增量客户产品报表列表统计数据(根据合同来展示)
+func GetIncrementalNewCompanyProductPermissionCount(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 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
+		 JOIN company_contract_permission d ON d.company_contract_id = a.company_contract_id
+		 WHERE 1 = 1  `
+
+	if condition != "" {
+		sql += condition
+	}
+	sql = `select count(1) count from (` + sql + ` GROUP BY d.company_contract_id,d.permission_name  ) f`
+	err = o.Raw(sql, pars).QueryRow(&total)
+	return
+}

+ 1 - 0
models/response/statistic_report.go

@@ -100,6 +100,7 @@ type StackCompanyListResp struct {
 type IncrementalCompanyListResp struct {
 	Paging                            *paging.PagingItem `description:"分页数据"`
 	List                              []*models.IncrementalList
+	ListPermissionName                []*models.CompanyContractPermissionNameGroupCountResp
 	TrialTotal                        int `description:"新增试用客户数"`
 	NewCompanyTotal                   int `description:"新签客户数"`
 	RenewalCompanyTotal               int `description:"续约客户数"`

+ 80 - 30
models/statistic_report.go

@@ -371,36 +371,39 @@ func GetIncomeList(condition string, pars []interface{}, startSize, pageSize int
 
 // 增量客户统计报表列表数据结构
 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      []*company.CompanyReportPermission `description:"产品权限"`
-	Count               int                                `json:"-" description:"合同数"`
-	RenewalReason       string                             `description:"未续约说明"`
-	RenewalTodo         string                             `description:"未续约说明中的待办事项说明"`
-	PackageDifference   string                             `description:"和上一份合同的区别"`
-	AscribeContent      string                             `description:"归因标签说明"`
-	IsShowNoRenewedNote bool                               `description:"是否展示未续约备注按钮"`
-	Content             string                             `description:"归因内容说明"`
-	PermissionName      string                             `description:"权限名"`
+	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       []*company.CompanyReportPermission `description:"产品权限"`
+	Count                int                                `json:"-" description:"合同数"`
+	RenewalReason        string                             `description:"未续约说明"`
+	RenewalTodo          string                             `description:"未续约说明中的待办事项说明"`
+	PackageDifference    string                             `description:"和上一份合同的区别"`
+	AscribeContent       string                             `description:"归因标签说明"`
+	IsShowNoRenewedNote  bool                               `description:"是否展示未续约备注按钮"`
+	Content              string                             `description:"归因内容说明"`
+	PermissionName       string                             `description:"权限名"`
+	PermissionNameExport string                             `description:"权限名导出时使用"`
+	PermissionNameStatus string                             `description:"权限状态"`
+	CompanyProductStatus string                             `description:"客户状态"`
 	//CompanyContractIdGroup string                             `description:"表company_contract合并的 company_contract_id"`
 }
 
@@ -942,3 +945,50 @@ ORDER BY
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+// GetIncrementalNewCompanyList 获取增量客户报表列表数据(根据合同来展示)
+func GetIncrementalCompanyPermissionList(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, c.status as  company_product_status, d.permission_name as permission_name_export 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 
+		 JOIN company_contract_permission d ON d.company_contract_id = a.company_contract_id
+		 and a.product_id=c.product_id   WHERE 1 = 1 `
+
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` group by d.company_contract_id,d.permission_name   order by start_date desc,company_id desc limit ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+type CompanyContractPermissionNameGroupCountResp struct {
+	Total          int    `description:"数量"`
+	PermissionName string `description:"权限名"`
+}
+
+// GetCompanyContractPermissionNameGroupCount 获取增量客户产品报表列表统计数据(根据合同来展示)
+func GetCompanyContractPermissionNameGroupCount(condition string, pars []interface{}) (items []*CompanyContractPermissionNameGroupCountResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			COUNT( DISTINCT d.permission_name, d.company_contract_id ) total,
+			d.permission_name 
+		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
+			JOIN company_contract_permission d ON d.company_contract_id = a.company_contract_id 
+		WHERE
+			1 = 1 
+			AND d.permission_name IN ( '医药', '消费', '科技', '智造', '策略', '买方研选' ) `
+
+	if condition != "" {
+		sql += condition
+	}
+	sql += `GROUP BY d.permission_name `
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 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: "CompanyContractPermissionList",
+            Router: `/merge_company/company_contract_permission/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",

+ 4 - 3
services/company_apply/company_approval.go

@@ -419,9 +419,10 @@ func Approved(approvalRecord *contract.ContractApprovalRecord, opUser *system.Ad
 
 				//客户研选行业转正时(王芳审批通过),模板消息提醒汪洋
 				services.AddCompanyApprovalMessageWangYang(recordInfo.CompanyId, recordInfo.CompanyContractId, recordInfo.ApplyRealName, companyInfo.CompanyName)
-				cygxService.YanXuanCompanyApproval(recordInfo.CompanyId)                           //研选审批通过的时候研选扣点更新
-				cygxService.HandleAllocationCompanyContractByYanXuan(recordInfo.CompanyContractId) //如果合同只有研选的时候,自动处理派点
-				cygxService.HandleCompanyContractPackageDifference(recordInfo.CompanyContractId)   // 更新与上一份合同的金额的对比 '增加套餐','减少套餐','维持套餐'
+				cygxService.YanXuanCompanyApproval(recordInfo.CompanyId)                              //研选审批通过的时候研选扣点更新
+				cygxService.HandleAllocationCompanyContractByYanXuan(recordInfo.CompanyContractId)    //如果合同只有研选的时候,自动处理派点
+				cygxService.HandleCompanyContractPackageDifference(recordInfo.CompanyContractId)      // 更新与上一份合同的金额的对比 '增加套餐','减少套餐','维持套餐'
+				cygxService.HandleCompanyContractPermissionContractType(recordInfo.CompanyContractId) // 更新合同权限表中的权限名称,以及对应的行业权限类型(行业新签、行业续约)
 			}
 		}()
 	} else {

+ 184 - 2
services/cygx/contract_allocation.go

@@ -185,6 +185,50 @@ func GetCompanyContractPermissionNameMapById(companyContractIds []int) (mapContr
 	return
 }
 
+// GetCompanyPermissionNameStatusMapByCompanyId 通过公司ID,获取公司当下所有权限的状态信息
+func GetCompanyPermissionNameStatusMapByCompanyId(companyIds []int) (mapResp map[string]string, err error) {
+	//return
+	lenArr := len(companyIds)
+	if lenArr == 0 {
+		return
+	}
+	var condition string
+	var pars []interface{}
+
+	condition += " AND  company_id IN (" + utils.GetOrmInReplace(lenArr) + ") AND product_id = 2 "
+	pars = append(pars, companyIds)
+
+	//获取所有开通买方研选正式试用的客户列表
+	listCompanyPermission, e := company.GetCompanyReportPermissionList(condition, pars, 0, 0)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyReportPermissionList, Err: " + e.Error())
+		return
+	}
+
+	//获取行业权限ID与名称的映射关系
+	permissionList, e := models.GetChartPermissionList()
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetChartPermissionList, Err: " + e.Error())
+		return
+	}
+
+	mapResp = make(map[string]string, 0)
+	mapChartPermission := make(map[int]string)
+	for _, v := range permissionList {
+		mapChartPermission[v.ChartPermissionId] = v.PermissionName
+	}
+
+	for _, v := range listCompanyPermission {
+		if mapChartPermission[v.ChartPermissionId] == "" {
+			continue
+		}
+		//公司ID与权限名称组成映射关系
+		mapResp[fmt.Sprint(v.CompanyId, mapChartPermission[v.ChartPermissionId])] = v.Status
+	}
+
+	return
+}
+
 // 判断合同审核通过时间是否超过九十天
 func GetMapIsGrayByCompanyContractIds(companyContractIds []int) (mapResp map[int]bool, err error) {
 	lenArr := len(companyContractIds)
@@ -335,7 +379,7 @@ func HandleCompanyContractPackageDifference(companyContractId int) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println(err)
-			go alarm_msg.SendAlarmMsg(fmt.Sprint("如果合同只有研选的时候,自动处理派点失败,Err:", err.Error(), "companyContractId", companyContractId), 2)
+			go alarm_msg.SendAlarmMsg(fmt.Sprint("更新与上一份合同的金额的对比 '增加套餐','减少套餐','维持套餐'失败,Err:", err.Error(), "companyContractId", companyContractId), 2)
 		}
 	}()
 	var condition string
@@ -373,7 +417,6 @@ func HandleCompanyContractPackageDifference(companyContractId int) (err error) {
 	}
 
 	e = company.UpdateCompanyContractPackageDifference(packageDifference, companyContractId)
-	fmt.Println(packageDifference)
 	if e != nil {
 		err = errors.New("UpdateCompanyContractPackageDifference, Err: " + e.Error())
 		return
@@ -381,3 +424,142 @@ func HandleCompanyContractPackageDifference(companyContractId int) (err error) {
 	return
 
 }
+
+// HandleCompanyContractPermissionContractType 更新合同权限表中的权限名称,以及对应的行业权限类型(行业新签、行业续约)
+func HandleCompanyContractPermissionContractType(companyContractId int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go alarm_msg.SendAlarmMsg(fmt.Sprint("更新合同权限表中的权限名称,以及对应的行业权限类型(行业新签、行业续约)失败,HandleCompanyContractPermissionContractType Err:", err.Error(), "companyContractId", companyContractId), 2)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+
+	condition = " AND company_contract_id = ?  "
+	pars = append(pars, companyContractId)
+	detail, e := company.GetCompanyContracDetail(condition, pars)
+	if e != nil {
+		err = errors.New("GetCompanyContracDetail,detail Err: " + e.Error())
+		return
+	}
+
+	//获取权限ID与名称的map映射
+	permissionList, e := models.GetChartPermissionList()
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetChartPermissionList Err: " + e.Error())
+		return
+	}
+
+	mapChartPermission := make(map[int]string)
+	for _, v := range permissionList {
+		mapChartPermission[v.ChartPermissionId] = v.PermissionName
+	}
+
+	companyId := detail.CompanyId
+	//如果不是续约合同就不做对比处理
+	pars = make([]interface{}, 0)
+	condition = " AND  company_contract_id  != ?   AND  company_id = ? "
+	pars = append(pars, companyContractId, companyId)
+
+	//获取历史签约信息
+	companyContractPermissionListHistory, e := company.GetCompanyContractPermissionList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("companyContractPermissionListHistory Err: " + e.Error())
+		return
+	}
+
+	var mapHistoryPerssionName []string
+	for _, v := range companyContractPermissionListHistory {
+		mapHistoryPerssionName = append(mapHistoryPerssionName, mapChartPermission[v.ChartPermissionId])
+	}
+
+	pars = make([]interface{}, 0)
+	condition = " AND  company_contract_id  = ?   "
+	pars = append(pars, companyContractId)
+	//获取当前签约的合同信息
+	companyContractPermissionLisThis, e := company.GetCompanyContractPermissionList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("companyContractPermissionLisThis Err: " + e.Error())
+		return
+	}
+
+	var items []*company.CompanyContractPermission
+	for _, v := range companyContractPermissionLisThis {
+		v.PermissionName = mapChartPermission[v.ChartPermissionId]
+		if v.PermissionName == "" {
+			continue
+		}
+		//已经存在的属于行业续约、不存在的属于行业新签
+		if utils.InArrayByStr(mapHistoryPerssionName, v.PermissionName) {
+			v.ContractType = "行业续约"
+		} else {
+			v.ContractType = "行业新签"
+		}
+		items = append(items, v)
+	}
+	//批量更新合同权限表的权限行业名称,以及签约合同时,当前行业类型(行业续约、行业新签)
+	e = company.UpdateCompanyContractPermissionMulti(items)
+	if e != nil {
+		err = errors.New("UpdateCompanyContractPermissionMulti Err: " + e.Error())
+		return
+	}
+	return
+}
+
+func initCRM14_4() {
+	//func init() {
+	permissionList, e := models.GetChartPermissionList()
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		fmt.Println(permissionList)
+		return
+	}
+
+	mapChartPermission := make(map[int]string)
+	for _, v := range permissionList {
+		mapChartPermission[v.ChartPermissionId] = v.PermissionName
+	}
+
+	var condition string
+	var pars []interface{}
+	condition = " AND status = 1    AND  product_id = 2  "
+	companyContractList, e := company.GetCompanyContractList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		fmt.Println(e)
+		return
+	}
+	fmt.Println(len(companyContractList))
+	for k, v := range companyContractList {
+		fmt.Println(k)
+		HandleCompanyContractPermissionContractType(v.CompanyContractId)
+	}
+
+	var companyContractIds []int
+	for _, v := range companyContractList {
+		companyContractIds = append(companyContractIds, v.CompanyContractId)
+	}
+	condition = " AND  company_contract_id IN (" + utils.GetOrmInReplace(len(companyContractIds)) + ")  "
+	pars = append(pars, companyContractIds)
+
+	companyContractPermissionList, e := company.GetCompanyContractPermissionList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		fmt.Println(e)
+		return
+	}
+
+	var items []*company.CompanyContractPermission
+
+	for _, v := range companyContractPermissionList {
+		v.PermissionName = mapChartPermission[v.ChartPermissionId]
+
+		items = append(items, v)
+	}
+	fmt.Println(len(items))
+	//return
+	e = company.UpdateCompanyContractPermissionMulti(items)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		fmt.Println(e)
+		return
+	}
+
+}