|
@@ -4,12 +4,15 @@ import (
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
"github.com/rdlucklib/rdluck_tools/paging"
|
|
|
+ "github.com/tealeg/xlsx"
|
|
|
"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"
|
|
|
+ "os"
|
|
|
+ "path/filepath"
|
|
|
"strings"
|
|
|
"time"
|
|
|
)
|
|
@@ -346,6 +349,16 @@ func (this *EnterScoreController) EnterScoreUpdate() {
|
|
|
item.StartDate = req.StartDate
|
|
|
item.EndDate = req.EndDate
|
|
|
item.Quarter = strings.Join(req.Quarter, ",")
|
|
|
+
|
|
|
+ quarterDate, err := utils.GetQuarterStartDatesInRange(req.StartDate, req.EndDate)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = "获取对应季度信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ item.QuarterDate = strings.Join(quarterDate, ",")
|
|
|
+
|
|
|
item.EnterScoreType = req.EnterScoreType
|
|
|
item.Ranking = req.Ranking
|
|
|
item.IsMergeScoring = req.IsMergeScoring
|
|
@@ -590,7 +603,7 @@ func (this *EnterScoreController) EnterScoreDelete() {
|
|
|
// @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
|
|
|
+// @Success Ret=200 {object} cygx.ScoreOverviewListResp
|
|
|
// @router /enterScore/scoreOverview [get]
|
|
|
func (this *EnterScoreController) EnterScoreScoreOverview() {
|
|
|
br := new(models.BaseResponse).Init()
|
|
@@ -606,7 +619,7 @@ func (this *EnterScoreController) EnterScoreScoreOverview() {
|
|
|
return
|
|
|
}
|
|
|
resp := new(cygx.ScoreOverviewListResp)
|
|
|
- keyWord := this.GetString("keyWord")
|
|
|
+ keyWord := this.GetString("KeyWord")
|
|
|
city := this.GetString("City")
|
|
|
enterScoreType, _ := this.GetInt("EnterScoreType", 1)
|
|
|
startDate := this.GetString("StartDate")
|
|
@@ -618,10 +631,6 @@ func (this *EnterScoreController) EnterScoreScoreOverview() {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- if isExport {
|
|
|
- fmt.Println(isExport)
|
|
|
- }
|
|
|
-
|
|
|
var companyCondition string
|
|
|
var companypars []interface{}
|
|
|
companyCondition += ` AND b.product_name = ? `
|
|
@@ -862,8 +871,320 @@ func (this *EnterScoreController) EnterScoreScoreOverview() {
|
|
|
resp.ListGroup = itemsG
|
|
|
}
|
|
|
resp.ListCompany = companyList
|
|
|
+
|
|
|
+ //导出excel
|
|
|
+ if isExport {
|
|
|
+ EnterScoreScoreOverviewExport(this, resp, br)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+// EnterScoreScoreOverviewExport 导出Excel
|
|
|
+func EnterScoreScoreOverviewExport(this *EnterScoreController, resp *cygx.ScoreOverviewListResp, br *models.BaseResponse) {
|
|
|
+ dir, err := os.Executable()
|
|
|
+ exPath := filepath.Dir(dir)
|
|
|
+ downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
|
|
|
+ xlsxFile := xlsx.NewFile()
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "生成文件失败"
|
|
|
+ br.ErrMsg = "生成文件失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ style := xlsx.NewStyle()
|
|
|
+ alignment := xlsx.Alignment{
|
|
|
+ Horizontal: "center",
|
|
|
+ Vertical: "center",
|
|
|
+ WrapText: true,
|
|
|
+ }
|
|
|
+
|
|
|
+ style.Alignment = alignment
|
|
|
+ style.ApplyAlignment = true
|
|
|
+
|
|
|
+ sheel, err := xlsxFile.AddSheet("评分总览")
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "新增Sheet失败"
|
|
|
+ br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sheel.SetColWidth(0, 0, 30)
|
|
|
+ sheel.SetColWidth(1, 1, 15)
|
|
|
+ sheel.SetColWidth(2, 2, 15)
|
|
|
+ sheel.SetColWidth(3, 3, 18)
|
|
|
+
|
|
|
+ companyList := resp.ListCompany
|
|
|
+ listPermission := resp.ListPermission
|
|
|
+ listGroup := resp.ListGroup
|
|
|
+ titleRow := sheel.AddRow()
|
|
|
+
|
|
|
+ cellNull := titleRow.AddCell()
|
|
|
+ cellNull.SetStyle(style)
|
|
|
+ cellNull.SetValue("")
|
|
|
+ for _, v := range companyList { //第一行公司
|
|
|
+ cellA := titleRow.AddCell()
|
|
|
+ cellA.SetStyle(style)
|
|
|
+ cellA.SetValue(v.CompanyName)
|
|
|
+ }
|
|
|
+ for _, v := range listPermission { // 行业排序名称
|
|
|
+ dataRow := sheel.AddRow()
|
|
|
+ dataRow.SetHeight(20)
|
|
|
+ cellA := dataRow.AddCell()
|
|
|
+ cellA.SetStyle(style)
|
|
|
+ cellA.SetValue(v.ChartPermissionName)
|
|
|
+
|
|
|
+ for _, vCp := range v.ProportionListText { // 行业对应的占比值
|
|
|
+ cellP := dataRow.AddCell()
|
|
|
+ cellP.SetStyle(style)
|
|
|
+ cellP.SetValue(vCp)
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, vUser := range v.List { // 研究员姓名
|
|
|
+ dataRowName := sheel.AddRow()
|
|
|
+ dataRowName.SetHeight(20)
|
|
|
+ cellName := dataRowName.AddCell()
|
|
|
+ cellName.SetStyle(style)
|
|
|
+ cellName.SetValue(vUser.RealName)
|
|
|
+
|
|
|
+ for _, vUp := range vUser.ProportionListText { //研究员占比值
|
|
|
+ cellP := dataRowName.AddCell()
|
|
|
+ cellP.SetStyle(style)
|
|
|
+ cellP.SetValue(vUp)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range listGroup { // 自定义名称
|
|
|
+ dataRow := sheel.AddRow()
|
|
|
+ dataRow.SetHeight(20)
|
|
|
+ cellA := dataRow.AddCell()
|
|
|
+ cellA.SetStyle(style)
|
|
|
+ cellA.SetValue(v.GroupName)
|
|
|
+
|
|
|
+ for _, vG := range v.ProportionListText { // 自定义名称所对应的值
|
|
|
+ cellP := dataRow.AddCell()
|
|
|
+ cellP.SetStyle(style)
|
|
|
+ cellP.SetValue(vG)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ err = xlsxFile.Save(downLoadnFilePath)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "保存文件失败"
|
|
|
+ br.ErrMsg = "保存文件失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
|
|
|
+ downloadFileName := "评分总览" + randStr + ".xlsx"
|
|
|
+ this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
|
|
|
+ defer func() {
|
|
|
+ os.Remove(downLoadnFilePath)
|
|
|
+ }()
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "导出成功"
|
|
|
+}
|
|
|
+
|
|
|
+// @Title 排名总览
|
|
|
+// @Description 排名总览接口
|
|
|
+// @Param AdminId query string true "销售id,多个用英文逗号隔开,空字符串为全部"
|
|
|
+// @Param City query string true "城市"
|
|
|
+// @Param IsExport query bool false "是否导出excel,默认是false"
|
|
|
+// @Success Ret=200 {object} cygx.CompanyNameAndIdListResp
|
|
|
+// @router /enterScore/rankingOverview [get]
|
|
|
+func (this *EnterScoreController) EnterScoreRankingOverview() {
|
|
|
+ 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.RankingOverviewListResp)
|
|
|
+ city := this.GetString("City")
|
|
|
+ adminId := this.GetString("AdminId")
|
|
|
+ //是否导出报表
|
|
|
+ isExport, _ := this.GetBool("IsExport")
|
|
|
+
|
|
|
+ var companyCondition string
|
|
|
+ var companypars []interface{}
|
|
|
+ companyCondition += ` AND b.product_name = ? `
|
|
|
+ companypars = append(companypars, "权益")
|
|
|
+ companyCondition += ` AND b.status = ? `
|
|
|
+ companypars = append(companypars, "永续")
|
|
|
+
|
|
|
+ if adminId != "" {
|
|
|
+ companyCondition += ` AND b.seller_id IN (` + adminId + `) `
|
|
|
+ }
|
|
|
+ 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{}
|
|
|
+
|
|
|
+ total, err := cygx.GetCygxEnterScoreCount(condition, pars)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ dataMd := []string{"10-01", "07-01", "04-01", "01-01"}
|
|
|
+ thisYear := time.Now().Year()
|
|
|
+ startYear := 2018 // 自定义开始时间
|
|
|
+ var quarterDate []string
|
|
|
+ for _, v := range dataMd {
|
|
|
+ dateTimeStr := fmt.Sprint(thisYear, "-", v)
|
|
|
+ dateTime, err := time.Parse("2006-01-02", dateTimeStr)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if dateTime.After(time.Now()) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ quarterDate = append(quarterDate, dateTimeStr)
|
|
|
+ }
|
|
|
+
|
|
|
+ for i := thisYear - 1; i >= startYear; i-- {
|
|
|
+ for _, v := range dataMd {
|
|
|
+ dateTimeStr := fmt.Sprint(i, "-", v)
|
|
|
+ quarterDate = append(quarterDate, dateTimeStr)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var itemsQuarter []*cygx.QuarterDateListResp
|
|
|
+
|
|
|
+ if total > 0 {
|
|
|
+ list, err := cygx.GetCygxEnterScoreList(condition, pars, 0, 9999)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取失败,GetCygxEnterScoreList Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ mapQuarter := make(map[string]string)
|
|
|
+ for _, v := range list {
|
|
|
+ silicequarter := strings.Split(v.QuarterDate, ",")
|
|
|
+ for _, vQ := range silicequarter {
|
|
|
+ mapQuarter[fmt.Sprint(vQ, "_", v.CompanyId)] = v.Ranking //季度时间、公司ID,排名对应关系绑定
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mapRankingText := make(map[string][]string)
|
|
|
+ for _, vC := range companyList {
|
|
|
+ for _, vQ := range quarterDate {
|
|
|
+ var ranking string
|
|
|
+ ranking = mapQuarter[fmt.Sprint(vQ, "_", vC.CompanyId)]
|
|
|
+ mapRankingText[vQ] = append(mapRankingText[vQ], ranking)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, v := range quarterDate {
|
|
|
+ itemQuarter := new(cygx.QuarterDateListResp)
|
|
|
+ itemQuarter.Quarter = v
|
|
|
+ itemQuarter.ProportionListText = mapRankingText[v]
|
|
|
+ itemsQuarter = append(itemsQuarter, itemQuarter)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resp.ListCompany = companyList
|
|
|
+ resp.ListQuarterDate = itemsQuarter
|
|
|
+ //导出excel
|
|
|
+ if isExport {
|
|
|
+ RankingOverviewExport(this, resp, br)
|
|
|
+ return
|
|
|
+ }
|
|
|
br.Ret = 200
|
|
|
br.Success = true
|
|
|
br.Msg = "获取成功"
|
|
|
br.Data = resp
|
|
|
}
|
|
|
+
|
|
|
+// RankingOverviewExport 导出Excel
|
|
|
+func RankingOverviewExport(this *EnterScoreController, resp *cygx.RankingOverviewListResp, br *models.BaseResponse) {
|
|
|
+ dir, err := os.Executable()
|
|
|
+ exPath := filepath.Dir(dir)
|
|
|
+ downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
|
|
|
+ xlsxFile := xlsx.NewFile()
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "生成文件失败"
|
|
|
+ br.ErrMsg = "生成文件失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ style := xlsx.NewStyle()
|
|
|
+ alignment := xlsx.Alignment{
|
|
|
+ Horizontal: "center",
|
|
|
+ Vertical: "center",
|
|
|
+ WrapText: true,
|
|
|
+ }
|
|
|
+
|
|
|
+ style.Alignment = alignment
|
|
|
+ style.ApplyAlignment = true
|
|
|
+
|
|
|
+ sheel, err := xlsxFile.AddSheet("排名总览")
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "新增Sheet失败"
|
|
|
+ br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sheel.SetColWidth(0, 0, 30)
|
|
|
+ sheel.SetColWidth(1, 1, 15)
|
|
|
+ sheel.SetColWidth(2, 2, 15)
|
|
|
+ sheel.SetColWidth(3, 3, 18)
|
|
|
+
|
|
|
+ companyList := resp.ListCompany
|
|
|
+ listQuarterDate := resp.ListQuarterDate
|
|
|
+
|
|
|
+ titleRow := sheel.AddRow()
|
|
|
+
|
|
|
+ cellNull := titleRow.AddCell()
|
|
|
+ cellNull.SetStyle(style)
|
|
|
+ cellNull.SetValue("")
|
|
|
+ for _, v := range companyList { //第一行公司
|
|
|
+ cellA := titleRow.AddCell()
|
|
|
+ cellA.SetStyle(style)
|
|
|
+ cellA.SetValue(v.CompanyName)
|
|
|
+ }
|
|
|
+ for _, v := range listQuarterDate { // 季度排序
|
|
|
+ dataRow := sheel.AddRow()
|
|
|
+ dataRow.SetHeight(20)
|
|
|
+ cellA := dataRow.AddCell()
|
|
|
+ cellA.SetStyle(style)
|
|
|
+ cellA.SetValue(v.Quarter)
|
|
|
+
|
|
|
+ for _, vCp := range v.ProportionListText { // 行业对应的占比值
|
|
|
+ cellP := dataRow.AddCell()
|
|
|
+ cellP.SetStyle(style)
|
|
|
+ cellP.SetValue(vCp)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ err = xlsxFile.Save(downLoadnFilePath)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "保存文件失败"
|
|
|
+ br.ErrMsg = "保存文件失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
|
|
|
+ downloadFileName := "排名总览" + randStr + ".xlsx"
|
|
|
+ this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
|
|
|
+ defer func() {
|
|
|
+ os.Remove(downLoadnFilePath)
|
|
|
+ }()
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "导出成功"
|
|
|
+}
|