|
@@ -1,6 +1,7 @@
|
|
package logic
|
|
package logic
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "encoding/json"
|
|
"errors"
|
|
"errors"
|
|
"eta/eta_index_lib/models"
|
|
"eta/eta_index_lib/models"
|
|
"eta/eta_index_lib/utils"
|
|
"eta/eta_index_lib/utils"
|
|
@@ -11,7 +12,7 @@ import (
|
|
)
|
|
)
|
|
|
|
|
|
// AddPredictEdbInfo 新增预测指标
|
|
// AddPredictEdbInfo 新增预测指标
|
|
-func AddPredictEdbInfo(sourceEdbInfoId, classifyId int, edbName, dataDateType string, ruleList []models.RuleConfig, minValue, maxValue float64, sysUserId int, sysUserName, lang string) (edbInfo *models.EdbInfo, err error, errMsg string) {
|
|
|
|
|
|
+func AddPredictEdbInfo(sourceEdbInfoId, classifyId int, edbName, dataDateType string, endDateType, endNum int, ruleList []models.RuleConfig, minValue, maxValue float64, sysUserId int, sysUserName, lang string) (edbInfo *models.EdbInfo, err error, errMsg string) {
|
|
var sourceEdbInfo *models.EdbInfo
|
|
var sourceEdbInfo *models.EdbInfo
|
|
// 来源指标信息校验
|
|
// 来源指标信息校验
|
|
{
|
|
{
|
|
@@ -82,6 +83,11 @@ func AddPredictEdbInfo(sourceEdbInfoId, classifyId int, edbName, dataDateType st
|
|
if dataDateType == `` {
|
|
if dataDateType == `` {
|
|
dataDateType = `自然日`
|
|
dataDateType = `自然日`
|
|
}
|
|
}
|
|
|
|
+ var endDateConfig *models.PredictEdbInfoExtra
|
|
|
|
+ endDateConfig.EndDateType = endDateType
|
|
|
|
+ endDateConfig.EndNum = endNum
|
|
|
|
+ // 转成endDateConfig字符串
|
|
|
|
+ endDateConfigStr, _ := json.Marshal(endDateConfig)
|
|
edbInfo = &models.EdbInfo{
|
|
edbInfo = &models.EdbInfo{
|
|
//EdbInfoId: 0,
|
|
//EdbInfoId: 0,
|
|
EdbInfoType: 1,
|
|
EdbInfoType: 1,
|
|
@@ -114,6 +120,7 @@ func AddPredictEdbInfo(sourceEdbInfoId, classifyId int, edbName, dataDateType st
|
|
UnitEn: sourceEdbInfo.UnitEn,
|
|
UnitEn: sourceEdbInfo.UnitEn,
|
|
DataDateType: dataDateType,
|
|
DataDateType: dataDateType,
|
|
Sort: models.GetAddEdbMaxSortByClassifyId(classifyId, utils.PREDICT_EDB_INFO_TYPE),
|
|
Sort: models.GetAddEdbMaxSortByClassifyId(classifyId, utils.PREDICT_EDB_INFO_TYPE),
|
|
|
|
+ Extra: string(endDateConfigStr),
|
|
}
|
|
}
|
|
|
|
|
|
// 关联关系表
|
|
// 关联关系表
|
|
@@ -145,13 +152,22 @@ func AddPredictEdbInfo(sourceEdbInfoId, classifyId int, edbName, dataDateType st
|
|
|
|
|
|
// 预测指标配置
|
|
// 预测指标配置
|
|
predictEdbConfList := make([]*models.PredictEdbConf, 0)
|
|
predictEdbConfList := make([]*models.PredictEdbConf, 0)
|
|
|
|
+ var ruleEndDate time.Time
|
|
for ruleIndex, v := range ruleList {
|
|
for ruleIndex, v := range ruleList {
|
|
- // 预测指标配置
|
|
|
|
- ruleEndDate, tmpErr := time.ParseInLocation(utils.FormatDate, v.EndDate, time.Local)
|
|
|
|
- if tmpErr != nil {
|
|
|
|
- errMsg = "规则配置的截止日期异常,请重新填写"
|
|
|
|
- err = errors.New(errMsg)
|
|
|
|
- return
|
|
|
|
|
|
+ if endDateType == 0 {
|
|
|
|
+ // 预测指标配置
|
|
|
|
+ ruleEndDate, err = time.ParseInLocation(utils.FormatDate, v.EndDate, time.Local)
|
|
|
|
+ if err != nil {
|
|
|
|
+ errMsg = "规则配置的截止日期异常,请重新填写"
|
|
|
|
+ err = errors.New(errMsg)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if endNum <= 0 {
|
|
|
|
+ errMsg = "截止期数不正确,请输入大于等于1的整数"
|
|
|
|
+ err = errors.New(errMsg)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
}
|
|
}
|
|
//1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值,9:动态环差,10:根据 给定终值后插值 规则获取预测数据,11:根据 季节性 规则获取预测数据,12:根据 移动平均同比 规则获取预测数据
|
|
//1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值,9:动态环差,10:根据 给定终值后插值 规则获取预测数据,11:根据 季节性 规则获取预测数据,12:根据 移动平均同比 规则获取预测数据
|
|
// 环比、环差、动态环差、季节性、移动平均同比不支持年度
|
|
// 环比、环差、动态环差、季节性、移动平均同比不支持年度
|
|
@@ -161,6 +177,11 @@ func AddPredictEdbInfo(sourceEdbInfoId, classifyId int, edbName, dataDateType st
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if v.RuleType == 16 && endDateType != 1 {
|
|
|
|
+ errMsg = "年度值倒推不支持截止期数"
|
|
|
|
+ err = errors.New(errMsg)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
switch v.RuleType {
|
|
switch v.RuleType {
|
|
case 8: //N期段线性外推值
|
|
case 8: //N期段线性外推值
|
|
valInt, tmpErr := strconv.Atoi(v.Value)
|
|
valInt, tmpErr := strconv.Atoi(v.Value)
|
|
@@ -386,12 +407,15 @@ func AddPredictEdbInfo(sourceEdbInfoId, classifyId int, edbName, dataDateType st
|
|
SourceEdbInfoId: sourceEdbInfoId,
|
|
SourceEdbInfoId: sourceEdbInfoId,
|
|
RuleType: v.RuleType,
|
|
RuleType: v.RuleType,
|
|
//FixedValue: v.Value,
|
|
//FixedValue: v.Value,
|
|
- Value: v.Value,
|
|
|
|
- EndDate: ruleEndDate,
|
|
|
|
|
|
+ Value: v.Value,
|
|
|
|
+ //EndDate: ruleEndDate,
|
|
ModifyTime: time.Now(),
|
|
ModifyTime: time.Now(),
|
|
CreateTime: time.Now(),
|
|
CreateTime: time.Now(),
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ if endDateType == 0 {
|
|
|
|
+ tmpPredictEdbConf.EndDate = ruleEndDate
|
|
|
|
+ }
|
|
|
|
+ //todo 指标最终的截止日期的更新
|
|
edbInfo.EndDate = v.EndDate
|
|
edbInfo.EndDate = v.EndDate
|
|
|
|
|
|
predictEdbConfList = append(predictEdbConfList, tmpPredictEdbConf)
|
|
predictEdbConfList = append(predictEdbConfList, tmpPredictEdbConf)
|
|
@@ -402,7 +426,7 @@ func AddPredictEdbInfo(sourceEdbInfoId, classifyId int, edbName, dataDateType st
|
|
}
|
|
}
|
|
|
|
|
|
// EditPredictEdbInfo 编辑预测指标
|
|
// EditPredictEdbInfo 编辑预测指标
|
|
-func EditPredictEdbInfo(edbInfoId, classifyId int, edbName, dataDateType string, ruleList []models.RuleConfig, minValue, maxValue float64, lang string) (edbInfo *models.EdbInfo, err error, errMsg string) {
|
|
|
|
|
|
+func EditPredictEdbInfo(edbInfoId, classifyId int, edbName, dataDateType string, endDateType, endNum int, ruleList []models.RuleConfig, minValue, maxValue float64, lang string) (edbInfo *models.EdbInfo, err error, errMsg string) {
|
|
// 指标信息校验
|
|
// 指标信息校验
|
|
{
|
|
{
|
|
edbInfo, err = models.GetEdbInfoById(edbInfoId)
|
|
edbInfo, err = models.GetEdbInfoById(edbInfoId)
|
|
@@ -458,6 +482,12 @@ func EditPredictEdbInfo(edbInfoId, classifyId int, edbName, dataDateType string,
|
|
if dataDateType == `` {
|
|
if dataDateType == `` {
|
|
dataDateType = `自然日`
|
|
dataDateType = `自然日`
|
|
}
|
|
}
|
|
|
|
+ var endDateConfig *models.PredictEdbInfoExtra
|
|
|
|
+ endDateConfig.EndDateType = endDateType
|
|
|
|
+ endDateConfig.EndNum = endNum
|
|
|
|
+ // 转成endDateConfig字符串
|
|
|
|
+ endDateConfigStr, _ := json.Marshal(endDateConfig)
|
|
|
|
+
|
|
switch lang {
|
|
switch lang {
|
|
case utils.EnLangVersion:
|
|
case utils.EnLangVersion:
|
|
edbInfo.EdbNameEn = edbName
|
|
edbInfo.EdbNameEn = edbName
|
|
@@ -471,7 +501,8 @@ func EditPredictEdbInfo(edbInfoId, classifyId int, edbName, dataDateType string,
|
|
edbInfo.MaxValue = maxValue
|
|
edbInfo.MaxValue = maxValue
|
|
edbInfo.DataDateType = dataDateType
|
|
edbInfo.DataDateType = dataDateType
|
|
edbInfo.ModifyTime = time.Now()
|
|
edbInfo.ModifyTime = time.Now()
|
|
- updateEdbInfoCol := []string{"EdbName", "EdbNameEn", "EdbNameSource", "ClassifyId", "EndDate", "MinValue", "MaxValue", "DataDateType", "ModifyTime"}
|
|
|
|
|
|
+ edbInfo.Extra = string(endDateConfigStr)
|
|
|
|
+ updateEdbInfoCol := []string{"EdbName", "EdbNameEn", "EdbNameSource", "ClassifyId", "EndDate", "MinValue", "MaxValue", "DataDateType", "ModifyTime", "Extra"}
|
|
|
|
|
|
var sourceEdbInfo *models.EdbInfo
|
|
var sourceEdbInfo *models.EdbInfo
|
|
// 来源指标信息校验
|
|
// 来源指标信息校验
|
|
@@ -531,13 +562,23 @@ func EditPredictEdbInfo(edbInfoId, classifyId int, edbName, dataDateType string,
|
|
// 预测指标配置
|
|
// 预测指标配置
|
|
predictEdbConfList := make([]*models.PredictEdbConf, 0)
|
|
predictEdbConfList := make([]*models.PredictEdbConf, 0)
|
|
for ruleIndex, v := range ruleList {
|
|
for ruleIndex, v := range ruleList {
|
|
- // 预测指标配置
|
|
|
|
- ruleEndDate, tmpErr := time.ParseInLocation(utils.FormatDate, v.EndDate, time.Local)
|
|
|
|
- if tmpErr != nil {
|
|
|
|
- errMsg = "规则配置的截止日期异常,请重新填写"
|
|
|
|
- err = errors.New(errMsg)
|
|
|
|
- return
|
|
|
|
|
|
+ var ruleEndDate time.Time
|
|
|
|
+ if endDateType == 0 {
|
|
|
|
+ // 预测指标配置
|
|
|
|
+ ruleEndDate, err = time.ParseInLocation(utils.FormatDate, v.EndDate, time.Local)
|
|
|
|
+ if err != nil {
|
|
|
|
+ errMsg = "规则配置的截止日期异常,请重新填写"
|
|
|
|
+ err = errors.New(errMsg)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if endNum <= 0 {
|
|
|
|
+ errMsg = "截止期数不正确,请输入大于等于1的整数"
|
|
|
|
+ err = errors.New(errMsg)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
//1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值,9:动态环差,10:根据 给定终值后插值 规则获取预测数据,11:根据 季节性 规则获取预测数据,12:根据 移动平均同比 规则获取预测数据
|
|
//1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值,9:动态环差,10:根据 给定终值后插值 规则获取预测数据,11:根据 季节性 规则获取预测数据,12:根据 移动平均同比 规则获取预测数据
|
|
// 环比、环差、动态环差、季节性、移动平均同比不支持年度
|
|
// 环比、环差、动态环差、季节性、移动平均同比不支持年度
|
|
if sourceEdbInfo.Frequency == "年度" && utils.InArrayByInt([]int{5, 6, 11, 12}, v.RuleType) {
|
|
if sourceEdbInfo.Frequency == "年度" && utils.InArrayByInt([]int{5, 6, 11, 12}, v.RuleType) {
|
|
@@ -545,6 +586,11 @@ func EditPredictEdbInfo(edbInfoId, classifyId int, edbName, dataDateType string,
|
|
err = errors.New(errMsg)
|
|
err = errors.New(errMsg)
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+ if v.RuleType == 16 && endDateType != 1 {
|
|
|
|
+ errMsg = "年度值倒推不支持截止期数"
|
|
|
|
+ err = errors.New(errMsg)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
switch v.RuleType {
|
|
switch v.RuleType {
|
|
case 8: //N期段线性外推值
|
|
case 8: //N期段线性外推值
|
|
valInt, tmpErr := strconv.Atoi(v.Value)
|
|
valInt, tmpErr := strconv.Atoi(v.Value)
|