xingzai 10 bulan lalu
induk
melakukan
bfdb5ee515
3 mengubah file dengan 367 tambahan dan 11 penghapusan
  1. 294 2
      controllers/cygx/enter_score.go
  2. 64 9
      models/cygx/enter_score.go
  3. 9 0
      routers/commentsRouter.go

+ 294 - 2
controllers/cygx/enter_score.go

@@ -2,6 +2,7 @@ package cygx
 
 import (
 	"encoding/json"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/models"
@@ -372,6 +373,7 @@ func (this *EnterScoreController) EnterScoreUpdate() {
 		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
@@ -382,6 +384,7 @@ func (this *EnterScoreController) EnterScoreUpdate() {
 			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
@@ -398,6 +401,7 @@ func (this *EnterScoreController) EnterScoreUpdate() {
 		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
@@ -408,6 +412,7 @@ func (this *EnterScoreController) EnterScoreUpdate() {
 			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
@@ -423,6 +428,7 @@ func (this *EnterScoreController) EnterScoreUpdate() {
 		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()
@@ -533,8 +539,8 @@ func (this *EnterScoreController) EnterScoreList() {
 	br.Data = resp
 }
 
-// @Title 更新录分
-// @Description 更新录分接口
+// @Title 删除录分
+// @Description 删除录分接口
 // @Param	request	body cygx.UpdateEnterScoreReq true "type json string"
 // @Success 200 {object} "保存成功"
 // @router /enterScore/delete [post]
@@ -575,3 +581,289 @@ func (this *EnterScoreController) EnterScoreDelete() {
 	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
+}

+ 64 - 9
models/cygx/enter_score.go

@@ -3,6 +3,8 @@ 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"
 )
 
@@ -58,23 +60,31 @@ type EnterScoreDateObj struct {
 
 // 行业
 type EnterScorePermissionListResp struct {
-	ChartPermissionName string  `description:"行业名称"`
-	Proportion          float64 `description:"占比"`
-	EnterScoreId        int     `comment:"录分ID"`
+	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:"占比"`
-	ChartPermissionName string  `comment:"行业名称"`
+	RealName            string   `comment:"研究员姓名"`
+	Proportion          float64  `comment:"占比"`
+	ProportionListText  []string `description:"占比列表"`
+	ChartPermissionName string   `comment:"行业名称"`
 }
 
 // 其他分组
 type EnterScoreGroupListResp struct {
-	GroupName  string  `description:"组名"`
-	Proportion float64 `description:"占比"`
+	GroupName          string   `description:"组名"`
+	Proportion         float64  `description:"占比"`
+	ProportionListText []string `description:"占比列表"`
 }
 
 // 添加或修改录分时的入参结构体
@@ -106,6 +116,7 @@ type EnterScoreIdReq struct {
 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"`
@@ -118,6 +129,7 @@ type CygxEnterScoreGroup struct {
 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:权益"`
@@ -131,6 +143,7 @@ type CygxEnterScorePermission struct {
 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:"名称"`
@@ -284,6 +297,18 @@ func GetCygxEnterScorePermissionListById(enterScoreId int) (items []*CygxEnterSc
 	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")
@@ -292,7 +317,19 @@ func GeCygxEnterScoreResearcherListById(enterScoreId int) (items []*CygxEnterSco
 	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 = ? `
@@ -300,6 +337,18 @@ func GeCygxEnterScoreGroupListById(enterScoreId int) (items []*CygxEnterScoreGro
 	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")
@@ -389,3 +438,9 @@ func DeleteEnterScore(enterScoreId int) (err error) {
 
 	return
 }
+
+type ScoreOverviewListResp struct {
+	ListCompany    []*company.CompanyNameAndId
+	ListPermission []*EnterScorePermissionListResp
+	ListGroup      []*EnterScoreGroupListResp
+}

+ 9 - 0
routers/commentsRouter.go

@@ -1492,6 +1492,15 @@ 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: "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",