Browse Source

Merge branch 'master' into ETA_1.3.4

zwxi 1 year ago
parent
commit
2a91de0116

+ 3 - 22
controllers/base_auth.go

@@ -8,7 +8,6 @@ import (
 	"eta/eta_api/services/alarm_msg"
 	"eta/eta_api/services/data"
 	"fmt"
-	"github.com/sirupsen/logrus"
 	"net/http"
 	"net/url"
 	"strconv"
@@ -322,7 +321,7 @@ func (c *BaseAuthController) JSON(data interface{}, hasIndent bool, coding bool)
 	if requestBody == "" {
 		requestBody = c.Ctx.Input.URI()
 	}
-	c.logUri(data, requestBody, ip)
+	c.logUri(content, requestBody, ip)
 	// 如果不是debug分支的话,那么需要加密返回
 	if utils.RunMode != "debug" {
 		content = utils.DesBase64Encrypt(content)
@@ -385,7 +384,7 @@ func GetSysUserRoleTypeCode(roleTypeCode string) string {
 	return ""
 }
 
-func (c *BaseAuthController) logUri(data interface{}, requestBody, ip string) {
+func (c *BaseAuthController) logUri(respContent []byte, requestBody, ip string) {
 	authorization := ""
 	method := c.Ctx.Input.Method()
 	uri := c.Ctx.Input.URI()
@@ -423,24 +422,6 @@ func (c *BaseAuthController) logUri(data interface{}, requestBody, ip string) {
 		}
 	}
 
-	var reqData interface{}
-	err := json.Unmarshal([]byte(requestBody), &reqData)
-	if err != nil {
-		utils.ApiLog.WithFields(logrus.Fields{
-			"uri":           c.Ctx.Input.URI(),
-			"authorization": authorization,
-			"requestBody":   requestBody,
-			"responseBody":  data,
-			"ip":            ip,
-		}).Info("请求详情")
-	} else {
-		utils.ApiLog.WithFields(logrus.Fields{
-			"uri":           c.Ctx.Input.URI(),
-			"authorization": authorization,
-			"requestBody":   reqData,
-			"responseBody":  data,
-			"ip":            ip,
-		}).Info("请求详情")
-	}
+	utils.ApiLog.Info("uri:%s, authorization:%s, requestBody:%s, responseBody:%s, ip:%s", c.Ctx.Input.URI(), authorization, requestBody, respContent, ip)
 	return
 }

+ 4 - 37
controllers/base_common.go

@@ -8,7 +8,6 @@ import (
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/beego/beego/v2/server/web"
-	"github.com/sirupsen/logrus"
 	"net/http"
 	"net/url"
 	"strings"
@@ -27,21 +26,7 @@ func (c *BaseCommonController) Prepare() {
 		requestBody, _ = url.QueryUnescape(string(c.Ctx.Input.RequestBody))
 	}
 	ip := c.Ctx.Input.IP()
-	var reqData interface{}
-	err := json.Unmarshal([]byte(requestBody), &reqData)
-	if err != nil {
-		utils.ApiLog.WithFields(logrus.Fields{
-			"uri":         c.Ctx.Input.URI(),
-			"requestBody": requestBody,
-			"ip":          ip,
-		}).Info("Prepare 请求详情")
-	} else {
-		utils.ApiLog.WithFields(logrus.Fields{
-			"uri":         c.Ctx.Input.URI(),
-			"requestBody": reqData,
-			"ip":          ip,
-		}).Info("Prepare 请求详情")
-	}
+	utils.ApiLog.Info("uri:%s, requestBody:%s, responseBody:%s, ip:%s", c.Ctx.Input.URI(), requestBody, ip)
 }
 
 func (c *BaseCommonController) ServeJSON(encoding ...bool) {
@@ -116,7 +101,7 @@ func (c *BaseCommonController) JSON(data interface{}, hasIndent bool, coding boo
 	fmt.Println("params")
 	fmt.Println(params)
 	requestBody, _ := url.QueryUnescape(string(c.Ctx.Input.RequestBody))
-	c.logUri(data, requestBody, ip)
+	c.logUri(content, requestBody, ip)
 	// 如果不是debug分支的话,那么需要加密返回
 	if utils.RunMode != "debug" {
 		content = utils.DesBase64Encrypt(content)
@@ -129,7 +114,7 @@ func (c *BaseCommonController) JSON(data interface{}, hasIndent bool, coding boo
 	return c.Ctx.Output.Body(content)
 }
 
-func (c *BaseCommonController) logUri(data interface{}, requestBody, ip string) {
+func (c *BaseCommonController) logUri(respContent []byte, requestBody, ip string) {
 	authorization := ""
 	method := c.Ctx.Input.Method()
 	uri := c.Ctx.Input.URI()
@@ -167,24 +152,6 @@ func (c *BaseCommonController) logUri(data interface{}, requestBody, ip string)
 		}
 	}
 
-	var reqData interface{}
-	err := json.Unmarshal([]byte(requestBody), &reqData)
-	if err != nil {
-		utils.ApiLog.WithFields(logrus.Fields{
-			"uri":           c.Ctx.Input.URI(),
-			"authorization": authorization,
-			"requestBody":   requestBody,
-			"responseBody":  data,
-			"ip":            ip,
-		}).Info("请求详情")
-	} else {
-		utils.ApiLog.WithFields(logrus.Fields{
-			"uri":           c.Ctx.Input.URI(),
-			"authorization": authorization,
-			"requestBody":   reqData,
-			"responseBody":  data,
-			"ip":            ip,
-		}).Info("请求详情")
-	}
+	utils.ApiLog.Info("uri:%s, authorization:%s, requestBody:%s, responseBody:%s, ip:%s", c.Ctx.Input.URI(), authorization, requestBody, respContent, ip)
 	return
 }

+ 1 - 1
controllers/data_manage/chart_info.go

@@ -1719,7 +1719,7 @@ func (this *ChartInfoController) ChartInfoSearchByEs() {
 	if keyword != "" {
 		searchList, total, err = data.EsSearchChartInfo(keyword, showSysId, []int{utils.CHART_SOURCE_DEFAULT}, noPermissionChartIdList, startSize, pageSize)
 	} else {
-		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, []int{utils.CHART_SOURCE_DEFAULT}, noPermissionChartIdList)
+		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, []int{utils.CHART_SOURCE_DEFAULT}, noPermissionChartIdList, startSize, pageSize)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取图表信息失败,Err:" + err.Error()

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

@@ -1461,7 +1461,7 @@ func (this *CorrelationChartInfoController) SearchByEs() {
 	if keyword != "" {
 		searchList, total, err = data.EsSearchChartInfo(keyword, showSysId, sourceList, noPermissionChartIdList, startSize, pageSize)
 	} else {
-		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, sourceList, noPermissionChartIdList)
+		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, sourceList, noPermissionChartIdList, startSize, pageSize)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取图表信息失败,Err:" + err.Error()

+ 1 - 1
controllers/data_manage/future_good/future_good_chart_info.go

@@ -2164,7 +2164,7 @@ func (this *FutureGoodChartInfoController) ChartInfoSearchByEs() {
 	if keyword != "" {
 		searchList, total, err = data.EsSearchChartInfo(keyword, showSysId, []int{utils.CHART_SOURCE_FUTURE_GOOD, utils.CHART_SOURCE_FUTURE_GOOD_PROFIT}, noPermissionChartIdList, startSize, pageSize)
 	} else {
-		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, []int{utils.CHART_SOURCE_FUTURE_GOOD, utils.CHART_SOURCE_FUTURE_GOOD_PROFIT}, noPermissionChartIdList)
+		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, []int{utils.CHART_SOURCE_FUTURE_GOOD, utils.CHART_SOURCE_FUTURE_GOOD_PROFIT}, noPermissionChartIdList, startSize, pageSize)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取图表信息失败,Err:" + err.Error()

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

@@ -1446,7 +1446,7 @@ func (this *LineEquationChartInfoController) SearchByEs() {
 	if keyword != "" {
 		searchList, total, err = data.EsSearchChartInfo(keyword, showSysId, sourceList, noPermissionChartIdList, startSize, pageSize)
 	} else {
-		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, sourceList, noPermissionChartIdList)
+		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, sourceList, noPermissionChartIdList, startSize, pageSize)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取图表信息失败,Err:" + err.Error()

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

@@ -2583,7 +2583,7 @@ func (this *LineFeaturesChartInfoController) SearchByEs() {
 	if keyword != "" {
 		searchList, total, err = data.EsSearchChartInfo(keyword, showSysId, sourceList, noPermissionChartIdList, startSize, pageSize)
 	} else {
-		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, sourceList, noPermissionChartIdList)
+		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, sourceList, noPermissionChartIdList, startSize, pageSize)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取图表信息失败,Err:" + err.Error()

+ 1 - 1
controllers/english_report/report.go

@@ -488,7 +488,7 @@ func (this *EnglishReportController) ListReport() {
 		// 限制一下富文本字段, 列表用不到
 		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",
+			"frequency", "create_time", "modify_time", "state", "publish_time", "pre_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)

+ 1 - 0
controllers/smart_report/smart_report.go

@@ -225,6 +225,7 @@ func (this *SmartReportController) Edit() {
 		item.Title != req.Title ||
 		item.Abstract != req.Abstract ||
 		item.Frequency != req.Frequency ||
+		item.Author != req.Author ||
 		utils.MD5(item.Content) != utils.MD5(req.Content) {
 		contentModify = true
 	}

+ 1 - 2
go.mod

@@ -29,14 +29,12 @@ require (
 	github.com/rdlucklib/rdluck_tools v1.0.3
 	github.com/shopspring/decimal v1.3.1
 	github.com/silenceper/wechat/v2 v2.1.3
-	github.com/sirupsen/logrus v1.9.3
 	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/xuri/excelize/v2 v2.7.1
 	github.com/yidane/formula v0.0.0-20210902154546-0782e1736717
 	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1
 )
 
 require (
@@ -99,6 +97,7 @@ require (
 	github.com/rs/xid v1.5.0 // indirect
 	github.com/satori/go.uuid v1.2.0 // indirect
 	github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
+	github.com/sirupsen/logrus v1.9.3 // indirect
 	github.com/spf13/cast v1.5.0 // indirect
 	github.com/stretchr/testify v1.8.1 // indirect
 	github.com/tidwall/gjson v1.14.1 // indirect

+ 0 - 2
go.sum

@@ -628,8 +628,6 @@ gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
 gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

+ 23 - 11
models/data_manage/chart_info.go

@@ -1126,27 +1126,39 @@ func ChartInfoSearchByKeyWord(KeyWord string, showSysId int) (searchList []*Char
 }
 
 // ChartInfoSearchByEmptyKeyWord 没有关键字的时候获取默认100条数据
-func ChartInfoSearchByEmptyKeyWord(showSysId int, sourceList []int, noPermissionChartIdList []int) (total int64, searchList []*ChartInfo, err error) {
+func ChartInfoSearchByEmptyKeyWord(showSysId int, sourceList []int, noPermissionChartIdList []int, startSize, pageSize int) (total int64, searchList []*ChartInfo, err error) {
 	num := len(sourceList)
 	o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT * FROM chart_info WHERE 1=1 AND source in (` + utils.GetOrmInReplace(num) + `)`
 
-	var pars []interface{}
-	pars = append(pars, sourceList)
+	baseSql := `  FROM chart_info WHERE 1=1 AND source in (` + utils.GetOrmInReplace(num) + `)`
+
+	var basePars []interface{}
+	basePars = append(basePars, sourceList)
 
 	if showSysId > 0 {
-		sql += ` AND sys_user_id = ? `
-		pars = append(pars, showSysId)
+		baseSql += ` AND sys_user_id = ? `
+		basePars = append(basePars, showSysId)
 	}
 
 	lenNoPermissionChartIdList := len(noPermissionChartIdList)
 	if lenNoPermissionChartIdList > 0 {
-		sql += ` AND chart_info_id not in (` + utils.GetOrmInReplace(lenNoPermissionChartIdList) + `) `
-		pars = append(pars, noPermissionChartIdList)
+		baseSql += ` AND chart_info_id not in (` + utils.GetOrmInReplace(lenNoPermissionChartIdList) + `) `
+		basePars = append(basePars, noPermissionChartIdList)
 	}
 
-	sql += ` ORDER BY create_time DESC LIMIT 100 `
-	total, err = o.Raw(sql, pars).QueryRows(&searchList)
+	// 查找数量
+	totalSql := " SELECT count(1) as total " + baseSql
+	err = o.Raw(totalSql, basePars).QueryRow(&total)
+	if err != nil {
+		return
+	}
+
+	// 查找列表数据
+	sql := " SELECT *  " + baseSql + ` ORDER BY create_time DESC LIMIT ?,? `
+	basePars = append(basePars, startSize, pageSize)
+
+	_, err = o.Raw(sql, basePars).QueryRows(&searchList)
+
 	return
 }
 
@@ -1847,4 +1859,4 @@ func EditChartInfoExtraConfig(chartId int, extraConfig string) (err error) {
 	}
 
 	return
-}
+}

+ 172 - 0
models/data_manage/edb_data_quarter.go

@@ -474,6 +474,8 @@ func AddCalculateQuarterV4(dataList []*EdbDataList) (result *EdbDataResult, err
 			}
 			day := currentYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
 
+			fmt.Println("day:", day, currentYearCjglDate, preYearCjglDate)
+
 			items := new(EdbDataItems)
 			items.BetweenDay = int(day) //公历日期换算成农历,需要减除的天数
 			items.Year = preYear
@@ -570,6 +572,176 @@ func AddCalculateQuarterV4(dataList []*EdbDataList) (result *EdbDataResult, err
 	return
 }
 
+// AddCalculateQuarterV6 指标季度数据计算(季节性图表)
+func AddCalculateQuarterV6(dataList []*EdbDataList) (result *EdbDataResult, err error) {
+	var errMsg string
+	defer func() {
+		if errMsg != "" {
+			fmt.Println("errMsg:", errMsg)
+		}
+	}()
+
+	endDate := dataList[len(dataList)-1].DataTime
+	endDateForm, err := time.Parse(utils.FormatDate, endDate)
+	if err != nil {
+		return result, err
+	}
+	thisMonth := int(endDateForm.Month())
+
+	result = new(EdbDataResult)
+	var yearArr []int
+	yearMap := make(map[int]int)
+	var cureentDate time.Time
+	if thisMonth < 11 {
+		for k, v := range dataList {
+			dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
+			if err != nil {
+				errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
+				return result, err
+			}
+			if k == len(dataList)-1 {
+				cureentDate = dateTime
+			}
+			year := dateTime.Year()
+			if _, ok := yearMap[year]; !ok {
+				yearArr = append(yearArr, year)
+			}
+			yearMap[year] = year
+		}
+	} else {
+		for k, v := range dataList {
+			dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
+			if err != nil {
+				errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
+				return result, err
+			}
+			if k == len(dataList)-1 {
+				cureentDate = dateTime
+			}
+			year := dateTime.Year() + 1
+			if _, ok := yearMap[year]; !ok {
+				yearArr = append(yearArr, year)
+			}
+			yearMap[year] = year
+		}
+	}
+	//排序
+	fmt.Println("yearArr:", yearArr)
+	thisYear := cureentDate.Year()
+	//thisMonth := int(cureentDate.Month())
+
+	fmt.Println("thisMonth:", thisMonth)
+	for ky, vy := range yearArr {
+		fmt.Printf("line 432:ky:%d, vy:%d, thisYear:%d, thisMonth:%d", ky, vy, thisYear, thisMonth)
+		fmt.Println("")
+		if thisMonth < 11 {
+			currentYearCjnl := strconv.Itoa(thisYear) + "-01-01"               //当前年份春节农历
+			currentYearCjgl := solarlunar.LunarToSolar(currentYearCjnl, false) //当前年份春节公历
+			currentYearCjglDate, err := time.Parse(utils.FormatDate, currentYearCjgl)
+			if err != nil {
+				errMsg = "生成当前春节失败,Err:" + err.Error()
+				return result, err
+			}
+
+			preYear := vy
+			preYearCjnl := strconv.Itoa(preYear) + "-01-01"            //之前年份春节农历
+			preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
+			preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
+			if err != nil {
+				errMsg = "生成历史年份春节失败,Err:" + err.Error()
+				return result, err
+			}
+			day := currentYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
+
+			fmt.Println("day:", day, currentYearCjglDate, preYearCjglDate)
+
+			items := new(EdbDataItems)
+			items.BetweenDay = int(day) //公历日期换算成农历,需要减除的天数
+			items.Year = preYear
+			for _, v := range dataList {
+				dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
+				if err != nil {
+					errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
+					return result, err
+				}
+				newDate := dateTime.AddDate(0, 0, int(day))
+				timestamp := newDate.UnixNano() / 1e6
+				item := new(EdbDataList)
+				item.DataTime = newDate.Format(utils.FormatDate)
+				item.EdbInfoId = v.EdbInfoId
+				item.Value = v.Value
+				item.EdbDataId = v.EdbDataId
+				item.DataTimestamp = timestamp
+				items.Items = append(items.Items, item)
+			}
+			result.List = append(result.List, items)
+		} else {
+			nextYear := thisYear + 1
+			nextYearCjnl := strconv.Itoa(nextYear) + "-01-01"            //当前年份春节农历
+			nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
+
+			nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
+			if err != nil {
+				errMsg = "生成当前春节失败,Err:" + err.Error()
+				return result, err
+			}
+			preYear := vy
+			preYearCjnl := strconv.Itoa(preYear) + "-01-01"            //之前年份春节农历
+			preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
+			preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
+			if err != nil {
+				errMsg = "生成历史年份春节失败,Err:" + err.Error()
+				return result, err
+			}
+			day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
+
+			fmt.Println("day:", day, nextYearCjglDate, preYearCjglDate)
+
+			items := new(EdbDataItems)
+			items.BetweenDay = int(day) //公历日期换算成农历,需要减除的天数
+			items.Year = preYear
+			fmt.Println("preYear:", preYear, "ky:", ky, "yearArrLen:", len(yearArr))
+			//if ky+1 < len(yearArr) {
+			for _, v := range dataList {
+				dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
+				if err != nil {
+					errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
+					return result, err
+				}
+				newDate := dateTime.AddDate(0, 0, int(day))
+				timestamp := newDate.UnixNano() / 1e6
+				item := new(EdbDataList)
+				item.DataTime = newDate.Format(utils.FormatDate)
+				item.EdbInfoId = v.EdbInfoId
+				item.Value = v.Value
+				item.EdbDataId = v.EdbDataId
+				item.DataTimestamp = timestamp
+				items.Items = append(items.Items, item)
+			}
+			result.List = append(result.List, items)
+			/*} else {
+				for _, v := range dataList {
+					dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
+					if err != nil {
+						errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
+						return result, err
+					}
+					timestamp := dateTime.UnixNano() / 1e6
+					item := new(EdbDataList)
+					item.DataTime = dateTime.Format(utils.FormatDate)
+					item.EdbInfoId = v.EdbInfoId
+					item.Value = v.Value
+					item.EdbDataId = v.EdbDataId
+					item.DataTimestamp = timestamp
+					items.Items = append(items.Items, item)
+				}
+				result.List = append(result.List, items)
+			}*/
+		}
+	}
+	return
+}
+
 // AddCalculateQuarterV4ByUniqueCode 指标季度数据计算(公历转农历)
 func AddCalculateQuarterV4ByUniqueCode(dataList []*EdbDataListByUniqueCode) (result *EdbDataResult, err error) {
 	var errMsg string

+ 38 - 70
services/data/chart_info.go

@@ -535,7 +535,7 @@ func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate st
 			err = errors.New(errMsg)
 			return
 		}
-		
+
 		extraConfig = tmpExtraConfig
 
 	default:
@@ -759,7 +759,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
 					result := new(data_manage.EdbDataResult)
 					item.DataList = result
 				} else {
-					result, tmpErr := data_manage.AddCalculateQuarterV4(dataList)
+					result, tmpErr := data_manage.AddCalculateQuarterV6(dataList)
 					if tmpErr != nil {
 						err = errors.New("获取农历数据失败,Err:" + tmpErr.Error())
 						return
@@ -891,6 +891,7 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*data_manage.EdbDataList, latest
 		dataMap[name] = item
 		chartLegendMap[name] = idx
 		idx++
+		fmt.Println("年份" + showName + "日期" + startStr + " " + endStr)
 		if lastDateT.Before(endT) {
 			//如果最新的日期在起始日之前,则跳出循环
 			break
@@ -1013,12 +1014,14 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data_manage.EdbDataResult, late
 	//判断横轴的两个时间之间是不是跨年了,如果跨年了,则横轴截止年份比起始年份+1,如果不跨年,截止年份等于起始年份
 	//根据数据确定最早的年份,和最近年份
 	//根据横轴的日期,汇总所有的年份
+
 	startYear := result.List[0].Year
 	/*if jumpYear == 1 {
 		if startYear != calendarPreYear {
 			startYear = startYear - 1
 		}
 	}*/
+
 	itemLength := len(result.List[length-1].Items)
 	//获取数据的最新日期
 	lastDate := result.List[length-1].Items[itemLength-1].DataTime
@@ -1073,6 +1076,7 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data_manage.EdbDataResult, late
 			ShowName:  showName,
 		}
 		dataMap[showName] = item
+		fmt.Println("年份" + showName + "日期" + startStr + " " + endStr)
 		chartLegendMap[showName] = idx
 		idx++
 		if lastDateT.Before(endT) {
@@ -1096,6 +1100,14 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data_manage.EdbDataResult, late
 
 	//判断哪些点应该落在同一条时间线上
 	maxY := lastDateT.Year()
+	changeFlag := false
+	if lastDateT.Month() >= 11 {
+		maxY = maxY + 1
+	}
+	if maxY < nowYear {
+		changeFlag = true
+		maxY = nowYear
+	}
 	endTmp := fmt.Sprintf("%d-%s", maxY, xEndDate)
 	endTmpT, _ := time.Parse(utils.FormatDate, endTmp)
 	minY := maxY
@@ -1105,9 +1117,10 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data_manage.EdbDataResult, late
 	startTmp := fmt.Sprintf("%d-%s", minY, xStartDate)
 	startTmpT, _ := time.Parse(utils.FormatDate, startTmp)
 
+	fmt.Println("横轴截取日" + startTmpT.Format(utils.FormatDate) + " " + endTmpT.Format(utils.FormatDate))
 	for name, dateItem := range dataMap {
 		lv, ok1 := yearDataListMap[dateItem.EndDate.Year()]
-		if dateItem.EndDate.Year() > lastDateT.Year() {
+		if changeFlag {
 			lv, ok1 = yearDataListMap[dateItem.StartDate.Year()]
 		}
 		if !ok1 {
@@ -1122,78 +1135,27 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data_manage.EdbDataResult, late
 				Value:         item.Value,
 			}
 			dataTimeT, _ := time.Parse(utils.FormatDate, item.DataTime)
-			year := dataTimeT.Year()
-			newItemDate := dataTimeT.AddDate(nowYear-year, 0, 0)
-			if dateItem.EndDate.Year() > maxY {
-				if (dateItem.StartDate.Before(dataTimeT) && dateItem.EndDate.After(dataTimeT)) || dateItem.StartDate == dataTimeT || dateItem.EndDate == dataTimeT {
-					if jumpYear == 1 {
-						//计算前一年最大的日期, 只补齐数据到去年
-						beforeYearMaxDate := fmt.Sprintf("%d-12-31", dateItem.StartDate.Year())
-						beforeYearMaxDateT, _ := time.Parse(utils.FormatDate, beforeYearMaxDate)
-						if dataTimeT.Before(beforeYearMaxDateT) || dataTimeT == beforeYearMaxDateT {
-							newItemDate = dataTimeT.AddDate(nowYear-year-1, 0, 0)
-						} else {
-							newItemDate = dataTimeT.AddDate(nowYear-year, 0, 0)
-						}
-					} else {
-						newItemDate = dataTimeT.AddDate(nowYear-year, 0, 0)
-					}
-					timestamp := newItemDate.UnixNano() / 1e6
-					tmpVal.DataTimestamp = timestamp
-					tmpV := &tmpVal
-					if findVal, ok := quarterMap[name]; !ok {
-						findVal = append(findVal, tmpV)
-						quarterMap[name] = findVal
-					} else {
-						findVal = append(findVal, tmpV)
-						quarterMap[name] = findVal
-					}
-					if lv.Year >= latestDateYear {
-						// 切割的日期时间字符串
-						cuttingDataTimeStr := latestDate.AddDate(0, 0, lv.BetweenDay).Format(utils.FormatDate)
-						if item.DataTime == cuttingDataTimeStr {
-							dateItem.CuttingDataTimestamp = timestamp
-							dataMap[name] = dateItem
-						}
-					}
+			if (startTmpT.Before(dataTimeT) && endTmpT.After(dataTimeT)) || startTmpT == dataTimeT || endTmpT == dataTimeT {
+				tmpV := &tmpVal
+				if findVal, ok := quarterMap[name]; !ok {
+					findVal = append(findVal, tmpV)
+					quarterMap[name] = findVal
+				} else {
+					findVal = append(findVal, tmpV)
+					quarterMap[name] = findVal
 				}
-			} else {
-				if (startTmpT.Before(dataTimeT) && endTmpT.After(dataTimeT)) || startTmpT == dataTimeT || endTmpT == dataTimeT {
-					if jumpYear == 1 {
-						//计算前一年最大的日期, 只补齐数据到去年
-						beforeYearMaxDate := fmt.Sprintf("%d-12-31", startTmpT.Year())
-						beforeYearMaxDateT, _ := time.Parse(utils.FormatDate, beforeYearMaxDate)
-						if dataTimeT.Before(beforeYearMaxDateT) || dataTimeT == beforeYearMaxDateT {
-							newItemDate = dataTimeT.AddDate(nowYear-year-1, 0, 0)
-						} else {
-							newItemDate = dataTimeT.AddDate(nowYear-year, 0, 0)
-						}
-					} else {
-						newItemDate = dataTimeT.AddDate(nowYear-year, 0, 0)
-					}
-					timestamp := newItemDate.UnixNano() / 1e6
-					tmpVal.DataTimestamp = timestamp
-					tmpV := &tmpVal
-					if findVal, ok := quarterMap[name]; !ok {
-						findVal = append(findVal, tmpV)
-						quarterMap[name] = findVal
-					} else {
-						findVal = append(findVal, tmpV)
-						quarterMap[name] = findVal
-					}
-					if lv.Year >= latestDateYear {
-						// 切割的日期时间字符串
-						cuttingDataTimeStr := latestDate.AddDate(0, 0, lv.BetweenDay).Format(utils.FormatDate)
-						if item.DataTime == cuttingDataTimeStr {
-							dateItem.CuttingDataTimestamp = timestamp
-							dataMap[name] = dateItem
-						}
+				if lv.Year >= latestDateYear {
+					// 切割的日期时间字符串
+					cuttingDataTimeStr := latestDate.AddDate(0, 0, lv.BetweenDay).Format(utils.FormatDate)
+					if item.DataTime == cuttingDataTimeStr {
+						dateItem.CuttingDataTimestamp = tmpVal.DataTimestamp
+						dataMap[name] = dateItem
 					}
 				}
 			}
 		}
-
 	}
+
 	for k, v := range dataMap {
 		itemList := quarterMap[k]
 		quarterItem := new(data_manage.QuarterData)
@@ -1206,7 +1168,13 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data_manage.EdbDataResult, late
 		}
 		quarterItem.DataList = itemList
 		quarterItem.CuttingDataTimestamp = v.CuttingDataTimestamp
-
+		//如果等于最后的实际日期,那么将切割时间戳记录
+		if quarterItem.CuttingDataTimestamp == 0 {
+			//如果大于最后的实际日期,那么第一个点就是切割的时间戳
+			if latestDate.Before(v.StartDate) && len(itemList) > 0 {
+				quarterItem.CuttingDataTimestamp = itemList[0].DataTimestamp - 100
+			}
+		}
 		quarterDataList = append(quarterDataList, quarterItem)
 	}
 

+ 9 - 13
services/data/excel/custom_analysis_edb.go

@@ -260,17 +260,19 @@ func Refresh(excelInfo *excel.ExcelInfo) (err error, errMsg string, isSendEmail
 				return
 			}
 
+			startNum = startNum - 1
+			endNum = endNum - 1
 			// 选择行的数据
 			if isRow {
+				// 因为是选择一行的数据,所以开始行和结束行时一样的
+				//endNum = startNum - 1
+
 				// 开始列名、结束列
 				var startColumn, endColumn int
 				if isAll {
 					// 结束列(其实也就是整列的个数)
 					endColumn = len(sheetInfo.Cols) - 1
 				} else {
-					//startNum = startNum - 1
-					//endNum = endNum - 1
-
 					tmpStartColumn, tmpErr := excelize.ColumnNameToNumber(startColumnName)
 					if tmpErr != nil {
 						errMsg = "列名异常:" + startColumnName
@@ -300,11 +302,8 @@ func Refresh(excelInfo *excel.ExcelInfo) (err error, errMsg string, isSendEmail
 
 			} else if isColumn { // 选择列的数据
 				if isAll {
-					// 结束行(其实也就是整个sheet有多少行)
+					// 选择一整列的话,结束行得根据实际情况调整(其实也就是整个sheet有多少行)
 					endNum = len(sheetInfo.Rows) - 1
-				} else {
-					startNum = startNum - 1
-					endNum = endNum - 1
 				}
 
 				startColumn, tmpErr := excelize.ColumnNameToNumber(startColumnName)
@@ -344,6 +343,8 @@ func Refresh(excelInfo *excel.ExcelInfo) (err error, errMsg string, isSendEmail
 				return
 			}
 
+			startNum = startNum - 1
+			endNum = endNum - 1
 			// 选择行的数据
 			if isRow {
 				// 开始列名、结束列
@@ -352,8 +353,6 @@ func Refresh(excelInfo *excel.ExcelInfo) (err error, errMsg string, isSendEmail
 					// 结束列(其实也就是整列的个数)
 					endColumn = len(sheetInfo.Cols) - 1
 				} else {
-					//startNum = startNum - 1
-					//endNum = endNum - 1
 
 					tmpStartColumn, tmpErr := excelize.ColumnNameToNumber(startColumnName)
 					if tmpErr != nil {
@@ -384,11 +383,8 @@ func Refresh(excelInfo *excel.ExcelInfo) (err error, errMsg string, isSendEmail
 
 			} else if isColumn { // 选择列的数据
 				if isAll {
-					// 结束行(其实也就是整个sheet有多少行)
+					// 选择一整列的话,结束行得根据实际情况调整(其实也就是整个sheet有多少行)
 					endNum = len(sheetInfo.Rows) - 1
-				} else {
-					startNum = startNum - 1
-					endNum = endNum - 1
 				}
 
 				startColumn, tmpErr := excelize.ColumnNameToNumber(startColumnName)

+ 2 - 1
services/data/excel/excel_info.go

@@ -95,7 +95,8 @@ func GetExcelInfoOpButton(sysUser *system.Admin, belongUserId, source int) (butt
 
 	// 1、本用户创建的表格,可编辑、刷新、另存为、下载、删除,删除需二次确认;
 	// 2、管理员角色对所有表格有如上权限;
-	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || sysUser.AdminId == belongUserId {
+	// 3、在线excel所有人都能编辑
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || sysUser.AdminId == belongUserId || source == utils.EXCEL_DEFAULT {
 		button.OpButton = true
 		button.DeleteButton = true
 	}

+ 1 - 1
utils/common.go

@@ -2127,7 +2127,7 @@ func FormatTableDataShowValue(x float64) (res string) {
 		res = xParts[0] + "." + resPart
 	}
 
-	if xDecimals < 2 {
+	if xDecimals <= 2 {
 		xDecimalsStr := xParts[1]
 		x, _ = strconv.ParseFloat(xParts[0]+"."+xDecimalsStr, 64)
 		res = xParts[0] + "." + xDecimalsStr

+ 2 - 2
utils/constants.go

@@ -86,8 +86,8 @@ const (
 	COMPANY_PRODUCT_RAI_NAME  = "权益"
 )
 
-var PermissionFiccClassifyArr = [...]string{"宏观经济", "化工产业", "建材产业", "有色产业", "市场策略"}
-var PermissionAllClassifyArr = [...]string{"宏观经济", "化工产业", "建材产业", "有色产业", "市场策略", "权益"}
+var PermissionFiccClassifyArr = [...]string{"宏观经济", "化工产业", "建材产业", "有色产业", "新能源", "市场策略"}
+var PermissionAllClassifyArr = [...]string{"宏观经济", "化工产业", "建材产业", "有色产业", "新能源", "市场策略", "权益"}
 
 //apply_method:申请类型:1:试用->正式,2:冻结—>试用,3:流失—>正式,4:试用延期,5:原销售申请领取流失客户,6:正式客户申请服务更新
 

+ 27 - 57
utils/logs.go

@@ -3,8 +3,6 @@ package utils
 import (
 	"encoding/json"
 	"github.com/beego/beego/v2/core/logs"
-	"github.com/sirupsen/logrus"
-	"gopkg.in/natefinch/lumberjack.v2"
 	"os"
 	"path"
 )
@@ -16,9 +14,9 @@ const (
 	DefaultApiLogPath = "./etalogs/apilog"
 )
 
-var FileLog = logrus.New()
-var ApiLog = logrus.New()
-var FileLogData = logrus.New()
+var FileLog *logs.BeeLogger
+var ApiLog *logs.BeeLogger
+var FileLogData *logs.BeeLogger
 var Binlog *logs.BeeLogger
 
 func init() {
@@ -37,21 +35,14 @@ func init() {
 
 	// 打开文件
 	logFileName := path.Join(logPath, logFile)
-	logConf := getDefaultLogrusConfig(logFileName)
-	// 使用滚动压缩方式记录日志
-	rolling(FileLog, logConf)
-	//rolling(bLogFileName)
-	// 设置日志输出JSON格式
-	jsonFormat := new(logrus.JSONFormatter)
-	jsonFormat.DisableHTMLEscape = true
-	jsonFormat.TimestampFormat = HlbFormatDateTime
-	FileLog.SetFormatter(jsonFormat)
-	FileLog.SetReportCaller(true)
-	//LogInstance.SetFormatter(&logrus.TextFormatter{})
-	// 设置日志记录级别
-	//FileLog.SetLevel(logrus.DebugLevel)
-
-	//FileLog.Info("abc")
+	FileLog = logs.NewLogger(1000000)
+	logConf := getDefaultLogConfig()
+
+	logConf.FileName = logFileName
+	b, _ := json.Marshal(logConf)
+	FileLog.SetLogger(logs.AdapterFile, string(b))
+	FileLog.EnableFuncCallDepth(true)
+
 	initBinlog()
 	initApiLog()
 	initFileLogData()
@@ -86,8 +77,8 @@ func initBinlog() {
 	logConf := getDefaultLogConfig()
 
 	logConf.FileName = logFileName
-	logConf.MaxLines = 10000000
-	logConf.Rotate = true
+	//logConf.MaxLines = 10000000
+	//logConf.Rotate = true
 	b, _ := json.Marshal(logConf)
 	Binlog.SetLogger(logs.AdapterFile, string(b))
 	Binlog.EnableFuncCallDepth(true)
@@ -106,15 +97,13 @@ func initApiLog() {
 
 	// 打开文件
 	logFileName := path.Join(logPath, logFile)
-	logConf := getDefaultLogrusConfig(logFileName)
-	// 使用滚动压缩方式记录日志
-	rolling(ApiLog, logConf)
-	//rolling(bLogFileName)
-	// 设置日志输出JSON格式
-	jsonFormat := new(logrus.JSONFormatter)
-	jsonFormat.DisableHTMLEscape = true
-	jsonFormat.TimestampFormat = HlbFormatDateTime
-	ApiLog.SetFormatter(jsonFormat)
+	ApiLog = logs.NewLogger(1000000)
+	logConf := getDefaultLogConfig()
+
+	logConf.FileName = logFileName
+	b, _ := json.Marshal(logConf)
+	ApiLog.SetLogger(logs.AdapterFile, string(b))
+	ApiLog.EnableFuncCallDepth(true)
 }
 
 func initFileLogData() {
@@ -130,38 +119,19 @@ func initFileLogData() {
 
 	// 打开文件
 	logFileName := path.Join(logPath, logFile)
-	logConf := getDefaultLogrusConfig(logFileName)
-	// 使用滚动压缩方式记录日志
-	rolling(FileLogData, logConf)
-	// 设置日志输出JSON格式
-	jsonFormat := new(logrus.JSONFormatter)
-	jsonFormat.DisableHTMLEscape = true
-	jsonFormat.TimestampFormat = HlbFormatDateTime
-	FileLogData.SetFormatter(jsonFormat)
-}
-
-// 日志滚动设置
-func rolling(fLog *logrus.Logger, config *lumberjack.Logger) {
-	// 设置输出
-	fLog.SetOutput(config)
-}
+	FileLogData = logs.NewLogger(1000000)
+	logConf := getDefaultLogConfig()
 
-func getDefaultLogrusConfig(logFile string) (config *lumberjack.Logger) {
-	config = &lumberjack.Logger{
-		Filename:   logFile,    //日志文件位置
-		MaxSize:    256,        // 单文件最大容量,单位是MB
-		MaxBackups: 0,          // 最大保留过期文件个数,0表示默认保留
-		MaxAge:     LogMaxDays, // 保留过期文件的最大时间间隔,单位是天
-		Compress:   true,       // 是否需要压缩滚动日志, 使用的 gzip 压缩
-		LocalTime:  true,
-	}
-	return
+	logConf.FileName = logFileName
+	b, _ := json.Marshal(logConf)
+	FileLogData.SetLogger(logs.AdapterFile, string(b))
+	FileLogData.EnableFuncCallDepth(true)
 }
 
 func getDefaultLogConfig() logConfig {
 	return logConfig{
 		FileName: "",
-		MaxLines: 0,
+		MaxLines: 10000000,
 		MaxSize:  1 << 28,
 		Daily:    true,
 		MaxDays:  LogMaxDays, //我就是喜欢31天,咋滴,不喜欢你就自己改-_-!