Browse Source

no message

xingzai 7 months ago
parent
commit
e52ee711a5

+ 17 - 0
models/chart_permission.go

@@ -28,6 +28,15 @@ type ActivityChartPermission struct {
 	IsChoose          bool   `description:"是否选择"`
 }
 
+// ChartPermission 报告权限表
+type ChartPermissionCrm struct {
+	ChartPermissionId   int    `orm:"column(chart_permission_id);pk" description:"问题ID"`
+	ChartPermissionName string `description:"名称"`
+	PermissionName      string `description:"权限名"`
+	Remark              string `description:"备注"`
+	ProductId           int    `description:"产品ID"`
+}
+
 type ChartPermissionResp struct {
 	List []*ChartPermission
 }
@@ -46,6 +55,14 @@ func GetChartPermissionListRai() (items []*ChartPermission, err error) {
 	return
 }
 
+// GetChartPermissionList 获取品种权限列表
+func GetChartPermissionList() (list []*ChartPermissionCrm, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
+	sql := `SELECT * FROM chart_permission WHERE parent_id > 0 ORDER BY product_id ASC, sort ASC`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
 func GetCategoryId(chartPermissionId int) (category_id string, err error) {
 	o := orm.NewOrm()
 	sql := ` SELECT GROUP_CONCAT(a.category_id) AS category_id 

+ 57 - 0
models/company/company_contract.go

@@ -19,6 +19,29 @@ type CompanyContractPermission struct {
 	Points            float64   `description:"研选扣点包点数"`
 }
 
+type CompanyContract struct {
+	CompanyContractId int       `orm:"column(company_contract_id);pk" description:"客户合同id"`
+	ContractType      string    `description:"合同类型:枚举值:'新签合同','续约合同','补充协议'"`
+	ProductId         int       `description:"产品id"`
+	ProductName       string    `description:"产品名称"`
+	CompanyId         int       `description:"客户id"`
+	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        time.Time `description:"合同创建时间"`
+	ModifyTime        time.Time `description:"合同修改时间"`
+	Status            int       `description:"状态"`
+	Source            string    `description:"合同来源,枚举值:上传附件、系统合同,默认上传附件"`
+	PackageType       int       `description:"套餐类型,0:无,1:大套餐,2:小套餐"`
+	RaiPackageType    int       `description:"权益套餐类型: 0-无; 1-70w大套餐; 2-45w大套餐"`
+	RaiContractType   string    `description:"权益合同类型:枚举值:'新签合同','续约合同','补充协议'"`
+}
+
 func GetCompanyContractPermissionCheck(companyContractId, permissionId int) (count int, err error) {
 	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT COUNT(1) AS count FROM company_contract_permission AS a WHERE a.company_contract_id=? AND a.chart_permission_id=? `
@@ -36,3 +59,37 @@ func GetCompanyContractPermissionDetail(condition string, pars []interface{}) (i
 	err = o.Raw(sql, pars).QueryRow(&item)
 	return
 }
+
+// 获取合同对应的权限列表
+func GetCompanyContractPermissionList(condition string, pars []interface{}) (items []*CompanyContractPermission, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
+	sql := `SELECT * FROM company_contract_permission WHERE 1 = 1  `
+
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+// 通过查询条件获取详情
+func GetCompanyContractList(condition string, pars []interface{}) (items []*CompanyContract, err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrmUsingDB("weekly_report")
+	sql := `SELECT * FROM company_contract  WHERE 1 = 1  ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+// 通过查询条件获取最后一个合同
+func GetCompanyContractLastList(condition string, pars []interface{}) (items []*CompanyContract, err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrmUsingDB("weekly_report")
+	sql := `SELECT MAX( company_contract_id )  as company_contract_id  FROM company_contract  WHERE 1 = 1  ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 27 - 0
models/company/company_product.go

@@ -55,6 +55,8 @@ type CompanyProduct struct {
 	CloseTime           time.Time `description:"关闭时间"`
 	OverseasLabel       int       `description:"海外客户试用子标签:1未分类、2  推进、3 跟踪、4 预备、"`
 	IsOverseas          int       `description:"是否显示在海外客户0:显示,1:不显示"`
+	ShareSeller         string    `description:"共享销售员"`
+	ShareSellerId       int       `description:"共享销售员id"`
 }
 
 func GetCompanyProductByCompanyIdAndProductId(companyId, productId int) (item *CompanyProduct, err error) {
@@ -86,3 +88,28 @@ func GetCompanyProductAaiServeCount(companyId, groupId int) (count int, err erro
 	err = o.Raw(sql, companyId, groupId, groupId).QueryRow(&count)
 	return
 }
+
+// 获取列表
+func GetCompanyProductAndCompanyListByCondition(condition string, pars []interface{}) (items []*CompanyProduct, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
+	sql := ` SELECT
+			p.company_id,
+			p.seller_id,
+			p.seller_name,
+			p.start_date,
+			p.end_date,
+			p.share_seller_id,
+			p.share_seller,
+			p.status,
+			c.company_name
+		FROM
+			company_product AS p
+			INNER JOIN company AS c ON c.company_id = p.company_id 
+		WHERE
+			1 = 1  `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 2 - 1
models/db.go

@@ -217,6 +217,7 @@ func initOrder() {
 // 权益服务记录模块
 func initRaiServe() {
 	orm.RegisterModel(
-		new(rai_serve.CygxRaiServeBill), //服务明细表
+		new(rai_serve.CygxRaiServeBill),    //服务明细表
+		new(rai_serve.CygxRaiServeCompany), //当前所属权益服务公司表
 	)
 }

+ 100 - 0
models/rai_serve/rai_serve_company.go

@@ -0,0 +1,100 @@
+package rai_serve
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxRaiServeCompany struct {
+	ServeCompanyId    int       `comment:"ServeCompanyId 主键ID"`
+	CompanyId         int       `comment:"公司ID"`
+	CompanyName       string    `comment:"公司名称"`
+	CreateTime        time.Time `comment:"创建时间"`
+	Money             float64   `comment:"合同金额"`
+	ServeCoverageRate string    `comment:"近四周服务覆盖率"`
+	SellerId          int       `comment:"所属销售id"`
+	SellerName        string    `comment:"所属销售名称"`
+	StartDate         string    `comment:"开始日期"`
+	EndDate           string    `comment:"结束日期"`
+	ShareSeller       string    `comment:"共享销售"`
+	ShareSellerId     int       `comment:"共享销售员id"`
+	Status            string    `comment:"客户状态"`
+	PermissionName    string    `comment:"权限名"`
+}
+
+func AddCygxRaiServeCompanyMulti(items []*CygxRaiServeCompany) (err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+
+	//if len(deleteCompanyIds) > 0 {
+	//删除不属于权益共享的公司
+	sql := ` DELETE FROM cygx_rai_serve_company  `
+	_, err = o.Raw(sql).Exec()
+	if err != nil {
+		return
+	}
+	//}
+
+	//批量插入新的关联数据
+	if len(items) > 0 {
+		//批量添加流水信息
+		_, err = o.InsertMulti(len(items), items)
+	}
+
+	return
+}
+
+// UpdateCygxRaiServeCompanyMulti 批量修改正式客户信息
+func UpdateCygxRaiServeCompanyMulti(items []*CygxRaiServeCompany) (err error) {
+	o := orm.NewOrm()
+	p, err := o.Raw("UPDATE cygx_rai_serve_company SET money = ? ,serve_coverage_rate =? ,permission_name = ?  WHERE company_id = ?").Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close() // 别忘记关闭 statement
+	}()
+	for _, v := range items {
+		_, err = p.Exec(v.Money, v.ServeCoverageRate, v.PermissionName, v.CompanyId)
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
+// UpdateCygxRaiServeCompanyFormalNoMulti 批量修改非正式客户信息
+func UpdateCygxRaiServeCompanyFormalNoMulti(items []*CygxRaiServeCompany) (err error) {
+	o := orm.NewOrm()
+	p, err := o.Raw("UPDATE cygx_rai_serve_company SET money = ? , serve_coverage_rate =? ,permission_name = ? , start_date = ? , end_date = ?  WHERE company_id = ?").Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close() // 别忘记关闭 statement
+	}()
+	for _, v := range items {
+		_, err = p.Exec(v.Money, v.ServeCoverageRate, v.PermissionName, v.StartDate, v.EndDate, v.CompanyId)
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
+// 获取当前所属权益服务公司表所有ID
+func GetCygxRaiServeCompanyAllList() (items []*CygxRaiServeCompany, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT *  FROM	cygx_rai_serve_company LIMIT  1000  `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 429 - 0
services/rai_serve_count.go

@@ -8,11 +8,440 @@ import (
 	"hongze/hongze_cygx/models/company"
 	"hongze/hongze_cygx/models/rai_serve"
 	"hongze/hongze_cygx/utils"
+	"strings"
 	"time"
 )
 
 //权益服务统计
 
+func init() {
+	UpdateRaiServeCompany()
+}
+
+// 更新现有的权益服务客户数据
+func UpdateRaiServeCompany() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("更新现有的权益服务客户数据失败 UpdateRaiServeCompany:"+err.Error(), 2)
+		}
+	}()
+
+	//获取当前所有的权益服务客户ID
+	//listRaiServeCompanyId, e := rai_serve.GetCygxRaiServeCompanyAllList()
+	//if e != nil {
+	//	err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
+	//	return
+	//}
+	//mapOldCompanyId := make(map[int]bool) //原来的所属机构
+	//mapNewCompanyId := make(map[int]bool) // 现有的所属机构
+	//var deleteCompanyIds []int            // 需要删除的机构
+	//for _, v := range listRaiServeCompanyId {
+	//	mapOldCompanyId[v.CompanyId] = true
+	//}
+
+	var condition string
+	var pars []interface{}
+	condition = `    AND p.product_id = 2 AND  (p.group_id = ? OR  p.share_group_id = ?) `
+	pars = append(pars, utils.RAI_SERVE_GROUP_ID, utils.RAI_SERVE_GROUP_ID)
+	listCompanyProduct, e := company.GetCompanyProductAndCompanyListByCondition(condition, pars)
+	if e != nil {
+		err = errors.New("GetCompanyProductListByCondition, Err: " + e.Error())
+		return
+	}
+
+	var items []*rai_serve.CygxRaiServeCompany
+	for _, v := range listCompanyProduct {
+		//mapNewCompanyId[v.CompanyId] = true
+		//if mapOldCompanyId[v.CompanyId] {
+		//	continue
+		//}
+		item := new(rai_serve.CygxRaiServeCompany)
+		item.CompanyId = v.CompanyId
+		item.CompanyName = v.CompanyName
+		item.CreateTime = time.Now()
+		//item.Money = 100
+		//item.ServeCoverageRate = "66.66%"
+		item.SellerId = v.SellerId
+		item.SellerName = v.SellerName
+		item.StartDate = v.StartDate
+		item.EndDate = v.EndDate
+		item.ShareSeller = v.ShareSeller
+		item.ShareSellerId = v.ShareSellerId
+		item.Status = v.Status
+		//item.PermissionName = "科技"
+		items = append(items, item)
+	}
+
+	//for _, v := range listRaiServeCompanyId {
+	//	if !mapNewCompanyId[v.CompanyId] {
+	//		deleteCompanyIds = append(deleteCompanyIds, v.CompanyId)
+	//	}
+	//}
+	//先删除老的再添加新的
+	e = rai_serve.AddCygxRaiServeCompanyMulti(items)
+	if e != nil {
+		err = errors.New("AddCygxRaiServeCompanyMulti, Err: " + e.Error())
+		return
+	}
+
+	//listRaiServeCompanyNow, e := rai_serve.GetCygxRaiServeCompanyAllList()
+	//if e != nil {
+	//	err = errors.New("GetCygxRaiServeCompanyAllList_Now, Err: " + e.Error())
+	//	return
+	//}
+
+	var formalCompanyIds []int   // 当前正式客户ID
+	var formalNoCompanyIds []int // 当前非正式客户ID
+
+	for _, v := range listCompanyProduct {
+		if v.Status == "正式" {
+			formalCompanyIds = append(formalCompanyIds, v.CompanyId)
+		} else {
+			formalNoCompanyIds = append(formalNoCompanyIds, v.CompanyId)
+		}
+	}
+
+	var itemsUpdate []*rai_serve.CygxRaiServeCompany
+	if len(formalCompanyIds) > 0 { //正式客户信息
+		condition = ""
+		pars = make([]interface{}, 0)
+		condition = `    AND product_id = 2 AND company_id IN  (` + utils.GetOrmInReplace(len(formalCompanyIds)) + `) AND status = 1  AND  end_date > ? `
+		pars = append(pars, formalCompanyIds, time.Now())
+		listCompanyContract, e := company.GetCompanyContractList(condition, pars)
+		if e != nil {
+			err = errors.New("GetCompanyContractList, Err: " + e.Error())
+			return
+		}
+		companyMoney := make(map[int]float64)
+		for _, v := range listCompanyContract {
+			companyMoney[v.CompanyId] += v.Money
+		}
+
+		permissionNameMapByCompanyId, e := GetCompanyReportPermissionNameMapByCompanyId(formalCompanyIds)
+		if e != nil {
+			err = errors.New("GetCompanyReportPermissionNameMapByCompanyId, Err: " + e.Error())
+			return
+		}
+		for _, v := range formalCompanyIds {
+			item := new(rai_serve.CygxRaiServeCompany)
+			item.CompanyId = v
+			item.Money = companyMoney[v]
+			item.PermissionName = permissionNameMapByCompanyId[v]
+			item.ServeCoverageRate = "61.8"
+			itemsUpdate = append(itemsUpdate, item)
+		}
+
+		fmt.Println(companyMoney)
+	}
+
+	//正式客户数据修改
+	e = rai_serve.UpdateCygxRaiServeCompanyMulti(itemsUpdate)
+	if e != nil {
+		err = errors.New("UpdateCygxRaiServeCompanyMulti, Err: " + e.Error())
+		return
+	}
+
+	//非正式客户数据修改
+	var itemsUpdateFormalNo []*rai_serve.CygxRaiServeCompany
+	if len(formalNoCompanyIds) > 0 { //非正式客户信息
+		condition = ""
+		pars = make([]interface{}, 0)
+		condition = `    AND product_id = 2 AND company_id IN  (` + utils.GetOrmInReplace(len(formalNoCompanyIds)) + `) AND status = 1  AND  end_date < ?  GROUP BY	company_id  ORDER BY	company_contract_id DESC `
+		pars = append(pars, formalNoCompanyIds, time.Now())
+		listCompanyContractLastId, e := company.GetCompanyContractLastList(condition, pars) //获取关联的最后一笔合同信息
+		if e != nil {
+			err = errors.New("GetCompanyContractLastList, Err: " + e.Error())
+			return
+		}
+		var companyContractIds []int
+		for _, v := range listCompanyContractLastId {
+			companyContractIds = append(companyContractIds, v.CompanyContractId)
+		}
+
+		condition = ""
+		pars = make([]interface{}, 0)
+		condition = `    AND product_id = 2 AND company_id IN  (` + utils.GetOrmInReplace(len(formalNoCompanyIds)) + `) AND status = 1  AND company_contract_id IN  (` + utils.GetOrmInReplace(len(companyContractIds)) + `)   AND    end_date < ?  GROUP BY	company_id  ORDER BY	company_contract_id DESC `
+		pars = append(pars, formalNoCompanyIds, companyContractIds, time.Now())
+		listCompanyContractLast, e := company.GetCompanyContractList(condition, pars)
+		if e != nil {
+			err = errors.New("GetCompanyContractList, Err: " + e.Error())
+			return
+		}
+
+		permissionNameMapByContractId, e := GetCompanyContractPermissionNameMapById(companyContractIds)
+		if e != nil {
+			err = errors.New("GetCompanyReportPermissionNameMapByCompanyId, Err: " + e.Error())
+			return
+		}
+		fmt.Println("permissionNameMapByContractId", permissionNameMapByContractId)
+		for _, v := range listCompanyContractLast {
+			item := new(rai_serve.CygxRaiServeCompany)
+			item.CompanyId = v.CompanyId
+			item.Money = v.Money
+			item.StartDate = v.StartDate
+			item.EndDate = v.EndDate
+			item.ServeCoverageRate = " 61.8"
+			item.PermissionName = permissionNameMapByContractId[v.CompanyContractId]
+			itemsUpdateFormalNo = append(itemsUpdateFormalNo, item)
+		}
+	}
+	e = rai_serve.UpdateCygxRaiServeCompanyFormalNoMulti(itemsUpdateFormalNo)
+	if e != nil {
+		err = errors.New("UpdateCygxRaiServeCompanyFormalNoMulti, Err: " + e.Error())
+		return
+	}
+
+	return
+}
+
+// GetCompanyContractPermissionNameMapById 获取合并之后的合同所对应的权限种类名称
+func GetCompanyContractPermissionNameMapById(companyContractIds []int) (mapContractResp map[int]string, err error) {
+	//return
+	lenArr := len(companyContractIds)
+	if lenArr == 0 {
+		return
+	}
+	var condition string
+	var pars []interface{}
+
+	condition += " AND  company_contract_id IN (" + utils.GetOrmInReplace(lenArr) + ")"
+	pars = append(pars, companyContractIds)
+
+	//companyContractList, e := company.GetCompanyContractList(condition, pars)
+	//if e != nil && e.Error() != utils.ErrNoRow() {
+	//	err = errors.New("GetCompanyContractList, Err: " + e.Error())
+	//	return
+	//}
+
+	permissionList, e := models.GetChartPermissionList()
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetChartPermissionList, Err: " + e.Error())
+		return
+	}
+	mappermissionName := make(map[int]string)
+	for _, v := range permissionList {
+		if v.ProductId == 2 {
+			mappermissionName[v.ChartPermissionId] = v.Remark
+		}
+	}
+
+	mapContractIdPerssion := make(map[int]string) //单个合同ID所对应的套餐或者权限名称
+	//for _, v := range companyContractList {
+	//	if v.RaiPackageType == 1 {
+	//		mapContractIdPerssion[v.CompanyContractId] = "70w套餐,"
+	//	}
+	//	if v.RaiPackageType == 2 {
+	//		mapContractIdPerssion[v.CompanyContractId] = "45w套餐,"
+	//	}
+	//}
+
+	companyContractPermissionList, e := company.GetCompanyContractPermissionList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyContractPermissionList, Err: " + e.Error())
+		return
+	}
+
+	mapIsUpgrade := make(map[string]bool) //合同ID对应的行业是否有升级
+	for _, v := range companyContractPermissionList {
+		//如果开通的不是整个套餐,那么就做单独的子权限处理
+		if strings.Count(mapContractIdPerssion[(v.CompanyContractId)], "w套餐") == 0 {
+			if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+				if v.ExpensiveYx == 1 {
+					mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
+				} else if v.ExpensiveYx == 2 {
+					mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
+				} else {
+					mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
+				}
+			} else {
+				mapContractIdPerssion[(v.CompanyContractId)] += mappermissionName[v.ChartPermissionId] + ","
+				if v.IsUpgrade == 1 {
+					//合同ID,权限名称形成唯一的主键索引
+					perssionName := mappermissionName[v.ChartPermissionId]
+					perssionName = strings.Replace(perssionName, "(客观)", "", -1)
+					perssionName = strings.Replace(perssionName, "(主观)", "", -1)
+					mapIsUpgrade[fmt.Sprint(v.CompanyContractId, "perssionName", perssionName)] = true
+				}
+			}
+		} else {
+			if v.ChartPermissionId == utils.ZHUAN_JIA_ID {
+				mapContractIdPerssion[(v.CompanyContractId)] += utils.ZHUAN_JIA_NAME + ","
+			}
+			if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+				if v.ExpensiveYx == 1 {
+					mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
+				} else if v.ExpensiveYx == 2 {
+					mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
+				} else {
+					mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
+				}
+			}
+
+			if v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
+				mapContractIdPerssion[(v.CompanyContractId)] += utils.YAN_XUAN_KOU_DIAN_BAO_NAME + ","
+			}
+		}
+	}
+	//合并客观权限
+	for k, v := range mapContractIdPerssion {
+		perssionName := v
+		if strings.Count(v, utils.YI_YAO_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "医药(主观)", "医药", -1)
+			perssionName = strings.Replace(perssionName, "医药(客观)", "", -1)
+		}
+		if strings.Count(v, utils.XIAO_FEI_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "消费(主观)", "消费", -1)
+			perssionName = strings.Replace(perssionName, "消费(客观)", "", -1)
+		}
+		if strings.Count(v, utils.KE_JI_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "科技(主观)", "科技", -1)
+			perssionName = strings.Replace(perssionName, "科技(客观)", "", -1)
+		}
+		if strings.Count(v, utils.ZHI_ZAO_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "智造(主观)", "智造", -1)
+			perssionName = strings.Replace(perssionName, "智造(客观)", "", -1)
+		}
+
+		perssionName = strings.TrimRight(perssionName, ",")
+		mapContractIdPerssion[k] = perssionName
+	}
+	mapContractResp = make(map[int]string, 0)
+
+	//过滤多余的","
+	for k, v := range mapContractIdPerssion {
+		sliceName := strings.Split(v, ",")
+		var nameArr []string
+		for _, vName := range sliceName {
+			if vName == "" {
+				continue
+			}
+			if mapIsUpgrade[fmt.Sprint(k, "perssionName", vName)] {
+				vName += "(升级)"
+			}
+			nameArr = append(nameArr, vName)
+		}
+		mapContractResp[k] = strings.Join(nameArr, ",")
+	}
+	return
+}
+
+// 根据公司ID获取目前行业所对应的正式权限
+func GetCompanyReportPermissionNameMapByCompanyId(companyIds []int) (mapContractResp map[int]string, err error) {
+	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 AND status = '正式' "
+	pars = append(pars, companyIds)
+
+	permissionList, e := models.GetChartPermissionList()
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetChartPermissionList, Err: " + e.Error())
+		return
+	}
+	mappermissionName := make(map[int]string)
+	for _, v := range permissionList {
+		if v.ProductId == 2 {
+			mappermissionName[v.ChartPermissionId] = v.Remark
+		}
+	}
+
+	mapContractIdPerssion := make(map[int]string) //单个合同ID所对应的套餐或者权限名称
+
+	companyReportPermissionList, e := models.GetCompanyReportPermissionList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyReportPermissionList, Err: " + e.Error())
+		return
+	}
+
+	mapIsUpgrade := make(map[string]bool) //合同ID对应的行业是否有升级
+	for _, v := range companyReportPermissionList {
+		//如果开通的不是整个套餐,那么就做单独的子权限处理
+		if strings.Count(mapContractIdPerssion[(v.CompanyId)], "w套餐") == 0 {
+			if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+				if v.ExpensiveYx == 1 {
+					mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
+				} else if v.ExpensiveYx == 2 {
+					mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
+				} else {
+					mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
+				}
+			} else {
+				mapContractIdPerssion[(v.CompanyId)] += mappermissionName[v.ChartPermissionId] + ","
+				if v.IsUpgrade == 1 {
+					//合同ID,权限名称形成唯一的主键索引
+					perssionName := mappermissionName[v.ChartPermissionId]
+					perssionName = strings.Replace(perssionName, "(客观)", "", -1)
+					perssionName = strings.Replace(perssionName, "(主观)", "", -1)
+					mapIsUpgrade[fmt.Sprint(v.CompanyId, "perssionName", perssionName)] = true
+				}
+			}
+		} else {
+			if v.ChartPermissionId == utils.ZHUAN_JIA_ID {
+				mapContractIdPerssion[(v.CompanyId)] += utils.ZHUAN_JIA_NAME + ","
+			}
+			if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+				if v.ExpensiveYx == 1 {
+					mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
+				} else if v.ExpensiveYx == 2 {
+					mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
+				} else {
+					mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
+				}
+			}
+
+			if v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
+				mapContractIdPerssion[(v.CompanyId)] += utils.YAN_XUAN_KOU_DIAN_BAO_NAME + ","
+			}
+		}
+	}
+	//合并客观权限
+	for k, v := range mapContractIdPerssion {
+		perssionName := v
+		if strings.Count(v, utils.YI_YAO_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "医药(主观)", "医药", -1)
+			perssionName = strings.Replace(perssionName, "医药(客观)", "", -1)
+		}
+		if strings.Count(v, utils.XIAO_FEI_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "消费(主观)", "消费", -1)
+			perssionName = strings.Replace(perssionName, "消费(客观)", "", -1)
+		}
+		if strings.Count(v, utils.KE_JI_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "科技(主观)", "科技", -1)
+			perssionName = strings.Replace(perssionName, "科技(客观)", "", -1)
+		}
+		if strings.Count(v, utils.ZHI_ZAO_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "智造(主观)", "智造", -1)
+			perssionName = strings.Replace(perssionName, "智造(客观)", "", -1)
+		}
+
+		perssionName = strings.TrimRight(perssionName, ",")
+		mapContractIdPerssion[k] = perssionName
+	}
+	mapContractResp = make(map[int]string, 0)
+
+	//过滤多余的","
+	for k, v := range mapContractIdPerssion {
+		sliceName := strings.Split(v, ",")
+		var nameArr []string
+		for _, vName := range sliceName {
+			if vName == "" {
+				continue
+			}
+			if mapIsUpgrade[fmt.Sprint(k, "perssionName", vName)] {
+				vName += "(升级)"
+			}
+			nameArr = append(nameArr, vName)
+		}
+		mapContractResp[k] = strings.Join(nameArr, ",")
+	}
+	return
+}
+
 // Redis对列消息中的结构体
 type RaiServeBillRedis struct {
 	Content          string    `comment:"服务内容说明"`

+ 2 - 0
utils/constants.go

@@ -116,6 +116,8 @@ const (
 	TIME_LINE_ID                     int    = 99999                           // 策略时间线的值
 	TIME_LINE_NAME                   string = "时间线"                           // 策略时间线的名称
 	ACTEGORY_ID_AI_QY                int    = 61                              // AI前沿自定义ID
+	ZHUAN_JIA_NAME                   string = "专家"
+	ZHUAN_JIA_ID                     int    = 29
 )
 
 const (