Browse Source

Merge branch 'master' into feature/eta1.0.0

xyxie 1 year ago
parent
commit
43db6e6594
100 changed files with 2650 additions and 1670 deletions
  1. 2 2
      cache/admin_operate_record_cache.go
  2. 2 2
      cache/crm_config_cache.go
  3. 2 2
      cache/logs_cache.go
  4. 0 334
      controllers/ai/ai.go
  5. 3 3
      controllers/banner.go
  6. 7 7
      controllers/base_auth.go
  7. 3 3
      controllers/base_common.go
  8. 230 0
      controllers/business_conf.go
  9. 42 11
      controllers/classify.go
  10. 4 4
      controllers/cloud_disk.go
  11. 3 3
      controllers/commodity_trade_base_index.go
  12. 20 5
      controllers/company_permission.go
  13. 5 5
      controllers/company_seller.go
  14. 6 6
      controllers/data_manage/baiinfo_data.go
  15. 3 3
      controllers/data_manage/base_from_changes_visitors_covid.go
  16. 9 6
      controllers/data_manage/chart_classify.go
  17. 7 7
      controllers/data_manage/chart_common.go
  18. 7 7
      controllers/data_manage/chart_edb_config.go
  19. 364 208
      controllers/data_manage/chart_info.go
  20. 3 3
      controllers/data_manage/com_trade.go
  21. 6 6
      controllers/data_manage/correlation/correlation_chart_classify.go
  22. 18 18
      controllers/data_manage/correlation/correlation_chart_info.go
  23. 6 6
      controllers/data_manage/edb_classify.go
  24. 318 13
      controllers/data_manage/edb_info.go
  25. 5 5
      controllers/data_manage/edb_info_calculate.go
  26. 4 4
      controllers/data_manage/edb_info_updates.go
  27. 3 3
      controllers/data_manage/eia_steo.go
  28. 6 6
      controllers/data_manage/excel_classify.go
  29. 134 109
      controllers/data_manage/excel_info.go
  30. 6 6
      controllers/data_manage/future_good/future_good_chart_classify.go
  31. 11 211
      controllers/data_manage/future_good/future_good_chart_info.go
  32. 4 4
      controllers/data_manage/future_good/future_good_edb_info.go
  33. 9 9
      controllers/data_manage/future_good/future_good_profit_chart_info.go
  34. 3 3
      controllers/data_manage/gl_data.go
  35. 6 6
      controllers/data_manage/line_equation/line_chart_classify.go
  36. 9 9
      controllers/data_manage/line_equation/line_chart_info.go
  37. 9 9
      controllers/data_manage/line_feature/chart_info.go
  38. 6 6
      controllers/data_manage/line_feature/classify.go
  39. 7 7
      controllers/data_manage/lz_data.go
  40. 6 6
      controllers/data_manage/manual.go
  41. 20 19
      controllers/data_manage/multiple_graph_config.go
  42. 6 6
      controllers/data_manage/my_chart.go
  43. 7 7
      controllers/data_manage/mysteel_chemical_data.go
  44. 4 4
      controllers/data_manage/national_statistics.go
  45. 6 6
      controllers/data_manage/predict_edb_classify.go
  46. 8 8
      controllers/data_manage/predict_edb_info.go
  47. 4 4
      controllers/data_manage/predict_edb_info_calculate.go
  48. 6 6
      controllers/data_manage/sci_data.go
  49. 6 6
      controllers/data_manage/smm_data.go
  50. 9 9
      controllers/data_manage/supply_analysis/variety.go
  51. 8 8
      controllers/data_manage/supply_analysis/variety_edb.go
  52. 8 8
      controllers/data_manage/supply_analysis/variety_plant.go
  53. 6 6
      controllers/english_report/email.go
  54. 3 3
      controllers/english_report/en_permission.go
  55. 6 6
      controllers/english_report/english_auth.go
  56. 4 4
      controllers/english_report/english_classify.go
  57. 6 6
      controllers/english_report/english_company.go
  58. 5 5
      controllers/english_report/english_company_todo.go
  59. 5 5
      controllers/english_report/english_video.go
  60. 4 4
      controllers/english_report/policy_report.go
  61. 131 65
      controllers/english_report/report.go
  62. 7 8
      controllers/ppt_english.go
  63. 3 3
      controllers/ppt_english_group.go
  64. 26 9
      controllers/ppt_v2.go
  65. 2 2
      controllers/ppt_v2_group.go
  66. 155 54
      controllers/report.go
  67. 2 2
      controllers/report_author.go
  68. 17 2
      controllers/report_chapter_type.go
  69. 16 2
      controllers/research_group.go
  70. 4 6
      controllers/resource.go
  71. 3 3
      controllers/roadshow/calendar.go
  72. 32 11
      controllers/sandbox/sandbox.go
  73. 5 5
      controllers/semantic_analysis/sa_compare.go
  74. 5 5
      controllers/semantic_analysis/sa_compare_classify.go
  75. 5 5
      controllers/semantic_analysis/sa_doc.go
  76. 5 5
      controllers/semantic_analysis/sa_doc_classify.go
  77. 6 6
      controllers/semantic_analysis/sa_label.go
  78. 14 12
      controllers/sys_admin.go
  79. 3 3
      controllers/sys_department.go
  80. 3 3
      controllers/sys_group.go
  81. 3 3
      controllers/sys_menu.go
  82. 3 3
      controllers/sys_menu_button.go
  83. 253 6
      controllers/sys_role.go
  84. 5 5
      controllers/sys_role_admin.go
  85. 3 3
      controllers/sys_team.go
  86. 4 4
      controllers/sys_user.go
  87. 13 13
      controllers/target.go
  88. 94 0
      controllers/trade_analysis/trade_analysis.go
  89. 16 3
      controllers/variety_tag.go
  90. 23 5
      controllers/voice.go
  91. 1 5
      go.mod
  92. 4 4
      main.go
  93. 0 147
      models/aimod/ai.go
  94. 167 0
      models/business_conf.go
  95. 108 0
      models/business_conf_operation_record.go
  96. 1 1
      models/classify.go
  97. 1 1
      models/cloud_disk_menu.go
  98. 1 1
      models/cloud_disk_resource.go
  99. 10 0
      models/company/company_seller.go
  100. 67 58
      models/data_manage/baiinfo_data.go

+ 2 - 2
cache/admin_operate_record_cache.go

@@ -1,9 +1,9 @@
 package cache
 
 import (
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/utils"
 )
 
 func AdminOperateRecord(adminId int, realName, uuid, uri, params, ip, userAgent, header string) bool {

+ 2 - 2
cache/crm_config_cache.go

@@ -1,9 +1,9 @@
 package cache
 
 import (
+	"eta/eta_api/models/company"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/models/company"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"time"
 )

+ 2 - 2
cache/logs_cache.go

@@ -1,9 +1,9 @@
 package cache
 
 import (
+	"eta/eta_api/models"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/utils"
 	"time"
 )
 

+ 0 - 334
controllers/ai/ai.go

@@ -1,334 +0,0 @@
-package ai
-
-import (
-	"encoding/json"
-	"fmt"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/aimod"
-	"hongze/hz_eta_api/services/aiser"
-	"hongze/hz_eta_api/utils"
-	"strconv"
-	"time"
-)
-
-// AI
-type AiController struct {
-	controllers.BaseAuthController
-}
-
-// @Title 聊天接口
-// @Description 聊天接口
-// @Param	request	body aimod.ChatReq true "type json string"
-// @Success 200 {object} response.ListResp
-// @router /chat [post]
-func (this *AiController) List() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	var req aimod.ChatReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-
-	if req.Model == "" {
-		br.Msg = "请选择模型!"
-		br.ErrMsg = "请选择模型!"
-		return
-	}
-
-	if req.Ask == "" {
-		br.Msg = "请输入提问内容!"
-		br.ErrMsg = "请输入提问内容"
-		return
-	}
-
-	if utils.Re == nil {
-		key := "CACHE_CHAT_" + strconv.Itoa(this.SysUser.AdminId)
-		cacheVal, err := utils.Rc.RedisInt(key)
-		fmt.Println("RedisString:", cacheVal, "err:", err)
-		if err != nil && err.Error() != "redigo: nil returned" {
-			br.Msg = "获取数据失败!"
-			br.ErrMsg = "获取数据失败,Err:" + err.Error()
-			return
-		}
-		putVal := 0
-		if cacheVal <= 0 {
-			putVal = utils.AiChatLimit
-		} else {
-			putVal = cacheVal - 1
-		}
-
-		if putVal <= 0 {
-			br.Msg = "您今日50次问答已达上限,请明天再来!"
-			br.ErrMsg = "您今日50次问答已达上限,请明天再来!"
-			return
-		}
-		lastSecond := utils.GetTodayLastSecond()
-		utils.Rc.Put(key, putVal, lastSecond)
-	}
-
-	//根据提问,获取信息
-	askUuid := utils.MD5(req.Ask)
-	chatMode, err := aimod.GetAiChatByAsk(askUuid, req.Model)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取数据失败!"
-		br.ErrMsg = "获取数据失败,GetAiChatByAsk,Err:" + err.Error()
-		return
-	}
-	resp := new(aimod.ChatResp)
-	var answer string
-	//answerArr := []string{
-	//	"周度数据显示,成品油现货市场价格跟随原油下跌,但近期相对抗跌,裂解价差走扩。批零价差方面汽油收窄,柴油走扩",
-	//	"出口利润在原油下跌海外成品油矛盾更大的情况下汽柴油出口窗口完全关闭",
-	//	"汽油需求在经历五一假期的一段高峰后将回归平稳,总体没有明显矛盾,后期我们担心更多的还是柴油。"}
-	if chatMode != nil && chatMode.Answer != "" {
-		answer = chatMode.Answer
-	} else {
-		//rnd := utils.GetRandInt(0, 3)
-		//if rnd >= 3 {
-		//	rnd = 2
-		//}
-		//answer = answerArr[rnd]
-		var model int
-		if req.Model == "gpt-3.5-turbo" {
-			model = 1
-		} else if req.Model == "gpt-3.5-turbo-16k" {
-			model = 3
-		} else {
-			model = 2
-		}
-		answer, _ = aiser.ChatAutoMsg(req.Ask, model)
-	}
-	resp.Ask = req.Ask
-	resp.Answer = answer
-
-	if req.AiChatTopicId <= 0 { //新增
-		topic := new(aimod.AiChatTopic)
-		topic.TopicName = req.Ask
-		topic.SysUserId = this.SysUser.AdminId
-		topic.SysUserRealName = this.SysUser.RealName
-		topic.CreateTime = time.Now()
-		topic.ModifyTime = time.Now()
-		topicId, err := aimod.AddAiChatTopic(topic)
-		if err != nil {
-			br.Msg = "获取数据失败!"
-			br.ErrMsg = "生成话题失败,Err:" + err.Error()
-			return
-		}
-		resp.AiChatTopicId = int(topicId)
-		chatItem := new(aimod.AiChat)
-		chatItem.AiChatTopicId = resp.AiChatTopicId
-		chatItem.Ask = req.Ask
-		chatItem.AskUuid = utils.MD5(req.Ask)
-		chatItem.Answer = answer
-		chatItem.Model = req.Model
-		chatItem.SysUserId = this.SysUser.AdminId
-		chatItem.SysUserRealName = this.SysUser.RealName
-		chatItem.CreateTime = time.Now()
-		chatItem.ModifyTime = time.Now()
-		_, err = aimod.AddAiChat(chatItem)
-		if err != nil {
-			br.Msg = "获取数据失败!"
-			br.ErrMsg = "生成话题记录失败,Err:" + err.Error()
-			return
-		}
-	} else {
-		resp.AiChatTopicId = req.AiChatTopicId
-		chatItem := new(aimod.AiChat)
-		chatItem.AiChatTopicId = resp.AiChatTopicId
-		chatItem.Ask = req.Ask
-		chatItem.AskUuid = utils.MD5(req.Ask)
-		chatItem.Answer = answer
-		chatItem.Model = req.Model
-		chatItem.SysUserId = this.SysUser.AdminId
-		chatItem.SysUserRealName = this.SysUser.RealName
-		chatItem.CreateTime = time.Now()
-		chatItem.ModifyTime = time.Now()
-		_, err = aimod.AddAiChat(chatItem)
-		if err != nil {
-			br.Msg = "获取数据失败!"
-			br.ErrMsg = "生成话题记录失败,Err:" + err.Error()
-			return
-		}
-	}
-	resp.Model = req.Model
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = resp
-}
-
-// @Title 获取话题列表
-// @Description 获取话题列表接口
-// @Success 200 {object} aimod.AiChatTopicListResp
-// @router /topic/list [get]
-func (this *AiController) TopicList() {
-	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
-	}
-	list, err := aimod.GetAiChatTopicList(sysUser.AdminId)
-	if err != nil {
-		br.Msg = "获取数据失败!"
-		br.ErrMsg = "获取主题记录信息失败,Err:" + err.Error()
-		return
-	}
-	resp := new(aimod.AiChatTopicListResp)
-	resp.List = list
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = resp
-}
-
-// @Title 获取话题详情
-// @Description 获取话题详情接口
-// @Param   AiChatTopicId   query   int  true       "主题id"
-// @Success 200 {object} aimod.AiChatDetailResp
-// @router /topic/detail [get]
-func (this *AiController) TopicDetail() {
-	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
-	}
-
-	aiChatTopicId, _ := this.GetInt("AiChatTopicId")
-	list, err := aimod.GetAiChatList(aiChatTopicId)
-	if err != nil {
-		br.Msg = "获取数据失败!"
-		br.ErrMsg = "获取主题记录信息失败,Err:" + err.Error()
-		return
-	}
-	resp := new(aimod.AiChatDetailResp)
-	resp.List = list
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = resp
-}
-
-// @Title 删除话题接口
-// @Description 删除话题接口
-// @Param	request	body aimod.TopicDeleteReq true "type json string"
-// @Success Ret=200 删除成功
-// @router /topic/delete [post]
-func (this *AiController) TopicDelete() {
-	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 aimod.TopicDeleteReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-
-	if req.AiChatTopicId <= 0 {
-		br.Msg = "参数错误!"
-		br.ErrMsg = "参数错误!AiChatTopicId:" + strconv.Itoa(req.AiChatTopicId)
-		return
-	}
-	err = aimod.DeleteTopic(req.AiChatTopicId)
-	if err != nil {
-		br.Msg = "删除失败!"
-		br.ErrMsg = "删除失败,Err:" + err.Error()
-		return
-	}
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "删除成功"
-	br.IsAddLog = true
-}
-
-// @Title 编辑话题接口
-// @Description 编辑话题接口
-// @Param	request	body aimod.TopicEditReq true "type json string"
-// @Success Ret=200 编辑成功
-// @router /topic/edit [post]
-func (this *AiController) TopicEdit() {
-	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 aimod.TopicEditReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-
-	if req.AiChatTopicId <= 0 {
-		br.Msg = "参数错误!"
-		br.ErrMsg = "参数错误!AiChatTopicId:" + strconv.Itoa(req.AiChatTopicId)
-		return
-	}
-	topic, err := aimod.GetAiChatTopicByTopicName(req.TopicName)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "编辑失败!"
-		br.ErrMsg = "获取数据失败!Err:" + err.Error()
-		return
-	}
-	if topic != nil && topic.AiChatTopicId != req.AiChatTopicId {
-		br.Msg = "话题名称已存在,请重新修改!"
-		return
-	}
-
-	err = aimod.EditTopic(req.AiChatTopicId, req.TopicName)
-	if err != nil {
-		br.Msg = "编辑失败!"
-		br.ErrMsg = "编辑失败,Err:" + err.Error()
-		return
-	}
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "编辑成功"
-	br.IsAddLog = true
-}

+ 3 - 3
controllers/banner.go

@@ -1,9 +1,9 @@
 package controllers
 
 import (
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"os"
 	"path"
 	"time"

+ 7 - 7
controllers/base_auth.go

@@ -2,11 +2,11 @@ package controllers
 
 import (
 	"encoding/json"
+	"eta/eta_api/cache"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data"
 	"fmt"
-	"hongze/hz_eta_api/cache"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/services/data"
 	"net/http"
 	"net/url"
 	"strconv"
@@ -15,8 +15,8 @@ import (
 
 	"github.com/beego/beego/v2/server/web"
 
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/utils"
 
 	"github.com/rdlucklib/rdluck_tools/log"
 )
@@ -53,7 +53,7 @@ var AdminOperateRecordMap = map[string]string{
 
 func init() {
 	if utils.RunMode == "release" {
-		logDir := `/data/rdlucklog/hz_eta_api`
+		logDir := `/data/rdlucklog/eta_api`
 		apiLog = log.Init("20060102.api", logDir)
 	} else {
 		apiLog = log.Init("20060102.api")

+ 3 - 3
controllers/base_common.go

@@ -2,11 +2,11 @@ package controllers
 
 import (
 	"encoding/json"
+	"eta/eta_api/cache"
+	"eta/eta_api/models"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/beego/beego/v2/server/web"
-	"hongze/hz_eta_api/cache"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/utils"
 	"net/http"
 	"net/url"
 )

+ 230 - 0
controllers/business_conf.go

@@ -0,0 +1,230 @@
+package controllers
+
+import (
+	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/utils"
+	"fmt"
+	"html"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// BusinessConfController 商家配置
+type BusinessConfController struct {
+	BaseAuthController
+}
+
+// Save
+// @Title 保存配置
+// @Description 保存配置
+// @Param	request	body map[string]interface{} true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /save [post]
+func (this *BusinessConfController) Save() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		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 map[string]interface{}
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+
+	// 获取配置信息
+	confOb := new(models.BusinessConf)
+	list, e := confOb.GetItemsByCondition("", make([]interface{}, 0), []string{}, "")
+	if e != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "获取配置列表失败, Err: " + e.Error()
+		return
+	}
+	confMap := make(map[string]*models.BusinessConf)
+	for _, c := range list {
+		confMap[c.ConfKey] = c
+	}
+
+	// 根据配置类型取值
+	updates := make([]models.BusinessConfUpdate, 0)
+	for k, v := range req {
+		// 过滤掉表中没有的key
+		conf := confMap[k]
+		if conf == nil {
+			continue
+		}
+
+		switch conf.ValType {
+		case 1: // 字符串
+			str, ok := v.(string)
+			if !ok {
+				continue
+			}
+			str = strings.TrimSpace(str)
+			if conf.Necessary == 1 && str == "" {
+				br.Msg = conf.Remark + "不可为空"
+				return
+			}
+			updates = append(updates, models.BusinessConfUpdate{
+				ConfKey: k,
+				ConfVal: str,
+			})
+		case 2: // 数值
+			num, ok := v.(float64)
+			if !ok {
+				continue
+			}
+			if conf.Necessary == 1 && num <= 0 {
+				br.Msg = conf.Remark + "不可为空"
+				return
+			}
+			val := strconv.FormatFloat(num, 'f', 0, 64)
+			updates = append(updates, models.BusinessConfUpdate{
+				ConfKey: k,
+				ConfVal: val,
+			})
+		case 3: // 字符串数组
+			arr, ok := v.([]interface{})
+			if !ok {
+				continue
+			}
+			if conf.Necessary == 1 && len(arr) == 0 {
+				br.Msg = conf.Remark + "不可为空"
+				return
+			}
+			strArr := make([]string, 0)
+			for _, a := range arr {
+				if s, ok2 := a.(string); ok2 {
+					strArr = append(strArr, s)
+				}
+			}
+			val := strings.Join(strArr, ",")
+			updates = append(updates, models.BusinessConfUpdate{
+				ConfKey: k,
+				ConfVal: val,
+			})
+		case 4: // 富文本
+			content, ok := v.(string)
+			if !ok {
+				continue
+			}
+			content = strings.TrimSpace(content)
+			if conf.Necessary == 1 && content == "" {
+				br.Msg = conf.Remark + "不可为空"
+				return
+			}
+			content = html.EscapeString(content)
+			updates = append(updates, models.BusinessConfUpdate{
+				ConfKey: k,
+				ConfVal: content,
+			})
+		}
+	}
+
+	if len(updates) > 0 {
+		if e = models.UpdateBusinessConfMulti(updates); e != nil {
+			br.Msg = "保存失败"
+			br.ErrMsg = "保存商家配置失败, Err: " + e.Error()
+			return
+		}
+	}
+
+	// 操作日志
+	go func() {
+		b, e := json.Marshal(req)
+		if e != nil {
+			return
+		}
+		recordOb := new(models.BusinessConfOperationRecord)
+		recordOb.SysUserId = sysUser.AdminId
+		recordOb.SysRealName = sysUser.RealName
+		recordOb.Content = string(b)
+		recordOb.CreateTime = time.Now().Local()
+		_ = recordOb.Create()
+	}()
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Fetch
+// @Title 获取配置
+// @Description 获取配置
+// @Success 200 Ret=200 获取成功
+// @router /fetch [get]
+func (this *BusinessConfController) Fetch() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	list, e := models.GetBusinessConf()
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取商家配置失败, Err: " + e.Error()
+		return
+	}
+
+	br.Data = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// CodeEncrypt
+// @Title 商家编码加密
+// @Description 商家编码加密
+// @Success 200 Ret=200 获取成功
+// @router /code_encrypt [get]
+func (this *BusinessConfController) CodeEncrypt() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	res := ""
+	if utils.BusinessCode != "" {
+		res = utils.MD5(fmt.Sprintf("%s%s", utils.BusinessCode, utils.BusinessCodeSalt))
+	}
+
+	br.Data = res
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}

+ 42 - 11
controllers/classify.go

@@ -3,9 +3,10 @@ package controllers
 import (
 	"encoding/json"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"time"
 )
 
@@ -32,20 +33,34 @@ func (this *ClassifyController) Add() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+
+	// 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
+	menus, e := system.GetSysMenuItemsByCondition("", make([]interface{}, 0), []string{}, ``)
+	if e != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+		return
+	}
+	menuMap := make(map[string]bool)
+	for _, m := range menus {
+		if m.ButtonCode != "" {
+			menuMap[m.ButtonCode] = true
+		}
+	}
+
 	if req.ClassifyName == "" {
 		br.Msg = "分类名称不可为空"
 		return
 	}
-	if req.ParentId != 0 && req.ShowType == 0 {
+	if menuMap[system.MenuSpecialHandleClassifyShowType] && req.ParentId != 0 && req.ShowType == 0 {
 		br.Msg = "展示类型不可为空"
 		return
 	}
-	if len(req.MenuList) > 0 && req.ParentId != 0 {
+	if menuMap[system.MenuSpecialHandleClassifyChildMenu] && len(req.MenuList) > 0 && req.ParentId != 0 {
 		br.Msg = "非一级分类不可添加子目录"
 		return
 	}
-
-	if (req.ShowType == 1 || req.ShowType == 3) && req.YbRightBanner == "" && req.ParentId == 0 { //当一级报告分类为列表、品种时,增加“报告合集配图”的配置项
+	if menuMap[system.MenuSpecialHandleClassifyReportImgs] && (req.ShowType == 1 || req.ShowType == 3) && req.YbRightBanner == "" && req.ParentId == 0 { //当一级报告分类为列表、品种时,增加“报告合集配图”的配置项
 		br.Msg = "报告合集配图不可为空"
 		return
 	}
@@ -345,6 +360,21 @@ func (this *ClassifyController) Edit() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+
+	// 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
+	menus, e := system.GetSysMenuItemsByCondition("", make([]interface{}, 0), []string{}, ``)
+	if e != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+		return
+	}
+	menuMap := make(map[string]bool)
+	for _, m := range menus {
+		if m.ButtonCode != "" {
+			menuMap[m.ButtonCode] = true
+		}
+	}
+
 	if req.ClassifyId <= 0 {
 		br.Msg = "参数错误"
 		return
@@ -353,7 +383,7 @@ func (this *ClassifyController) Edit() {
 		br.Msg = "分类名称不可为空"
 		return
 	}
-	if req.ParentId != 0 && req.ShowType == 0 {
+	if menuMap[system.MenuSpecialHandleClassifyShowType] && req.ParentId != 0 && req.ShowType == 0 {
 		br.Msg = "展示类型不可为空"
 		return
 	}
@@ -361,8 +391,7 @@ func (this *ClassifyController) Edit() {
 		br.Msg = "上级分类不能选择自己"
 		return
 	}
-
-	if (req.ShowType == 1 || req.ShowType == 3) && req.YbRightBanner == "" && req.ParentId == 0 { //当一级报告分类为列表、品种时,增加“报告合集配图”的配置项
+	if menuMap[system.MenuSpecialHandleClassifyReportImgs] && (req.ShowType == 1 || req.ShowType == 3) && req.YbRightBanner == "" && req.ParentId == 0 { //当一级报告分类为列表、品种时,增加“报告合集配图”的配置项
 		br.Msg = "报告合集配图不可为空"
 		return
 	}
@@ -870,7 +899,9 @@ func (this *ClassifyController) TelListClassify() {
 	resp := make([]*models.SimpleClassifyList, 0)
 	var condition, orderRule string
 	var pars []interface{}
-	condition += ` AND has_teleconference = 1`
+	if utils.BusinessCode == utils.BusinessCodeRelease || utils.BusinessCode == utils.BusinessCodeSandbox {
+		condition += ` AND classify_name <> '晨报' AND classify_name <> '周报' `
+	}
 	telList, e := models.GetClassifyByCondition(condition, orderRule, pars)
 	if e != nil {
 		return

+ 4 - 4
controllers/cloud_disk.go

@@ -3,12 +3,12 @@ package controllers
 import (
 	"archive/zip"
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/services"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/http"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/utils"
 	"os"
 	"path"
 	"strconv"

+ 3 - 3
controllers/commodity_trade_base_index.go

@@ -4,9 +4,9 @@ import (
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/utils"
 	"os"
 	"path/filepath"
 	"strconv"

+ 20 - 5
controllers/company_permission.go

@@ -1,10 +1,10 @@
 package controllers
 
 import (
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/company"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/company"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 )
 
 // CompanyPermissionController 客户权限管理
@@ -32,11 +32,20 @@ func (this *CompanyPermissionController) List() {
 		br.Ret = 408
 		return
 	}
+	// 非自用无需查询
+	resp := new(company.PermissionSetResp)
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = resp
+		return
+	}
+
 	// Tips:目前这个接口权益在添加客户、申请转正、领取客户、续约申请均有用到
 
 	companyType := this.GetString("CompanyType")
 	var productId int
-	resp := new(company.PermissionSetResp)
 
 	roleTypeCode := sysUser.RoleTypeCode
 	productId = services.GetProductId(roleTypeCode)
@@ -92,6 +101,12 @@ func (this *CompanyPermissionController) PermissionVariety() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
 
 	companyType := this.GetString("CompanyType")
 

+ 5 - 5
controllers/company_seller.go

@@ -1,12 +1,12 @@
 package controllers
 
 import (
+	"eta/eta_api/models"
+	"eta/eta_api/models/company"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/company"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 )
 

+ 6 - 6
controllers/data_manage/baiinfo_data.go

@@ -5,12 +5,12 @@ import (
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"os"
 	"path/filepath"
 	"strings"

+ 3 - 3
controllers/data_manage/base_from_changes_visitors_covid.go

@@ -1,9 +1,9 @@
 package data_manage
 
 import (
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
 )
 
 // 谷歌出行数据

+ 9 - 6
controllers/data_manage/chart_classify.go

@@ -2,13 +2,13 @@ package data_manage
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"time"
 )
@@ -1037,6 +1037,9 @@ func (this *ChartClassifyController) ChartClassifyChartListV2() {
 
 	for k, item := range allNodes {
 		item.Button = data.GetChartOpButton(this.SysUser, item.SysUserId)
+		item.Button.AddButton = false
+		item.Button.OpButton = false
+		item.Button.DeleteButton = false
 		allNodes[k] = item
 	}
 

+ 7 - 7
controllers/data_manage/chart_common.go

@@ -1,13 +1,13 @@
 package data_manage
 
 import (
-	"hongze/hz_eta_api/controllers/data_manage/correlation"
-	"hongze/hz_eta_api/controllers/data_manage/future_good"
-	"hongze/hz_eta_api/controllers/data_manage/line_equation"
-	"hongze/hz_eta_api/controllers/data_manage/line_feature"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers/data_manage/correlation"
+	"eta/eta_api/controllers/data_manage/future_good"
+	"eta/eta_api/controllers/data_manage/line_equation"
+	"eta/eta_api/controllers/data_manage/line_feature"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/utils"
 )
 
 // CommonChartInfoDetailFromUniqueCode

+ 7 - 7
controllers/data_manage/chart_edb_config.go

@@ -2,13 +2,13 @@ package data_manage
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/models/data_manage/response"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 )
 
 // EdbNoPermissionList

+ 364 - 208
controllers/data_manage/chart_info.go

@@ -2,15 +2,15 @@ package data_manage
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
 	"os"
 	"os/exec"
 	"sort"
@@ -159,6 +159,7 @@ func (this *ChartInfoController) ChartInfoSave() {
 	br.IsAddLog = true
 }
 
+// ChartInfoAdd
 // @Title 新增图表接口
 // @Description 新增图表接口
 // @Param	request	body data_manage.AddChartInfoReq true "type json string"
@@ -930,6 +931,361 @@ func (this *ChartInfoController) ChartInfoDetail() {
 	br.Data = resp
 }
 
+// PreviewChartInfoDetail
+// @Title 获取图表详情(预览)
+// @Description 获取图表详情接口(预览)
+// @Param	request	body data_manage.PreviewChartInfoReq true "type json string"
+// @Success 200 {object} data_manage.ChartInfoDetailResp
+// @router /chart_info/detail/preview [post]
+func (this *ChartInfoController) PreviewChartInfoDetail() {
+	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 data_manage.PreviewChartInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.DateType <= 0 {
+		req.DateType = 3
+	}
+
+	// edbInfoId 指标id
+	if len(req.ChartEdbInfoList) <= 0 {
+		br.Msg = "请选择指标"
+		br.ErrMsg = "指标为空"
+		br.IsSendEmail = false
+		return
+	}
+
+	seasonStartDate := req.SeasonStartDate
+	seasonEndDate := req.SeasonEndDate
+	fmt.Println("seasonStartDate:", seasonStartDate)
+	fmt.Println("seasonEndDate:", seasonEndDate)
+
+	calendar := req.Calendar
+	if calendar == "" {
+		calendar = "公历"
+	}
+
+	// 开始/结束日期
+	startDate, endDate := utils.GetDateByDateType(req.DateType, req.StartDate, req.EndDate)
+
+	chartInfo := new(data_manage.ChartInfoView)
+	chartInfo.ChartType = req.ChartType
+
+	if req.ChartType == 2 {
+		if seasonStartDate != "" {
+			startDate = seasonStartDate + "-01"
+		} else {
+			fivePre := time.Now().AddDate(-4, 0, 0).Year()
+			startDate = strconv.Itoa(fivePre) + "-01-01"
+		}
+		if seasonEndDate != "" {
+			seasonEndDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, seasonEndDate+"-01", time.Local)
+			if tmpErr != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取图表,指标信息失败,Err:" + tmpErr.Error()
+				return
+			}
+			endDate = seasonEndDateTime.AddDate(0, 1, -1).Format(utils.FormatDate)
+			//endDate = seasonEndDate + "-12-31"
+		} else {
+			endDate = "" //time.Now().AddDate(2, 0, 0).Format(utils.FormatDate)
+		}
+	}
+
+	edbInfoIdList := make([]int, 0)
+	edbInfoIdMapping := make(map[int]*data_manage.ChartSaveItem)
+	for _, v := range req.ChartEdbInfoList {
+		edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
+		edbInfoIdMapping[v.EdbInfoId] = v
+	}
+	mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList(edbInfoIdList)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
+		return
+	}
+
+	for k, v := range mappingList {
+		if tmpV, ok := edbInfoIdMapping[v.EdbInfoId]; ok {
+			v.EdbInfoType = tmpV.EdbInfoType
+			v.MaxData = tmpV.MaxData
+			v.MinData = tmpV.MinData
+			v.IsOrder = tmpV.IsOrder
+			v.IsAxis = tmpV.IsAxis
+			v.EdbInfoType = tmpV.EdbInfoType
+			v.LeadValue = tmpV.LeadValue
+			v.LeadUnit = tmpV.LeadUnit
+			v.ChartStyle = tmpV.ChartStyle
+			v.ChartColor = tmpV.ChartColor
+			v.PredictChartColor = tmpV.PredictChartColor
+			v.ChartWidth = tmpV.ChartWidth
+			//v.Source = tmpV.Source
+		}
+		mappingList[k] = v
+	}
+
+	// 图表额外数据参数
+	extraConfigStr := chartInfo.ExtraConfig
+	// 柱方图的一些配置
+	var barConfig data_manage.BarChartInfoReq
+	if chartInfo != nil && chartInfo.ChartType == 7 {
+		if chartInfo.BarConfig == `` {
+			br.Msg = "柱方图未配置"
+			br.ErrMsg = "柱方图未配置"
+			return
+		}
+		err := json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
+		if err != nil {
+			br.Msg = "柱方图配置异常"
+			br.ErrMsg = "柱方图配置异常"
+			return
+		}
+		extraConfigStr = chartInfo.BarConfig
+	}
+
+	// 获取图表中的指标数据
+	edbList, xEdbIdValue, yDataList, dataResp, err, errMsg := data.GetChartEdbData(0, req.ChartType, calendar, startDate, endDate, mappingList, extraConfigStr)
+	if err != nil {
+		br.Msg = "获取失败"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
+		return
+	}
+	// 单位
+	if req.ChartType == utils.CHART_TYPE_BAR && len(yDataList) > 0 {
+		chartInfo.Unit = yDataList[0].Unit
+		chartInfo.UnitEn = yDataList[0].UnitEn
+	}
+	warnEdbList := make([]string, 0)
+	for _, v := range edbList {
+		if v.IsNullData {
+			warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
+		}
+	}
+	if len(warnEdbList) > 0 {
+		chartInfo.WarnMsg = `图表引用指标异常,异常指标:` + strings.Join(warnEdbList, ",")
+	}
+
+	//图表操作权限
+	chartInfo.IsEdit = data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
+	//判断是否需要展示英文标识
+	chartInfo.IsEnChart = data.CheckIsEnChart(chartInfo.ChartNameEn, edbList, chartInfo.Source, chartInfo.ChartType)
+	chartInfo.Button = data_manage.ChartViewButton{
+		IsEdit:    chartInfo.IsEdit,
+		IsEnChart: chartInfo.IsEnChart,
+		IsAdd:     chartInfo.IsAdd,
+		IsCopy:    true,
+		IsSetName: chartInfo.IsSetName,
+	}
+
+	resp := new(data_manage.ChartInfoDetailResp)
+	resp.ChartInfo = chartInfo
+	resp.EdbInfoList = edbList
+	resp.XEdbIdValue = xEdbIdValue
+	resp.YDataList = yDataList
+	resp.BarChartInfo = barConfig
+	resp.DataResp = dataResp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// ChartInfoDetailV2
+// @Title 获取图表详情
+// @Description 获取图表详情接口
+// @Param   ChartInfoId   query   int  true       "图表id"
+// @Success 200 {object} data_manage.ChartInfoDetailResp
+// @router /chart_info/detail/v2 [get]
+func (this *ChartInfoController) ChartInfoDetailV2() {
+	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
+	}
+	chartInfoId, _ := this.GetInt("ChartInfoId")
+	//startDate = strconv.Itoa(time.Now().Year()) + "-01-01"
+	if chartInfoId <= 0 {
+		br.Msg = "请选择图表"
+		br.IsSendEmail = false
+		return
+	}
+	chartInfo, err := data_manage.GetChartInfoViewById(chartInfoId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "图被删除,请刷新页面"
+			br.ErrMsg = "图被删除,请刷新页面,Err:" + err.Error()
+			return
+		}
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
+		return
+	}
+
+	dateType := chartInfo.DateType
+	fmt.Println("dateType:", dateType)
+	if dateType <= 0 {
+		dateType = 3
+	}
+
+	chartType := chartInfo.ChartType
+	startDate := chartInfo.StartDate
+	endDate := chartInfo.EndDate
+	seasonStartDate := chartInfo.SeasonStartDate
+	seasonEndDate := chartInfo.SeasonEndDate
+	calendar := chartInfo.Calendar
+
+	if calendar == "" {
+		calendar = "公历"
+	}
+	startDate, endDate = utils.GetDateByDateType(dateType, startDate, endDate)
+
+	if chartType == 2 {
+		if seasonStartDate != "" {
+			startDate = seasonStartDate + "-01"
+		} else {
+			fivePre := time.Now().AddDate(-4, 0, 0).Year()
+			startDate = strconv.Itoa(fivePre) + "-01-01"
+		}
+		if seasonEndDate != "" {
+			seasonEndDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, seasonEndDate+"-01", time.Local)
+			if tmpErr != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取图表,指标信息失败,Err:" + tmpErr.Error()
+				return
+			}
+			endDate = seasonEndDateTime.AddDate(0, 1, -1).Format(utils.FormatDate)
+			//endDate = seasonEndDate + "-12-31"
+		} else {
+			endDate = "" //time.Now().AddDate(2, 0, 0).Format(utils.FormatDate)
+		}
+	}
+
+	// 相关联指标
+	mappingList, err := data_manage.GetChartEdbMappingList(chartInfoId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
+		return
+	}
+
+	// 图表额外数据参数
+	extraConfigStr := chartInfo.ExtraConfig
+	// 柱方图的一些配置
+	var barConfig data_manage.BarChartInfoReq
+	if chartInfo != nil && chartInfo.ChartType == 7 {
+		if chartInfo.BarConfig == `` {
+			br.Msg = "柱方图未配置"
+			br.ErrMsg = "柱方图未配置"
+			return
+		}
+		err := json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
+		if err != nil {
+			br.Msg = "柱方图配置异常"
+			br.ErrMsg = "柱方图配置异常"
+			return
+		}
+		extraConfigStr = chartInfo.BarConfig
+	}
+
+	// 获取图表中的指标数据
+	edbList, xEdbIdValue, yDataList, dataResp, err, errMsg := data.GetChartEdbData(chartInfoId, chartType, calendar, startDate, endDate, mappingList, extraConfigStr)
+	if err != nil {
+		br.Msg = "获取失败"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
+		return
+	}
+	// 单位
+	if chartType == utils.CHART_TYPE_BAR && len(yDataList) > 0 {
+		chartInfo.Unit = yDataList[0].Unit
+		chartInfo.UnitEn = yDataList[0].UnitEn
+	}
+	warnEdbList := make([]string, 0)
+	for _, v := range edbList {
+		if v.IsNullData {
+			warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
+		}
+	}
+	if len(warnEdbList) > 0 {
+		chartInfo.WarnMsg = `图表引用指标异常,异常指标:` + strings.Join(warnEdbList, ",")
+	}
+	if chartInfoId > 0 && chartInfo != nil {
+		//判断是否加入我的图库
+		{
+			var myChartCondition string
+			var myChartPars []interface{}
+			myChartCondition += ` AND a.admin_id=? `
+			myChartPars = append(myChartPars, sysUser.AdminId)
+			myChartCondition += ` AND a.chart_info_id=? `
+			myChartPars = append(myChartPars, chartInfo.ChartInfoId)
+
+			myChartList, err := data_manage.GetMyChartByCondition(myChartCondition, myChartPars)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取我的图表信息失败,GetMyChartByCondition,Err:" + err.Error()
+				return
+			}
+			if myChartList != nil && len(myChartList) > 0 {
+				chartInfo.IsAdd = true
+				chartInfo.MyChartId = myChartList[0].MyChartId
+				chartInfo.MyChartClassifyId = myChartList[0].MyChartClassifyId
+			}
+		}
+	}
+
+	//图表操作权限
+	chartInfo.IsEdit = data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
+	//判断是否需要展示英文标识
+	chartInfo.IsEnChart = data.CheckIsEnChart(chartInfo.ChartNameEn, edbList, chartInfo.Source, chartInfo.ChartType)
+	chartInfo.Button = data_manage.ChartViewButton{
+		IsEdit:    chartInfo.IsEdit,
+		IsEnChart: chartInfo.IsEnChart,
+		IsAdd:     chartInfo.IsAdd,
+		IsCopy:    true,
+		IsSetName: chartInfo.IsSetName,
+	}
+
+	resp := new(data_manage.ChartInfoDetailResp)
+	resp.ChartInfo = chartInfo
+	resp.EdbInfoList = edbList
+	resp.XEdbIdValue = xEdbIdValue
+	resp.YDataList = yDataList
+	resp.BarChartInfo = barConfig
+	resp.DataResp = dataResp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
 // @Title 图表指标模糊搜索
 // @Description 图表指标模糊搜索接口
 // @Param   KeyWord   query   string  true       "指标名称/ID"
@@ -1870,205 +2226,6 @@ func GetChartInfoDetailFromUniqueCode(chartInfo *data_manage.ChartInfoView, isCa
 	return
 }
 
-//
-//// @Param   Img   query   string  true       "图片"
-//// @Success 200 {object} models.ResourceResp
-//// @router /chart_info/base64Upload [post]
-//func (this *ChartInfoController) ChartInfoBase64Upload() {
-//
-//	br := new(models.BaseResponse).Init()
-//	defer func() {
-//		this.Data["json"] = br
-//		this.ServeJSON()
-//	}()
-//
-//	var err error
-//	ext := ".png"
-//	uploadDir := "./static"
-//	randStr := utils.GetRandStringNoSpecialChar(28)
-//	fileName := randStr + ext
-//	fpath := uploadDir + "/" + fileName
-//
-//	image := this.Ctx.Request.FormValue("Img")
-//	if image == "" {
-//		resp := new(models.ResourceResp)
-//		resp.Id = 0
-//		resp.ResourceUrl = ""
-//		br.Msg = "上传成功"
-//		br.Ret = 200
-//		br.Success = true
-//		br.Data = resp
-//		return
-//	}
-//	b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, image)
-//	if !b {
-//		br.Msg = "图片格式不正确"
-//		br.ErrMsg = "图片格式不正确"
-//		return
-//	}
-//	re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
-//	base64Str := re.ReplaceAllString(image, "")
-//	base64Str = strings.Replace(base64Str, " ", "", -1)
-//
-//	err = utils.SaveBase64ToFile(base64Str, fpath)
-//	if err != nil {
-//		br.Msg = "图片保存失败"
-//		br.ErrMsg = "图片保存失败,Err:" + err.Error()
-//		return
-//	}
-//	fmt.Println("end")
-//
-//	defer os.Remove(fpath)
-//
-//	hzUploadDir := "static/images/"
-//	savePath := hzUploadDir + time.Now().Format("200601/20060102/")
-//	savePath += fileName
-//	//上传到阿里云
-//	err = services.UploadFileToAliyun(fileName, fpath, savePath)
-//	if err != nil {
-//		br.Msg = "文件上传失败"
-//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
-//		return
-//	}
-//	utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
-//	utils.FileLog.Info("end update oss ")
-//
-//	fileHost := "https://hzstatic.hzinsights.com/"
-//
-//	resourceUrl := fileHost + savePath
-//
-//	item := new(models.Resource)
-//	item.ResourceUrl = resourceUrl
-//	item.ResourceType = 1
-//	item.CreateTime = time.Now()
-//	newId, err := models.AddResource(item)
-//	if err != nil {
-//		br.Msg = "资源上传失败"
-//		br.ErrMsg = "资源上传失败,Err:" + err.Error()
-//		return
-//	}
-//	resp := new(models.ResourceResp)
-//	resp.Id = newId
-//	resp.ResourceUrl = resourceUrl
-//	br.Msg = "上传成功"
-//	br.Ret = 200
-//	br.Success = true
-//	br.Data = resp
-//
-//	//br := new(models.BaseResponse).Init()
-//	//defer func() {
-//	//	this.Data["json"] = br
-//	//	this.ServeJSON()
-//	//}()
-//	//imgData := this.GetString("Img")
-//	//if imgData == "" {
-//	//	br.Msg = "图片参数错误"
-//	//	br.ErrMsg = "图片参数错误,Img Is Empty"
-//	//	return
-//	//}
-//
-//	//dateDir := time.Now().Format("20060102")
-//	//uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
-//	//
-//	//if !utils.FileIsExist(uploadDir) {
-//	//	err := os.MkdirAll(uploadDir, 777)
-//	//	if err != nil {
-//	//		br.Msg = "存储目录创建失败"
-//	//		br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
-//	//		return
-//	//	}
-//	//}
-//	//var resourceUrl string
-//	//param := url.Values{}
-//	//param.Add("Sign", "dIGi2M0VN21s3dKS")
-//	//param.Add("Img", imgData)
-//	//svgToPngUrl := `http://8.136.199.33:8086/v1/image/svg_to_png`
-//	//respBody, err := http.Post(svgToPngUrl, param.Encode(), "")
-//	//if err != nil {
-//	//	br.Msg = "文件上传失败"
-//	//	br.ErrMsg = "图片格式转换失败,Err:" + err.Error()
-//	//	return
-//	//}
-//	//fmt.Println(string(respBody))
-//	//respItem := new(data_manage.ImageSvgToPngResp)
-//	//err = json.Unmarshal(respBody, &respItem)
-//	//if err != nil {
-//	//	br.Msg = "文件上传失败"
-//	//	br.ErrMsg = "图片格式转换失败,Unmarshal Err:" + err.Error()
-//	//	return
-//	//}
-//	//resourceUrl = respItem.Data.ResourceURL
-//	//resp := new(models.ResourceResp)
-//	//resp.ResourceUrl = resourceUrl
-//	//br.Msg = "上传成功"
-//	//br.Ret = 200
-//	//br.Success = true
-//	//br.Data = resp
-//
-//
-//
-//	/*
-//		svg 转 png
-//
-//		uploadDir := "static/images/"
-//		if !utils.FileIsExist(uploadDir) {
-//			err := os.MkdirAll(uploadDir, 777)
-//			if err != nil {
-//				br.Msg = "图表保存失败"
-//				br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
-//				return
-//			}
-//		}
-//
-//		var saveToOssPath string
-//		randStr := utils.GetRandStringNoSpecialChar(28)
-//		var fileName, outFileName string
-//		fileName = randStr + ".txt"
-//		//saveSvgPath = uploadDir + fileName
-//		err := utils.SaveToFile(imgData, fileName)
-//		if err != nil {
-//			br.Msg = "图片保存失败"
-//			br.ErrMsg = "图片保存失败,Err:" + err.Error()
-//			return
-//		}
-//
-//		outFileName = randStr + ".png"
-//		cd := exec.Command("highcharts-export-server", "--infile", fileName, "--constr", "Chart", "--scale", "2", "--workers", "5", "--workLimit", "5", "--outfile", outFileName)
-//		str, err := cd.Output()
-//		fmt.Println(string(str))
-//		if err != nil {
-//			fmt.Println("Command Err:" + err.Error())
-//			return
-//		}
-//		fmt.Println("end convert", time.Now())
-//
-//		defer func() {
-//			os.Remove(fileName)
-//			os.Remove(outFileName)
-//		}()
-//		saveToOssPath = uploadDir + time.Now().Format("200601/20060102/")
-//		saveToOssPath += outFileName
-//		//上传到阿里云
-//		fmt.Println("upload:", outFileName, saveToOssPath)
-//		err = services.UploadFileToAliyun("", outFileName, saveToOssPath)
-//		if err != nil {
-//			br.Msg = "文件上传失败"
-//			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-//			return
-//		}
-//		fileHost := "https://hzstatic.hzinsights.com/"
-//		resourceUrl := fileHost + saveToOssPath
-//
-//		resp := new(models.ResourceResp)
-//		resp.ResourceUrl = resourceUrl
-//		br.Msg = "上传成功"
-//		br.Ret = 200
-//		br.Success = true
-//		br.Data = resp
-//	*/
-//	return
-//}
-
 // @Param   Img   query   string  true       "图片"
 // @Success 200 {object} models.ResourceResp
 // @router /chart_info/base64Upload [post]
@@ -2148,8 +2305,7 @@ func (this *ChartInfoController) ChartInfoBase64Upload() {
 		br.ErrMsg = "文件上传失败,Err:" + err.Error()
 		return
 	}
-	fileHost := "https://hzstatic.hzinsights.com/"
-	resourceUrl := fileHost + saveToOssPath
+	resourceUrl := utils.Imghost + saveToOssPath
 	resp.ResourceUrl = resourceUrl
 	resp.Source = "convert"
 	//resp.CacheKey = imgDataKey

+ 3 - 3
controllers/data_manage/com_trade.go

@@ -3,9 +3,9 @@ package data_manage
 import (
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/utils"
 	"time"
 )
 

+ 6 - 6
controllers/data_manage/correlation/correlation_chart_classify.go

@@ -2,12 +2,12 @@ package correlation
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"strconv"
 	"time"
 )

+ 18 - 18
controllers/data_manage/correlation/correlation_chart_info.go

@@ -2,16 +2,16 @@ package correlation
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/future_good/request"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	correlationServ "eta/eta_api/services/data/correlation"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/future_good/request"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	correlationServ "hongze/hz_eta_api/services/data/correlation"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"strings"
 	"time"
@@ -696,7 +696,6 @@ func (this *CorrelationChartInfoController) Detail() {
 
 	var dataResp interface{} // 绘图数据返回(目前是滚动相关性的图)
 	var xEdbIdValue []int
-	var xDateTimeValue []string
 	var yDataList []data_manage.YData
 	switch chartInfo.Source {
 	case utils.CHART_SOURCE_CORRELATION: // 相关性图
@@ -717,10 +716,11 @@ func (this *CorrelationChartInfoController) Detail() {
 		}
 	case utils.CHART_SOURCE_ROLLING_CORRELATION: // 滚动相关性图
 		startDate, endDate := utils.GetDateByDateType(correlationChart.DateType, correlationChart.StartDate.Format(utils.FormatDate), correlationChart.EndDate.Format(utils.FormatDate))
-		xDateTimeValue, yDataList, e = correlationServ.GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, correlationChart.LeadValue, correlationChart.LeadUnit, correlationChart.CalculateValue, correlationChart.CalculateUnit, startDate, endDate)
-		dataResp = data_manage.RollingCorrelationChartDataResp{
-			XDateTimeValue: xDateTimeValue,
-			YDataList:      yDataList,
+		dataResp, e = correlationServ.GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, correlationChart.LeadValue, correlationChart.LeadUnit, correlationChart.CalculateValue, correlationChart.CalculateUnit, startDate, endDate, chartInfo.ChartName, chartInfo.ChartNameEn)
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取滚动相关性图表, 图表计算值失败, Err:" + e.Error()
+			return
 		}
 	}
 
@@ -1175,7 +1175,6 @@ func GetChartInfoDetailFromUniqueCode(chartInfo *data_manage.ChartInfoView, isCa
 
 	var dataResp interface{} // 绘图数据返回(目前是滚动相关性的图)
 	var xEdbIdValue []int
-	var xDateTimeValue []string
 	var yDataList []data_manage.YData
 	switch chartInfo.Source {
 	case utils.CHART_SOURCE_CORRELATION: // 相关性图
@@ -1197,10 +1196,11 @@ func GetChartInfoDetailFromUniqueCode(chartInfo *data_manage.ChartInfoView, isCa
 	case utils.CHART_SOURCE_ROLLING_CORRELATION: // 滚动相关性图
 		startDate, endDate := utils.GetDateByDateType(correlationChart.DateType, correlationChart.StartDate.Format(utils.FormatDate), correlationChart.EndDate.Format(utils.FormatDate))
 
-		xDateTimeValue, yDataList, e = correlationServ.GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, correlationChart.LeadValue, correlationChart.LeadUnit, correlationChart.CalculateValue, correlationChart.CalculateUnit, startDate, endDate)
-		dataResp = data_manage.RollingCorrelationChartDataResp{
-			XDateTimeValue: xDateTimeValue,
-			YDataList:      yDataList,
+		dataResp, e = correlationServ.GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, correlationChart.LeadValue, correlationChart.LeadUnit, correlationChart.CalculateValue, correlationChart.CalculateUnit, startDate, endDate, chartInfo.ChartName, chartInfo.ChartNameEn)
+		if e != nil {
+			msg = "获取失败"
+			errMsg = "获取滚动相关性图表, 图表计算值失败, Err:" + e.Error()
+			return
 		}
 	}
 

+ 6 - 6
controllers/data_manage/edb_classify.go

@@ -2,12 +2,12 @@ package data_manage
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 )
 
 // EdbClassifyController 数据管理-分类模块

+ 318 - 13
controllers/data_manage/edb_info.go

@@ -2,26 +2,29 @@ package data_manage
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/company"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data"
+	"eta/eta_api/services/elastic"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/services/elastic"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"strings"
 	"sync"
 	"time"
 )
 
-// 数据管理
+// EdbInfoController 数据管理
 type EdbInfoController struct {
 	controllers.BaseAuthController
 }
 
+// EdbInfoSearch
 // @Title 新增指标-查询指标信息接口
 // @Description 新增指标-查询指标信息接口
 // @Param   Source   query   int  true       "来源:1:同花顺,2:wind,3:彭博"
@@ -1594,6 +1597,7 @@ func (this *EdbInfoController) EdbInfoSearch() {
 	br.Data = resp
 }
 
+// EdbInfoList
 // @Title 指标列表接口
 // @Description 指标列表接口
 // @Param   PageSize   query   int  true       "每页数据条数"
@@ -1750,6 +1754,7 @@ func (this *EdbInfoController) EdbInfoList() {
 	br.Data = resp
 }
 
+// EdbInfoAdd
 // @Title 新增指标接口
 // @Description 新增指标接口
 // @Param	request	body data_manage.AddEdbInfoReq true "type json string"
@@ -1886,6 +1891,7 @@ func (this *EdbInfoController) EdbInfoAdd() {
 	br.IsAddLog = true
 }
 
+// EdbInfoEdit
 // @Title 编辑指标接口
 // @Description 编辑指标接口
 // @Success 200 {object} data_manage.EditEdbInfoReq
@@ -2036,6 +2042,7 @@ func (this *EdbInfoController) EdbInfoEdit() {
 	br.IsAddLog = true
 }
 
+// EdbEnInfoEdit
 // @Title 编辑指标英文信息接口
 // @Description 编辑指标英文信息接口
 // @Success 200 {object} data_manage.EditEdbEnInfoReq
@@ -2141,6 +2148,7 @@ func (this *EdbInfoController) EdbEnInfoEdit() {
 	br.IsAddLog = true
 }
 
+// EdbInfoNewest
 // @Title 获取最新指标接口
 // @Description 获取最新指标接口
 // @Success 200 {object} data_manage.EdbInfoList
@@ -2163,6 +2171,7 @@ func (this *EdbInfoController) EdbInfoNewest() {
 	br.Data = item
 }
 
+// EdbInfoRefresh
 // @Title 指标刷新接口
 // @Description 指标刷新接口
 // @Param   EdbInfoId   query   int  true       "指标id"
@@ -2213,6 +2222,7 @@ func (this *EdbInfoController) EdbInfoRefresh() {
 	br.IsAddLog = true
 }
 
+// EdbInfoMove
 // @Title 移动指标接口
 // @Description 移动指标接口
 // @Success 200 {object} data_manage.MoveEdbInfoReq
@@ -2374,6 +2384,7 @@ func (this *EdbInfoController) EdbInfoMove() {
 	br.Msg = "移动成功"
 }
 
+// EdbInfoDetail
 // @Title 获取指标详情
 // @Description 获取指标详情接口
 // @Param   EdbInfoId   query   int  true       "指标id"
@@ -2829,6 +2840,7 @@ func searchEdbInfoFilter(condition string, pars []interface{}, i int, ch chan ma
 	return
 }
 
+// EdbInfoAllRefresh
 // @Title 指标全部刷新接口
 // @Description 指标全部刷新接口
 // @Param   EdbInfoId   query   int  true       "指标id"
@@ -2883,6 +2895,7 @@ func (this *EdbInfoController) EdbInfoAllRefresh() {
 	}
 }
 
+// EdbInfoData
 // @Title 获取指标数据
 // @Description 获取指标数据
 // @Param   EdbInfoId   query   int  true       "指标ID"
@@ -2944,6 +2957,7 @@ func (this *ChartInfoController) EdbInfoData() {
 	br.Data = resp
 }
 
+// EdbInfoReplaceCheck
 // @Title 指标一键刷新接口
 // @Description 指标一键刷新接口
 // @Success Ret=200 更新成功
@@ -3546,7 +3560,7 @@ func (this *EdbInfoController) MoveEdbChartUser() {
 	br.Msg = "修改成功"
 }
 
-// MoveEdbChartList
+// EdbChartClassifyList
 // @Title 获取指标/图表分类列表数据接口
 // @Description 获取指标/图表分类列表数据接口
 // @Param   Source   query   int  false       "来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库"
@@ -3981,11 +3995,10 @@ func (this *EdbInfoController) AllEdbInfoByEs() {
 }
 
 // GetEdbDateData
-// @Title 所有指标筛选接口
-// @Description 所有指标筛选接口
+// @Title 根据指标ID和具体日期获取对应日期的数据值
+// @Description 根据指标ID和具体日期获取对应日期的数据值
 // @Param   EdbInfoId   query   int  false       "指标id"
 // @Param   Date   query   string  false       "日期"
-// @Param      query   string  false       "频度"
 // @Success 200 {object} data_manage.EdbInfoList
 // @router /edb_info/date_data [get]
 func (this *EdbInfoController) GetEdbDateData() {
@@ -4013,14 +4026,306 @@ func (this *EdbInfoController) GetEdbDateData() {
 		br.ErrMsg = fmt.Sprint("获取指标信息失败,Err:", err.Error())
 		return
 	}
-	val, err := data.GetDateData(edbInfo, date)
+	startDate := date
+	endDate := date
+
+	dateType := "day"
+	//如果填写的是月度日期
+	if strings.Count(date, "-") == 1 {
+		startDate = date + "-01"
+		endDate = ``
+		dateType = "month"
+	}
+	dataItem, err := data.GetDateData(edbInfo, startDate, endDate)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = fmt.Sprint("获取指数据失败,Err:", err.Error())
 		return
 	}
+	val := ``
+	if dataItem != nil {
+		switch dateType {
+		case "month":
+			dateTime, _ := time.ParseInLocation(utils.FormatDate, dataItem.DataTime, time.Local)
+			dateTimeStr := dateTime.Format(utils.FormatYearMonthDate)
+			if dateTimeStr != date {
+				val = ``
+			}
+		}
+		val = fmt.Sprint(dataItem.Value)
+	}
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"
 	br.Data = val
 }
+
+// GetEdbBeforeAndAfterDateData
+// @Title 根据指标ID和具体日期获取对应日期的数据值+前后几期
+// @Description 根据指标ID和具体日期获取对应日期的数据值+前后几期
+// @Param   EdbInfoId   query   int  false       "指标id"
+// @Param   Date   query   string  false       "日期"
+// @Param   Num   query   int  false       "前后几期数据"
+// @Success 200 {object} data_manage.EdbInfoList
+// @router /edb_info/date_data/before_after [get]
+func (this *EdbInfoController) GetEdbBeforeAndAfterDateData() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	edbInfoId, _ := this.GetInt("EdbInfoId")
+	date := this.GetString("Date")
+	num, _ := this.GetInt("Num")
+
+	// 默认2期数据
+	if num <= 0 {
+		num = 2
+	}
+
+	if edbInfoId <= 0 {
+		br.Msg = "请选择指标"
+		br.IsSendEmail = false
+		return
+	}
+	if date == `` {
+		br.Msg = "请选择日期"
+		br.IsSendEmail = false
+		return
+	}
+	edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprint("获取指标信息失败,Err:", err.Error())
+		return
+	}
+	dataList := make([]*data_manage.EdbDataList, 0)
+
+	startDate := date
+	// 指定日期的类型
+	dateType := "day"
+	//如果填写的是月度日期
+	if strings.Count(date, "-") == 1 {
+		startDate = date + "-01"
+		dateType = "month"
+	}
+
+	// 后面的数据
+	afterList, err := data.GetEdbBeforeAndAfterDateData(edbInfo, startDate, "", 2, num)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprint("获取后面的指数据失败,Err:", err.Error())
+		return
+	}
+
+	// 当前日期
+	var currDate string
+	lenBeforeList := len(afterList)
+	if lenBeforeList <= 0 {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "所选指标所选日期无值"
+		br.Data = dataList
+		return
+	} else {
+		var dateTimeStr string
+		switch dateType {
+		case "month":
+			dateTime, _ := time.ParseInLocation(utils.FormatDate, afterList[0].DataTime, time.Local)
+			dateTimeStr = dateTime.Format(utils.FormatYearMonthDate)
+		case "day":
+			dateTimeStr = afterList[0].DataTime
+		}
+		currDate = afterList[0].DataTime
+		// 如果对应日期找不到,那么就直接返回吧
+		if dateTimeStr != date {
+			br.Ret = 200
+			br.Success = true
+			br.Msg = "所选指标所选日期无值"
+			br.Data = dataList
+			return
+		}
+	}
+
+	// 前面的数据
+	beforeList, err := data.GetEdbBeforeAndAfterDateData(edbInfo, "", currDate, 1, num)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprint("获取前面的指数据失败,Err:", err.Error())
+		return
+	}
+
+	dataList = append(dataList, beforeList...)
+	// 后面的数据
+	if len(afterList) > 0 {
+		if len(beforeList) > 0 {
+			dataList = append(dataList, afterList[1:]...)
+		} else {
+			dataList = append(dataList, afterList...)
+		}
+	}
+
+	// 数据翻转
+	for i, j := 0, len(dataList)-1; i < j; i, j = i+1, j-1 {
+		dataList[i], dataList[j] = dataList[j], dataList[i]
+	}
+
+	resp := data_manage.BeforeAndAfterDateDataResp{
+		List: dataList,
+		Date: currDate,
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// EdbChartAdminList
+// @Title 获取创建人员分组
+// @Description 获取创建人员分组
+// @Param   Source   query   int  false       "来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库"
+// @Success 200 {object} company.DepartmentGroupSellersResp
+// @router /edb_chart/adminList [get]
+func (this *EdbInfoController) EdbChartAdminList() {
+	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
+	}
+
+	source, _ := this.GetInt("Source", 0)
+	if source <= 0 || source > 5 {
+		br.Msg = "错误的来源"
+		br.IsSendEmail = false
+		return
+	}
+
+	idList, err := data.GetEdbChartAdminList(source)
+	if err != nil {
+		//br.Success = true
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+
+	fmt.Println("idlist:", idList)
+	systemAdminMap := make(map[int]*system.Admin)
+	departmentMap := make(map[string]string)
+	departmentAdminMap := make(map[int]string)
+	groupMap := make(map[string]string)
+	systemAdminList, err := system.GetAdminListByIdListWithoutEnable(idList)
+	if err != nil {
+		br.Msg = "获取用户列表失败"
+		br.ErrMsg = "获取用户列表失败,Err:" + err.Error()
+		return
+	}
+
+	for _, v := range systemAdminList {
+		systemAdminMap[v.AdminId] = v
+		departmentMap[v.DepartmentName] = v.DepartmentName
+		departmentAdminMap[v.AdminId] = v.DepartmentName
+		groupMap[v.GroupName] = v.DepartmentName
+	}
+
+	depList := make([]company.DepartmentGroupAdmins, 0)
+
+	i := 1
+	for _, v := range departmentMap {
+		item := company.DepartmentGroupAdmins{
+			AdminId:  "dep_" + strconv.Itoa(i),
+			RealName: v,
+		}
+		i++
+		depList = append(depList, item)
+	}
+
+	for k := 0; k < len(depList); k++ {
+		for k1, v1 := range groupMap {
+			if v1 == depList[k].RealName && v1 != "" {
+				item := &company.DepartmentGroupAdmins{
+					AdminId:  "group_" + strconv.Itoa(k),
+					RealName: k1,
+				}
+				depList[k].ChildrenList = append(depList[k].ChildrenList, item)
+			}
+		}
+	}
+
+	for _, admin := range systemAdminList {
+		for i, v := range depList {
+			for _, group := range v.ChildrenList {
+				if admin.GroupName == group.RealName {
+					item := &company.DepartmentGroupAdmins{
+						AdminId:      strconv.Itoa(admin.AdminId),
+						RealName:     admin.RealName,
+						RoleTypeCode: admin.RoleTypeCode,
+						Authority:    admin.Authority,
+					}
+					if group.RealName != "" {
+						group.ChildrenList = append(group.ChildrenList, item)
+					} else {
+						depList[i].ChildrenList = append(depList[i].ChildrenList, item)
+					}
+				}
+			}
+		}
+	}
+
+	for _, groupList := range depList {
+		for k, v := range groupList.ChildrenList {
+			if v.RealName == "" {
+				groupList.ChildrenList = append(groupList.ChildrenList[:k], groupList.ChildrenList[k+1:]...)
+			}
+		}
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = depList
+}
+
+// EdbSourceList
+// @Title 指标来源列表
+// @Description 指标来源列表
+// @Param   IsBase   query   int  false	"是否为基础指标: 1-是"
+// @Success 200 {object} data_manage.EdbInfoListResp
+// @router /edb_source/list [get]
+func (this *EdbInfoController) EdbSourceList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	isBase, _ := this.GetInt("IsBase", 0)
+
+	cond := ``
+	if isBase > 0 {
+		cond = ` AND is_base = 1`
+	}
+	pars := make([]interface{}, 0)
+	list, e := data_manage.GetEdbSourceItemsByCondition(cond, pars, []string{}, "")
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取指标来源列表失败, Err: " + e.Error()
+		return
+	}
+
+	br.Data = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}

+ 5 - 5
controllers/data_manage/edb_info_calculate.go

@@ -2,12 +2,12 @@ package data_manage
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
 	"net/url"
 	"strconv"
 	"strings"

+ 4 - 4
controllers/data_manage/edb_info_updates.go

@@ -1,12 +1,12 @@
 package data_manage
 
 import (
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
 	"time"
 )
 

+ 3 - 3
controllers/data_manage/eia_steo.go

@@ -3,9 +3,9 @@ package data_manage
 import (
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/utils"
 	"os"
 	"path/filepath"
 	"time"

+ 6 - 6
controllers/data_manage/excel_classify.go

@@ -2,12 +2,12 @@ package data_manage
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/models/data_manage/response"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/utils"
 	"strconv"
 	"time"
 )

+ 134 - 109
controllers/data_manage/excel_info.go

@@ -2,19 +2,19 @@ package data_manage
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/services"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data"
+	"eta/eta_api/services/excel"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/yidane/formula"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/models/data_manage/response"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/services/excel"
-	"hongze/hz_eta_api/utils"
 	"os"
 	"strconv"
 	"strings"
@@ -32,14 +32,14 @@ type ExcelInfoController struct {
 // @Param	request	body request.AddExcelInfoReq true "type json string"
 // @Success 200 {object} response.AddExcelInfoResp
 // @router /excel_info/add [post]
-func (this *ExcelInfoController) Add() {
+func (c *ExcelInfoController) Add() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -56,11 +56,11 @@ func (this *ExcelInfoController) Add() {
 	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
 		deleteCache = false
 		br.Msg = "系统处理中,请稍后重试!"
-		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
 		return
 	}
 	var req request.AddExcelInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -211,9 +211,9 @@ func (this *ExcelInfoController) Add() {
 	//		SysUserRealName: sysUser.RealName,
 	//		UniqueCode:      excelInfo.UniqueCode,
 	//		CreateTime:      time.Now(),
-	//		Content:         string(this.Ctx.Input.RequestBody),
+	//		Content:         string(c.Ctx.Input.RequestBody),
 	//		Status:          "新增表格",
-	//		Method:          this.Ctx.Input.URI(),
+	//		Method:          c.Ctx.Input.URI(),
 	//	}
 	//	go data_manage.AddExcelInfoLog(excelLog)
 	//}
@@ -235,13 +235,13 @@ func (this *ExcelInfoController) Add() {
 // @Param   AdminId   query   int  false       "创建人id"
 // @Success 200 {object} response.ExcelListResp
 // @router /excel_info/list [get]
-func (this *ExcelInfoController) List() {
+func (c *ExcelInfoController) List() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -249,12 +249,12 @@ func (this *ExcelInfoController) List() {
 		return
 	}
 
-	excelClassifyId, _ := this.GetInt("ExcelClassifyId")
+	excelClassifyId, _ := c.GetInt("ExcelClassifyId")
 
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-	keyword := this.GetString("Keyword")
-	adminId, _ := this.GetInt("AdminId")
+	pageSize, _ := c.GetInt("PageSize")
+	currentIndex, _ := c.GetInt("CurrentIndex")
+	keyword := c.GetString("Keyword")
+	adminId, _ := c.GetInt("AdminId")
 
 	var total int
 	page := paging.GetPaging(currentIndex, pageSize, total)
@@ -327,13 +327,13 @@ func (this *ExcelInfoController) List() {
 // @Param   ExcelInfoId   query   int  true       "表格id"
 // @Success 200 {object} data_manage.ExcelInfo
 // @router /excel_info/detail [get]
-func (this *ExcelInfoController) Detail() {
+func (c *ExcelInfoController) Detail() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -341,7 +341,7 @@ func (this *ExcelInfoController) Detail() {
 		return
 	}
 
-	excelInfoId, _ := this.GetInt("ExcelInfoId")
+	excelInfoId, _ := c.GetInt("ExcelInfoId")
 	if excelInfoId <= 0 {
 		br.Msg = "请选择表格"
 		br.ErrMsg = "ExcelInfoId未传"
@@ -372,14 +372,14 @@ func (this *ExcelInfoController) Detail() {
 // @Param	request	body request.EditExcelInfoReq true "type json string"
 // @Success 200 {object} response.AddExcelInfoResp
 // @router /excel_info/edit [post]
-func (this *ExcelInfoController) Edit() {
+func (c *ExcelInfoController) Edit() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -388,7 +388,7 @@ func (this *ExcelInfoController) Edit() {
 	}
 	deleteCache := true
 	var req request.EditExcelInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -408,7 +408,7 @@ func (this *ExcelInfoController) Edit() {
 	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
 		deleteCache = false
 		br.Msg = "系统处理中,请稍后重试!"
-		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
 		return
 	}
 	req.ExcelName = strings.Trim(req.ExcelName, " ")
@@ -582,14 +582,14 @@ func (this *ExcelInfoController) Edit() {
 // @Param	request	body request.MoveExcelInfoReq true "type json string"
 // @Success Ret=200 移动成功
 // @router /excel_info/move [post]
-func (this *ExcelInfoController) Move() {
+func (c *ExcelInfoController) Move() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -598,7 +598,7 @@ func (this *ExcelInfoController) Move() {
 	}
 
 	var req request.MoveExcelInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -752,9 +752,9 @@ func (this *ExcelInfoController) Move() {
 	//	ExcelLog.SysUserRealName = sysUser.RealName
 	//	ExcelLog.UniqueCode = ExcelInfo.UniqueCode
 	//	ExcelLog.CreateTime = time.Now()
-	//	ExcelLog.Content = string(this.Ctx.Input.RequestBody)
+	//	ExcelLog.Content = string(c.Ctx.Input.RequestBody)
 	//	ExcelLog.Status = "移动表格"
-	//	ExcelLog.Method = this.Ctx.Input.URL()
+	//	ExcelLog.Method = c.Ctx.Input.URL()
 	//	go data_manage.AddExcelInfoLog(ExcelLog)
 	//}
 
@@ -770,16 +770,16 @@ func (this *ExcelInfoController) Move() {
 // @Param	request	body request.DeleteExcelInfoReq true "type json string"
 // @Success Ret=200 删除成功
 // @router /excel_info/delete [post]
-func (this *ExcelInfoController) Delete() {
+func (c *ExcelInfoController) Delete() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
 	resp := response.AddExcelInfoResp{}
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -788,7 +788,7 @@ func (this *ExcelInfoController) Delete() {
 	}
 
 	var req request.DeleteExcelInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -911,14 +911,14 @@ func (this *ExcelInfoController) Delete() {
 // @Param	request	body request.AddExcelDraftReq true "type json string"
 // @Success Ret=200 添加成功
 // @router /excel_info/draft/add [post]
-func (this *ExcelInfoController) AddDraft() {
+func (c *ExcelInfoController) AddDraft() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -928,7 +928,7 @@ func (this *ExcelInfoController) AddDraft() {
 
 	var req request.AddExcelDraftReq
 
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1010,20 +1010,20 @@ func (this *ExcelInfoController) AddDraft() {
 // @Param   UniqueCode   query   string  true       "表格code"
 // @Success 200 {object} response.ExcelTableDetailResp
 // @router /excel_info/table_data [get]
-func (this *ExcelInfoController) GetExcelTableData() {
+func (c *ExcelInfoController) GetExcelTableData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
 		br.Ret = 408
 		return
 	}
-	uniqueCode := this.GetString("UniqueCode")
+	uniqueCode := c.GetString("UniqueCode")
 
 	var err error
 	if uniqueCode == `` {
@@ -1134,7 +1134,7 @@ func UpdateExcelInfoFileUrl(excelInfo *data_manage.ExcelInfo) {
 	//_, err = luckySheetData.GetTableDataByLuckySheetDataStr()
 	downloadFilePath, err := luckySheetData.ToExcel()
 	defer func() {
-		os.Remove(downloadFilePath)
+		_ = os.Remove(downloadFilePath)
 	}()
 	if err != nil {
 		fmt.Println("err:", err)
@@ -1178,14 +1178,14 @@ func UpdateExcelInfoFileUrl(excelInfo *data_manage.ExcelInfo) {
 // @Description 公式计算接口
 // @Param	request	body request.CalculateReq true "type json string"
 // @router /excel_info/table/calculate [post]
-func (this *ExcelInfoController) Calculate() {
+func (c *ExcelInfoController) Calculate() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1194,7 +1194,7 @@ func (this *ExcelInfoController) Calculate() {
 	}
 
 	var req request.CalculateReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1242,12 +1242,21 @@ func (this *ExcelInfoController) Calculate() {
 		br.ErrMsg = "计算失败:计算结果是:NAN;formulaStr:" + formulaFormStr
 		return
 	}
-	calVal := calResult.String()
-	if err != nil {
+	// 计算结果格式化
+	calFloat, e := calResult.Float64()
+	if e != nil {
 		br.Msg = "计算失败"
-		br.ErrMsg = "计算失败,结果转 string 失败:Err:" + err.Error() + ";formulaStr:" + formulaFormStr
+		br.ErrMsg = "计算失败, Err: " + e.Error()
 		return
 	}
+	calVal := utils.FormatTableDataShowValue(calFloat)
+
+	//calVal := calResult.String()
+	//if err != nil {
+	//	br.Msg = "计算失败"
+	//	br.ErrMsg = "计算失败,结果转 string 失败:Err:" + err.Error() + ";formulaStr:" + formulaFormStr
+	//	return
+	//}
 
 	br.Ret = 200
 	br.Success = true
@@ -1260,15 +1269,16 @@ func (this *ExcelInfoController) Calculate() {
 // @Description 获取未来日期数据接口
 // @Param   EdbInfoId   query   int  true       "指标id"
 // @Param   Num   query   int  true       "默认期数"
+// @Param   SortType   query   string  true       "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒序`,不传默认倒序"
 // @router /excel_info/table/first_edb_data_list [get]
-func (this *ExcelInfoController) GetFirstEdbData() {
+func (c *ExcelInfoController) GetFirstEdbData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1276,8 +1286,9 @@ func (this *ExcelInfoController) GetFirstEdbData() {
 		return
 	}
 
-	edbInfoId, _ := this.GetInt("EdbInfoId")
-	num, _ := this.GetInt("Num")
+	edbInfoId, _ := c.GetInt("EdbInfoId")
+	num, _ := c.GetInt("Num")
+	sortType := c.GetString("SortType")
 
 	if edbInfoId <= 0 {
 		br.Msg = "请选择指标"
@@ -1304,6 +1315,13 @@ func (this *ExcelInfoController) GetFirstEdbData() {
 		return
 	}
 
+	// 默认是倒序返回的数据,如果要正序的话,那么翻转下就好了
+	if sortType == "asc" {
+		for i, j := 0, len(dataList)-1; i < j; i, j = i+1, j-1 {
+			dataList[i], dataList[j] = dataList[j], dataList[i]
+		}
+	}
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"
@@ -1318,14 +1336,14 @@ func (this *ExcelInfoController) GetFirstEdbData() {
 // @Description 获取未来日期数据接口
 // @Param	request	body request.GetOtherEdbDateDataReq true "type json string"
 // @router /excel_info/table/other_edb_data_list [post]
-func (this *ExcelInfoController) GetOtherEdbData() {
+func (c *ExcelInfoController) GetOtherEdbData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1334,7 +1352,7 @@ func (this *ExcelInfoController) GetOtherEdbData() {
 	}
 
 	var req request.GetOtherEdbDateDataReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1365,6 +1383,13 @@ func (this *ExcelInfoController) GetOtherEdbData() {
 		return
 	}
 
+	// 默认是倒序返回的数据,如果要正序的话,那么翻转下就好了
+	if req.SortType == "asc" {
+		for i, j := 0, len(dataList)-1; i < j; i, j = i+1, j-1 {
+			dataList[i], dataList[j] = dataList[j], dataList[i]
+		}
+	}
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"
@@ -1379,14 +1404,14 @@ func (this *ExcelInfoController) GetOtherEdbData() {
 // @Description 获取未来日期数据接口
 // @Param	request	body request.GetFutureDateDataReq true "type json string"
 // @router /excel_info/table/future_date_list [post]
-func (this *ExcelInfoController) GetFutureDateData() {
+func (c *ExcelInfoController) GetFutureDateData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1395,7 +1420,7 @@ func (this *ExcelInfoController) GetFutureDateData() {
 	}
 
 	var req request.GetFutureDateDataReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1549,14 +1574,14 @@ func (this *ExcelInfoController) GetFutureDateData() {
 // @Description 获取历史日期数据接口
 // @Param	request	body request.GetFutureDateDataReq true "type json string"
 // @router /excel_info/table/history_date_list [post]
-func (this *ExcelInfoController) GetHistoryDateData() {
+func (c *ExcelInfoController) GetHistoryDateData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1565,7 +1590,7 @@ func (this *ExcelInfoController) GetHistoryDateData() {
 	}
 
 	var req request.GetHistoryDateDataReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1661,14 +1686,14 @@ func (this *ExcelInfoController) GetHistoryDateData() {
 // @Description 刷新接口
 // @Param   ExcelInfoId   query   int  true       "表格id"
 // @router /excel_info/table/refresh [get]
-func (this *ExcelInfoController) Refresh() {
+func (c *ExcelInfoController) Refresh() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1676,7 +1701,7 @@ func (this *ExcelInfoController) Refresh() {
 		return
 	}
 
-	excelInfoId, _ := this.GetInt("ExcelInfoId")
+	excelInfoId, _ := c.GetInt("ExcelInfoId")
 	if excelInfoId <= 0 {
 		br.Msg = "请选择表格"
 		br.ErrMsg = "ExcelInfoId未传"
@@ -1741,13 +1766,13 @@ func (this *ExcelInfoController) Refresh() {
 // @Param   ExcelInfoId   query   int  true       "表格id"
 // @Success 200 {object} data_manage.ExcelInfo
 // @router /excel_info/table/download [get]
-func (this *ExcelInfoController) Download() {
+func (c *ExcelInfoController) Download() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1755,8 +1780,8 @@ func (this *ExcelInfoController) Download() {
 		return
 	}
 
-	excelInfoId, _ := this.GetInt("ExcelInfoId")
-	uniqueCode := this.GetString("UniqueCode")
+	excelInfoId, _ := c.GetInt("ExcelInfoId")
+	uniqueCode := c.GetString("UniqueCode")
 	if excelInfoId <= 0 && uniqueCode == `` {
 		br.Msg = "请选择表格"
 		br.ErrMsg = "ExcelInfoId和UniqueCode都未传"
@@ -1840,11 +1865,11 @@ func (this *ExcelInfoController) Download() {
 		return
 	}
 	defer func() {
-		os.Remove(downloadFilePath)
+		_ = os.Remove(downloadFilePath)
 	}()
 
 	downloadFileName := excelInfo.ExcelName + ".xlsx"
-	this.Ctx.Output.Download(downloadFilePath, downloadFileName)
+	c.Ctx.Output.Download(downloadFilePath, downloadFileName)
 
 	br.Ret = 200
 	br.Success = true
@@ -1858,13 +1883,13 @@ func (this *ExcelInfoController) Download() {
 // @Param	request	body request.EditExcelInfoReq true "type json string"
 // @Success 200 {object} response.AddExcelInfoResp
 // @router /excel_info/copy [post]
-func (this *ExcelInfoController) Copy() {
+func (c *ExcelInfoController) Copy() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1874,7 +1899,7 @@ func (this *ExcelInfoController) Copy() {
 
 	deleteCache := true
 	var req request.CopyExcelInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1894,7 +1919,7 @@ func (this *ExcelInfoController) Copy() {
 	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
 		deleteCache = false
 		br.Msg = "系统处理中,请稍后重试!"
-		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
 		return
 	}
 	req.ExcelName = strings.Trim(req.ExcelName, " ")

+ 6 - 6
controllers/data_manage/future_good/future_good_chart_classify.go

@@ -2,13 +2,13 @@ package future_good
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"time"
 )

+ 11 - 211
controllers/data_manage/future_good/future_good_chart_info.go

@@ -2,18 +2,18 @@ package future_good
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/future_good"
+	"eta/eta_api/models/data_manage/future_good/request"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/services/data"
+	future_goodServ "eta/eta_api/services/data/future_good"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/future_good"
-	"hongze/hz_eta_api/models/data_manage/future_good/request"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/data"
-	future_goodServ "hongze/hz_eta_api/services/data/future_good"
-	"hongze/hz_eta_api/utils"
 	"os"
 	"os/exec"
 	"sort"
@@ -2194,205 +2194,6 @@ func (this *FutureGoodChartInfoController) ChartInfoImageSet() {
 	br.Msg = "保存成功"
 }
 
-//
-//// @Param   Img   query   string  true       "图片"
-//// @Success 200 {object} models.ResourceResp
-//// @router /chart_info/base64Upload [post]
-//func (this *FutureGoodChartInfoController) ChartInfoBase64Upload() {
-//
-//	br := new(models.BaseResponse).Init()
-//	defer func() {
-//		this.Data["json"] = br
-//		this.ServeJSON()
-//	}()
-//
-//	var err error
-//	ext := ".png"
-//	uploadDir := "./static"
-//	randStr := utils.GetRandStringNoSpecialChar(28)
-//	fileName := randStr + ext
-//	fpath := uploadDir + "/" + fileName
-//
-//	image := this.Ctx.Request.FormValue("Img")
-//	if image == "" {
-//		resp := new(models.ResourceResp)
-//		resp.Id = 0
-//		resp.ResourceUrl = ""
-//		br.Msg = "上传成功"
-//		br.Ret = 200
-//		br.Success = true
-//		br.Data = resp
-//		return
-//	}
-//	b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, image)
-//	if !b {
-//		br.Msg = "图片格式不正确"
-//		br.ErrMsg = "图片格式不正确"
-//		return
-//	}
-//	re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
-//	base64Str := re.ReplaceAllString(image, "")
-//	base64Str = strings.Replace(base64Str, " ", "", -1)
-//
-//	err = utils.SaveBase64ToFile(base64Str, fpath)
-//	if err != nil {
-//		br.Msg = "图片保存失败"
-//		br.ErrMsg = "图片保存失败,Err:" + err.Error()
-//		return
-//	}
-//	fmt.Println("end")
-//
-//	defer os.Remove(fpath)
-//
-//	hzUploadDir := "static/images/"
-//	savePath := hzUploadDir + time.Now().Format("200601/20060102/")
-//	savePath += fileName
-//	//上传到阿里云
-//	err = services.UploadFileToAliyun(fileName, fpath, savePath)
-//	if err != nil {
-//		br.Msg = "文件上传失败"
-//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
-//		return
-//	}
-//	utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
-//	utils.FileLog.Info("end update oss ")
-//
-//	fileHost := "https://hzstatic.hzinsights.com/"
-//
-//	resourceUrl := fileHost + savePath
-//
-//	item := new(models.Resource)
-//	item.ResourceUrl = resourceUrl
-//	item.ResourceType = 1
-//	item.CreateTime = time.Now()
-//	newId, err := models.AddResource(item)
-//	if err != nil {
-//		br.Msg = "资源上传失败"
-//		br.ErrMsg = "资源上传失败,Err:" + err.Error()
-//		return
-//	}
-//	resp := new(models.ResourceResp)
-//	resp.Id = newId
-//	resp.ResourceUrl = resourceUrl
-//	br.Msg = "上传成功"
-//	br.Ret = 200
-//	br.Success = true
-//	br.Data = resp
-//
-//	//br := new(models.BaseResponse).Init()
-//	//defer func() {
-//	//	this.Data["json"] = br
-//	//	this.ServeJSON()
-//	//}()
-//	//imgData := this.GetString("Img")
-//	//if imgData == "" {
-//	//	br.Msg = "图片参数错误"
-//	//	br.ErrMsg = "图片参数错误,Img Is Empty"
-//	//	return
-//	//}
-//
-//	//dateDir := time.Now().Format("20060102")
-//	//uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
-//	//
-//	//if !utils.FileIsExist(uploadDir) {
-//	//	err := os.MkdirAll(uploadDir, 777)
-//	//	if err != nil {
-//	//		br.Msg = "存储目录创建失败"
-//	//		br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
-//	//		return
-//	//	}
-//	//}
-//	//var resourceUrl string
-//	//param := url.Values{}
-//	//param.Add("Sign", "dIGi2M0VN21s3dKS")
-//	//param.Add("Img", imgData)
-//	//svgToPngUrl := `http://8.136.199.33:8086/v1/image/svg_to_png`
-//	//respBody, err := http.Post(svgToPngUrl, param.Encode(), "")
-//	//if err != nil {
-//	//	br.Msg = "文件上传失败"
-//	//	br.ErrMsg = "图片格式转换失败,Err:" + err.Error()
-//	//	return
-//	//}
-//	//fmt.Println(string(respBody))
-//	//respItem := new(data_manage.ImageSvgToPngResp)
-//	//err = json.Unmarshal(respBody, &respItem)
-//	//if err != nil {
-//	//	br.Msg = "文件上传失败"
-//	//	br.ErrMsg = "图片格式转换失败,Unmarshal Err:" + err.Error()
-//	//	return
-//	//}
-//	//resourceUrl = respItem.Data.ResourceURL
-//	//resp := new(models.ResourceResp)
-//	//resp.ResourceUrl = resourceUrl
-//	//br.Msg = "上传成功"
-//	//br.Ret = 200
-//	//br.Success = true
-//	//br.Data = resp
-//
-//
-//
-//	/*
-//		svg 转 png
-//
-//		uploadDir := "static/images/"
-//		if !utils.FileIsExist(uploadDir) {
-//			err := os.MkdirAll(uploadDir, 777)
-//			if err != nil {
-//				br.Msg = "图表保存失败"
-//				br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
-//				return
-//			}
-//		}
-//
-//		var saveToOssPath string
-//		randStr := utils.GetRandStringNoSpecialChar(28)
-//		var fileName, outFileName string
-//		fileName = randStr + ".txt"
-//		//saveSvgPath = uploadDir + fileName
-//		err := utils.SaveToFile(imgData, fileName)
-//		if err != nil {
-//			br.Msg = "图片保存失败"
-//			br.ErrMsg = "图片保存失败,Err:" + err.Error()
-//			return
-//		}
-//
-//		outFileName = randStr + ".png"
-//		cd := exec.Command("highcharts-export-server", "--infile", fileName, "--constr", "Chart", "--scale", "2", "--workers", "5", "--workLimit", "5", "--outfile", outFileName)
-//		str, err := cd.Output()
-//		fmt.Println(string(str))
-//		if err != nil {
-//			fmt.Println("Command Err:" + err.Error())
-//			return
-//		}
-//		fmt.Println("end convert", time.Now())
-//
-//		defer func() {
-//			os.Remove(fileName)
-//			os.Remove(outFileName)
-//		}()
-//		saveToOssPath = uploadDir + time.Now().Format("200601/20060102/")
-//		saveToOssPath += outFileName
-//		//上传到阿里云
-//		fmt.Println("upload:", outFileName, saveToOssPath)
-//		err = services.UploadFileToAliyun("", outFileName, saveToOssPath)
-//		if err != nil {
-//			br.Msg = "文件上传失败"
-//			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-//			return
-//		}
-//		fileHost := "https://hzstatic.hzinsights.com/"
-//		resourceUrl := fileHost + saveToOssPath
-//
-//		resp := new(models.ResourceResp)
-//		resp.ResourceUrl = resourceUrl
-//		br.Msg = "上传成功"
-//		br.Ret = 200
-//		br.Success = true
-//		br.Data = resp
-//	*/
-//	return
-//}
-
 // @Param   Img   query   string  true       "图片"
 // @Success 200 {object} models.ResourceResp
 // @router /chart_info/base64Upload [post]
@@ -2472,8 +2273,7 @@ func (this *FutureGoodChartInfoController) ChartInfoBase64Upload() {
 		br.ErrMsg = "文件上传失败,Err:" + err.Error()
 		return
 	}
-	fileHost := "https://hzstatic.hzinsights.com/"
-	resourceUrl := fileHost + saveToOssPath
+	resourceUrl := utils.Imghost + saveToOssPath
 	resp.ResourceUrl = resourceUrl
 	resp.Source = "convert"
 	//resp.CacheKey = imgDataKey

+ 4 - 4
controllers/data_manage/future_good/future_good_edb_info.go

@@ -1,11 +1,11 @@
 package future_good
 
 import (
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	future_good2 "eta/eta_api/models/data_manage/future_good"
+	"eta/eta_api/utils"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	future_good2 "hongze/hz_eta_api/models/data_manage/future_good"
-	"hongze/hz_eta_api/utils"
 )
 
 // FutureGoodEdbInfoController 期货数据

+ 9 - 9
controllers/data_manage/future_good/future_good_profit_chart_info.go

@@ -2,16 +2,16 @@ package future_good
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/future_good"
+	"eta/eta_api/models/data_manage/future_good/request"
+	"eta/eta_api/models/data_manage/future_good/response"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	future_goodServ "eta/eta_api/services/data/future_good"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/future_good"
-	"hongze/hz_eta_api/models/data_manage/future_good/request"
-	"hongze/hz_eta_api/models/data_manage/future_good/response"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	future_goodServ "hongze/hz_eta_api/services/data/future_good"
-	"hongze/hz_eta_api/utils"
 	"sort"
 	"strconv"
 	"strings"

+ 3 - 3
controllers/data_manage/gl_data.go

@@ -4,9 +4,9 @@ import (
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/utils"
 	"os"
 	"path/filepath"
 	"time"

+ 6 - 6
controllers/data_manage/line_equation/line_chart_classify.go

@@ -2,12 +2,12 @@ package line_equation
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"strconv"
 	"time"
 )

+ 9 - 9
controllers/data_manage/line_equation/line_chart_info.go

@@ -2,17 +2,17 @@ package line_equation
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/line_equation/request"
+	"eta/eta_api/models/data_manage/line_equation/response"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/services/data/line_equation"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/line_equation/request"
-	"hongze/hz_eta_api/models/data_manage/line_equation/response"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/services/data/line_equation"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"strings"
 	"time"

+ 9 - 9
controllers/data_manage/line_feature/chart_info.go

@@ -3,17 +3,17 @@ package line_feature
 import (
 	"encoding/json"
 	"errors"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/line_feature/request"
+	"eta/eta_api/models/data_manage/line_feature/response"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	lineFeatureServ "eta/eta_api/services/data/line_feature"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/line_feature/request"
-	"hongze/hz_eta_api/models/data_manage/line_feature/response"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	lineFeatureServ "hongze/hz_eta_api/services/data/line_feature"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"strings"
 	"time"

+ 6 - 6
controllers/data_manage/line_feature/classify.go

@@ -2,12 +2,12 @@ package line_feature
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"strconv"
 	"time"
 )

+ 7 - 7
controllers/data_manage/lz_data.go

@@ -1,12 +1,12 @@
 package data_manage
 
 import (
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_source"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_source"
-	"hongze/hz_eta_api/utils"
 	"os"
 	"path/filepath"
 	"strconv"
@@ -562,7 +562,7 @@ func (this *EdbInfoController) ExportLzQuotasData() {
 	}
 
 	// 获取多个品种的指标信息
-	quotaList, err := models.GetExportLzSurveyProductByBreedIds(breedIdsStr)
+	quotaList, err := models.GetExportLzSurveyProductByBreedIds(breedIds)
 	if err != nil {
 		br.Msg = "导出失败"
 		br.ErrMsg = "获取指标信息失败, Err: " + err.Error()
@@ -570,7 +570,7 @@ func (this *EdbInfoController) ExportLzQuotasData() {
 	}
 
 	// 获取多个品种的指标最大数据量
-	quotaMaxCountList, err := data_source.GetExportLzSurveyDataMaxCount(breedIdsStr)
+	quotaMaxCountList, err := data_source.GetExportLzSurveyDataMaxCount(breedIds)
 	if err != nil {
 		br.Msg = "导出失败"
 		br.ErrMsg = "获取指标最大数据量失败, Err: " + err.Error()
@@ -587,7 +587,7 @@ func (this *EdbInfoController) ExportLzQuotasData() {
 		var iniArr []*data_source.LongzhongSurveyData
 		productIdDataMatch[quotaList[i].SurveyProductId] = iniArr
 	}
-	quotaDataList, err := data_source.GetExportLzSurveyDataByBreedIds(breedIdsStr)
+	quotaDataList, err := data_source.GetExportLzSurveyDataByBreedIds(breedIds)
 	for k, _ := range productIdDataMatch {
 		var tmpArr []*data_source.LongzhongSurveyData
 		for _, qd := range quotaDataList {

+ 6 - 6
controllers/data_manage/manual.go

@@ -3,12 +3,12 @@ package data_manage
 import (
 	"encoding/json"
 	"fmt"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"strconv"
 	"strings"
 	"time"

+ 20 - 19
controllers/data_manage/multiple_graph_config.go

@@ -2,15 +2,15 @@ package data_manage
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	correlationServ "eta/eta_api/services/data/correlation"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/models/data_manage/response"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	correlationServ "hongze/hz_eta_api/services/data/correlation"
-	"hongze/hz_eta_api/utils"
 	"math"
 	"strconv"
 	"strings"
@@ -295,6 +295,8 @@ func (this *ChartInfoController) MultipleGraphPreview() {
 		correlationConf := req.Correlation
 		// 配置了数据才有返回
 		if correlationConf.LeadValue > 0 {
+			tmpChartInfo := *chartInfo
+
 			moveUnitDays, ok := utils.FrequencyDaysMap[correlationConf.CalculateUnit]
 			if !ok {
 				br.Msg = "错误的分析周期"
@@ -310,7 +312,7 @@ func (this *ChartInfoController) MultipleGraphPreview() {
 				return
 			}
 
-			tmpChartInfo := *chartInfo
+			tmpChartInfo.ChartName += fmt.Sprint(`(`, correlationConf.CalculateValue, correlationConf.CalculateUnit, `)`)
 			tmpChartInfo.Source = utils.CHART_SOURCE_CORRELATION
 			resp.CorrelationData = response.CorrelationResp{
 				ChartInfo:   tmpChartInfo,
@@ -352,12 +354,6 @@ func (this *ChartInfoController) MultipleGraphPreview() {
 			rollingCorrelationData := make([]interface{}, 0)
 			for _, rollingCorrelationConf := range rollingCorrelationConfList {
 				if rollingCorrelationConf.CalculateValue > 0 && rollingCorrelationConf.CalculateUnit != `` {
-					xDateTimeValue, yDataList, e := correlationServ.GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, rollingCorrelationConf.LeadValue, rollingCorrelationConf.LeadUnit, rollingCorrelationConf.CalculateValue, rollingCorrelationConf.CalculateUnit, startDate, endDate)
-					if e != nil {
-						br.Msg = "获取失败"
-						br.ErrMsg = "获取滚动相关性图表, 图表计算值失败, Err:" + e.Error()
-						return
-					}
 					tmpChartInfo := *chartInfo
 					tmpChartInfo.Source = utils.CHART_SOURCE_ROLLING_CORRELATION
 					// ”指标A名称“+”指标B名称“+"滚动相关性"+”滚动相关性计算窗口值“+”滚动相关性计算窗口单位“
@@ -372,11 +368,16 @@ func (this *ChartInfoController) MultipleGraphPreview() {
 					} else {
 						tmpChartInfo.ChartName = fmt.Sprintf(`%s与%s(领先%d%s)%d%s滚动相关性`, edbInfoMappingA.EdbName, edbInfoMappingB.EdbName, int(math.Abs(float64(rollingCorrelationConf.LeadValue))), rollingCorrelationConf.LeadUnit, rollingCorrelationConf.CalculateValue, rollingCorrelationConf.CalculateUnit)
 					}
+					dataResp, e := correlationServ.GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, rollingCorrelationConf.LeadValue, rollingCorrelationConf.LeadUnit, rollingCorrelationConf.CalculateValue, rollingCorrelationConf.CalculateUnit, startDate, endDate, tmpChartInfo.ChartName, tmpChartInfo.ChartNameEn)
+					if e != nil {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取滚动相关性图表, 图表计算值失败, Err:" + e.Error()
+						return
+					}
 					rollingCorrelationData = append(rollingCorrelationData, response.RollingCorrelationResp{
-						ChartInfo:      tmpChartInfo,
-						EdbInfoList:    mappingList,
-						XDateTimeValue: xDateTimeValue,
-						YDataList:      yDataList,
+						ChartInfo:   tmpChartInfo,
+						EdbInfoList: mappingList,
+						DataResp:    dataResp,
 						CorrelationChartInfo: data_manage.CorrelationInfo{
 							LeadValue:       rollingCorrelationConf.LeadValue,
 							LeadUnit:        rollingCorrelationConf.LeadUnit,

+ 6 - 6
controllers/data_manage/my_chart.go

@@ -2,14 +2,14 @@ package data_manage
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"strings"
 	"time"

+ 7 - 7
controllers/data_manage/mysteel_chemical_data.go

@@ -2,16 +2,16 @@ package data_manage
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/models/data_manage/response"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
 	"os"
 	"path/filepath"
 	"sort"

+ 4 - 4
controllers/data_manage/national_statistics.go

@@ -4,10 +4,10 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/utils"
 	"os"
 	"path/filepath"
 	"time"

+ 6 - 6
controllers/data_manage/predict_edb_classify.go

@@ -2,12 +2,12 @@ package data_manage
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 )
 
 // PredictEdbClassifyController 数据管理-预测指标分类模块

+ 8 - 8
controllers/data_manage/predict_edb_info.go

@@ -3,14 +3,14 @@ package data_manage
 import (
 	"encoding/json"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/models/data_manage/response"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/services/elastic"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/services/data"
+	"eta/eta_api/services/elastic"
+	"eta/eta_api/utils"
 	"sort"
 	"strconv"
 	"strings"

+ 4 - 4
controllers/data_manage/predict_edb_info_calculate.go

@@ -2,11 +2,11 @@ package data_manage
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
 	"strings"
 	"time"
 )

+ 6 - 6
controllers/data_manage/sci_data.go

@@ -5,12 +5,12 @@ import (
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"os"
 	"path/filepath"
 	"strings"

+ 6 - 6
controllers/data_manage/smm_data.go

@@ -5,12 +5,12 @@ import (
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"os"
 	"path/filepath"
 	"strings"

+ 9 - 9
controllers/data_manage/supply_analysis/variety.go

@@ -2,17 +2,17 @@ package supply_analysis
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/models/data_manage/supply_analysis"
+	"eta/eta_api/services/data"
+	supply_analysisServ "eta/eta_api/services/data/supply_analysis"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/models/data_manage/response"
-	"hongze/hz_eta_api/models/data_manage/supply_analysis"
-	"hongze/hz_eta_api/services/data"
-	supply_analysisServ "hongze/hz_eta_api/services/data/supply_analysis"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"strings"
 	"time"

+ 8 - 8
controllers/data_manage/supply_analysis/variety_edb.go

@@ -4,14 +4,14 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/models/data_manage/response"
-	"hongze/hz_eta_api/models/data_manage/supply_analysis"
-	"hongze/hz_eta_api/services/data"
-	supply_analysisServ "hongze/hz_eta_api/services/data/supply_analysis"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/models/data_manage/supply_analysis"
+	"eta/eta_api/services/data"
+	supply_analysisServ "eta/eta_api/services/data/supply_analysis"
+	"eta/eta_api/utils"
 	"os"
 	"path/filepath"
 	"strconv"

+ 8 - 8
controllers/data_manage/supply_analysis/variety_plant.go

@@ -2,20 +2,20 @@ package supply_analysis
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/models/data_manage/supply_analysis"
+	supply_analysisServ "eta/eta_api/services/data/supply_analysis"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/shopspring/decimal"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage/request"
-	"hongze/hz_eta_api/models/data_manage/response"
-	"hongze/hz_eta_api/models/data_manage/supply_analysis"
-	supply_analysisServ "hongze/hz_eta_api/services/data/supply_analysis"
-	"hongze/hz_eta_api/utils"
 	"time"
 )
 
 // PlantList
-// @Title 商品价格图表分类列表
-// @Description 商品价格图表分类列表接口
+// @Title 装置列表
+// @Description 装置列表
 // @Param   VarietyId   query   int  true       "品种id"
 // @Success 200 {object} response.VarietyListResp
 // @router /variety/plant/list [get]

+ 6 - 6
controllers/english_report/email.go

@@ -2,16 +2,16 @@ package english_report
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/company"
+	"eta/eta_api/services"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/beego/beego/v2/server/web"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/company"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/utils"
 	"os"
 	"path"
 	"strconv"

+ 3 - 3
controllers/english_report/en_permission.go

@@ -3,9 +3,9 @@ package english_report
 import (
 	"encoding/json"
 	"fmt"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/utils"
 	"strings"
 	"time"
 )

+ 6 - 6
controllers/english_report/english_auth.go

@@ -2,13 +2,13 @@ package english_report
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/models/system/request"
+	"eta/eta_api/models/system/response"
+	"eta/eta_api/utils"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/models/system/request"
-	"hongze/hz_eta_api/models/system/response"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"strings"
 	"time"

+ 4 - 4
controllers/english_report/english_classify.go

@@ -4,10 +4,10 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"sort"
 	"time"
 )

+ 6 - 6
controllers/english_report/english_company.go

@@ -4,12 +4,12 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/utils"
 	"strconv"
 	"strings"
 	"time"

+ 5 - 5
controllers/english_report/english_company_todo.go

@@ -3,11 +3,11 @@ package english_report
 import (
 	"encoding/json"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"html"
 	"time"
 )

+ 5 - 5
controllers/english_report/english_video.go

@@ -3,11 +3,11 @@ package english_report
 import (
 	"encoding/json"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/company"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/company"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"strconv"
 	"strings"
 )

+ 4 - 4
controllers/english_report/policy_report.go

@@ -2,11 +2,11 @@ package english_report
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
 	"html"
 	"time"
 )

+ 131 - 65
controllers/english_report/report.go

@@ -4,15 +4,17 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/company"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/company"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/utils"
 	"html"
 	"strconv"
 	"strings"
+	"sync"
 	"time"
 )
 
@@ -402,55 +404,114 @@ func (this *EnglishReportController) ListReport() {
 		}
 	}
 
-	total, err := models.GetEnglishReportListCount(condition, pars, companyType)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
-	list, err := models.GetEnglishReportList(condition, pars, companyType, startSize, pageSize)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
+	var total int
+	var errCount, errList, errOther error
+	var authOk bool
+	list := make([]*models.EnglishReportList, 0)
+	failMap := make(map[int]bool, 0)    // 有群发失败记录的研报
+	adminMap := make(map[int]string, 0) // 编辑中的研究员姓名
 
-	// 获取邮件配置-是否有权限群发
-	conf := new(models.EnglishReportEmailConf)
-	authKey := "english_report_email_conf"
-	confAuth, e := company.GetConfigDetailByCode(authKey)
-	if e != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取群发邮件权限失败, Err: " + e.Error()
-		return
-	}
-	if confAuth.ConfigValue == "" {
+	wg := sync.WaitGroup{}
+	wg.Add(3)
+
+	// 列表总数
+	go func() {
+		defer func() {
+			wg.Done()
+		}()
+
+		t, e := models.GetEnglishReportListCount(condition, pars, companyType)
+		if e != nil {
+			errCount = fmt.Errorf("获取英文研报Count失败, Err: %s", e.Error())
+			return
+		}
+		total = t
+	}()
+
+	// 列表数据
+	go func() {
+		defer func() {
+			wg.Done()
+		}()
+
+		// 限制一下富文本字段, 列表用不到
+		fieldArr := []string{
+			"id", "add_type", "classify_id_first", "classify_name_first", "classify_id_second", "classify_name_second", "title", "abstract", "author",
+			"frequency", "create_time", "modify_time", "state", "publish_time", "stage", "msg_is_send", "report_code", "pv", "share_url",
+			"pv_email", "email_state", "from_report_id", "key_takeaways", "admin_id", "admin_real_name",
+		}
+		items, e := models.GetEnglishReportList(condition, pars, companyType, startSize, pageSize, fieldArr)
+		if e != nil {
+			errList = fmt.Errorf("获取英文研报列表失败, Err: %s", e.Error())
+			return
+		}
+		list = items
+	}()
+
+	// 群发权限/失败记录
+	go func() {
+		defer func() {
+			wg.Done()
+		}()
+
+		// 获取邮件配置-是否有权限群发
+		conf := new(models.EnglishReportEmailConf)
+		authKey := "english_report_email_conf"
+		confAuth, e := company.GetConfigDetailByCode(authKey)
+		if e != nil {
+			errOther = fmt.Errorf("获取群发邮件权限失败, Err: %s", e.Error())
+			return
+		}
+		if confAuth.ConfigValue == "" {
+			errOther = fmt.Errorf("群发邮件配置为空")
+			return
+		}
+		if e := json.Unmarshal([]byte(confAuth.ConfigValue), &conf); e != nil {
+			errOther = fmt.Errorf("群发邮件配置有误")
+			return
+		}
+		authArr := strings.Split(conf.SendAuthGroup, ",")
+		if utils.InArrayByStr(authArr, sysUser.RoleTypeCode) {
+			authOk = true
+		}
+
+		// 是否有群发邮件失败的记录,标记红点
+		failList, e := models.GetEnglishReportEmailLogFailList(0)
+		if e != nil {
+			errOther = fmt.Errorf("获取群发邮件记录失败, Err: %s", e.Error())
+			return
+		}
+		for i := range failList {
+			failMap[failList[i].ReportId] = true
+		}
+
+		// 获取admin, 用于匹配编辑中的研究员姓名
+		admins, e := system.GetSysAdminList("", make([]interface{}, 0), []string{"admin_id", "real_name"}, "")
+		if e != nil {
+			errOther = fmt.Errorf("获取系统用户列表失败, Err: %s", e.Error())
+			return
+		}
+		for _, a := range admins {
+			adminMap[a.AdminId] = a.RealName
+		}
+	}()
+	wg.Wait()
+
+	if errCount != nil {
 		br.Msg = "获取失败"
-		br.ErrMsg = "群发邮件配置为空"
+		br.ErrMsg = errCount.Error()
 		return
 	}
-	if e := json.Unmarshal([]byte(confAuth.ConfigValue), &conf); e != nil {
+	if errList != nil {
 		br.Msg = "获取失败"
-		br.ErrMsg = "群发邮件配置有误"
+		br.ErrMsg = errList.Error()
 		return
 	}
-	authOk := false
-	authArr := strings.Split(conf.SendAuthGroup, ",")
-	if utils.InArrayByStr(authArr, sysUser.RoleTypeCode) {
-		authOk = true
-	}
-
-	// 是否有群发邮件失败的记录,标记红点
-	failList, e := models.GetEnglishReportEmailLogFailList(0)
-	if e != nil {
+	if errOther != nil {
 		br.Msg = "获取失败"
-		br.ErrMsg = "获取群发邮件记录失败, Err: " + e.Error()
+		br.ErrMsg = errOther.Error()
 		return
 	}
-	failMap := make(map[int]bool, 0)
-	for i := range failList {
-		failMap[failList[i].ReportId] = true
-	}
 
 	for _, item := range list {
 		if item.State == 2 {
@@ -458,37 +519,42 @@ func (this *EnglishReportController) ListReport() {
 		}
 		item.EmailAuth = authOk
 		item.EmailHasFail = failMap[item.Id]
+
 		// 邮箱PV大于0的时候, 不展示最初版本的PV
 		if item.PvEmail > 0 {
 			item.Pv = 0
 		}
 
-		/*key := fmt.Sprint(`crm:enReport:edit:`, item.Id)
-		opUserId, _ := utils.Rc.RedisInt(key)
-		//如果当前没有人操作,获取当前操作人是本人,那么编辑按钮可用
-		if opUserId <= 0 || (opUserId == this.SysUser.AdminId) {
-			item.CanEdit = true
-		} else {
-			adminInfo, errAdmin := system.GetSysUserById(opUserId)
-			if errAdmin != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取失败,Err:" + errAdmin.Error()
-				return
+		// 报告是否正在编辑中
+		var opUser models.MarkReportItem
+		key := fmt.Sprint(`crm:enReport:edit:`, item.Id)
+		opUserId, e := utils.Rc.RedisInt(key)
+		if e != nil {
+			str, te := utils.Rc.RedisString(key)
+			if te == nil {
+				te = json.Unmarshal([]byte(str), &opUser)
+				if te == nil {
+					opUserId = opUser.AdminId
+				}
 			}
-			item.Editor = adminInfo.RealName
-		}*/
-		markStatus, err := services.UpdateEnReportEditMark(item.Id, this.SysUser.AdminId, 2, this.SysUser.RealName)
-		if err != nil {
-			br.Msg = "查询标记状态失败"
-			br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
-			return
 		}
-		if markStatus.Status == 0 {
+		var ret models.MarkReportResp
+		if opUserId > 0 && opUserId != sysUser.AdminId {
+			editor := opUser.Editor
+			if editor == "" {
+				editor = adminMap[opUserId]
+			}
+			ret.Status = 1
+			ret.Msg = fmt.Sprintf("当前%s正在编辑报告", editor)
+			ret.Editor = editor
+		}
+		if ret.Status == 0 {
 			item.CanEdit = true
 		} else {
-			item.Editor = markStatus.Editor
+			item.Editor = ret.Editor
 		}
 	}
+
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := new(models.EnglishReportListResp)
 	resp.Paging = page

+ 7 - 8
controllers/ppt_english.go

@@ -2,13 +2,13 @@ package controllers
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/company"
+	"eta/eta_api/models/ppt_english"
+	"eta/eta_api/services"
+	"eta/eta_api/services/ppt"
+	"eta/eta_api/utils"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/company"
-	"hongze/hz_eta_api/models/ppt_english"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/ppt"
-	"hongze/hz_eta_api/utils"
 	_ "image/gif"
 	_ "image/jpeg"
 	_ "image/png"
@@ -523,8 +523,7 @@ func (this *PptEnglishController) PptUpload() {
 		br.ErrMsg = "文件上传失败,Err:" + err.Error()
 		return
 	}
-	fileHost := "https://hzstatic.hzinsights.com/"
-	pptxUrl := fileHost + savePptxToOssPath
+	pptxUrl := utils.Imghost + savePptxToOssPath
 
 	defer func() {
 		os.Remove(fpath)

+ 3 - 3
controllers/ppt_english_group.go

@@ -2,9 +2,9 @@ package controllers
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/ppt_english"
-	"hongze/hz_eta_api/services/ppt"
+	"eta/eta_api/models"
+	"eta/eta_api/models/ppt_english"
+	"eta/eta_api/services/ppt"
 )
 
 type PptEnglishGroupController struct {

+ 26 - 9
controllers/ppt_v2.go

@@ -2,14 +2,14 @@ package controllers
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/company"
+	"eta/eta_api/models/ppt_english"
+	"eta/eta_api/services"
+	"eta/eta_api/services/ppt"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/company"
-	"hongze/hz_eta_api/models/ppt_english"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/ppt"
-	"hongze/hz_eta_api/utils"
 	_ "image/gif"
 	_ "image/jpeg"
 	_ "image/png"
@@ -524,8 +524,7 @@ func (this *PptV2Controller) PptUpload() {
 		br.ErrMsg = "文件上传失败,Err:" + err.Error()
 		return
 	}
-	fileHost := "https://hzstatic.hzinsights.com/"
-	pptxUrl := fileHost + savePptxToOssPath
+	pptxUrl := utils.Imghost + savePptxToOssPath
 
 	defer func() {
 		os.Remove(fpath)
@@ -922,6 +921,24 @@ func (this *PptV2Controller) ToEn() {
 		return
 	}
 
+	// 从基础配置中取出第一张封面图, 作为英文PPT的图片, 没有则取原PPT背景图
+	conf, e := models.GetBusinessConf()
+	if e != nil {
+		br.Msg = "获取PPT图配置失败"
+		br.ErrMsg = "获取PPT图配置失败, Err: " + e.Error()
+		return
+	}
+	coverImg := ""
+	if conf[models.BusinessConfEnPptCoverImgs] != "" {
+		imgArr := strings.Split(conf[models.BusinessConfEnPptCoverImgs], ",")
+		if len(imgArr) > 0 {
+			coverImg = imgArr[0]
+		}
+	}
+	if coverImg == "" {
+		coverImg = origin.BackgroundImg
+	}
+
 	_, e = ppt_english.GetPptGroupByGroupIdAdminId(int64(req.GroupId), this.SysUser.AdminId)
 	if e != nil {
 		br.Msg = "目录信息有误"
@@ -939,7 +956,7 @@ func (this *PptV2Controller) ToEn() {
 	var newId int64
 	pptInfo := &ppt_english.PptEnglish{
 		TemplateType:  origin.TemplateType,
-		BackgroundImg: origin.BackgroundImg,
+		BackgroundImg: coverImg,
 		Title:         newTitle,
 		ReportType:    origin.ReportType,
 		PptDate:       origin.PptDate,

+ 2 - 2
controllers/ppt_v2_group.go

@@ -2,8 +2,8 @@ package controllers
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services/ppt"
+	"eta/eta_api/models"
+	"eta/eta_api/services/ppt"
 )
 
 type PptV2GroupController struct {

+ 155 - 54
controllers/report.go

@@ -2,14 +2,14 @@ package controllers
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/services"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/beego/beego/v2/server/web"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/utils"
 	"html"
 	"os"
 	"path"
@@ -150,14 +150,14 @@ func (this *ReportController) ListReport() {
 				syncReportIdArr = append(syncReportIdArr, strconv.Itoa(list[i].OldReportId))
 			}
 		}
-		reportIds := strings.Join(reportIdArr, ",")
-		syncReportIds := strings.Join(syncReportIdArr, ",")
+		//reportIds := strings.Join(reportIdArr, ",")
+		//syncReportIds := strings.Join(syncReportIdArr, ",")
 
 		// 查询同步过来的报告对应的老报告PV+UV
 		pvMap := make(map[int]int, 0)
 		uvMap := make(map[int]int, 0)
-		if syncReportIds != "" {
-			puvList, e := models.GetPUVByResearchReportIds(syncReportIds)
+		if len(syncReportIdArr) > 0 {
+			puvList, e := models.GetPUVByResearchReportIds(syncReportIdArr)
 			if e != nil {
 				br.Msg = "获取失败"
 				br.ErrMsg = "获取同步报告对应的PV、UV失败, Err: " + e.Error()
@@ -170,7 +170,7 @@ func (this *ReportController) ListReport() {
 			}
 		}
 		// 晨周报音频列表
-		videoList, err := models.GetReportChapterVideoListByReportIds(reportIds)
+		videoList, err := models.GetReportChapterVideoListByReportIds(reportIdArr)
 		if err != nil {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取报告音频文件失败,Err:" + err.Error()
@@ -493,26 +493,30 @@ func (this *ReportController) Add() {
 		br.ErrMsg = "保存失败,Err:" + err.Error()
 		return
 	}
-	//处理权限
-	{
-		permissionItems, err := models.GetPermission(req.ClassifyNameSecond)
-		if err != nil {
-			go alarm_msg.SendAlarmMsg("获取权限失败,Err:"+err.Error(), 3)
-			//utils.SendEmail(utils.APPNAME+"失败提醒", "获取权限失败,Err:"+err.Error(), utils.EmailSendToUsers)
-		}
-		for _, v := range permissionItems {
-			err = models.AddChartPermissionChapterMapping(v.ChartPermissionId, newReportId)
-			if err != nil {
-				go alarm_msg.SendAlarmMsg("新增权限失败,Err:"+err.Error(), 3)
-				//utils.SendEmail(utils.APPNAME+"失败提醒", "新增权限失败,Err:"+err.Error()+strconv.FormatInt(newReportId, 10), utils.EmailSendToUsers)
-			}
-		}
-	}
 	reportCode := utils.MD5(strconv.Itoa(int(newReportId)))
 	//修改唯一编码
 	{
 		go models.ModifyReportCode(newReportId, reportCode)
 	}
+
+	//处理权限
+	if utils.BusinessCode == utils.BusinessCodeRelease || utils.BusinessCode == utils.BusinessCodeSandbox {
+		go func() {
+			permissionItems, e := models.GetPermission(req.ClassifyNameSecond)
+			if e != nil {
+				alarm_msg.SendAlarmMsg("获取权限失败,Err:"+e.Error(), 3)
+				return
+			}
+			for _, v := range permissionItems {
+				e = models.AddChartPermissionChapterMapping(v.ChartPermissionId, newReportId)
+				if e != nil {
+					alarm_msg.SendAlarmMsg("新增权限失败,Err:"+e.Error(), 3)
+					return
+				}
+			}
+		}()
+	}
+
 	resp := new(models.AddResp)
 	resp.ReportId = newReportId
 	resp.ReportCode = reportCode
@@ -534,6 +538,14 @@ func (this *ReportController) Edit() {
 		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 models.EditReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -562,14 +574,6 @@ func (this *ReportController) Edit() {
 		}
 	}
 
-	sysUser := this.SysUser
-	if sysUser == nil {
-		br.Msg = "请登录"
-		br.ErrMsg = "请登录,SysUser Is Empty"
-		br.Ret = 408
-		return
-	}
-
 	//更新标记key
 	markStatus, err := services.UpdateReportEditMark(int(req.ReportId), sysUser.AdminId, 1, sysUser.RealName)
 	if err != nil {
@@ -619,26 +623,30 @@ func (this *ReportController) Edit() {
 		br.ErrMsg = "保存失败,Err:" + err.Error()
 		return
 	}
+
 	//处理权限
-	{
-		err = models.RemoveChartPermissionChapterMapping(req.ReportId)
-		if err != nil {
-			go alarm_msg.SendAlarmMsg("修改删除报告权限失败,Err:"+err.Error(), 3)
-			//utils.SendEmail(utils.APPNAME+"失败提醒", "修改删除报告权限失败,Err:"+err.Error(), utils.EmailSendToUsers)
-		}
-		permissionItems, err := models.GetPermission(req.ClassifyNameSecond)
-		if err != nil {
-			go alarm_msg.SendAlarmMsg("获取权限失败,Err:"+err.Error(), 3)
-			//utils.SendEmail(utils.APPNAME+"失败提醒", "获取权限失败,Err:"+err.Error(), utils.EmailSendToUsers)
-		}
-		for _, v := range permissionItems {
-			err = models.AddChartPermissionChapterMapping(v.ChartPermissionId, req.ReportId)
-			if err != nil {
-				go alarm_msg.SendAlarmMsg("新增权限失败,Err:"+err.Error(), 3)
-				//utils.SendEmail(utils.APPNAME+"失败提醒", "新增权限失败,Err:"+err.Error()+strconv.FormatInt(req.ReportId, 10), utils.EmailSendToUsers)
+	if utils.BusinessCode == utils.BusinessCodeRelease || utils.BusinessCode == utils.BusinessCodeSandbox {
+		go func() {
+			e := models.RemoveChartPermissionChapterMapping(req.ReportId)
+			if e != nil {
+				alarm_msg.SendAlarmMsg("修改删除报告权限失败,Err:"+e.Error(), 3)
+				return
 			}
-		}
+			permissionItems, e := models.GetPermission(req.ClassifyNameSecond)
+			if e != nil {
+				alarm_msg.SendAlarmMsg("获取权限失败,Err:"+e.Error(), 3)
+				return
+			}
+			for _, v := range permissionItems {
+				e = models.AddChartPermissionChapterMapping(v.ChartPermissionId, req.ReportId)
+				if e != nil {
+					alarm_msg.SendAlarmMsg("新增权限失败,Err:"+e.Error(), 3)
+					return
+				}
+			}
+		}()
 	}
+
 	reportCode := utils.MD5(strconv.Itoa(int(req.ReportId)))
 	resp := new(models.EditResp)
 	resp.ReportId = req.ReportId
@@ -887,6 +895,13 @@ func (this *ReportController) SendTemplateMsg() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	var req models.SendTemplateMsgReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -1425,7 +1440,6 @@ func (this *ReportController) GetDayWeekReportChapterTypeList() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -1433,6 +1447,12 @@ func (this *ReportController) GetDayWeekReportChapterTypeList() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var condition string
 	var pars []interface{}
@@ -1537,6 +1557,12 @@ func (this *ReportController) GetDayWeekReportPauseTime() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	list, err := models.GetDayWeekReportPauseTimeList()
 	if err != nil {
@@ -1571,6 +1597,12 @@ func (this *ReportController) SetDayWeekReportUpdateRule() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.SetDayWeekReportUpdateRuleReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -1618,6 +1650,12 @@ func (this *ReportController) SetDayWeekReportEnableRule() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.SetDayWeekReportEnableUpdateRuleReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -1659,7 +1697,6 @@ func (this *ReportController) AddDayWeekReport() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -1667,6 +1704,12 @@ func (this *ReportController) AddDayWeekReport() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.SaveDayWeekReportReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -1858,7 +1901,6 @@ func (this *ReportController) EditDayWeekReport() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -1866,6 +1908,12 @@ func (this *ReportController) EditDayWeekReport() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.SaveDayWeekReportReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -1937,6 +1985,12 @@ func (this *ReportController) GetReportChapterList() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	reqReportId := this.GetString("ReportId")
 	reportId, _ := strconv.Atoi(reqReportId)
@@ -2055,6 +2109,12 @@ func (this *ReportController) GetLastDayWeekReportChapter() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	typeId, _ := this.GetInt("TypeId")
 	reportType := this.GetString("ReportType")
@@ -2358,7 +2418,6 @@ func (this *ReportController) GetDayReportTickerList() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -2366,6 +2425,12 @@ func (this *ReportController) GetDayReportTickerList() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	reportChapterId, _ := this.GetInt("ReportChapterId")
 	if reportChapterId <= 0 {
@@ -2467,6 +2532,12 @@ func (this *ReportController) IsLastDayWeekReportChapter() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	reportChapterId, _ := this.GetInt("ReportChapterId")
 	if reportChapterId <= 0 {
@@ -2524,6 +2595,12 @@ func (this *ReportController) PublishDayWeekReportChapter() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.PublishReportChapterReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -2713,6 +2790,12 @@ func (this *ReportController) PublishDayWeekReport() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 
 	var req models.PublishDayWeekReportReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -2772,6 +2855,13 @@ func (this *ReportController) GetSunCode() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	var req models.SunCodeReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -2818,7 +2908,6 @@ func (this *ReportController) GetStopDayWeekReportChapterTypeList() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -2826,6 +2915,12 @@ func (this *ReportController) GetStopDayWeekReportChapterTypeList() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
 
 	stopDay := make([]*models.ReportChapterType, 0)
 	stopWeek := make([]*models.ReportChapterType, 0)
@@ -2941,6 +3036,12 @@ func (this *ReportController) SendMsg() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
 	if req.ReportId <= 0 {
 		br.Msg = "参数错误"
 		br.ErrMsg = "参数错误"

+ 2 - 2
controllers/report_author.go

@@ -3,8 +3,8 @@ package controllers
 import (
 	"encoding/json"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/utils"
 	"strings"
 	"time"
 )

+ 17 - 2
controllers/report_chapter_type.go

@@ -3,8 +3,8 @@ package controllers
 import (
 	"encoding/json"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/utils"
 	"time"
 )
 
@@ -370,6 +370,14 @@ func (this *ReportChapterTypeController) AuthSetting() {
 		br.Ret = 408
 		return
 	}
+	// 非自用直接返回
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	var req models.ReportChapterTypeAuthSettingReq
 	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
 		br.Msg = "参数解析异常!"
@@ -456,6 +464,13 @@ func (this *ReportChapterTypeController) PermissionList() {
 		br.Ret = 408
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	typeId, _ := this.GetInt("ReportChapterTypeId")
 	if typeId <= 0 {
 		br.Msg = "参数有误"

+ 16 - 2
controllers/research_group.go

@@ -1,8 +1,9 @@
 package controllers
 
 import (
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services"
+	"eta/eta_api/models"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 )
 
 type ResearchGroupController struct {
@@ -20,6 +21,13 @@ func (this *ResearchGroupController) GetResearchGroupList() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
 	include, _ := this.GetInt("Include")
 	list, err := services.GetResearchGroupTree(include)
 	if err != nil {
@@ -50,6 +58,12 @@ func (this *ResearchGroupController) GetAdminResearchGroup() {
 		br.Msg = "参数有误"
 		return
 	}
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
 	//list, err := system.ResearchGroupRelationListByAdminId(adminId)
 	list, err := models.ResearchTagRelationListByAdminId(adminId)
 	if err != nil {

+ 4 - 6
controllers/resource.go

@@ -2,11 +2,11 @@ package controllers
 
 import (
 	"bufio"
+	"eta/eta_api/models"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/kgiannakakis/mp3duration/src/mp3duration"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
 	"io"
 	"os"
 	"path"
@@ -556,9 +556,7 @@ func (this *ResourceController) UploadImageBase64() {
 	utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
 	utils.FileLog.Info("end update oss ")
 
-	fileHost := "https://hzstatic.hzinsights.com/"
-
-	resourceUrl := fileHost + savePath
+	resourceUrl := utils.Imghost + savePath
 
 	item := new(models.Resource)
 	item.ResourceUrl = resourceUrl

+ 3 - 3
controllers/roadshow/calendar.go

@@ -1,9 +1,9 @@
 package roadshow
 
 import (
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/roadshow"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/roadshow"
 )
 
 // CalendarController 日历

+ 32 - 11
controllers/sandbox/sandbox.go

@@ -2,15 +2,16 @@ package sandbox
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/sandbox"
+	"eta/eta_api/models/sandbox/request"
+	"eta/eta_api/models/sandbox/response"
+	"eta/eta_api/models/system"
+	sandboxService "eta/eta_api/services/sandbox"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/sandbox"
-	"hongze/hz_eta_api/models/sandbox/request"
-	"hongze/hz_eta_api/models/sandbox/response"
-	sandboxService "hongze/hz_eta_api/services/sandbox"
-	"hongze/hz_eta_api/utils"
 )
 
 // versionSize 版本列表第一页数据约定是:3条
@@ -325,11 +326,30 @@ func (this *SandboxController) Save() {
 		return
 	}
 
-	var sandboxInfo *sandbox.Sandbox
+	var sandboxResp *sandbox.SandboxSaveResp
+	// 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
+	menus, e := system.GetSysMenuItemsByCondition("", make([]interface{}, 0), []string{}, ``)
+	if e != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+		return
+	}
+	menuMap := make(map[string]bool)
+	for _, m := range menus {
+		if m.ButtonCode != "" {
+			menuMap[m.ButtonCode] = true
+		}
+	}
+	ignoreVariety := false
+	if !menuMap[system.MenuSpecialHandleSandboxVariety] {
+		ignoreVariety = true
+		return
+	}
+
 	var errMsg string
 	if req.SandboxVersionCode == `` {
 		//新增沙盘
-		sandboxInfo, err = sandboxService.AddSandbox(req, sysUser.AdminId, sysUser.RealName)
+		sandboxResp, err = sandboxService.AddSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
 	} else {
 		////更新当前编辑中的状态缓存
 		//err = sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, 1)
@@ -339,7 +359,7 @@ func (this *SandboxController) Save() {
 		//}
 
 		//编辑沙盘
-		sandboxInfo, err, errMsg = sandboxService.UpdateSandbox(req, sysUser.AdminId, sysUser.RealName)
+		sandboxResp, err, errMsg = sandboxService.UpdateSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
 	}
 	if err != nil {
 		br.Msg = "保存失败!"
@@ -349,11 +369,12 @@ func (this *SandboxController) Save() {
 		br.ErrMsg = "保存失败,Err:" + err.Error()
 		return
 	}
+
 	msg := "保存成功"
 	br.Ret = 200
 	br.Success = true
 	br.Msg = msg
-	br.Data = sandboxInfo
+	br.Data = sandboxResp
 }
 
 // AddSandboxDraft

+ 5 - 5
controllers/semantic_analysis/sa_compare.go

@@ -2,13 +2,13 @@ package semantic_analysis
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	saModel "eta/eta_api/models/semantic_analysis"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	saModel "hongze/hz_eta_api/models/semantic_analysis"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
 	"html"
 	"strconv"
 	"strings"

+ 5 - 5
controllers/semantic_analysis/sa_compare_classify.go

@@ -2,12 +2,12 @@ package semantic_analysis
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	saModel "eta/eta_api/models/semantic_analysis"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	saModel "hongze/hz_eta_api/models/semantic_analysis"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/utils"
 	"strings"
 	"time"
 )

+ 5 - 5
controllers/semantic_analysis/sa_doc.go

@@ -2,13 +2,13 @@ package semantic_analysis
 
 import (
 	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	saModel "eta/eta_api/models/semantic_analysis"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	saModel "hongze/hz_eta_api/models/semantic_analysis"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
 	"html"
 	"strings"
 	"time"

+ 5 - 5
controllers/semantic_analysis/sa_doc_classify.go

@@ -3,11 +3,11 @@ package semantic_analysis
 import (
 	"encoding/json"
 	"fmt"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	saModel "hongze/hz_eta_api/models/semantic_analysis"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	saModel "eta/eta_api/models/semantic_analysis"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/utils"
 	"strings"
 	"time"
 )

+ 6 - 6
controllers/semantic_analysis/sa_label.go

@@ -4,12 +4,12 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/controllers"
-	"hongze/hz_eta_api/models"
-	saModel "hongze/hz_eta_api/models/semantic_analysis"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	saModel "eta/eta_api/models/semantic_analysis"
+	"eta/eta_api/services"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/utils"
 	"strings"
 	"time"
 )

+ 14 - 12
controllers/sys_admin.go

@@ -3,14 +3,14 @@ package controllers
 import (
 	"encoding/base64"
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/company"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/company"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
 	"strconv"
 	"strings"
 	"time"
@@ -116,7 +116,7 @@ func (this *SysAdminController) ListSysuser() {
 	}
 
 	var list []*system.AdminItem
-	adminIdArr := make([]string, 0)
+	adminIdArr := make([]int, 0)
 	if teamId <= 0 {
 		//if groupId > 0 {
 		//	ids, err := system.GetGroupIdByParentId(groupId, startSize, pageSize)
@@ -145,7 +145,8 @@ func (this *SysAdminController) ListSysuser() {
 		for i := 0; i < lenList; i++ {
 
 			item := list[i]
-			adminIdArr = append(adminIdArr, strconv.Itoa(item.AdminId))
+			//adminIdArr = append(adminIdArr, strconv.Itoa(item.AdminId))
+			adminIdArr = append(adminIdArr, item.AdminId)
 			var secondName *string
 			if item.GroupId != 0 {
 				pid, err := company.GetParentIdFromGroup(item.GroupId)
@@ -218,7 +219,8 @@ func (this *SysAdminController) ListSysuser() {
 		lenList := len(list)
 		for i := 0; i < lenList; i++ {
 			item := list[i]
-			adminIdArr = append(adminIdArr, strconv.Itoa(item.AdminId))
+			//adminIdArr = append(adminIdArr, strconv.Itoa(item.AdminId))
+			adminIdArr = append(adminIdArr, item.AdminId)
 
 			if item.DepartmentName != "" {
 				if item.GroupName == "" {
@@ -265,10 +267,10 @@ func (this *SysAdminController) ListSysuser() {
 		}
 	}
 	// 研究方向分组
-	if len(adminIdArr) > 0 {
-		adminIds := strings.Join(adminIdArr, ",")
+	if len(adminIdArr) > 0 && (utils.BusinessCode == utils.BusinessCodeRelease || utils.BusinessCode == utils.BusinessCodeSandbox) {
+		//adminIds := strings.Join(adminIdArr, ",")
 		//researchGroupList, e := system.GetAdminResearchGroupListByAdminId(adminIds)
-		researchGroupList, e := models.GetAdminVarietyTagRelationListByAdminId(adminIds)
+		researchGroupList, e := models.GetAdminVarietyTagRelationListByAdminId(adminIdArr)
 		if e != nil {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取研究方向分组列表失败, Err:" + e.Error()

+ 3 - 3
controllers/sys_department.go

@@ -2,9 +2,9 @@ package controllers
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
 	"time"
 )
 

+ 3 - 3
controllers/sys_group.go

@@ -2,9 +2,9 @@ package controllers
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
 	"strings"
 	"time"
 )

+ 3 - 3
controllers/sys_menu.go

@@ -1,9 +1,9 @@
 package controllers
 
 import (
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
 	"strconv"
 	"strings"
 )

+ 3 - 3
controllers/sys_menu_button.go

@@ -1,9 +1,9 @@
 package controllers
 
 import (
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
 )
 
 type SysMenuButtonController struct {

+ 253 - 6
controllers/sys_role.go

@@ -4,10 +4,10 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"strconv"
 	"strings"
 	"time"
@@ -248,7 +248,8 @@ func (this *SysRoleController) ListSysRole() {
 	br.Data = resp
 }
 
-// @Title 角色设置权限-菜单列表
+// SysRoleMenusList
+// @Title 角色设置权限-菜单列表-CRM14.1弃用
 // @Description 角色设置权限-菜单列表
 // @Param   RoleId   query   int  true       "角色Id"
 // @Success 200 {object} system.SysRoleListResp
@@ -313,7 +314,8 @@ func (this *SysRoleController) SysRoleMenusList() {
 	br.Data = resp
 }
 
-// @Title 角色设置权限
+// SysRoleMenusAdd
+// @Title 角色设置权限-CRM14.1弃用
 // @Description 角色设置权限
 // @Param	request	body system.RoleMenusAddReq true "type json string"
 // @Success 200 {object} system.SysRoleListResp
@@ -453,3 +455,248 @@ func (this *SysRoleController) AllSysRole() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// SysRoleMenuAuthList
+// @Title 角色设置权限-菜单列表
+// @Description 角色设置权限-菜单列表
+// @Param   RoleId   query   int  true       "角色Id"
+// @Success 200 {object} system.SysRoleListResp
+// @router /role/menu/auth_list [get]
+func (this *SysRoleController) SysRoleMenuAuthList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		return
+	}
+	resp := new(system.SysMenuListResp)
+	resp.ChoiceList = make([]int, 0)
+	resp.HalfChoiceList = make([]int, 0)
+	resp.List = make([]*system.SysMenuItem, 0)
+
+	// 角色勾选的权限
+	roleId, _ := this.GetInt("RoleId", 0)
+	if roleId > 0 {
+		relates, e := system.GetSysRoleMenuByRoleId(roleId)
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取角色关联菜单失败, Err: " + e.Error()
+			return
+		}
+		for _, r := range relates {
+			if r.Type == 1 {
+				resp.HalfChoiceList = append(resp.HalfChoiceList, r.MenuId)
+				continue
+			}
+			resp.ChoiceList = append(resp.ChoiceList, r.MenuId)
+		}
+	}
+
+	order := `sort ASC, create_time DESC, menu_id DESC`
+	list, e := system.GetSysMenuItemsByCondition("", make([]interface{}, 0), []string{}, order)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+		return
+	}
+
+	items := make([]*system.SysMenuItem, 0)
+	for _, v := range list {
+		t := &system.SysMenuItem{
+			MenuId:       v.MenuId,
+			ParentId:     v.ParentId,
+			Name:         v.Name,
+			Sort:         v.Sort,
+			Path:         v.Path,
+			PathName:     v.PathName,
+			IconPath:     v.IconPath,
+			Component:    v.Component,
+			Hidden:       v.Hidden,
+			HiddenLayout: v.HiddenLayout,
+			Level:        v.Level,
+			MenuType:     v.MenuType,
+			ButtonCode:   v.ButtonCode,
+			Children:     make([]*system.SysMenuItem, 0),
+		}
+		items = append(items, t)
+	}
+
+	// 递归返回树形结构
+	items = services.GetMenuTreeRecursive(items, 0)
+
+	resp.List = items
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// SysRoleMenuAuthSave
+// @Title 角色设置权限-保存
+// @Description 角色设置权限-保存
+// @Param	request	body RoleMenusSaveReq true "type json string"
+// @Success 200 {object} system.SysRoleListResp
+// @router /role/menu/auth_save [post]
+func (this *SysRoleController) SysRoleMenuAuthSave() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	type RoleMenusSaveReq struct {
+		RoleId      int   `description:"角色ID"`
+		MenuIds     []int `description:"菜单IDs"`
+		HalfMenuIds []int `description:"半选菜单IDs-仅供前端回显用的"`
+	}
+	var req RoleMenusSaveReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.RoleId <= 0 {
+		br.Msg = "参数有误"
+		return
+	}
+	if len(req.MenuIds) == 0 {
+		br.Msg = "请选择菜单"
+		return
+	}
+
+	items := make([]*system.SysRoleMenu, 0)
+	for _, v := range req.MenuIds {
+		t := new(system.SysRoleMenu)
+		t.MenuId = v
+		t.RoleId = req.RoleId
+		items = append(items, t)
+	}
+	for _, v := range req.HalfMenuIds {
+		t := new(system.SysRoleMenu)
+		t.MenuId = v
+		t.Type = 1
+		t.RoleId = req.RoleId
+		items = append(items, t)
+	}
+	if e := system.CreateMultiSysRoleMenu(req.RoleId, items); e != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存角色菜单权限失败, Err: " + e.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "设置成功"
+}
+
+// ButtonList
+// @Title 角色-按钮权限列表
+// @Description 角色-按钮权限列表
+// @Param   RoleId   query   int  true       "角色Id"
+// @Success 200 {object} system.SysRoleListResp
+// @router /role/menu/buttons [get]
+func (this *SysRoleController) ButtonList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	roleId := sysUser.RoleId
+	list, e := system.GetMenuButtonsByRoleId(roleId)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取角色按钮权限失败, Err: " + e.Error()
+		return
+	}
+
+	buttonList := make([]*system.SysMenuButtonResp, 0)
+	for _, v := range list {
+		tmp := new(system.SysMenuButtonResp)
+		tmp.MenuId = v.MenuId
+		tmp.ParentId = v.ParentId
+		tmp.MenuType = v.MenuType
+		tmp.Name = v.Name
+		tmp.ButtonCode = v.ButtonCode
+		buttonList = append(buttonList, tmp)
+	}
+
+	br.Data = buttonList
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// SystemConfig
+// @Title 系统配置列表
+// @Description 系统配置列表
+// @Success 200 {object} []system.BusinessConf
+// @router /config [get]
+func (this *SysRoleController) SystemConfig() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	list := make([]system.BusinessConf, 0)
+
+	// 获取基础配置, 若未配置则直接返回
+	conf, e := models.GetBusinessConf()
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取基础配置失败, Err: " + e.Error()
+		return
+	}
+
+	list = append(list, system.BusinessConf{
+		ConfKey: "ReportViewUrl",
+		ConfVal: conf["ReportViewUrl"],
+	}, system.BusinessConf{
+		ConfKey: "ChartViewUrl",
+		ConfVal: conf["ChartViewUrl"],
+	})
+
+	br.Data = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}

+ 5 - 5
controllers/sys_role_admin.go

@@ -3,11 +3,11 @@ package controllers
 import (
 	"encoding/json"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/models/system/request"
-	"hongze/hz_eta_api/models/system/response"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/models/system/request"
+	"eta/eta_api/models/system/response"
+	"eta/eta_api/utils"
 	"strconv"
 	"strings"
 	"time"

+ 3 - 3
controllers/sys_team.go

@@ -2,9 +2,9 @@ package controllers
 
 import (
 	"encoding/json"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
 	"strings"
 	"time"
 )

+ 4 - 4
controllers/sys_user.go

@@ -2,11 +2,11 @@ package controllers
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"fmt"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
 	"time"
 )
 

+ 13 - 13
controllers/target.go

@@ -10,17 +10,17 @@ package controllers
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_source"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/shopspring/decimal"
 	"github.com/tealeg/xlsx"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/models/data_manage"
-	"hongze/hz_eta_api/models/data_source"
-	"hongze/hz_eta_api/models/system"
-	"hongze/hz_eta_api/services/alarm_msg"
-	"hongze/hz_eta_api/services/data"
-	"hongze/hz_eta_api/utils"
 	"os"
 	"path/filepath"
 	"reflect"
@@ -2393,13 +2393,13 @@ func (this *TargetController) TargetFrequencyList() {
 
 func sortEdbFrequency(frequencyList []string) (newFrequencyList []string) {
 	var frequencyMap1 = map[string]int{
-		"日度":   1,
-		"周度":   2,
-		"旬度":   3,
-		"月度":   4,
-		"季度":   5,
+		"日度":  1,
+		"周度":  2,
+		"旬度":  3,
+		"月度":  4,
+		"季度":  5,
 		"半年度": 6,
-		"年度":   7,
+		"年度":  7,
 	}
 
 	var frequencyMap2 = map[int]string{

+ 94 - 0
controllers/trade_analysis/trade_analysis.go

@@ -0,0 +1,94 @@
+package trade_analysis
+
+import (
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	trade_analysisModel "eta/eta_api/models/data_manage/trade_analysis"
+	"eta/eta_api/services/data/trade_analysis"
+)
+
+// TradeAnalysisController 供应分析
+type TradeAnalysisController struct {
+	controllers.BaseAuthController
+}
+
+// GetClassifyName
+// @Title 获取交易所合约列表
+// @Description 获取交易所合约列表
+// @Param	request	body saModel.SaCompareSaveReq true "type json string"
+// @Success 200 {object} trade_analysis.TradeClassifyNameListSort
+// @router /classify [get]
+func (c *TradeAnalysisController) GetClassifyName() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	//userinfo := userService.GetInfoByClaims(c)
+	list, err, errMsg := trade_analysis.GetClassifyName()
+	if err != nil {
+		br.Msg = errMsg
+		br.ErrMsg = "获取失败, ErrMsg: " + err.Error()
+		return
+	}
+
+	br.Data = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// GetPositionTop
+// @Title 获取合约榜单详情
+// @Description 获取合约榜单详情
+// @Param   Exchange  query  string  false  "交易所"
+// @Param   ClassifyName  query  string  false  "分类名称"
+// @Param   ClassifyType  query  string  false  "具体合约名称"
+// @Param   DataTime  query  string  false  "请求日期,如果为空,则返回最新的榜单日期"
+// @Success 200 {object} trade_analysis.GetPositionTopResp
+// @Success 200 Ret=200 操作成功
+// @router /top [get]
+func (c *TradeAnalysisController) GetPositionTop() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	req := trade_analysisModel.GetPositionTopReq{
+		Exchange:     c.GetString("Exchange"),
+		ClassifyName: c.GetString("ClassifyName"),
+		ClassifyType: c.GetString("ClassifyType"),
+		DataTime:     c.GetString("DataTime"),
+	}
+
+	if req.ClassifyName == "" {
+		br.Msg = "请输入分类名称"
+		br.IsSendEmail = false
+		return
+	}
+	if req.ClassifyType == "" {
+		br.Msg = "请输入合约名称"
+		br.IsSendEmail = false
+		return
+	}
+
+	list, err, errMsg := trade_analysis.GetPositionTopDetail(req)
+	if err != nil {
+		br.Msg = errMsg
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	br.Data = list
+	br.Ret = 200
+	br.Success = true
+
+	return
+}

+ 16 - 3
controllers/variety_tag.go

@@ -1,8 +1,9 @@
 package controllers
 
 import (
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services"
+	"eta/eta_api/models"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 )
 
 type VarietyTagController struct {
@@ -21,15 +22,27 @@ func (this *VarietyTagController) TagTree() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	// 非自用不请求
+	resp := make([]*services.TagTreeItem, 0)
+	if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = resp
+		return
+	}
+
 	hasResearcher, _ := this.GetInt("HasResearcher")    // 是否展示研究员:1展示, 0不展示
 	include, _ := this.GetInt("IncludeDisableMember")   // 是否包含被禁用的研究员标签
 	questionId, _ := this.GetInt("CommunityQuestionId") // 问答社区ID-用于区分哪些研究员不可选
-	resp, e := services.GetTagTree(hasResearcher, include, questionId)
+	list, e := services.GetTagTree(hasResearcher, include, questionId)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "TagTree-获取标签树失败, Err: " + e.Error()
 		return
 	}
+	resp = list
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 23 - 5
controllers/voice.go

@@ -5,12 +5,14 @@ import (
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/file"
 	"github.com/rdlucklib/rdluck_tools/http"
-	"hongze/hz_eta_api/models"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/models"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 	"io/ioutil"
 	"os"
 	"path"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -185,11 +187,27 @@ func (this *VoiceCommonController) ReportChapterDownload() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-	chapterIds := this.GetString("ChapterIds")
-	if chapterIds == "" {
+	strChapterIds := this.GetString("ChapterIds")
+	if strChapterIds == "" {
 		br.Msg = "参数错误"
 		return
 	}
+	chapterIds := make([]int, 0)
+	chapterIdArr := strings.Split(strChapterIds, ",")
+	for _, v := range chapterIdArr {
+		id, e := strconv.Atoi(v)
+		if e != nil {
+			br.Msg = "参数有误"
+			br.ErrMsg = "章节ID有误, Err: " + e.Error()
+			return
+		}
+		chapterIds = append(chapterIds, id)
+	}
+	if len(chapterIds) == 0 {
+		br.Msg = "参数有误"
+		return
+	}
+
 	videoList, err := models.GetReportChapterVideoListByChapterIds(chapterIds)
 	if err != nil {
 		br.Msg = "获取音频列表失败"

+ 1 - 5
go.mod

@@ -1,15 +1,13 @@
-module hongze/hz_eta_api
+module eta/eta_api
 
 go 1.18
 
 require (
-	baliance.com/gooxml v1.0.1
 	github.com/PuerkitoBio/goquery v1.8.0
 	github.com/SebastiaanKlippert/go-wkhtmltopdf v1.7.2
 	github.com/alibabacloud-go/alimt-20181012/v2 v2.0.0
 	github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.2
 	github.com/alibabacloud-go/dm-20151123/v2 v2.0.1
-	github.com/alibabacloud-go/ocr-20191230/v3 v3.0.6
 	github.com/alibabacloud-go/tea v1.1.20
 	github.com/alibabacloud-go/tea-utils/v2 v2.0.1
 	github.com/aliyun/alibaba-cloud-sdk-go v1.61.1656
@@ -22,7 +20,6 @@ require (
 	github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b
 	github.com/gorilla/websocket v1.5.0
 	github.com/kgiannakakis/mp3duration v0.0.0-20191013070830-d834f8d5ed53
-	github.com/mozillazg/go-pinyin v0.19.0
 	github.com/nosixtools/solarlunar v0.0.0-20211112060703-1b6dea7b4a19
 	github.com/olivere/elastic/v7 v7.0.30
 	github.com/rdlucklib/rdluck_tools v1.0.3
@@ -31,7 +28,6 @@ require (
 	github.com/tealeg/xlsx v1.0.5
 	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.541
 	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses v1.0.541
-	github.com/wenzhenxi/gorsa v0.0.0-20210524035706-528c7050d703
 	github.com/xuri/excelize/v2 v2.6.1
 	github.com/yidane/formula v0.0.0-20210902154546-0782e1736717
 	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df

+ 4 - 4
main.go

@@ -2,13 +2,13 @@ package main
 
 import (
 	"fmt"
-	"hongze/hz_eta_api/services/alarm_msg"
+	"eta/eta_api/services/alarm_msg"
 	"runtime"
 	"time"
 
-	_ "hongze/hz_eta_api/routers"
-	"hongze/hz_eta_api/services"
-	"hongze/hz_eta_api/utils"
+	_ "eta/eta_api/routers"
+	"eta/eta_api/services"
+	"eta/eta_api/utils"
 
 	"github.com/beego/beego/v2/adapter/logs"
 	"github.com/beego/beego/v2/server/web"

+ 0 - 147
models/aimod/ai.go

@@ -1,147 +0,0 @@
-package aimod
-
-import (
-	"github.com/beego/beego/v2/client/orm"
-	"time"
-)
-
-type AiChatTopic struct {
-	AiChatTopicId   int `orm:"column(ai_chat_topic_id);pk"`
-	TopicName       string
-	SysUserId       int
-	SysUserRealName string
-	CreateTime      time.Time
-	ModifyTime      time.Time
-}
-
-type AiChat struct {
-	AiChatId        int `orm:"column(ai_chat_id);pk"`
-	AiChatTopicId   int
-	Ask             string
-	AskUuid         string
-	Answer          string
-	Model           string
-	SysUserId       int
-	SysUserRealName string
-	CreateTime      time.Time
-	ModifyTime      time.Time
-}
-
-type ChatReq struct {
-	AiChatTopicId int    `description:"主题id"`
-	Model         string `description:"模型:gpt-3.5-turbo,eta,gpt-3.5-turbo-16k"`
-	Ask           string `description:"提问"`
-}
-
-func GetAiChatByAsk(askUuid, model string) (item *AiChat, err error) {
-	sql := `SELECT * FROM ai_chat WHERE ask_uuid=? AND model =? `
-	o := orm.NewOrmUsingDB("weekly")
-	err = o.Raw(sql, askUuid, model).QueryRow(&item)
-	return
-}
-
-type ChatResp struct {
-	AiChatTopicId int    `description:"主题id"`
-	Ask           string `description:"提问"`
-	Answer        string `description:"回答"`
-	Model         string
-}
-
-// AddAiChatTopic 新增主题
-func AddAiChatTopic(item *AiChatTopic) (lastId int64, err error) {
-	o := orm.NewOrmUsingDB("weekly")
-	lastId, err = o.Insert(item)
-	return
-}
-
-// AddAiChat 新增聊天
-func AddAiChat(item *AiChat) (lastId int64, err error) {
-	o := orm.NewOrmUsingDB("weekly")
-	lastId, err = o.Insert(item)
-	return
-}
-
-type AiChatTopicView struct {
-	AiChatTopicId int    `description:"主题id"`
-	TopicName     string `description:"主题名称"`
-	CreateTime    string `description:"创建时间"`
-	ModifyTime    string `description:"修改时间"`
-}
-
-func GetAiChatTopicList(sysUserId int) (item []*AiChatTopicView, err error) {
-	sql := ` SELECT * FROM ai_chat_topic WHERE sys_user_id=? ORDER BY create_time DESC `
-	o := orm.NewOrmUsingDB("weekly")
-	_, err = o.Raw(sql, sysUserId).QueryRows(&item)
-	return
-}
-
-type AiChatTopicListResp struct {
-	List []*AiChatTopicView
-}
-
-type AiChatView struct {
-	AiChatId      int    `description:"记录id"`
-	AiChatTopicId int    `description:"主题id"`
-	Ask           string `description:"提问"`
-	Answer        string `description:"答案"`
-	Model         string
-	CreateTime    string `description:"创建时间"`
-	ModifyTime    string `description:"修改时间"`
-}
-
-func GetAiChatList(aiChatTopicId int) (item []*AiChatView, err error) {
-	sql := ` SELECT * FROM ai_chat WHERE ai_chat_topic_id=? ORDER BY create_time ASC `
-	o := orm.NewOrmUsingDB("weekly")
-	_, err = o.Raw(sql, aiChatTopicId).QueryRows(&item)
-	return
-}
-
-type AiChatDetailResp struct {
-	List []*AiChatView
-}
-
-type TopicDeleteReq struct {
-	AiChatTopicId int `description:"主题id"`
-}
-
-func DeleteTopic(topicId int) (err error) {
-	o := orm.NewOrmUsingDB("weekly")
-	tx, err := o.Begin()
-	defer func() {
-		if err != nil {
-			tx.Rollback()
-		} else {
-			tx.Commit()
-		}
-	}()
-	sql := ` DELETE FROM ai_chat_topic WHERE  ai_chat_topic_id=? `
-	_, err = tx.Raw(sql, topicId).Exec()
-	if err != nil {
-		return err
-	}
-	sql = ` DELETE FROM ai_chat WHERE  ai_chat_topic_id=? `
-	_, err = tx.Raw(sql, topicId).Exec()
-	if err != nil {
-		return err
-	}
-	return err
-}
-
-type TopicEditReq struct {
-	AiChatTopicId int    `description:"主题id"`
-	TopicName     string `description:"主题名称"`
-}
-
-func GetAiChatTopicByTopicName(topicName string) (item *AiChatTopicView, err error) {
-	sql := ` SELECT * FROM ai_chat_topic WHERE topic_name=? `
-	o := orm.NewOrmUsingDB("weekly")
-	err = o.Raw(sql, topicName).QueryRow(&item)
-	return
-}
-
-func EditTopic(topicId int, topicName string) (err error) {
-	o := orm.NewOrmUsingDB("weekly")
-	sql := ` UPDATE ai_chat_topic SET topic_name=? WHERE  ai_chat_topic_id=? `
-	_, err = o.Raw(sql, topicName, topicId).Exec()
-	return err
-}

+ 167 - 0
models/business_conf.go

@@ -0,0 +1,167 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"html"
+	"strings"
+	"time"
+)
+
+const (
+	BusinessConfUseXf          = "UseXf"
+	BusinessConfXfAppid        = "XfAppid"
+	BusinessConfXfApiKey       = "XfApiKey"
+	BusinessConfXfApiSecret    = "XfApiSecret"
+	BusinessConfXfVcn          = "XfVcn"
+	BusinessConfEnPptCoverImgs = "EnPptCoverImgs"
+)
+
+// BusinessConf 商户配置表
+type BusinessConf struct {
+	Id         int    `orm:"column(id);pk"`
+	ConfKey    string `description:"配置Key"`
+	ConfVal    string `description:"配置值"`
+	ValType    int    `description:"1-字符串;2-数值;3-字符串数组;4-富文本;"`
+	Necessary  int    `description:"是否必填:0-否;1-是"`
+	Remark     string `description:"备注"`
+	CreateTime time.Time
+}
+
+func (m *BusinessConf) TableName() string {
+	return "business_conf"
+}
+
+func (m *BusinessConf) PrimaryId() string {
+	return "id"
+}
+
+func (m *BusinessConf) Create() (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.Id = int(id)
+	return
+}
+
+func (m *BusinessConf) CreateMulti(items []*BusinessConf) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *BusinessConf) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *BusinessConf) Del() (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	_, err = o.Raw(sql, m.Id).Exec()
+	return
+}
+
+func (m *BusinessConf) GetItemById(id int) (item *BusinessConf, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *BusinessConf) GetItemByCondition(condition string, pars []interface{}) (item *BusinessConf, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func (m *BusinessConf) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func (m *BusinessConf) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*BusinessConf, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func (m *BusinessConf) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*BusinessConf, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+// GetBusinessConf 获取商家配置
+func GetBusinessConf() (list map[string]string, err error) {
+	list = make(map[string]string)
+
+	var items []*BusinessConf
+	o := orm.NewOrm()
+	sql := `SELECT * FROM business_conf`
+	_, err = o.Raw(sql).QueryRows(&items)
+	if err != nil {
+		return
+	}
+
+	for _, v := range items {
+		if v.ValType == 4 {
+			list[v.ConfKey] = html.UnescapeString(v.ConfVal)
+			continue
+		}
+		list[v.ConfKey] = v.ConfVal
+	}
+	return
+}
+
+// BusinessConfUpdate 更新配置
+type BusinessConfUpdate struct {
+	ConfKey string
+	ConfVal string
+}
+
+// UpdateBusinessConfMulti 批量修改配置
+func UpdateBusinessConfMulti(items []BusinessConfUpdate) (err error) {
+	o := orm.NewOrm()
+	p, err := o.Raw("UPDATE business_conf SET conf_val = ? WHERE conf_key = ?").Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close()
+	}()
+	for _, v := range items {
+		_, err = p.Exec(v.ConfVal, v.ConfKey)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 108 - 0
models/business_conf_operation_record.go

@@ -0,0 +1,108 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// BusinessConfOperationRecord 商户配置操作记录表
+type BusinessConfOperationRecord struct {
+	Id          int       `orm:"column(id);pk"`
+	SysUserId   int       `description:"操作人ID"`
+	SysRealName string    `description:"操作人姓名"`
+	Content     string    `description:"操作数据"`
+	CreateTime  time.Time `description:"操作时间"`
+}
+
+func (m *BusinessConfOperationRecord) TableName() string {
+	return "business_conf_operation_record"
+}
+
+func (m *BusinessConfOperationRecord) PrimaryId() string {
+	return "id"
+}
+
+func (m *BusinessConfOperationRecord) Create() (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.Id = int(id)
+	return
+}
+
+func (m *BusinessConfOperationRecord) CreateMulti(items []*BusinessConfOperationRecord) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *BusinessConfOperationRecord) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *BusinessConfOperationRecord) Del() (err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	_, err = o.Raw(sql, m.Id).Exec()
+	return
+}
+
+func (m *BusinessConfOperationRecord) GetItemById(id int) (item *BusinessConfOperationRecord, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *BusinessConfOperationRecord) GetItemByCondition(condition string, pars []interface{}) (item *BusinessConfOperationRecord, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func (m *BusinessConfOperationRecord) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func (m *BusinessConfOperationRecord) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*BusinessConfOperationRecord, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func (m *BusinessConfOperationRecord) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*BusinessConfOperationRecord, err error) {
+	o := orm.NewOrm()
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 1 - 1
models/classify.go

@@ -1,9 +1,9 @@
 package models
 
 import (
+	"eta/eta_api/utils"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"hongze/hz_eta_api/utils"
 	"time"
 )
 

+ 1 - 1
models/cloud_disk_menu.go

@@ -3,7 +3,7 @@ package models
 import (
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/utils"
 	"strings"
 	"time"
 )

+ 1 - 1
models/cloud_disk_resource.go

@@ -3,7 +3,7 @@ package models
 import (
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
-	"hongze/hz_eta_api/utils"
+	"eta/eta_api/utils"
 	"strings"
 	"time"
 )

+ 10 - 0
models/company/company_seller.go

@@ -23,3 +23,13 @@ type DepartmentGroupSellers struct {
 	RoleTypeCode string                   `description:"角色编码"`
 	Authority    int                      `description:"管理权限,0:无,1:部门负责人,2:小组负责人,或者ficc销售主管,4:ficc销售组长"`
 }
+
+
+type DepartmentGroupAdmins struct {
+	AdminId string `description:"系统用户id"`
+	//AdminName string `description:"系统用户名称"`
+	RealName     string                   `description:"用户真实名称"`
+	ChildrenList []*DepartmentGroupAdmins `description:"角色列表"`
+	RoleTypeCode string                   `description:"角色编码"`
+	Authority    int                      `description:"管理权限,0:无,1:部门负责人,2:小组负责人,或者ficc销售主管,4:ficc销售组长"`
+}

+ 67 - 58
models/data_manage/baiinfo_data.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	"eta/eta_api/utils"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
 )
@@ -31,21 +32,21 @@ func GetBaiinfoFrequencyByClassifyId(classifyId int) (items []*GlFrequency, err
 
 type BaiinfoIndex struct {
 	BaseFromBaiinfoIndexId int `orm:"column(base_from_baiinfo_index_id);pk"`
-	Interface          string
-	Name               string
-	IndexCode          string
-	IndexName          string
-	Type1              string `orm:"column(type_1)"`
-	Type2              string `orm:"column(type_2)"`
-	Type3              string `orm:"column(type_3)"`
-	Frequency          string
-	Unit               string
-	ApiStartTime       string
-	ApiUpdateTime      string
-	StartTime          string
-	FinishTime         string
-	CreateTime         string
-	ModifyTime         string
+	Interface              string
+	Name                   string
+	IndexCode              string
+	IndexName              string
+	Type1                  string `orm:"column(type_1)"`
+	Type2                  string `orm:"column(type_2)"`
+	Type3                  string `orm:"column(type_3)"`
+	Frequency              string
+	Unit                   string
+	ApiStartTime           string
+	ApiUpdateTime          string
+	StartTime              string
+	FinishTime             string
+	CreateTime             string
+	ModifyTime             string
 }
 
 func GetBaiinfoIndex(condition string, pars interface{}) (items []*BaiinfoIndex, err error) {
@@ -60,26 +61,28 @@ func GetBaiinfoIndex(condition string, pars interface{}) (items []*BaiinfoIndex,
 }
 
 type BaiinfoExportIndex struct {
-	TypeName	string
-	IndexCode	string
-	IndexName   string
-	Type1		string	`orm:"column(type_1)"`
-	Type2		string	`orm:"column(type_2)"`
-	Type3		string	`orm:"column(type_3)"`
-	Frequency	string
-	Unit		string
-	ModifyTime	string
-}
-
-func GetExportBaiinfoIndex(typeCodes string) (items []*BaiinfoExportIndex, err error) {
+	TypeName   string
+	IndexCode  string
+	IndexName  string
+	Type1      string `orm:"column(type_1)"`
+	Type2      string `orm:"column(type_2)"`
+	Type3      string `orm:"column(type_3)"`
+	Frequency  string
+	Unit       string
+	ModifyTime string
+}
+
+func GetExportBaiinfoIndex(typeCodes []string) (items []*BaiinfoExportIndex, err error) {
+	if len(typeCodes) == 0 {
+		return
+	}
 	o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT *,CONCAT(type_2, "#", type_3) AS type_name FROM base_from_baiinfo_index WHERE CONCAT(type_2, "#", type_3) IN (` + typeCodes + `) ORDER BY frequency ASC,index_code ASC`
-	_, err = o.Raw(sql).QueryRows(&items)
-
+	sql := ` SELECT *,CONCAT(type_2, "#", type_3) AS type_name FROM base_from_baiinfo_index WHERE CONCAT(type_2, "#", type_3) IN (` + utils.GetOrmInReplace(len(typeCodes)) + `) ORDER BY frequency ASC,index_code ASC`
+	_, err = o.Raw(sql, typeCodes).QueryRows(&items)
 	return
 }
 
-func GetBaiinfoFrequency(classifyId int ) (items []*string,err error){
+func GetBaiinfoFrequency(classifyId int) (items []*string, err error) {
 	sql := `SELECT DISTINCT frequency FROM base_from_baiinfo_index WHERE classify_id=? ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
 	o := orm.NewOrmUsingDB("data")
 	_, err = o.Raw(sql, classifyId).QueryRows(&items)
@@ -95,22 +98,22 @@ func GetBaiinfoFrequencyByCode(code string) (items []*string, err error) {
 
 type BaiinfoIndexList struct {
 	BaseFromBaiinfoIndexId int `orm:"column(base_from_baiinfo_index_id);pk"`
-	Interface          string
-	Name               string
-	IndexCode          string
-	IndexName          string
-	Type1              string `orm:"column(type_1)"`
-	Type2              string `orm:"column(type_2)"`
-	Type3              string `orm:"column(type_3)"`
-	Frequency          string
-	Unit               string
-	ApiStartTime       string
-	ApiUpdateTime      string
-	StartTime          string
-	FinishTime         string
-	ModifyTime         string
-	DataList           []*BaiinfoIndexData
-	Paging             *paging.PagingItem `description:"分页数据"`
+	Interface              string
+	Name                   string
+	IndexCode              string
+	IndexName              string
+	Type1                  string `orm:"column(type_1)"`
+	Type2                  string `orm:"column(type_2)"`
+	Type3                  string `orm:"column(type_3)"`
+	Frequency              string
+	Unit                   string
+	ApiStartTime           string
+	ApiUpdateTime          string
+	StartTime              string
+	FinishTime             string
+	ModifyTime             string
+	DataList               []*BaiinfoIndexData
+	Paging                 *paging.PagingItem `description:"分页数据"`
 }
 
 type BaiinfoIndexData struct {
@@ -160,11 +163,14 @@ func GetBaiinfoDataMaxCount(classifyId int) (count int, err error) {
 }
 
 type ExportBaiinfoDataMaxCount struct {
-	TypeName	string
-	Count		int
+	TypeName string
+	Count    int
 }
 
-func GetExportBaiinfoDataMaxCount(typeCodes string) (items []*ExportBaiinfoDataMaxCount, err error) {
+func GetExportBaiinfoDataMaxCount(typeCodes []string) (items []*ExportBaiinfoDataMaxCount, err error) {
+	if len(typeCodes) == 0 {
+		return
+	}
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT
 				MAX(t.num) AS count,
@@ -178,26 +184,29 @@ func GetExportBaiinfoDataMaxCount(typeCodes string) (items []*ExportBaiinfoDataM
 						base_from_baiinfo_index AS a
 					INNER JOIN base_from_baiinfo_data AS b ON a.index_code = b.index_code
 					WHERE
-						CONCAT(a.type_2, "#", a.type_3) IN (` + typeCodes + `)
+						CONCAT(a.type_2, "#", a.type_3) IN (` + utils.GetOrmInReplace(len(typeCodes)) + `)
 					GROUP BY
 						a.base_from_baiinfo_index_id
 				) AS t
 			GROUP BY
 				type_name `
-	_, err = o.Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql, typeCodes).QueryRows(&items)
 
 	return
 }
 
 type ExportBaiinfoIndexData struct {
-	Value    	string 	`orm:"column(value)" description:"日期"`
-	DataTime 	string 	`orm:"column(data_time)" description:"值"`
-	IndexCode	string	`orm:"column(index_code)" description:"指标编码"`
+	Value     string `orm:"column(value)" description:"日期"`
+	DataTime  string `orm:"column(data_time)" description:"值"`
+	IndexCode string `orm:"column(index_code)" description:"指标编码"`
 }
 
-func GetExportBaiinfoIndexDataByCodes(indexCodes string) (items []*ExportBaiinfoIndexData, err error) {
+func GetExportBaiinfoIndexDataByCodes(indexCodes []string) (items []*ExportBaiinfoIndexData, err error) {
+	if len(indexCodes) == 0 {
+		return
+	}
 	o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT index_code,data_time,value FROM base_from_baiinfo_data WHERE index_code IN (` + indexCodes + `) ORDER BY data_time DESC  `
-	_, err = o.Raw(sql).QueryRows(&items)
+	sql := ` SELECT index_code,data_time,value FROM base_from_baiinfo_data WHERE index_code IN (` + utils.GetOrmInReplace(len(indexCodes)) + `) ORDER BY data_time DESC  `
+	_, err = o.Raw(sql, indexCodes).QueryRows(&items)
 	return
 }

Some files were not shown because too many files changed in this diff