|
@@ -31,7 +31,7 @@ type NhccDate struct {
|
|
|
}
|
|
|
|
|
|
// AddCalculateNhcc 新增拟合残差数据
|
|
|
-func AddCalculateNhcc(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdbInfo *EdbInfo, edbCode, uniqueCode string, nhccDate NhccDate, sysUserId int, sysUserRealName string) (edbInfo *EdbInfo, err error) {
|
|
|
+func AddCalculateNhcc(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdbInfo *EdbInfo, edbCode, uniqueCode string, nhccDate NhccDate, sysUserId int, sysUserRealName string) (edbInfo *EdbInfo, err error, errMsg string) {
|
|
|
o := orm.NewOrm()
|
|
|
to, err := o.Begin()
|
|
|
if err != nil {
|
|
@@ -163,13 +163,13 @@ func AddCalculateNhcc(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdb
|
|
|
}
|
|
|
|
|
|
//拼接数据
|
|
|
- err = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
|
|
|
+ err, errMsg = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// EditCalculateNhcc 编辑拟合残差数据
|
|
|
-func EditCalculateNhcc(req *EdbInfoCalculateBatchEditReq, edbInfo, firstEdbInfo, secondEdbInfo *EdbInfo, nhccDate NhccDate) (err error) {
|
|
|
+func EditCalculateNhcc(req *EdbInfoCalculateBatchEditReq, edbInfo, firstEdbInfo, secondEdbInfo *EdbInfo, nhccDate NhccDate) (err error, errMsg string) {
|
|
|
o := orm.NewOrm()
|
|
|
to, err := o.Begin()
|
|
|
if err != nil {
|
|
@@ -350,7 +350,7 @@ func EditCalculateNhcc(req *EdbInfoCalculateBatchEditReq, edbInfo, firstEdbInfo,
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
|
|
|
+ err, errMsg = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
|
|
|
}
|
|
|
|
|
|
return
|
|
@@ -405,13 +405,13 @@ func RefreshAllCalculateNhcc(edbInfo *EdbInfo) (err error) {
|
|
|
EndDate: endDate,
|
|
|
}
|
|
|
// 刷新数据
|
|
|
- err = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
|
|
|
+ err, _ = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// refreshAllCalculateNhcc 刷新所有 拟合残差 数据
|
|
|
-func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, existItemB *EdbInfoCalculateMapping, nhccDate NhccDate) (err error) {
|
|
|
+func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, existItemB *EdbInfoCalculateMapping, nhccDate NhccDate) (err error, errMsg string) {
|
|
|
//查询当前指标现有的数据
|
|
|
var condition string
|
|
|
var pars []interface{}
|
|
@@ -422,7 +422,7 @@ func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, exist
|
|
|
sql := ` SELECT * FROM edb_data_calculate_nhcc WHERE edb_info_id=? ORDER BY data_time DESC `
|
|
|
_, err = to.Raw(sql, edbInfo.EdbInfoId).QueryRows(&dataList)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return
|
|
|
}
|
|
|
var dateArr []string
|
|
|
dataMap := make(map[string]*EdbDataCalculateNhcc)
|
|
@@ -505,7 +505,10 @@ func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, exist
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
- aDataList, secondDataList, aDataMap, bDataMap, err := getNhccData(to, existItemA, existItemB, nhccDate)
|
|
|
+ aDataList, secondDataList, aDataMap, bDataMap, nhccDate, err, errMsg := getNhccData(to, existItemA, existItemB, nhccDate)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
// 计算线性方程公式
|
|
|
var a, b float64
|
|
@@ -515,12 +518,14 @@ func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, exist
|
|
|
dateStr := i.Format(utils.FormatDate)
|
|
|
xValue, ok := aDataMap[dateStr]
|
|
|
if !ok {
|
|
|
- err = errors.New("指标A日期:" + dateStr + "数据异常,导致计算线性方程公式失败")
|
|
|
+ errMsg = "指标A日期:" + dateStr + "数据异常,导致计算线性方程公式失败"
|
|
|
+ err = errors.New(errMsg)
|
|
|
return
|
|
|
}
|
|
|
yValue, ok := bDataMap[dateStr]
|
|
|
if !ok {
|
|
|
- err = errors.New("指标B日期:" + dateStr + "数据异常,导致计算线性方程公式失败")
|
|
|
+ errMsg = "指标B日期:" + dateStr + "数据异常,导致计算线性方程公式失败"
|
|
|
+ err = errors.New(errMsg)
|
|
|
return
|
|
|
}
|
|
|
tmpCoordinate := utils.Coordinate{
|
|
@@ -533,7 +538,8 @@ func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, exist
|
|
|
}
|
|
|
|
|
|
if math.IsNaN(a) || math.IsNaN(b) {
|
|
|
- err = errors.New("线性方程公式生成失败")
|
|
|
+ errMsg = "线性方程公式生成失败"
|
|
|
+ err = errors.New(errMsg)
|
|
|
return
|
|
|
}
|
|
|
//fmt.Println("a:", a, ";======b:", b)
|
|
@@ -645,7 +651,7 @@ func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, exist
|
|
|
}
|
|
|
|
|
|
// CalculateComputeCorrelation 计算相关性结果
|
|
|
-func CalculateComputeCorrelation(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdbInfo *EdbInfo, nhccDate NhccDate) (r float64, err error) {
|
|
|
+func CalculateComputeCorrelation(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdbInfo *EdbInfo, nhccDate NhccDate) (r float64, err error, errMsg string) {
|
|
|
var existItemA, existItemB *EdbInfoCalculateMapping
|
|
|
//第一个指标
|
|
|
{
|
|
@@ -692,7 +698,10 @@ func CalculateComputeCorrelation(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo
|
|
|
}
|
|
|
}()
|
|
|
// 获取相关数据
|
|
|
- _, _, aDataMap, bDataMap, err := getNhccData(to, existItemA, existItemB, nhccDate)
|
|
|
+ _, _, aDataMap, bDataMap, nhccDate, err, errMsg := getNhccData(to, existItemA, existItemB, nhccDate)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
// 计算相关性
|
|
|
coordinateData := make([]utils.Coordinate, 0)
|
|
@@ -700,12 +709,14 @@ func CalculateComputeCorrelation(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo
|
|
|
dateStr := i.Format(utils.FormatDate)
|
|
|
xValue, ok := aDataMap[dateStr]
|
|
|
if !ok {
|
|
|
- err = errors.New("指标A日期:" + dateStr + "数据异常,导致计算线性方程公式失败")
|
|
|
+ errMsg = "指标A日期:" + dateStr + "数据异常,导致计算线性方程公式失败"
|
|
|
+ err = errors.New(errMsg)
|
|
|
return
|
|
|
}
|
|
|
yValue, ok := bDataMap[dateStr]
|
|
|
if !ok {
|
|
|
- err = errors.New("指标B日期:" + dateStr + "数据异常,导致计算线性方程公式失败")
|
|
|
+ errMsg = "指标B日期:" + dateStr + "数据异常,导致计算线性方程公式失败"
|
|
|
+ err = errors.New(errMsg)
|
|
|
return
|
|
|
}
|
|
|
tmpCoordinate := utils.Coordinate{
|
|
@@ -720,7 +731,8 @@ func CalculateComputeCorrelation(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo
|
|
|
}
|
|
|
|
|
|
// getNhccData 获取拟合残差需要的数据
|
|
|
-func getNhccData(to orm.TxOrmer, existItemA, existItemB *EdbInfoCalculateMapping, nhccDate NhccDate) (aDataList []EdbInfoSearchData, secondDataList []*EdbInfoSearchData, aDataMap, bDataMap map[string]float64, err error) {
|
|
|
+func getNhccData(to orm.TxOrmer, existItemA, existItemB *EdbInfoCalculateMapping, nhccDate NhccDate) (aDataList []EdbInfoSearchData, secondDataList []*EdbInfoSearchData, aDataMap, bDataMap map[string]float64, newNhccDate NhccDate, err error, errMsg string) {
|
|
|
+ newNhccDate = nhccDate
|
|
|
//第一个指标
|
|
|
aDataList = make([]EdbInfoSearchData, 0)
|
|
|
aDataMap = make(map[string]float64)
|
|
@@ -761,11 +773,13 @@ func getNhccData(to orm.TxOrmer, existItemA, existItemB *EdbInfoCalculateMapping
|
|
|
}
|
|
|
|
|
|
if len(aDataList) <= 0 {
|
|
|
- err = errors.New("指标A没有数据")
|
|
|
+ errMsg = "指标A没有数据"
|
|
|
+ err = errors.New(errMsg)
|
|
|
return
|
|
|
}
|
|
|
if len(bDataList) <= 0 {
|
|
|
- err = errors.New("指标B没有数据")
|
|
|
+ errMsg = "指标B没有数据"
|
|
|
+ err = errors.New(errMsg)
|
|
|
return
|
|
|
}
|
|
|
// 拟合残差计算的结束日期判断
|
|
@@ -777,8 +791,8 @@ func getNhccData(to orm.TxOrmer, existItemA, existItemB *EdbInfoCalculateMapping
|
|
|
return
|
|
|
}
|
|
|
// 如果A指标的最新数据日期早于拟合残差的结束日期,那么就用A指标的最新数据日期
|
|
|
- if tmpEndDate.Before(nhccDate.EndDate) {
|
|
|
- nhccDate.EndDate = tmpEndDate
|
|
|
+ if tmpEndDate.Before(newNhccDate.EndDate) {
|
|
|
+ newNhccDate.EndDate = tmpEndDate
|
|
|
}
|
|
|
endBData := bDataList[len(bDataList)-1]
|
|
|
tmpEndDate, tmpErr = time.ParseInLocation(utils.FormatDate, endBData.DataTime, time.Local)
|
|
@@ -787,8 +801,8 @@ func getNhccData(to orm.TxOrmer, existItemA, existItemB *EdbInfoCalculateMapping
|
|
|
return
|
|
|
}
|
|
|
// 如果B指标的最新数据日期早于拟合残差的结束日期,那么就用A指标的最新数据日期
|
|
|
- if tmpEndDate.Before(nhccDate.EndDate) {
|
|
|
- nhccDate.EndDate = tmpEndDate
|
|
|
+ if tmpEndDate.Before(newNhccDate.EndDate) {
|
|
|
+ newNhccDate.EndDate = tmpEndDate
|
|
|
}
|
|
|
}
|
|
|
|