Browse Source

Merge remote-tracking branch 'origin/debug' into debug

zwxi 1 year ago
parent
commit
befd2ba7e8

+ 869 - 0
controllers/cygx/enter_score.go

@@ -0,0 +1,869 @@
+package cygx
+
+import (
+	"encoding/json"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"hongze/hz_crm_api/controllers"
+	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/models/cygx"
+	"hongze/hz_crm_api/models/system"
+	"hongze/hz_crm_api/utils"
+	"strings"
+	"time"
+)
+
+// X类客户录分模块
+type EnterScoreController struct {
+	controllers.BaseAuthController
+}
+
+// @Title X试用类客户检索
+// @Description X试用类客户检索接口
+// @Param   KeyWord   query   string  true       "搜索关键词"
+// @Success 200 {object} company.CompanyNameAndIdListResp
+// @router /enterScore/company/searchlist [get]
+func (this *EnterScoreController) CompanySearchList() {
+	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
+	}
+	keyWord := this.GetString("KeyWord")
+	keyWord = strings.Trim(keyWord, " ")
+	keyWord = strings.Replace(keyWord, "'", "", -1)
+
+	resp := new(company.CompanyNameAndIdListResp)
+	var companyCondition string
+	var companypars []interface{}
+	var listResp []*company.CompanyNameAndId
+	companyCondition += ` AND b.product_name = ? `
+	companypars = append(companypars, "权益")
+	companyCondition += ` AND b.status = ? `
+	companypars = append(companypars, "永续")
+
+	if keyWord != "" {
+		companyCondition += ` AND a.company_name LIKE '%` + keyWord + `%' `
+	}
+	companyList, err := company.GetCompanyIdListByproductName(companyCondition, companypars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	if len(companyList) == 0 {
+		listResp = make([]*company.CompanyNameAndId, 0)
+	} else {
+		listResp = companyList
+	}
+	resp.List = listResp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title  详情
+// @Description 获取详情接口
+// @Param   EnterScoreId   query   int  true       "录分ID"
+// @Success Ret=200 {object} cygx.CygxEnterScoreDetailResp
+// @router /enterScore/detail [get]
+func (this *EnterScoreController) EnterScoreDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	AdminUser := this.SysUser
+	if AdminUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+
+	enterScoreId, _ := this.GetInt("EnterScoreId")
+	resp := new(cygx.CygxEnterScoreDetailResp)
+	var itemslistPermission []*cygx.EnterScorePermissionListResp       // 权益行业
+	var itemsFicclistPermission []*cygx.EnterScorePermissionListResp   // FICC行业
+	mapRaiUser := make(map[string][]*cygx.EnterScoreRealNameListResp)  //权益研究员
+	mapFiccUser := make(map[string][]*cygx.EnterScoreRealNameListResp) // FICC研究员
+	var itemsGroup []*cygx.EnterScoreGroupListResp                     //自定义分组
+	if enterScoreId == 0 {
+		//权益研究员
+		sysUserList, err := cygx.GetAskEmailList()
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetAskEmailList Err: " + err.Error()
+			return
+		}
+
+		for _, v := range sysUserList {
+			item := new(cygx.EnterScoreRealNameListResp)
+			item.RealName = v.Name
+			item.ChartPermissionName = v.ChartPermissionName
+			mapRaiUser[v.ChartPermissionName] = append(mapRaiUser[v.ChartPermissionName], item)
+		}
+
+		listPermission, err := cygx.GetChartPermissionAll()
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+			return
+		}
+
+		permissionNameArr := []string{"医药", "消费", "科技", "智造", "策略", "固收"}
+		for _, v := range listPermission {
+			if !utils.InArrayByStr(permissionNameArr, v.PermissionName) {
+				continue
+			}
+			item := new(cygx.EnterScorePermissionListResp)
+			item.ChartPermissionName = v.PermissionName
+			item.List = mapRaiUser[v.PermissionName]
+			itemslistPermission = append(itemslistPermission, item)
+		}
+		resp.EnterScoreObj.ListRai = itemslistPermission
+
+		//ficc 研究员
+		ficcUserList, err := system.GetFiccEnterScoreAdmin()
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetFiccEnterScoreAdmin Err: " + err.Error()
+			return
+		}
+
+		for _, v := range ficcUserList {
+			item := new(cygx.EnterScoreRealNameListResp)
+			item.RealName = v.RealName
+			item.ChartPermissionName = v.GroupName
+			mapFiccUser[v.GroupName] = append(mapFiccUser[v.GroupName], item)
+		}
+
+		permissionFiccNameArr := []string{"宏观组", "建材组", "有色组", "能化组"}
+		for _, v := range permissionFiccNameArr {
+			item := new(cygx.EnterScorePermissionListResp)
+			item.ChartPermissionName = v
+			item.List = mapFiccUser[v]
+			itemsFicclistPermission = append(itemsFicclistPermission, item)
+		}
+		resp.EnterScoreObj.ListFicc = itemsFicclistPermission
+
+		groupNameArr := []string{"销售分", "专题分", "专家分", "云图大拓", "艾摩宏观"}
+		for _, v := range groupNameArr {
+			item := new(cygx.EnterScoreGroupListResp)
+			item.GroupName = v
+			itemsGroup = append(itemsGroup, item)
+		}
+		resp.EnterScoreObj.ListGroup = itemsGroup
+		resp.PercentageObj = resp.EnterScoreObj
+		resp.EnterScoreType = 1
+		resp.Quarter = make([]string, 0)
+	} else {
+		//初始化数据,方便前端渲染
+		var itemslistPermissionInit []*cygx.EnterScorePermissionListResp       // 权益行业
+		var itemsFicclistPermissionInit []*cygx.EnterScorePermissionListResp   // FICC行业
+		var itemsGroupInit []*cygx.EnterScoreGroupListResp                     //自定义分组
+		mapRaiUserInit := make(map[string][]*cygx.EnterScoreRealNameListResp)  //权益研究员
+		mapFiccUserInit := make(map[string][]*cygx.EnterScoreRealNameListResp) // FICC研究员
+
+		enterScoreDetail, err := cygx.GetCygxEnterScoreInfoById(enterScoreId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetCygxEnterScoreInfoById Err: " + err.Error()
+			return
+		}
+
+		resp.EnterScoreId = enterScoreDetail.EnterScoreId
+		resp.CompanyId = enterScoreDetail.CompanyId
+		resp.CompanyName = enterScoreDetail.CompanyName
+		resp.StartDate = enterScoreDetail.StartDate
+		resp.EndDate = enterScoreDetail.EndDate
+		resp.Quarter = strings.Split(enterScoreDetail.Quarter, ",")
+		resp.EnterScoreType = enterScoreDetail.EnterScoreType
+		resp.Ranking = enterScoreDetail.Ranking
+		resp.IsMergeScoring = enterScoreDetail.IsMergeScoring
+		resp.SecuritiesFirmsName = enterScoreDetail.SecuritiesFirmsName
+		resp.MergeProportion = enterScoreDetail.MergeProportion
+		resp.ProportionTotal = enterScoreDetail.ProportionTotal
+		resp.RaiProportionTotal = enterScoreDetail.RaiProportionTotal
+		resp.FiccProportionTotal = enterScoreDetail.FiccProportionTotal
+
+		listResearcher, err := cygx.GeCygxEnterScoreResearcherListById(enterScoreId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GeCygxEnterScoreResearcherListById Err: " + err.Error()
+			return
+		}
+		for _, v := range listResearcher {
+			item := new(cygx.EnterScoreRealNameListResp)
+			item.RealName = v.RealName
+			item.ChartPermissionName = v.ChartPermissionName
+			item.Proportion = v.Proportion
+			if v.ProductId == utils.COMPANY_PRODUCT_RAI_ID {
+				mapRaiUser[v.ChartPermissionName] = append(mapRaiUser[v.ChartPermissionName], item)
+			} else {
+				mapFiccUser[v.ChartPermissionName] = append(mapFiccUser[v.ChartPermissionName], item)
+			}
+		}
+
+		for _, v := range listResearcher {
+			item := new(cygx.EnterScoreRealNameListResp)
+			item.RealName = v.RealName
+			item.ChartPermissionName = v.ChartPermissionName
+			if v.ProductId == utils.COMPANY_PRODUCT_RAI_ID {
+				mapRaiUserInit[v.ChartPermissionName] = append(mapRaiUserInit[v.ChartPermissionName], item)
+			} else {
+				mapFiccUserInit[v.ChartPermissionName] = append(mapFiccUserInit[v.ChartPermissionName], item)
+			}
+		}
+
+		listPermission, err := cygx.GetCygxEnterScorePermissionListById(enterScoreId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetCygxEnterScorePermissionListById Err: " + err.Error()
+			return
+		}
+		for _, v := range listPermission {
+			item := new(cygx.EnterScorePermissionListResp)
+			item.ChartPermissionName = v.ChartPermissionName
+			item.Proportion = v.Proportion
+			if v.ProductId == utils.COMPANY_PRODUCT_RAI_ID {
+				item.List = mapRaiUser[v.ChartPermissionName]
+				itemslistPermission = append(itemslistPermission, item)
+			} else {
+				item.List = mapFiccUser[v.ChartPermissionName]
+				itemsFicclistPermission = append(itemsFicclistPermission, item)
+			}
+		}
+
+		for _, v := range listPermission {
+			item := new(cygx.EnterScorePermissionListResp)
+			item.ChartPermissionName = v.ChartPermissionName
+			if v.ProductId == utils.COMPANY_PRODUCT_RAI_ID {
+				item.List = mapRaiUserInit[v.ChartPermissionName]
+				itemslistPermissionInit = append(itemslistPermissionInit, item)
+			} else {
+				item.List = mapFiccUserInit[v.ChartPermissionName]
+				itemsFicclistPermissionInit = append(itemsFicclistPermissionInit, item)
+			}
+		}
+
+		listGroup, err := cygx.GeCygxEnterScoreGroupListById(enterScoreId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GeCygxEnterScoreGroupListById Err: " + err.Error()
+			return
+		}
+		for _, v := range listGroup {
+			item := new(cygx.EnterScoreGroupListResp)
+			item.GroupName = v.GroupName
+			item.Proportion = v.Proportion
+			itemsGroup = append(itemsGroup, item)
+		}
+
+		for _, v := range listGroup {
+			item := new(cygx.EnterScoreGroupListResp)
+			item.GroupName = v.GroupName
+			itemsGroupInit = append(itemsGroupInit, item)
+		}
+
+		if enterScoreDetail.EnterScoreType == 1 {
+			resp.EnterScoreObj.ListGroup = itemsGroup
+			resp.EnterScoreObj.ListRai = itemslistPermission
+			resp.EnterScoreObj.ListFicc = itemsFicclistPermission
+
+			resp.PercentageObj.ListGroup = itemsGroupInit
+			resp.PercentageObj.ListRai = itemslistPermissionInit
+			resp.PercentageObj.ListFicc = itemsFicclistPermissionInit
+		} else {
+			resp.PercentageObj.ListGroup = itemsGroup
+			resp.PercentageObj.ListRai = itemslistPermission
+			resp.PercentageObj.ListFicc = itemsFicclistPermission
+
+			resp.EnterScoreObj.ListGroup = itemsGroupInit
+			resp.EnterScoreObj.ListRai = itemslistPermissionInit
+			resp.EnterScoreObj.ListFicc = itemsFicclistPermissionInit
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 更新录分
+// @Description 更新录分接口
+// @Param	request	body cygx.UpdateEnterScoreReq true "type json string"
+// @Success 200 {object} "保存成功"
+// @router /enterScore/update [post]
+func (this *EnterScoreController) EnterScoreUpdate() {
+	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
+	}
+	var req cygx.UpdateEnterScoreReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	enterScoreId := req.EnterScoreId
+	companyId := req.CompanyId
+	if companyId == 0 {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误,companyId不可为空"
+		return
+	}
+
+	companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(companyId, utils.COMPANY_PRODUCT_RAI_ID)
+	if err != nil {
+		br.Msg = "查询客户产品信息失败"
+		br.ErrMsg = "查询客户产品信息失败,Err:" + err.Error()
+		return
+	}
+
+	item := new(cygx.CygxEnterScore)
+	item.EnterScoreId = enterScoreId
+	item.CompanyId = companyId
+	item.CompanyName = req.CompanyName
+	item.StartDate = req.StartDate
+	item.EndDate = req.EndDate
+	item.Quarter = strings.Join(req.Quarter, ",")
+	item.EnterScoreType = req.EnterScoreType
+	item.Ranking = req.Ranking
+	item.IsMergeScoring = req.IsMergeScoring
+	item.SecuritiesFirmsName = req.SecuritiesFirmsName
+	item.MergeProportion = req.MergeProportion
+	item.RaiProportionTotal = req.RaiProportionTotal
+	item.FiccProportionTotal = req.FiccProportionTotal
+	item.ProportionTotal = req.ProportionTotal
+	item.SellerId = companyProduct.SellerId
+	item.SellerName = companyProduct.SellerName
+	item.AdminId = sysUser.AdminId
+	item.AdminName = sysUser.RealName
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+
+	var itemsPermission []*cygx.CygxEnterScorePermission //行业数组
+	var itemsResearcher []*cygx.CygxEnterScoreResearcher //研究员数组
+	var itemsGroup []*cygx.CygxEnterScoreGroup           //自定义分组
+	listRai := req.ListRai
+	listFicc := req.ListFicc
+	listGroup := req.ListGroup
+
+	for _, v := range listRai { // 权益数据
+		itemPermission := new(cygx.CygxEnterScorePermission)
+		itemPermission.ChartPermissionName = v.ChartPermissionName
+		itemPermission.Proportion = v.Proportion
+		itemPermission.EnterScoreId = v.EnterScoreId
+		itemPermission.CompanyId = companyId
+		itemPermission.AdminId = sysUser.AdminId
+		itemPermission.AdminName = sysUser.RealName
+		itemPermission.ProductId = utils.COMPANY_PRODUCT_RAI_ID
+		itemPermission.CreateTime = time.Now()
+		itemPermission.ModifyTime = time.Now()
+		itemsPermission = append(itemsPermission, itemPermission)
+		for _, vResearcher := range v.List {
+			itemResearcher := new(cygx.CygxEnterScoreResearcher)
+			itemResearcher.ChartPermissionName = v.ChartPermissionName
+			itemResearcher.EnterScoreId = v.EnterScoreId
+			itemResearcher.CompanyId = companyId
+			itemResearcher.RealName = vResearcher.RealName
+			itemResearcher.Proportion = vResearcher.Proportion
+			itemResearcher.AdminId = sysUser.AdminId
+			itemResearcher.AdminName = sysUser.RealName
+			itemResearcher.ProductId = utils.COMPANY_PRODUCT_RAI_ID
+			itemResearcher.CreateTime = time.Now()
+			itemResearcher.ModifyTime = time.Now()
+			itemsResearcher = append(itemsResearcher, itemResearcher)
+		}
+	}
+
+	for _, v := range listFicc { // FICC数据
+		itemPermission := new(cygx.CygxEnterScorePermission)
+		itemPermission.ChartPermissionName = v.ChartPermissionName
+		itemPermission.Proportion = v.Proportion
+		itemPermission.EnterScoreId = v.EnterScoreId
+		itemPermission.CompanyId = companyId
+		itemPermission.AdminId = sysUser.AdminId
+		itemPermission.AdminName = sysUser.RealName
+		itemPermission.ProductId = utils.COMPANY_PRODUCT_FICC_ID
+		itemPermission.CreateTime = time.Now()
+		itemPermission.ModifyTime = time.Now()
+		itemsPermission = append(itemsPermission, itemPermission)
+		for _, vResearcher := range v.List {
+			itemResearcher := new(cygx.CygxEnterScoreResearcher)
+			itemResearcher.ChartPermissionName = v.ChartPermissionName
+			itemResearcher.EnterScoreId = v.EnterScoreId
+			itemResearcher.CompanyId = companyId
+			itemResearcher.RealName = vResearcher.RealName
+			itemResearcher.Proportion = vResearcher.Proportion
+			itemResearcher.AdminId = sysUser.AdminId
+			itemResearcher.AdminName = sysUser.RealName
+			itemResearcher.ProductId = utils.COMPANY_PRODUCT_FICC_ID
+			itemResearcher.CreateTime = time.Now()
+			itemResearcher.ModifyTime = time.Now()
+			itemsResearcher = append(itemsResearcher, itemResearcher)
+		}
+	}
+
+	for _, v := range listGroup {
+		itemGroup := new(cygx.CygxEnterScoreGroup)
+		itemGroup.GroupName = v.GroupName
+		itemGroup.Proportion = v.Proportion
+		itemGroup.CompanyId = companyId
+		itemGroup.AdminId = sysUser.AdminId
+		itemGroup.AdminName = sysUser.RealName
+		itemGroup.CreateTime = time.Now()
+		itemGroup.ModifyTime = time.Now()
+		itemsGroup = append(itemsGroup, itemGroup)
+	}
+
+	if enterScoreId == 0 { // 新增
+		err = cygx.AddCygxEnterScore(item, itemsPermission, itemsResearcher, itemsGroup)
+	} else { // 修改
+		item.EnterScoreId = enterScoreId
+		err = cygx.UpdateCygxEnterScore(item, itemsPermission, itemsResearcher, itemsGroup)
+	}
+	if err != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.IsAddLog = true
+	br.Msg = "操作成功"
+}
+
+// @Title 列表
+// @Description 列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   KeyWord   query   string  true       "搜索关键词"
+// @Param   AdminId   query   string  true       "销售id,多个用英文逗号隔开,空字符串为全部"
+// @Success 200 {object} cygx.GetCygxEnterScoreListRep
+// @router /enterScore/list [get]
+func (this *EnterScoreController) EnterScoreList() {
+	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")
+	keyWord := this.GetString("KeyWord")
+	adminId := this.GetString("AdminId")
+
+	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 keyWord != "" {
+		condition += ` AND company_name LIKE '%` + keyWord + `%' `
+	}
+	if adminId != "" {
+		condition += ` AND seller_id IN (` + adminId + `) `
+	}
+	total, err := cygx.GetCygxEnterScoreCount(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	list, err := cygx.GetCygxEnterScoreList(condition, pars, startSize, pageSize)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	resp := new(cygx.GetCygxEnterScoreListRep)
+	if len(list) == 0 {
+		resp.List = make([]*cygx.EnterScoreListResp, 0)
+	} else {
+		for _, v := range list {
+			item := new(cygx.EnterScoreListResp)
+			item.EnterScoreId = v.EnterScoreId
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			item.Quarter = strings.Split(v.Quarter, ",")
+			item.EnterScoreType = v.EnterScoreType
+			item.Ranking = v.Ranking
+			item.IsMergeScoring = v.IsMergeScoring
+			item.SecuritiesFirmsName = v.SecuritiesFirmsName
+			item.ProportionTotal = v.ProportionTotal
+			item.EnterScoreId = v.EnterScoreId
+			item.SellerId = v.SellerId
+			item.SellerName = v.SellerName
+			item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
+			item.ModifyTime = v.ModifyTime.Format(utils.FormatDateTime)
+			resp.List = append(resp.List, item)
+		}
+	}
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	resp.Paging = page
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 删除录分
+// @Description 删除录分接口
+// @Param	request	body cygx.UpdateEnterScoreReq true "type json string"
+// @Success 200 {object} "保存成功"
+// @router /enterScore/delete [post]
+func (this *EnterScoreController) EnterScoreDelete() {
+	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
+	}
+	var req cygx.EnterScoreIdReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	enterScoreId := req.EnterScoreId
+	if enterScoreId == 0 {
+		br.Msg = "参数错误!"
+		br.ErrMsg = "参数错误,EnterScoreId 不能为0"
+		return
+	}
+	err = cygx.DeleteEnterScore(enterScoreId)
+	if err != nil {
+		br.Msg = "删除失败"
+		br.ErrMsg = "操作失败Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.IsAddLog = true
+	br.Msg = "删除成功"
+}
+
+// @Title  评分总览
+// @Description 评分总览接口
+// @Param   KeyWord   query   string  true       "搜索关键词"
+// @Param   City   query   string  true       "城市"
+// @Param   StartDate   query   string  false       "开始日期"
+// @Param   EndDate   query   string  false       "结束日期"
+// @Param   EnterScoreType   query   string  false       "展示法方式 1:按评分录入、2:按比例录入,默认1"
+// @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
+// @Success Ret=200 {object} cygx.CompanyNameAndIdListResp
+// @router /enterScore/scoreOverview [get]
+func (this *EnterScoreController) EnterScoreScoreOverview() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	AdminUser := this.SysUser
+	if AdminUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	resp := new(cygx.ScoreOverviewListResp)
+	keyWord := this.GetString("keyWord")
+	city := this.GetString("City")
+	enterScoreType, _ := this.GetInt("EnterScoreType", 1)
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+	//是否导出报表
+	isExport, _ := this.GetBool("IsExport")
+	if startDate == "" {
+		br.Msg = "请选择对应年份与季度"
+		return
+	}
+
+	if isExport {
+		fmt.Println(isExport)
+	}
+
+	var companyCondition string
+	var companypars []interface{}
+	companyCondition += ` AND b.product_name = ? `
+	companypars = append(companypars, "权益")
+	companyCondition += ` AND b.status = ? `
+	companypars = append(companypars, "永续")
+
+	if keyWord != "" {
+		companyCondition += ` AND a.company_name LIKE '%` + keyWord + `%' `
+	}
+	if city != "" {
+		companyCondition += ` AND a.city = ? `
+		companypars = append(companypars, city)
+	}
+
+	companyList, err := company.GetCompanyIdListByproductName(companyCondition, companypars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+
+	var condition string
+	var pars []interface{}
+	if endDate != "" {
+		condition += ` AND start_date >= ? AND start_date <= ? `
+		pars = append(pars, startDate, endDate)
+	}
+
+	if enterScoreType == 2 {
+		condition += ` AND enter_score_type = 2 `
+	}
+
+	total, err := cygx.GetCygxEnterScoreCount(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	if total > 0 {
+		list, err := cygx.GetCygxEnterScoreList(condition, pars, 0, 100)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetCygxEnterScoreListErr:" + err.Error()
+			return
+		}
+		mapenterScoreTypeCompanyIds := make(map[int]bool)
+		var enterScoreIds []int
+		mapenterScore := make(map[int]*cygx.CygxEnterScore) //录分详情放在map中
+		for _, v := range list {
+			mapenterScore[v.CompanyId] = v
+			enterScoreIds = append(enterScoreIds, v.EnterScoreId)
+			if v.EnterScoreType == 2 {
+				mapenterScoreTypeCompanyIds[v.CompanyId] = true //记录按照百分比录入的公司
+			}
+		}
+
+		listResearcher, err := cygx.GeCygxEnterScoreResearcherListByIds(enterScoreIds) //获取所有的研究员
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetCygxEnterScorePermissionListByIds Err:" + err.Error()
+			return
+		}
+		mapResearcher := make(map[string][]*cygx.EnterScoreRealNameListResp)
+		mapResearcherProportion := make(map[string]string)
+		//mapResearcherPermission := make(map[string][]map[string]string)
+		var researcherArr []string // 会出现的研究员姓名
+		mapResearcherbool := make(map[string]bool)
+		for _, v := range listResearcher {
+			if v.Proportion == 0 {
+				continue
+			}
+			if !mapResearcherbool[v.RealName] {
+				researcherArr = append(researcherArr, v.RealName)
+				mapResearcherbool[v.RealName] = true
+			}
+			mapResearcherProportion[fmt.Sprint(v.RealName, "_", v.CompanyId)] = fmt.Sprint(v.Proportion) //研究员姓名、公司ID,占比值对应关系绑定
+		}
+
+		mapResearcherProportionText := make(map[string][]string)
+		for _, vC := range companyList {
+			for _, vR := range researcherArr {
+				var proportionText string
+				if mapResearcherProportion[fmt.Sprint(vR, "_", vC.CompanyId)] != "" {
+					proportionText = mapResearcherProportion[fmt.Sprint(vR, "_", vC.CompanyId)]
+				} else {
+					proportionText = "0"
+				}
+				if mapenterScoreTypeCompanyIds[vC.CompanyId] { //按照百分比展示的拼接 %
+					proportionText += "%"
+				}
+				mapResearcherProportionText[vR] = append(mapResearcherProportionText[vR], proportionText)
+			}
+		}
+
+		researcherArr = make([]string, 0)
+		for _, v := range listResearcher {
+			if v.Proportion == 0 {
+				continue
+			}
+			if utils.InArrayByStr(researcherArr, v.RealName) { //避免重复合并到数组
+				continue
+			}
+			item := new(cygx.EnterScoreRealNameListResp) // 研究员结构体数据
+			item.RealName = v.RealName
+			item.ChartPermissionName = v.ChartPermissionName
+			item.ProportionListText = mapResearcherProportionText[v.RealName]
+			mapResearcher[v.ChartPermissionName] = append(mapResearcher[v.ChartPermissionName], item)
+			researcherArr = append(researcherArr, v.RealName)
+		}
+
+		listPermission, err := cygx.GetCygxEnterScorePermissionListByIds(enterScoreIds) // 获取所有的行业名称
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetCygxEnterScorePermissionListByIds Err:" + err.Error()
+			return
+		}
+		mapPermissionProportion := make(map[string]string)
+		for _, v := range listPermission {
+			if v.Proportion == 0 {
+				continue
+			}
+			mapPermissionProportion[fmt.Sprint(v.ChartPermissionName, "_", v.CompanyId)] = fmt.Sprint(v.Proportion) //行业名称、公司ID,占比值对应关系绑定
+		}
+
+		var permissionArr []string // 会出现的行业名称
+		mapPermissionbool := make(map[string]bool)
+		for _, v := range listPermission {
+			if mapPermissionbool[v.ChartPermissionName] {
+				continue
+			}
+			permissionArr = append(permissionArr, v.ChartPermissionName)
+			mapPermissionbool[v.ChartPermissionName] = true
+		}
+
+		mapPermissionProportionText := make(map[string][]string)
+		for _, vC := range companyList {
+			for _, vP := range permissionArr {
+				var proportionText string
+				if mapPermissionProportion[fmt.Sprint(vP, "_", vC.CompanyId)] != "" {
+					proportionText = mapPermissionProportion[fmt.Sprint(vP, "_", vC.CompanyId)]
+				} else {
+					proportionText = "0"
+				}
+				if mapenterScoreTypeCompanyIds[vC.CompanyId] { //按照百分比展示的拼接 %
+					proportionText += "%"
+				}
+				mapPermissionProportionText[vP] = append(mapPermissionProportionText[vP], proportionText)
+			}
+		}
+
+		var itemsP []*cygx.EnterScorePermissionListResp
+		for _, v := range permissionArr {
+			itemP := new(cygx.EnterScorePermissionListResp) //行业结构体
+			itemP.ChartPermissionName = v
+			itemP.ProportionListText = mapPermissionProportionText[v]
+			itemP.List = mapResearcher[v]
+			itemsP = append(itemsP, itemP)
+		}
+
+		listGroup, err := cygx.GeCygxEnterScoreGroupListByIds(enterScoreIds) // 获取所有自定义分组名称
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GeCygxEnterScoreGroupListByIds Err:" + err.Error()
+			return
+		}
+		mapGroupProportion := make(map[string]string)
+		var groupArr []string // 会出现的自定义分组名称
+		mapGroupbool := make(map[string]bool)
+		for _, v := range listGroup {
+			mapGroupProportion[fmt.Sprint(v.GroupName, "_", v.CompanyId)] = fmt.Sprint(v.Proportion) //自定义分组名称、公司ID,占比值对应关系绑定
+			if mapGroupbool[v.GroupName] {
+				continue
+			}
+			groupArr = append(groupArr, v.GroupName)
+			mapGroupbool[v.GroupName] = true
+		}
+		mapGroupProportionText := make(map[string][]string)
+		for _, vC := range companyList {
+			for _, vP := range groupArr {
+				var proportionText string
+				if mapGroupProportion[fmt.Sprint(vP, "_", vC.CompanyId)] != "" {
+					proportionText = mapGroupProportion[fmt.Sprint(vP, "_", vC.CompanyId)]
+				} else {
+					proportionText = "0"
+				}
+				if mapenterScoreTypeCompanyIds[vC.CompanyId] { //按照百分比展示的拼接 %
+					proportionText += "%"
+				}
+				mapGroupProportionText[vP] = append(mapGroupProportionText[vP], proportionText)
+			}
+		}
+
+		var itemsG []*cygx.EnterScoreGroupListResp
+		for _, v := range groupArr {
+			itemG := new(cygx.EnterScoreGroupListResp) //行业结构体
+			itemG.GroupName = v
+			itemG.ProportionListText = mapGroupProportionText[v]
+			itemsG = append(itemsG, itemG)
+		}
+
+		var rankingText []string             //排名
+		var securitiesFirmsNameText []string //券商名称
+		var proportionTotalText []string     //占比
+
+		for _, vC := range companyList {
+			var ranking, securitiesFirmsName, proportionTotal string
+			item := mapenterScore[vC.CompanyId]
+			if item != nil {
+				ranking = item.Ranking
+				securitiesFirmsName = item.SecuritiesFirmsName
+				proportionTotal = fmt.Sprint(item.ProportionTotal)
+			}
+			if mapenterScoreTypeCompanyIds[vC.CompanyId] { //按照百分比展示的拼接 %
+				proportionTotal += "%"
+			}
+			rankingText = append(rankingText, ranking)
+			securitiesFirmsNameText = append(securitiesFirmsNameText, securitiesFirmsName)
+			proportionTotalText = append(proportionTotalText, proportionTotal)
+		}
+
+		itemranking := new(cygx.EnterScoreGroupListResp) //排名结构体
+		itemranking.GroupName = "排名"
+		itemranking.ProportionListText = rankingText
+		itemsG = append(itemsG, itemranking)
+
+		itemsecuritiesFirmsName := new(cygx.EnterScoreGroupListResp) //券商名称结构体
+		itemsecuritiesFirmsName.GroupName = "券商名称"
+		itemsecuritiesFirmsName.ProportionListText = securitiesFirmsNameText
+		itemsG = append(itemsG, itemsecuritiesFirmsName)
+
+		itemproportionTotal := new(cygx.EnterScoreGroupListResp) //券商名称结构体
+		itemproportionTotal.GroupName = "占比"
+		itemproportionTotal.ProportionListText = proportionTotalText
+		itemsG = append(itemsG, itemproportionTotal)
+
+		resp.ListPermission = itemsP
+		resp.ListGroup = itemsG
+	}
+	resp.ListCompany = companyList
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 2 - 1
controllers/eta_trial.go

@@ -887,7 +887,8 @@ func (this *ETATrialController) Approval() {
 
 		// 新增试用客户手工权限
 		go func() {
-			_ = services.CreateTrialUserManualAuth(newId, admin.RealName)
+			//_ = services.CreateTrialUserManualAuth(newId, admin.RealName)
+			_ = services.EtaTrialManualUserAddAuth(newId, admin.RealName)
 		}()
 	}
 

+ 446 - 0
models/cygx/enter_score.go

@@ -0,0 +1,446 @@
+package cygx
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/utils"
+	"time"
+)
+
+// CygxEnterScore 结构体代表了 cygx_enter_score 表格
+type CygxEnterScore struct {
+	EnterScoreId        int       `orm:"column(enter_score_id);pk";comment:"主键"`
+	CompanyId           int       `comment:"公司ID"`
+	CompanyName         string    `comment:"客户名称"`
+	StartDate           string    `comment:"开始日期"`
+	EndDate             string    `comment:"结束日期"`
+	Quarter             string    `comment:"季度"`
+	EnterScoreType      int       `comment:"录入方式 1:按评分录入、2:按比例录入"`
+	Ranking             string    `comment:"排名"`
+	IsMergeScoring      int       `comment:"是否合并打分"`
+	SecuritiesFirmsName string    `comment:"券商名称"`
+	MergeProportion     float64   `comment:"合并占比"`
+	RaiProportionTotal  float64   `comment:"权益研究员占比"`
+	FiccProportionTotal float64   `comment:"FICC研究员占比"`
+	ProportionTotal     float64   `comment:"合计总占比"`
+	SellerId            int       `comment:"所属销售id"`
+	SellerName          string    `comment:"所属销售名称"`
+	AdminId             int       `comment:"操作人ID"`
+	AdminName           string    `comment:"操作人姓名"`
+	CreateTime          time.Time `comment:"创建时间"`
+	ModifyTime          time.Time `comment:"更新时间"`
+}
+
+type CygxEnterScoreDetailResp struct {
+	EnterScoreId        int               `comment:"录分ID"`
+	CompanyId           int               `comment:"公司ID,公司标识符"`
+	CompanyName         string            `comment:"公司名称"`
+	StartDate           string            `comment:"开始日期"`
+	EndDate             string            `comment:"结束日期"`
+	Quarter             []string          `comment:"季度,评分季度"`
+	EnterScoreType      int               `comment:"录入方式 1:按评分录入、2:按比例录入"`
+	Ranking             string            `comment:"排名"`
+	IsMergeScoring      int               `comment:"是否合并打分"`
+	SecuritiesFirmsName string            `comment:"券商名称"`
+	MergeProportion     float64           `comment:"合并占比"`
+	ProportionTotal     float64           `comment:"合计总占比"`
+	RaiProportionTotal  float64           `comment:"权益研究员占比"`
+	FiccProportionTotal float64           `comment:"FICC研究员占比"`
+	EnterScoreObj       EnterScoreDateObj `comment:"按评分录入"`
+	PercentageObj       EnterScoreDateObj `comment:"按比例录入"`
+}
+
+// 行业
+type EnterScoreDateObj struct {
+	ListRai   []*EnterScorePermissionListResp //权益列表
+	ListFicc  []*EnterScorePermissionListResp //FICC列表
+	ListGroup []*EnterScoreGroupListResp      //其他配置信息
+}
+
+// 行业
+type EnterScorePermissionListResp struct {
+	ChartPermissionName string   `description:"行业名称"`
+	Proportion          float64  `description:"占比"`
+	ProportionListText  []string `description:"占比列表"`
+	EnterScoreId        int      `comment:"录分ID"`
+	List                []*EnterScoreRealNameListResp
+}
+
+// 占比描述
+type EnterScoreProportionTextResp struct {
+	ProportionText string
+}
+
+// 研究员
+type EnterScoreRealNameListResp struct {
+	RealName            string   `comment:"研究员姓名"`
+	Proportion          float64  `comment:"占比"`
+	ProportionListText  []string `description:"占比列表"`
+	ChartPermissionName string   `comment:"行业名称"`
+}
+
+// 其他分组
+type EnterScoreGroupListResp struct {
+	GroupName          string   `description:"组名"`
+	Proportion         float64  `description:"占比"`
+	ProportionListText []string `description:"占比列表"`
+}
+
+// 添加或修改录分时的入参结构体
+type UpdateEnterScoreReq struct {
+	EnterScoreId        int                             `comment:"录分ID"`
+	CompanyId           int                             `comment:"公司ID"`
+	CompanyName         string                          `comment:"客户名称"`
+	StartDate           string                          `comment:"开始日期"`
+	EndDate             string                          `comment:"结束日期"`
+	Quarter             []string                        `comment:"季度"`
+	EnterScoreType      int                             `comment:"录入方式 1:按评分录入、2:按比例录入"`
+	Ranking             string                          `comment:"排名"`
+	IsMergeScoring      int                             `comment:"是否合并打分"`
+	SecuritiesFirmsName string                          `comment:"券商名称"`
+	MergeProportion     float64                         `comment:"合并占比"`
+	RaiProportionTotal  float64                         `comment:"权益研究员占比"`
+	FiccProportionTotal float64                         `comment:"FICC研究员占比"`
+	ProportionTotal     float64                         `comment:"合计总占比"`
+	ListRai             []*EnterScorePermissionListResp //权益列表
+	ListFicc            []*EnterScorePermissionListResp //FICC列表
+	ListGroup           []*EnterScoreGroupListResp      //其他配置信息
+}
+
+type EnterScoreIdReq struct {
+	EnterScoreId int `comment:"录分ID"`
+}
+
+// CygxEnterScoreGroup 结构体代表 cygx_enter_score_group 表
+type CygxEnterScoreGroup struct {
+	EnterScoreGroupId int       `orm:"column(enter_score_group_id);pk";comment:"主键"`
+	EnterScoreId      int       `comment:"cygx_enter_score主键"`
+	CompanyId         int       `comment:"公司ID"`
+	GroupName         string    `comment:"名称"`
+	Proportion        float64   `comment:"占比"`
+	AdminId           int       `comment:"操作人ID"`
+	AdminName         string    `comment:"操作人姓名"`
+	CreateTime        time.Time `comment:"创建时间"`
+	ModifyTime        time.Time `comment:"更新时间"`
+}
+
+// CygxEnterScorePermission 结构体代表 cygx_enter_score_permission 表
+type CygxEnterScorePermission struct {
+	EnterScorePermissionId int       `orm:"column(enter_score_permission_id);pk";comment:"主键"`
+	EnterScoreId           int       `comment:"cygx_enter_score主键"`
+	CompanyId              int       `comment:"公司ID"`
+	ChartPermissionName    string    `comment:"名称"`
+	Proportion             float64   `comment:"占比"`
+	ProductId              float64   `comment:"产品id,1:FICC、2:权益"`
+	AdminId                int       `comment:"操作人ID"`
+	AdminName              string    `comment:"操作人姓名"`
+	CreateTime             time.Time `comment:"创建时间"`
+	ModifyTime             time.Time `comment:"更新时间"`
+}
+
+// CygxEnterScoreResearcher 结构体代表 cygx_enter_score_researcher 表
+type CygxEnterScoreResearcher struct {
+	EnterScoreDataId    int       `orm:"column(enter_score_data_id);pk";comment:"主键"`
+	EnterScoreId        int       `comment:"cygx_enter_score主键"`
+	CompanyId           int       `comment:"公司ID"`
+	Proportion          float64   `comment:"占比"`
+	RealName            string    `comment:"研究员姓名"`
+	ChartPermissionName string    `comment:"名称"`
+	ProductId           float64   `comment:"产品id,1:FICC、2:权益"`
+	AdminId             int       `comment:"操作人ID"`
+	AdminName           string    `comment:"操作人姓名"`
+	CreateTime          time.Time `comment:"创建时间"`
+	ModifyTime          time.Time `comment:"更新时间"`
+}
+
+// 更新派点信息
+func AddCygxEnterScore(item *CygxEnterScore, itemsPermission []*CygxEnterScorePermission, itemsResearcher []*CygxEnterScoreResearcher, itemsGroup []*CygxEnterScoreGroup) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	newId, err := to.Insert(item)
+	if err != nil {
+		return
+	}
+	enterScoreId := int(newId)
+
+	for _, v := range itemsPermission {
+		v.EnterScoreId = enterScoreId
+	}
+
+	for _, v := range itemsResearcher {
+		v.EnterScoreId = enterScoreId
+	}
+
+	for _, v := range itemsGroup {
+		v.EnterScoreId = enterScoreId
+	}
+
+	//批量添加行业信息
+	_, err = to.InsertMulti(len(itemsPermission), itemsPermission)
+	if err != nil {
+		return
+	}
+
+	//批量添加研究员信息
+	_, err = to.InsertMulti(len(itemsResearcher), itemsResearcher)
+	if err != nil {
+		return
+	}
+
+	//批量添加自定义分组信息
+	_, err = to.InsertMulti(len(itemsGroup), itemsGroup)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// 更新派点信息
+func UpdateCygxEnterScore(item *CygxEnterScore, itemsPermission []*CygxEnterScorePermission, itemsResearcher []*CygxEnterScoreResearcher, itemsGroup []*CygxEnterScoreGroup) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	_, err = to.Update(item, "CompanyId", "CompanyName", "StartDate", "EndDate", "Quarter", "EnterScoreType", "Ranking", "IsMergeScoring", "SecuritiesFirmsName", "MergeProportion", "RaiProportionTotal", "FiccProportionTotal", "ProportionTotal", "SellerId", "SellerName", "AdminId", "AdminName", "ModifyTime")
+	if err != nil {
+		return
+	}
+	enterScoreId := item.EnterScoreId
+
+	//批量删除行业信息
+	sql := `DELETE FROM cygx_enter_score_permission WHERE enter_score_id = ?`
+	_, err = to.Raw(sql, enterScoreId).Exec()
+	if err != nil {
+		return
+	}
+
+	//批量删除研究员信息
+	sql = `	DELETE FROM cygx_enter_score_researcher WHERE enter_score_id = ?`
+	_, err = to.Raw(sql, enterScoreId).Exec()
+	if err != nil {
+		return
+	}
+
+	//批量删除自定义分组信息
+	sql = `	DELETE FROM cygx_enter_score_group WHERE enter_score_id = ?`
+	_, err = to.Raw(sql, enterScoreId).Exec()
+	if err != nil {
+		return
+	}
+
+	for _, v := range itemsPermission {
+		v.EnterScoreId = enterScoreId
+	}
+
+	for _, v := range itemsResearcher {
+		v.EnterScoreId = enterScoreId
+	}
+
+	for _, v := range itemsGroup {
+		v.EnterScoreId = enterScoreId
+	}
+
+	//批量添加行业信息
+	_, err = to.InsertMulti(len(itemsPermission), itemsPermission)
+	if err != nil {
+		return
+	}
+
+	//批量添加研究员信息
+	_, err = to.InsertMulti(len(itemsResearcher), itemsResearcher)
+	if err != nil {
+		return
+	}
+
+	//批量添加自定义分组信息
+	_, err = to.InsertMulti(len(itemsGroup), itemsGroup)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// 通过ID获取详情
+func GetCygxEnterScoreInfoById(id int) (item *CygxEnterScore, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_enter_score  WHERE enter_score_id = ? `
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+// 行业列表
+func GetCygxEnterScorePermissionListById(enterScoreId int) (items []*CygxEnterScorePermission, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_enter_score_permission WHERE enter_score_id = ? `
+	_, err = o.Raw(sql, enterScoreId).QueryRows(&items)
+	return
+}
+
+// 根据多个录分ID获取行业列表
+func GetCygxEnterScorePermissionListByIds(enterScoreIds []int) (items []*CygxEnterScorePermission, err error) {
+	lenArr := len(enterScoreIds)
+	if lenArr == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_enter_score_permission  WHERE  enter_score_id IN  (` + utils.GetOrmInReplace(lenArr) + `) `
+	_, err = o.Raw(sql, enterScoreIds).QueryRows(&items)
+	return
+}
+
+// 研究员列表
+func GeCygxEnterScoreResearcherListById(enterScoreId int) (items []*CygxEnterScoreResearcher, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_enter_score_researcher WHERE enter_score_id = ? `
+	_, err = o.Raw(sql, enterScoreId).QueryRows(&items)
+	return
+}
+
+// 根据多个录分ID获取研究员列表
+func GeCygxEnterScoreResearcherListByIds(enterScoreIds []int) (items []*CygxEnterScoreResearcher, err error) {
+	lenArr := len(enterScoreIds)
+	if lenArr == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_enter_score_researcher  WHERE  enter_score_id IN  (` + utils.GetOrmInReplace(lenArr) + `) `
+	_, err = o.Raw(sql, enterScoreIds).QueryRows(&items)
+	return
+}
+
+// 自定义分组列表
+func GeCygxEnterScoreGroupListById(enterScoreId int) (items []*CygxEnterScoreGroup, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_enter_score_group WHERE enter_score_id = ? `
+	_, err = o.Raw(sql, enterScoreId).QueryRows(&items)
+	return
+}
+
+// 根据多个录分ID获取自定义分组列表
+func GeCygxEnterScoreGroupListByIds(enterScoreIds []int) (items []*CygxEnterScoreGroup, err error) {
+	lenArr := len(enterScoreIds)
+	if lenArr == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_enter_score_group  WHERE  enter_score_id IN  (` + utils.GetOrmInReplace(lenArr) + `) `
+	_, err = o.Raw(sql, enterScoreIds).QueryRows(&items)
+	return
+}
+
+// 获取列表
+func GetCygxEnterScoreList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxEnterScore, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_enter_score  WHERE 1 = 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+// 获取数量
+func GetCygxEnterScoreCount(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_enter_score  WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+type EnterScoreListResp struct {
+	EnterScoreId        int      `comment:"录分ID"`
+	CompanyId           int      `comment:"公司ID,公司标识符"`
+	CompanyName         string   `comment:"公司名称"`
+	Quarter             []string `comment:"季度,评分季度"`
+	EnterScoreType      int      `comment:"录入方式 1:按评分录入、2:按比例录入"`
+	Ranking             string   `comment:"排名"`
+	IsMergeScoring      int      `comment:"是否合并打分"`
+	SecuritiesFirmsName string   `comment:"券商名称"`
+	ProportionTotal     float64  `comment:"合计总占比"`
+	SellerId            int      `comment:"所属销售id"`
+	SellerName          string   `comment:"所属销售名称"`
+	CreateTime          string   `comment:"创建时间"`
+	ModifyTime          string   `comment:"更新时间"`
+}
+
+type GetCygxEnterScoreListRep struct {
+	Paging *paging.PagingItem `description:"分页数据"`
+	List   []*EnterScoreListResp
+}
+
+// 删除
+func DeleteEnterScore(enterScoreId int) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	//删除单条录分信息
+	sql := `DELETE FROM cygx_enter_score WHERE enter_score_id = ?`
+	_, err = to.Raw(sql, enterScoreId).Exec()
+	if err != nil {
+		return
+	}
+
+	//批量删除行业信息
+	sql = `DELETE FROM cygx_enter_score_permission WHERE enter_score_id = ?`
+	_, err = to.Raw(sql, enterScoreId).Exec()
+	if err != nil {
+		return
+	}
+
+	//批量删除研究员信息
+	sql = `	DELETE FROM cygx_enter_score_researcher WHERE enter_score_id = ?`
+	_, err = to.Raw(sql, enterScoreId).Exec()
+	if err != nil {
+		return
+	}
+
+	//批量删除自定义分组信息
+	sql = `	DELETE FROM cygx_enter_score_group WHERE enter_score_id = ?`
+	_, err = to.Raw(sql, enterScoreId).Exec()
+	if err != nil {
+		return
+	}
+
+	return
+}
+
+type ScoreOverviewListResp struct {
+	ListCompany    []*company.CompanyNameAndId
+	ListPermission []*EnterScorePermissionListResp
+	ListGroup      []*EnterScoreGroupListResp
+}

+ 4 - 0
models/db.go

@@ -475,6 +475,10 @@ func initCygx() {
 		new(cygx.CygxOrderRefund),
 		new(cygx.CygxOrder),
 		new(cygx.CygxOrderAction),
+		new(cygx.CygxEnterScore),
+		new(cygx.CygxEnterScoreGroup),
+		new(cygx.CygxEnterScorePermission),
+		new(cygx.CygxEnterScoreResearcher),
 	)
 }
 

+ 4 - 4
models/eta_trial/eta_trial_manual.go

@@ -15,7 +15,7 @@ type ETATrialManualClassify struct {
 // GetETATrialManualClassify 获取ETA试用手工数据分类
 func GetETATrialManualClassify() (items []*ETATrialManualClassify, err error) {
 	o := orm.NewOrmUsingDB("weekly_trial")
-	sql := `SELECT classify_id, classify_name, parent_id FROM edb_trial.edbdata_classify WHERE is_show=1 ORDER BY sort ASC`
+	sql := `SELECT classify_id, classify_name, parent_id FROM edb_trial_new.edbdata_classify WHERE is_show=1 ORDER BY sort ASC`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
@@ -31,7 +31,7 @@ func GetNoAuthTrialUserIds() (items []*ETATrialUserAdmin, err error) {
 	o := orm.NewOrmUsingDB("weekly_trial")
 	sql := `SELECT a.admin_id, a.real_name FROM weekly_report_trial.admin AS a
 			WHERE a.admin_id NOT IN (
-				SELECT DISTINCT b.admin_id FROM hz_data_trial.manual_user_classify AS b
+				SELECT DISTINCT b.admin_id FROM hz_data_trial_new.manual_user_classify AS b
 			)
 			AND a.department_id = 12 AND a.department_name = "ETA试用客户"`
 	_, err = o.Raw(sql).QueryRows(&items)
@@ -54,14 +54,14 @@ func InsertTrialUserManualAuth(adminId int, adminRealName string, classifyIds []
 	}()
 
 	// 新增权限用户
-	sql := `INSERT INTO hz_data_trial.manual_user (admin_id, admin_real_name, sys_user_id, sys_user_real_name, create_time) VALUES ("%d", "%s", 0, "", NOW())`
+	sql := `INSERT INTO hz_data_trial_new.manual_user (admin_id, admin_real_name, sys_user_id, sys_user_real_name, create_time) VALUES ("%d", "%s", 0, "", NOW())`
 	sql = fmt.Sprintf(sql, adminId, adminRealName)
 	if _, err = tx.Raw(sql).Exec(); err != nil {
 		return
 	}
 	// 新增权限分类
 	for i := range classifyIds {
-		sql = `INSERT INTO hz_data_trial.manual_user_classify (admin_id, classify_id, create_time) VALUES ("%d", "%d", NOW())`
+		sql = `INSERT INTO hz_data_trial_new.manual_user_classify (admin_id, classify_id, create_time) VALUES ("%d", "%d", NOW())`
 		sql = fmt.Sprintf(sql, adminId, classifyIds[i])
 		if _, err = tx.Raw(sql).Exec(); err != nil {
 			return

+ 8 - 0
models/system/sys_admin.go

@@ -512,6 +512,14 @@ func GetRaiAdmin() (items []*AdminItem, err error) {
 	return
 }
 
+// GetFiccEnterScoreAdmin 获取Ficc需要录分的研究员
+func GetFiccEnterScoreAdmin() (items []*AdminItem, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT   *  FROM admin WHERE group_name  IN('宏观组','建材组','有色组','能化组')`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
 // SyncRoleData 同步角色数据
 type SyncRoleData struct {
 	Source int `description:"来源: 1-CRM; 2-ETA"`

+ 54 - 0
routers/commentsRouter.go

@@ -1456,6 +1456,60 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"],
+        beego.ControllerComments{
+            Method: "CompanySearchList",
+            Router: `/enterScore/company/searchlist`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"],
+        beego.ControllerComments{
+            Method: "EnterScoreDelete",
+            Router: `/enterScore/delete`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"],
+        beego.ControllerComments{
+            Method: "EnterScoreDetail",
+            Router: `/enterScore/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"],
+        beego.ControllerComments{
+            Method: "EnterScoreList",
+            Router: `/enterScore/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"],
+        beego.ControllerComments{
+            Method: "EnterScoreScoreOverview",
+            Router: `/enterScore/scoreOverview`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:EnterScoreController"],
+        beego.ControllerComments{
+            Method: "EnterScoreUpdate",
+            Router: `/enterScore/update`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:IndustrialAnalystController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:IndustrialAnalystController"],
         beego.ControllerComments{
             Method: "IndustrialAnalystAdd",

+ 1 - 0
routers/router.go

@@ -161,6 +161,7 @@ func init() {
 				&cygx.AskserieVideoController{},
 				&cygx.UserAdminShareHistoryController{},
 				&cygx.OrderController{},
+				&cygx.EnterScoreController{},
 			),
 		),
 		web.NSNamespace("/advisory",

+ 77 - 0
services/crm_eta.go

@@ -3,6 +3,7 @@ package services
 import (
 	"encoding/json"
 	"fmt"
+	"hongze/hz_crm_api/services/alarm_msg"
 	"hongze/hz_crm_api/utils"
 	"io/ioutil"
 	"net/http"
@@ -178,3 +179,79 @@ func CodeLoginFromMiddleServer(authCode string) (tokenResp GetEtaTokenData, err
 	tokenResp = result.Data
 	return
 }
+
+// EtaTrialManualUserAddAuthReq 体验版用户添加手工权限
+type EtaTrialManualUserAddAuthReq struct {
+	AdminId   int    `json:"admin_id" description:"用户ID"`
+	AdminName string `json:"admin_name" description:"用户名"`
+}
+
+// EtaTrialManualUserAddAuth CRM_ETA服务-体验版用户添加手工权限
+func EtaTrialManualUserAddAuth(adminId int, adminName string) (err error) {
+	// 体验版无测试环境
+	//if utils.RunMode != "release" {
+	//	return
+	//}
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("EtaTrialManualUserAddAuth, 新增试用客户手工录入权限失败, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+
+	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta_trial/manual_user/add_auth")
+	param := EtaTrialManualUserAddAuthReq{
+		AdminId:   adminId,
+		AdminName: adminName,
+	}
+	data, e := json.Marshal(param)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	body := ioutil.NopCloser(strings.NewReader(string(data)))
+	client := &http.Client{}
+	req, e := http.NewRequest("POST", url, body)
+	if e != nil {
+		err = fmt.Errorf("http create request err: %s", e.Error())
+		return
+	}
+
+	contentType := "application/json;charset=utf-8"
+	req.Header.Set("Content-Type", contentType)
+	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
+	resp, e := client.Do(req)
+	if e != nil {
+		err = fmt.Errorf("http client do err: %s", e.Error())
+		return
+	}
+	defer func() {
+		_ = resp.Body.Close()
+	}()
+	b, e := ioutil.ReadAll(resp.Body)
+	if e != nil {
+		err = fmt.Errorf("resp body read err: %s", e.Error())
+		return
+	}
+	if len(b) == 0 {
+		err = fmt.Errorf("resp body is empty")
+		return
+	}
+	// 生产环境解密, 注意有个坑前后的双引号
+	if utils.RunMode == "release" {
+		str := string(b)
+		str = strings.Trim(str, `"`)
+		b = utils.DesBase64Decrypt([]byte(str))
+	}
+
+	result := new(MiddleServerResultData)
+	if e = json.Unmarshal(b, &result); e != nil {
+		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+		return
+	}
+	if result.Code != 200 {
+		err = fmt.Errorf("result: %s", string(b))
+		return
+	}
+	return
+}

+ 2 - 1
services/eta_trial.go

@@ -191,7 +191,8 @@ func ApprovalApply(approvalId int) (err error) {
 
 		// 新增试用客户手工权限
 		go func() {
-			_ = CreateTrialUserManualAuth(newId, admin.RealName)
+			//_ = CreateTrialUserManualAuth(newId, admin.RealName)
+			_ = EtaTrialManualUserAddAuth(newId, admin.RealName)
 		}()
 	}