Explorar o código

新增计算指标数据刷新

hongze %!s(int64=3) %!d(string=hai) anos
pai
achega
5b2a9f32d5

+ 2 - 2
go.sum

@@ -8,8 +8,8 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
 github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
-github.com/aliyun/aliyun-oss-go-sdk v2.1.9+incompatible h1:mO8fA9l5cQ7r0D2v3WribTT1GGbNVtnVviKM51jH6lI=
-github.com/aliyun/aliyun-oss-go-sdk v2.1.9+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
+github.com/aliyun/aliyun-oss-go-sdk v2.1.10+incompatible h1:D3gwOr9qUUmyyBRDbpnATqu+EkqqmigFd3Od6xO1QUU=
+github.com/aliyun/aliyun-oss-go-sdk v2.1.10+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
 github.com/andybalholm/cascadia v1.2.0 h1:vuRCkM5Ozh/BfmsaTm26kbjm0mIOM3yS5Ek/F5h18aE=
 github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY=
 github.com/antlr/antlr4 v0.0.0-20190325153624-837aa60e2c47 h1:Lp5nUoQzppfVmfZadpzAytNyb5IMtxyOJLzoQS5dExg=

+ 64 - 0
models/data_manage/edb_data_table.go

@@ -0,0 +1,64 @@
+package data_manage
+
+import (
+	"errors"
+	"hongze/hongze_task/utils"
+	"strconv"
+	"time"
+)
+
+func GetEdbDataTableName(source int) (tableName string) {
+	switch source {
+	case utils.DATA_SOURCE_THS:
+		tableName = "edb_data_ths"
+	case utils.DATA_SOURCE_WIND:
+		tableName = "edb_data_wind"
+	case utils.DATA_SOURCE_PB:
+		tableName = "edb_data_pb"
+	case utils.DATA_SOURCE_CALCULATE:
+		tableName = "edb_data_calculate"
+	case utils.DATA_SOURCE_CALCULATE_LJZZY:
+		tableName = "edb_data_calculate_ljzzy"
+	case utils.DATA_SOURCE_CALCULATE_TBZ:
+		tableName = "edb_data_calculate_tbz"
+	case utils.DATA_SOURCE_CALCULATE_TCZ:
+		tableName = "edb_data_calculate_tcz"
+	case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS:
+		tableName = "edb_data_calculate_nszydpjjs"
+	default:
+		tableName = ""
+		errors.New("无效的渠道:" + strconv.Itoa(source))
+		return
+	}
+	return
+}
+
+func GetEdbInfoCalculateTableName(source int) (tableName string) {
+	switch source {
+	case utils.DATA_SOURCE_CALCULATE:
+		tableName = "edb_info_calculate"
+	case utils.DATA_SOURCE_CALCULATE_LJZZY:
+		tableName = "edb_info_calculate_ljzzy"
+	case utils.DATA_SOURCE_CALCULATE_TBZ:
+		tableName = "edb_info_calculate_tbz"
+	case utils.DATA_SOURCE_CALCULATE_TCZ:
+		tableName = "edb_info_calculate_tcz"
+	case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS:
+		tableName = "edb_info_calculate_nszydpjjs"
+	default:
+		tableName = ""
+		errors.New("无效的渠道:" + strconv.Itoa(source))
+		return
+	}
+	return
+}
+
+func GetAddSql(edbInfoId, edbCode, dataTime, timestampStr string, value float64) (addSql string) {
+	nowStr := time.Now().Format(utils.FormatDateTime)
+	addSql += "("
+	addSql += edbInfoId + "," + "'" + edbCode + "'" + "," + "'" + dataTime + "'" + "," + utils.SubFloatToString(value, 4) + "," + "'" + nowStr + "'" +
+		"," + "'" + nowStr + "'" + "," + "1"
+	addSql += "," + "'" + timestampStr + "'"
+	addSql += "),"
+	return
+}

+ 7 - 19
models/data_manage/edb_info.go

@@ -58,6 +58,7 @@ func GetEdbInfoByCondition(condition string, pars []interface{}) (item []*EdbInf
 	if condition != "" {
 		sql += condition
 	}
+	sql+=` ORDER BY edb_info_id ASC `
 	_, err = o.Raw(sql, pars).QueryRows(&item)
 	return
 }
@@ -107,7 +108,8 @@ func ModifyEdbInfoMaxAndMinInfo(edbInfoId int, item *EdbInfoMaxAndMinInfo) (err
 	return
 }
 
-func GetEdbDataListAll(condition string, pars []interface{}, source int) (item []*EdbInfoSearchData, err error) {
+//order:1升序,其余值为降序
+func GetEdbDataListAll(condition string, pars []interface{}, source, order int) (item []*EdbInfoSearchData, err error) {
 	o := orm.NewOrm()
 	o.Using("data")
 	sql := ``
@@ -118,26 +120,12 @@ func GetEdbDataListAll(condition string, pars []interface{}, source int) (item [
 	if condition != "" {
 		sql += condition
 	}
-
-	sql += ` ORDER BY data_time ASC `
-	_, err = o.Raw(sql, pars).QueryRows(&item)
-	return
-}
-
-func GetEdbDataTableName(source int) (tableName string) {
-	if source == utils.DATA_SOURCE_THS {
-		tableName = `edb_data_ths`
-	} else if source == utils.DATA_SOURCE_WIND {
-		tableName = `edb_data_wind`
-	} else if source == utils.DATA_SOURCE_PB {
-		tableName = `edb_data_pb`
-	} else if source == utils.DATA_SOURCE_CALCULATE {
-		tableName = `edb_data_calculate`
+	if order == 1 {
+		sql += ` ORDER BY data_time ASC `
 	} else {
-		tableName = ""
-		errors.New("无效的渠道:" + strconv.Itoa(source))
-		return
+		sql += ` ORDER BY data_time DESC `
 	}
+	_, err = o.Raw(sql, pars).QueryRows(&item)
 	return
 }
 

+ 190 - 0
models/data_manage/edb_info_calculate_ljzzy.go

@@ -0,0 +1,190 @@
+package data_manage
+
+import (
+	"fmt"
+	"hongze/hongze_task/utils"
+	"rdluck_tools/orm"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type EdbInfoCalculateLjzzy struct {
+	EdbInfoCalculateLjzzyId int       `orm:"column(edb_info_calculate_ljzzy_id);pk"`
+	EdbInfoId               int       `description:"指标id"`
+	EdbCode                 string    `description:"指标编码"`
+	FromEdbInfoId           int       `description:"计算指标id"`
+	FromEdbCode             string    `description:"计算指标编码"`
+	FromEdbName             string    `description:"计算指标名称"`
+	FromSource              int       `description:"计算指标来源"`
+	FromSourceName          string    `description:"计算指标来源名称"`
+	FromTag                 string    `description:"来源指标标签"`
+	Sort                    int       `description:"计算指标名称排序"`
+	CreateTime              time.Time `description:"创建时间"`
+	ModifyTime              time.Time `description:"修改时间"`
+}
+
+//刷新累计值转月值数据
+func RefreshCalculateLjzzy(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	o.Begin()
+	defer func() {
+		if err != nil {
+			o.Rollback()
+		} else {
+			o.Commit()
+		}
+	}()
+
+	if err != nil {
+		return
+	}
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+	//计算数据
+	var condition string
+	var pars []interface{}
+	condition += " AND edb_info_id=? "
+	pars = append(pars, fromEdbInfo.EdbInfoId)
+
+	if startDate != "" {
+		condition += " AND data_time>=? "
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		condition += " AND data_time<=? "
+		pars = append(pars, endDate)
+	}
+
+	dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 1)
+	if err != nil {
+		return err
+	}
+
+	yearMap := make(map[int]map[int]*EdbInfoSearchData)
+	dataLen := len(dataList)
+	for i := 0; i < dataLen; i++ {
+		item := dataList[i]
+		//日其中获取年
+		itemDate, err := time.Parse(utils.FormatDate, item.DataTime)
+		if err != nil {
+			return err
+		}
+		year := itemDate.Year()
+		month := int(itemDate.Month())
+		if monthMap, yok := yearMap[year]; yok {
+			monthMap[month] = item
+			yearMap[year] = monthMap
+		} else {
+			monthMap = make(map[int]*EdbInfoSearchData)
+			monthMap[month] = item
+			yearMap[year] = monthMap
+		}
+	}
+
+	addSql := ` INSERT INTO edb_data_calculate_ljzzy(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	nowStr := time.Now().Format(utils.FormatDateTime)
+	var isAdd bool
+
+	for yk, yv := range yearMap {
+		if _, mok := yv[2]; !mok {
+			//fmt.Println(yk, yv, "continue")
+			continue
+		}
+		for i := 1; i <= 12; i++ {
+			fmt.Println(yk, i, yv[i])
+			dataCurrentItem := yv[i]
+			var date string
+			var val float64
+			if i == 1 || i == 2 {
+				dataTwoItem := yv[2]
+				if dataCurrentItem != nil && dataTwoItem != nil {
+					date = dataCurrentItem.DataTime
+					val = dataTwoItem.Value
+				}
+			} else {
+				dataPreItem := yv[i-1]
+				if dataCurrentItem != nil && dataPreItem != nil {
+					date = dataCurrentItem.DataTime
+					val = dataCurrentItem.Value - dataPreItem.Value
+				}
+			}
+			if date != "" {
+				//判断数据是否存在
+				count, err := GetEdbDataCalculateLjzzyByCodeAndDate(edbCode, date)
+				if err != nil && err.Error() != utils.ErrNoRow() {
+					return err
+				}
+				if count <= 0 {
+					dataTime, _ := time.Parse(utils.FormatDate, date)
+					timestamp := dataTime.UnixNano() / 1e6
+					timeStr := fmt.Sprintf("%d", timestamp)
+
+					addSql += "("
+					addSql += edbInfoIdStr + "," + "'" + edbCode + "'" + "," + "'" + date + "'" + "," + utils.SubFloatToString(val, 4) + "," + "'" + nowStr + "'" +
+						"," + "'" + nowStr + "'" + "," + "1"
+					addSql += "," + "'" + timeStr + "'"
+					addSql += "),"
+					isAdd = true
+				} else {
+					val = utils.FixFloat(val, 4)
+					err = ModifyEdbDataCalculateLjzzy(int64(edbInfoId), date, val)
+					if err != nil {
+						return err
+					}
+				}
+			}
+		}
+	}
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			return err
+		}
+	}
+	return
+}
+
+type EdbInfoCalculateLjzzyDetail struct {
+	EdbInfoCalculateLjzzyId int       `orm:"column(edb_info_calculate_ljzzy_id);pk"`
+	EdbInfoId               int       `description:"指标id"`
+	EdbCode                 string    `description:"指标编码"`
+	FromEdbInfoId           int       `description:"计算指标id"`
+	FromEdbCode             string    `description:"计算指标编码"`
+	FromEdbName             string    `description:"计算指标名称"`
+	FromSource              int       `description:"计算指标来源"`
+	FromSourceName          string    `description:"计算指标来源名称"`
+	FromTag                 string    `description:"来源指标标签"`
+	Sort                    int       `description:"计算指标名称排序"`
+	CreateTime              time.Time `description:"创建时间"`
+	ModifyTime              time.Time `description:"修改时间"`
+	StartDate               string    `description:"开始日期"`
+	EndDate                 string    `description:"结束日期"`
+}
+
+func GetEdbInfoCalculateLjzzyDetail(edbInfoId int) (item *EdbInfoCalculateLjzzyDetail, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_info_calculate_ljzzy AS a
+			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
+			WHERE a.edb_info_id=? `
+	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	return
+}
+
+func GetEdbDataCalculateLjzzyByCodeAndDate(edbCode string, startDate string) (count int, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT COUNT(1) AS count FROM edb_info_calculate_ljzzy WHERE edb_code=? AND data_time=? `
+	err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
+	return
+}
+
+func ModifyEdbDataCalculateLjzzy(edbInfoId int64, dataTime string, value float64) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` UPDATE edb_info_calculate_ljzzy SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
+	return
+}

+ 168 - 0
models/data_manage/edb_info_calculate_nszydpjjs.go

@@ -0,0 +1,168 @@
+package data_manage
+
+import (
+	"fmt"
+	"github.com/shopspring/decimal"
+	"hongze/hongze_task/utils"
+	"rdluck_tools/orm"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type EdbInfoCalculateNszydpjjs struct {
+	EdbInfoCalculateNszydpjjsId int       `orm:"column(edb_info_calculate_nszydpjjs_id);pk"`
+	EdbInfoId                   int       `description:"指标id"`
+	EdbCode                     string    `description:"指标编码"`
+	FromEdbInfoId               int       `description:"计算指标id"`
+	FromEdbCode                 string    `description:"计算指标编码"`
+	FromEdbName                 string    `description:"计算指标名称"`
+	FromSource                  int       `description:"计算指标来源"`
+	FromSourceName              string    `description:"计算指标来源名称"`
+	FromTag                     string    `description:"来源指标标签"`
+	Sort                        int       `description:"计算指标名称排序"`
+	CreateTime                  time.Time `description:"创建时间"`
+	ModifyTime                  time.Time `description:"修改时间"`
+}
+
+//刷新 N数值移动平均计算
+func RefreshCalculateNszydpjjs(edbInfoId, source, formulaInt int, fromEdbInfo *EdbInfo, edbCode string) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	o.Begin()
+	defer func() {
+		if err != nil {
+			o.Rollback()
+		} else {
+			o.Commit()
+		}
+	}()
+
+	if err != nil {
+		return
+	}
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+
+	//计算数据
+	var condition string
+	var pars []interface{}
+	condition += " AND edb_info_id=? "
+	pars = append(pars, edbInfoId)
+
+	dataList, err := GetEdbDataListAll(condition, pars, source, 0)
+	if err != nil {
+		return err
+	}
+
+	existDataMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range dataList {
+		existDataMap[v.DataTime] = v
+	}
+
+	//计算来源数据
+	startDate := time.Now().AddDate(-2, 0, 0).Format(utils.FormatDate)
+
+	var fromCondition string
+	var fromPars []interface{}
+	fromCondition += " AND edb_info_id=? "
+	fromPars = append(fromPars, fromEdbInfo.EdbInfoId)
+	fromCondition += " AND data_time>=? "
+	fromPars = append(fromPars, startDate)
+
+	fromDataList, err := GetEdbDataListAll(fromCondition, fromPars, fromEdbInfo.Source, 0)
+	if err != nil {
+		return err
+	}
+
+	var fromDateArr []string
+	fromDataMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range fromDataList {
+		fromDateArr = append(fromDateArr, v.DataTime)
+		fromDataMap[v.DataTime] = v
+	}
+
+	addSql := ` INSERT INTO edb_data_calculate_nszydpjjs(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	var isAdd bool
+
+	arrLen := len(fromDateArr)
+	for ak, av := range fromDateArr {
+		if _, existOk := existDataMap[av]; !existOk {
+			//处理第一个值
+			var valArr []float64
+			if findItem, ok := fromDataMap[av]; ok {
+				valArr = append(valArr, findItem.Value)
+			} else {
+				continue
+			}
+			if ak+1 != arrLen {
+				//处理除第一个值之外的N-1个值
+				for i := 1; i < formulaInt; i++ {
+					arrIndex := ak + i
+					if arrIndex >= arrLen {
+						break
+					}
+					arrVal := fromDateArr[arrIndex]
+					if findItem, ok := fromDataMap[arrVal]; ok {
+						valArr = append(valArr, findItem.Value)
+					} else {
+						continue
+					}
+				}
+			}
+			valArrLen := len(valArr)
+			var totalVal float64
+			for _, v := range valArr {
+				totalVal = totalVal + v
+			}
+			af := decimal.NewFromFloat(totalVal)
+			bf := decimal.NewFromFloat(float64(valArrLen))
+			val, _ := af.Div(bf).Float64()
+			currentDate, err := time.Parse(utils.FormatDate, av)
+			if err != nil {
+				return err
+			}
+
+			timestamp := currentDate.UnixNano() / 1e6
+			timestampStr := fmt.Sprintf("%d", timestamp)
+
+			addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+			isAdd = true
+		}
+	}
+
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			return err
+		}
+	}
+	return
+}
+
+type EdbInfoCalculateNszydpjjsDetail struct {
+	EdbInfoCalculateNszydpjjsId int       `orm:"column(edb_info_calculate_nszydpjjs_id);pk"`
+	EdbInfoId                   int       `description:"指标id"`
+	EdbCode                     string    `description:"指标编码"`
+	FromEdbInfoId               int       `description:"计算指标id"`
+	FromEdbCode                 string    `description:"计算指标编码"`
+	FromEdbName                 string    `description:"计算指标名称"`
+	FromSource                  int       `description:"计算指标来源"`
+	FromSourceName              string    `description:"计算指标来源名称"`
+	FromTag                     string    `description:"来源指标标签"`
+	Sort                        int       `description:"计算指标名称排序"`
+	CreateTime                  time.Time `description:"创建时间"`
+	ModifyTime                  time.Time `description:"修改时间"`
+	StartDate                   string    `description:"开始日期"`
+	EndDate                     string    `description:"结束日期"`
+}
+
+func GetEdbInfoCalculateNszydpjjsDetail(edbInfoId int) (item *EdbInfoCalculateNszydpjjsDetail, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_info_calculate_nszydpjjs AS a
+			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
+			WHERE a.edb_info_id=? `
+	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	return
+}

+ 309 - 0
models/data_manage/edb_info_calculate_tbz.go

@@ -0,0 +1,309 @@
+package data_manage
+
+import (
+	"fmt"
+	"github.com/shopspring/decimal"
+	"hongze/hongze_task/utils"
+	"rdluck_tools/orm"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type EdbInfoCalculateTbz struct {
+	EdbInfoCalculateTbzId int       `orm:"column(edb_info_calculate_tbz_id);pk"`
+	EdbInfoId             int       `description:"指标id"`
+	EdbCode               string    `description:"指标编码"`
+	FromEdbInfoId         int       `description:"计算指标id"`
+	FromEdbCode           string    `description:"计算指标编码"`
+	FromEdbName           string    `description:"计算指标名称"`
+	FromSource            int       `description:"计算指标来源"`
+	FromSourceName        string    `description:"计算指标来源名称"`
+	FromTag               string    `description:"来源指标标签"`
+	Sort                  int       `description:"计算指标名称排序"`
+	CreateTime            time.Time `description:"创建时间"`
+	ModifyTime            time.Time `description:"修改时间"`
+}
+
+func TbzDiv(a, b float64) float64 {
+	af := decimal.NewFromFloat(float64(a))
+	bf := decimal.NewFromFloat(float64(b))
+	val, _ := af.Div(bf).Float64()
+	val = val - 1
+	return val
+}
+
+//刷新同比值数据
+func RefreshCalculateTbz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	o.Begin()
+	defer func() {
+		if err != nil {
+			o.Rollback()
+		} else {
+			o.Commit()
+		}
+	}()
+
+	if err != nil {
+		return
+	}
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+	//计算数据
+
+	//计算数据
+	var condition string
+	var pars []interface{}
+	condition += " AND edb_info_id=? "
+	pars = append(pars, edbInfoId)
+
+	if startDate != "" {
+		condition += " AND data_time>=? "
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		condition += " AND data_time<=? "
+		pars = append(pars, endDate)
+	}
+
+	dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 0)
+	if err != nil {
+		return err
+	}
+	var dateArr []string
+	dataMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range dataList {
+		dateArr = append(dateArr, v.DataTime)
+		dataMap[v.DataTime] = v
+	}
+
+	addSql := ` INSERT INTO edb_data_calculate_tbz(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	var isAdd bool
+	for ak, av := range dateArr {
+		fmt.Println(ak, av)
+		currentItem := dataMap[av]
+		if currentItem != nil {
+			//当前日期
+			currentDate, err := time.Parse(utils.FormatDate, av)
+			if err != nil {
+				return err
+			}
+			//上一年的日期
+			preDate := currentDate.AddDate(-1, 0, 0)
+			preDateStr := preDate.Format(utils.FormatDate)
+			if findItem, ok := dataMap[preDateStr]; ok { //上一年同期找到
+				//dataTime, _ := time.Parse(utils.FormatDate, date)
+				timestamp := currentDate.UnixNano() / 1e6
+				timestampStr := fmt.Sprintf("%d", timestamp)
+				val := TbzDiv(currentItem.Value, findItem.Value)
+
+				count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
+				if err != nil && err.Error() != utils.ErrNoRow() {
+					return err
+				}
+				if count <= 0 {
+					addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+					isAdd = true
+				} else {
+					err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
+					if err != nil {
+						return err
+					}
+				}
+				utils.FileLog.Info("同期找到:" + av + ";" + preDateStr)
+				continue
+			} else {
+				if fromEdbInfo.Frequency == "月度" { //向上和向下,各找一个月
+					nextDateDay := preDate.AddDate(0, 1, 0)
+					nextDateDayStr := nextDateDay.Format(utils.FormatDate)
+
+					preDateDay := preDate.AddDate(0, -1, 0)
+					preDateDayStr := preDateDay.Format(utils.FormatDate)
+
+					for i := 0; i <= 6; i++ {
+						if i >= 1 {
+							nextDateDay = nextDateDay.AddDate(0, 0, i)
+							nextDateDayStr = nextDateDay.Format(utils.FormatDate)
+						}
+						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
+							timestamp := currentDate.UnixNano() / 1e6
+							timestampStr := fmt.Sprintf("%d", timestamp)
+							val := TbzDiv(currentItem.Value, findItem.Value)
+
+							count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
+							if err != nil && err.Error() != utils.ErrNoRow() {
+								return err
+							}
+							if count <= 0 {
+								addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+								isAdd = true
+							} else {
+								err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
+								if err != nil {
+									return err
+								}
+							}
+							break
+						} else {
+							if i >= 1 {
+								preDateDay = preDate.AddDate(0, 0, -i)
+								preDateDayStr = nextDateDay.Format(utils.FormatDate)
+							}
+							if findItem, ok := dataMap[preDateDayStr]; ok { //上一年同期->上一个月找到
+								timestamp := currentDate.UnixNano() / 1e6
+								timestampStr := fmt.Sprintf("%d", timestamp)
+								val := TbzDiv(currentItem.Value, findItem.Value)
+
+								count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
+								if err != nil && err.Error() != utils.ErrNoRow() {
+									return err
+								}
+								if count <= 0 {
+									addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+									isAdd = true
+								} else {
+									err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
+									if err != nil {
+										return err
+									}
+								}
+							}
+							break
+						}
+					}
+				} else if fromEdbInfo.Frequency == "季度" || fromEdbInfo.Frequency == "年度" {
+					if findItem, ok := dataMap[preDateStr]; ok { //上一年同期->下一个月找到
+						timestamp := currentDate.UnixNano() / 1e6
+						timestampStr := fmt.Sprintf("%d", timestamp)
+						val := TbzDiv(currentItem.Value, findItem.Value)
+
+						count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
+						if err != nil && err.Error() != utils.ErrNoRow() {
+							return err
+						}
+						if count <= 0 {
+							addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+							isAdd = true
+						} else {
+							err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
+							if err != nil {
+								return err
+							}
+						}
+						break
+					}
+				} else {
+					nextDateDay := preDate.AddDate(0, 0, 1)
+					nextDateDayStr := nextDateDay.Format(utils.FormatDate)
+
+					preDateDay := preDate.AddDate(0, 0, -1)
+					preDateDayStr := preDateDay.Format(utils.FormatDate)
+
+					for i := 0; i < 35; i++ {
+						if i >= 1 {
+							nextDateDay = nextDateDay.AddDate(0, 0, i)
+							nextDateDayStr = nextDateDay.Format(utils.FormatDate)
+						}
+						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
+							timestamp := currentDate.UnixNano() / 1e6
+							timestampStr := fmt.Sprintf("%d", timestamp)
+							val := TbzDiv(currentItem.Value, findItem.Value)
+
+							count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
+							if err != nil && err.Error() != utils.ErrNoRow() {
+								return err
+							}
+							if count <= 0 {
+								addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+								isAdd = true
+							} else {
+								err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
+								if err != nil {
+									return err
+								}
+							}
+							break
+						} else {
+							if i >= 1 {
+								preDateDay = preDate.AddDate(0, 0, -i)
+								preDateDayStr = nextDateDay.Format(utils.FormatDate)
+							}
+							if findItem, ok := dataMap[preDateDayStr]; ok { //上一年同期->上一个月找到
+								timestamp := currentDate.UnixNano() / 1e6
+								timestampStr := fmt.Sprintf("%d", timestamp)
+								val := TbzDiv(currentItem.Value, findItem.Value)
+
+								count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
+								if err != nil && err.Error() != utils.ErrNoRow() {
+									return err
+								}
+								if count <= 0 {
+									addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+									isAdd = true
+								} else {
+									err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
+									if err != nil {
+										return err
+									}
+								}
+							}
+							break
+						}
+					}
+				}
+			}
+		}
+	}
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			return err
+		}
+	}
+	return
+}
+
+type EdbInfoCalculateTbzDetail struct {
+	EdbInfoCalculateTbzId int       `orm:"column(edb_info_calculate_tbz_id);pk"`
+	EdbInfoId             int       `description:"指标id"`
+	EdbCode               string    `description:"指标编码"`
+	FromEdbInfoId         int       `description:"计算指标id"`
+	FromEdbCode           string    `description:"计算指标编码"`
+	FromEdbName           string    `description:"计算指标名称"`
+	FromSource            int       `description:"计算指标来源"`
+	FromSourceName        string    `description:"计算指标来源名称"`
+	FromTag               string    `description:"来源指标标签"`
+	Sort                  int       `description:"计算指标名称排序"`
+	CreateTime            time.Time `description:"创建时间"`
+	ModifyTime            time.Time `description:"修改时间"`
+	StartDate             string    `description:"开始日期"`
+	EndDate               string    `description:"结束日期"`
+}
+
+func GetEdbInfoCalculateTbzDetail(edbInfoId int) (item *EdbInfoCalculateTbzDetail, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_data_calculate_tbz AS a
+			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
+			WHERE a.edb_info_id=? `
+	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	return
+}
+
+func GetEdbDataCalculateTbzByCodeAndDate(edbCode string, startDate string) (count int, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT COUNT(1) AS count FROM edb_data_calculate_tbz WHERE edb_code=? AND data_time=? `
+	err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
+	return
+}
+
+func ModifyEdbDataCalculateTbz(edbInfoId int64, dataTime string, value float64) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` UPDATE edb_data_calculate_tbz SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
+	return
+}

+ 310 - 0
models/data_manage/edb_info_calculate_tcz.go

@@ -0,0 +1,310 @@
+package data_manage
+
+import (
+	"fmt"
+	"github.com/shopspring/decimal"
+	"hongze/hongze_task/utils"
+	"rdluck_tools/orm"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type EdbInfoCalculateTcz struct {
+	EdbInfoCalculateTbzId int       `orm:"column(edb_info_calculate_tcz_id);pk"`
+	EdbInfoId             int       `description:"指标id"`
+	EdbCode               string    `description:"指标编码"`
+	FromEdbInfoId         int       `description:"计算指标id"`
+	FromEdbCode           string    `description:"计算指标编码"`
+	FromEdbName           string    `description:"计算指标名称"`
+	FromSource            int       `description:"计算指标来源"`
+	FromSourceName        string    `description:"计算指标来源名称"`
+	FromTag               string    `description:"来源指标标签"`
+	Sort                  int       `description:"计算指标名称排序"`
+	CreateTime            time.Time `description:"创建时间"`
+	ModifyTime            time.Time `description:"修改时间"`
+}
+
+
+func TczSub(a, b float64) float64 {
+	af := decimal.NewFromFloat(float64(a))
+	fmt.Println(af)
+	bf := decimal.NewFromFloat(float64(b))
+	val, _ := af.Sub(bf).Float64()
+	return val
+}
+
+//刷新同差值数据
+func RefreshCalculateTcz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	o.Begin()
+	defer func() {
+		if err != nil {
+			o.Rollback()
+		} else {
+			o.Commit()
+		}
+	}()
+
+	if err != nil {
+		return
+	}
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+	//计算数据
+
+	//计算数据
+	var condition string
+	var pars []interface{}
+	condition += " AND edb_info_id=? "
+	pars = append(pars, edbInfoId)
+
+	if startDate != "" {
+		condition += " AND data_time>=? "
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		condition += " AND data_time<=? "
+		pars = append(pars, endDate)
+	}
+
+	dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 0)
+	if err != nil {
+		return err
+	}
+	var dateArr []string
+	dataMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range dataList {
+		dateArr = append(dateArr, v.DataTime)
+		dataMap[v.DataTime] = v
+	}
+
+	addSql := ` INSERT INTO edb_data_calculate_tcz(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	var isAdd bool
+	for ak, av := range dateArr {
+		fmt.Println(ak, av)
+		currentItem := dataMap[av]
+		if currentItem != nil {
+			//当前日期
+			currentDate, err := time.Parse(utils.FormatDate, av)
+			if err != nil {
+				return err
+			}
+			//上一年的日期
+			preDate := currentDate.AddDate(-1, 0, 0)
+			preDateStr := preDate.Format(utils.FormatDate)
+			if findItem, ok := dataMap[preDateStr]; ok { //上一年同期找到
+				//dataTime, _ := time.Parse(utils.FormatDate, date)
+				timestamp := currentDate.UnixNano() / 1e6
+				timestampStr := fmt.Sprintf("%d", timestamp)
+				val := TczSub(currentItem.Value, findItem.Value)
+
+				count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
+				if err != nil && err.Error() != utils.ErrNoRow() {
+					return err
+				}
+				if count <= 0 {
+					addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+					isAdd = true
+				} else {
+					err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
+					if err != nil {
+						return err
+					}
+				}
+				utils.FileLog.Info("同期找到:" + av + ";" + preDateStr)
+				continue
+			} else {
+				if fromEdbInfo.Frequency == "月度" { //向上和向下,各找一个月
+					nextDateDay := preDate.AddDate(0, 1, 0)
+					nextDateDayStr := nextDateDay.Format(utils.FormatDate)
+
+					preDateDay := preDate.AddDate(0, -1, 0)
+					preDateDayStr := preDateDay.Format(utils.FormatDate)
+
+					for i := 0; i <= 6; i++ {
+						if i >= 1 {
+							nextDateDay = nextDateDay.AddDate(0, 0, i)
+							nextDateDayStr = nextDateDay.Format(utils.FormatDate)
+						}
+						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
+							timestamp := currentDate.UnixNano() / 1e6
+							timestampStr := fmt.Sprintf("%d", timestamp)
+							val := TczSub(currentItem.Value, findItem.Value)
+
+							count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
+							if err != nil && err.Error() != utils.ErrNoRow() {
+								return err
+							}
+							if count <= 0 {
+								addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+								isAdd = true
+							} else {
+								err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
+								if err != nil {
+									return err
+								}
+							}
+							break
+						} else {
+							if i >= 1 {
+								preDateDay = preDate.AddDate(0, 0, -i)
+								preDateDayStr = nextDateDay.Format(utils.FormatDate)
+							}
+							if findItem, ok := dataMap[preDateDayStr]; ok { //上一年同期->上一个月找到
+								timestamp := currentDate.UnixNano() / 1e6
+								timestampStr := fmt.Sprintf("%d", timestamp)
+								val := TczSub(currentItem.Value, findItem.Value)
+
+								count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
+								if err != nil && err.Error() != utils.ErrNoRow() {
+									return err
+								}
+								if count <= 0 {
+									addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+									isAdd = true
+								} else {
+									err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
+									if err != nil {
+										return err
+									}
+								}
+							}
+							break
+						}
+					}
+				} else if fromEdbInfo.Frequency == "季度" || fromEdbInfo.Frequency == "年度" {
+					if findItem, ok := dataMap[preDateStr]; ok { //上一年同期->下一个月找到
+						timestamp := currentDate.UnixNano() / 1e6
+						timestampStr := fmt.Sprintf("%d", timestamp)
+						val := TczSub(currentItem.Value, findItem.Value)
+
+						count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
+						if err != nil && err.Error() != utils.ErrNoRow() {
+							return err
+						}
+						if count <= 0 {
+							addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+							isAdd = true
+						} else {
+							err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
+							if err != nil {
+								return err
+							}
+						}
+						break
+					}
+				} else {
+					nextDateDay := preDate.AddDate(0, 0, 1)
+					nextDateDayStr := nextDateDay.Format(utils.FormatDate)
+
+					preDateDay := preDate.AddDate(0, 0, -1)
+					preDateDayStr := preDateDay.Format(utils.FormatDate)
+
+					for i := 0; i < 35; i++ {
+						if i >= 1 {
+							nextDateDay = nextDateDay.AddDate(0, 0, i)
+							nextDateDayStr = nextDateDay.Format(utils.FormatDate)
+						}
+						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
+							timestamp := currentDate.UnixNano() / 1e6
+							timestampStr := fmt.Sprintf("%d", timestamp)
+							val := TczSub(currentItem.Value, findItem.Value)
+
+							count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
+							if err != nil && err.Error() != utils.ErrNoRow() {
+								return err
+							}
+							if count <= 0 {
+								addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+								isAdd = true
+							} else {
+								err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
+								if err != nil {
+									return err
+								}
+							}
+							break
+						} else {
+							if i >= 1 {
+								preDateDay = preDate.AddDate(0, 0, -i)
+								preDateDayStr = nextDateDay.Format(utils.FormatDate)
+							}
+							if findItem, ok := dataMap[preDateDayStr]; ok { //上一年同期->上一个月找到
+								timestamp := currentDate.UnixNano() / 1e6
+								timestampStr := fmt.Sprintf("%d", timestamp)
+								val := TczSub(currentItem.Value, findItem.Value)
+
+								count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
+								if err != nil && err.Error() != utils.ErrNoRow() {
+									return err
+								}
+								if count <= 0 {
+									addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
+									isAdd = true
+								} else {
+									err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
+									if err != nil {
+										return err
+									}
+								}
+							}
+							break
+						}
+					}
+				}
+			}
+		}
+	}
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			return err
+		}
+	}
+	return
+}
+
+type EdbInfoCalculateTczDetail struct {
+	EdbInfoCalculateTczId int       `orm:"column(edb_info_calculate_tcz_id);pk"`
+	EdbInfoId             int       `description:"指标id"`
+	EdbCode               string    `description:"指标编码"`
+	FromEdbInfoId         int       `description:"计算指标id"`
+	FromEdbCode           string    `description:"计算指标编码"`
+	FromEdbName           string    `description:"计算指标名称"`
+	FromSource            int       `description:"计算指标来源"`
+	FromSourceName        string    `description:"计算指标来源名称"`
+	FromTag               string    `description:"来源指标标签"`
+	Sort                  int       `description:"计算指标名称排序"`
+	CreateTime            time.Time `description:"创建时间"`
+	ModifyTime            time.Time `description:"修改时间"`
+	StartDate             string    `description:"开始日期"`
+	EndDate               string    `description:"结束日期"`
+}
+
+func GetEdbInfoCalculateTczDetail(edbInfoId int) (item *EdbInfoCalculateTczDetail, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_info_calculate_tcz AS a
+			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
+			WHERE a.edb_info_id=? `
+	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	return
+}
+
+func GetEdbDataCalculateTczByCodeAndDate(edbCode string, startDate string) (count int, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT COUNT(1) AS count FROM edb_info_calculate_tcz WHERE edb_code=? AND data_time=? `
+	err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
+	return
+}
+
+func ModifyEdbDataCalculateTcz(edbInfoId int64, dataTime string, value float64) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` UPDATE edb_info_calculate_tcz SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
+	return
+}

+ 3 - 3
services/data/data_calculate.go

@@ -33,7 +33,7 @@ func RefreshCalculate(edbInfoIdArr []*data_manage.EdbInfo, edbInfoId int, edbCod
 			condition += " AND data_time<=? "
 			pars = append(pars, endDate)
 		}
-		dataList, err := data_manage.GetEdbDataListAll(condition, pars, v.Source)
+		dataList, err := data_manage.GetEdbDataListAll(condition, pars, v.Source, 1)
 		if err != nil {
 			return err
 		}
@@ -82,7 +82,7 @@ func RefreshCalculate(edbInfoIdArr []*data_manage.EdbInfo, edbInfoId int, edbCod
 			if err != nil && err.Error() != utils.ErrNoRow() {
 				return err
 			}
-			if count<=0 {//需要存入的数据
+			if count <= 0 { //需要存入的数据
 				dataTime, _ := time.Parse(utils.FormatDate, sk)
 				timestamp := dataTime.UnixNano() / 1e6
 				timeStr := fmt.Sprintf("%d", timestamp)
@@ -92,7 +92,7 @@ func RefreshCalculate(edbInfoIdArr []*data_manage.EdbInfo, edbInfoId int, edbCod
 				addSql += "," + "'" + timeStr + "'"
 				addSql += "),"
 				isAdd = true
-			}else{
+			} else {
 				err = data_manage.ModifyEdbDataCalculate(int64(edbInfoId), sk, calVal)
 				if err != nil {
 					return err

+ 109 - 0
services/data/edb_info.go

@@ -6,6 +6,7 @@ import (
 	"hongze/hongze_task/models/data_manage"
 	"hongze/hongze_task/utils"
 	"rdluck_tools/http"
+	"strconv"
 	"time"
 )
 
@@ -213,3 +214,111 @@ func RefreshDataFromCalculate() (err error) {
 	}
 	return err
 }
+
+func RefreshDataFromCalculateAll() (err error) {
+	defer func() {
+		if err != nil {
+			utils.FileLog.Info("RefreshDataFromCalculateAll Err:" + err.Error())
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromCalculateAll ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	condition += " AND edb_type=? "
+	pars = append(pars, 2)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars)
+	if err != nil {
+		return err
+	}
+	for _, v := range items {
+		edbInfoId := v.EdbInfoId
+		edbCode := v.EdbCode
+
+		if v.Source == utils.DATA_SOURCE_CALCULATE {
+			startDate := v.EndDate.AddDate(0, 0, -3).Format(utils.FormatDate)
+			endDate := time.Now().Format(utils.FormatDate)
+			var edbInfoIdBytes []string
+			calculateMap, err := data_manage.GetEdbInfoCalculateDetail(int(v.EdbInfoId))
+			if err != nil {
+				return err
+			}
+			var formulaStr string
+			edbInfoList := make([]*data_manage.EdbInfo, 0)
+			for _, v := range calculateMap {
+				formulaStr += v.FromTag + ","
+				edbInfoIdBytes = append(edbInfoIdBytes, v.FromTag)
+				edbInfo, _ := data_manage.GetEdbInfoById(v.EdbInfoId)
+				edbInfoList = append(edbInfoList, edbInfo)
+			}
+			err = RefreshCalculate(edbInfoList, edbInfoId, edbCode, v.CalculateFormula, startDate, endDate, edbInfoIdBytes)
+			if err != nil {
+				return err
+			}
+		} else if v.Source == utils.DATA_SOURCE_CALCULATE_LJZZY {
+			calculateLjzzy, err := data_manage.GetEdbInfoCalculateLjzzyDetail(edbInfoId)
+			if err != nil {
+				return err
+			}
+			fromEdbInfo, err := data_manage.GetEdbInfoById(calculateLjzzy.FromEdbInfoId)
+			if err != nil {
+				return err
+			}
+			year := time.Now().Year()
+			startDate := strconv.Itoa(year) + "-01" + "-01"
+			endDate := time.Now().Format(utils.FormatDate)
+			err = data_manage.RefreshCalculateLjzzy(edbInfoId, fromEdbInfo, edbCode, startDate, endDate)
+			if err != nil {
+				return err
+			}
+		} else if v.Source == utils.DATA_SOURCE_CALCULATE_TBZ {
+			calculateTbz, err := data_manage.GetEdbInfoCalculateTbzDetail(edbInfoId)
+			if err != nil {
+				return err
+			}
+			fromEdbInfo, err := data_manage.GetEdbInfoById(calculateTbz.FromEdbInfoId)
+			if err != nil {
+				return err
+			}
+			startDate := time.Now().AddDate(-1, -2, 0).Format(utils.FormatDate)
+			endDate := time.Now().Format(utils.FormatDate)
+			err = data_manage.RefreshCalculateTbz(edbInfoId, fromEdbInfo, calculateTbz.EdbCode, startDate, endDate)
+			if err != nil {
+				return err
+			}
+		} else if v.Source == utils.DATA_SOURCE_CALCULATE_TCZ {
+			calculateTcz, err := data_manage.GetEdbInfoCalculateTczDetail(edbInfoId)
+			if err != nil {
+				return err
+			}
+			fromEdbInfo, err := data_manage.GetEdbInfoById(calculateTcz.FromEdbInfoId)
+			if err != nil {
+				return err
+			}
+			startDate := time.Now().AddDate(-1, -2, 0).Format(utils.FormatDate)
+			endDate := time.Now().Format(utils.FormatDate)
+			err = data_manage.RefreshCalculateTcz(edbInfoId, fromEdbInfo, calculateTcz.EdbCode, startDate, endDate)
+			if err != nil {
+				return err
+			}
+		} else if v.Source == utils.DATA_SOURCE_CALCULATE_NSZYDPJJS {
+			calculateNszydpjjs, err := data_manage.GetEdbInfoCalculateNszydpjjsDetail(edbInfoId)
+			if err != nil {
+				return err
+			}
+			fromEdbInfo, err := data_manage.GetEdbInfoById(calculateNszydpjjs.FromEdbInfoId)
+			if err != nil {
+				return err
+			}
+			formulaInt, _ := strconv.Atoi(v.CalculateFormula)
+			err = data_manage.RefreshCalculateNszydpjjs(edbInfoId, v.Source, formulaInt, fromEdbInfo, calculateNszydpjjs.EdbCode)
+			if err != nil {
+				return err
+			}
+		} else {
+			msg := "刷新失败,无效的指标渠道"
+			err = errors.New(msg)
+			return err
+		}
+	}
+	return err
+}

+ 0 - 229
services/data/edb_info_calculate_ljzzy.go

@@ -1,229 +0,0 @@
-package data
-//
-//import (
-//	"fmt"
-//	"hongze/hongze_task/models/data_manage"
-//	"hongze/hongze_task/utils"
-//	"rdluck_tools/orm"
-//	"strconv"
-//	"strings"
-//	"time"
-//)
-//
-//type EdbInfoCalculateLjzzy struct {
-//	EdbInfoCalculateLjzzyId int       `orm:"column(edb_info_calculate_ljzzy_id);pk"`
-//	EdbInfoId               int       `description:"指标id"`
-//	EdbCode                 string    `description:"指标编码"`
-//	FromEdbInfoId           int       `description:"计算指标id"`
-//	FromEdbCode             string    `description:"计算指标编码"`
-//	FromEdbName             string    `description:"计算指标名称"`
-//	FromSource              int       `description:"计算指标来源"`
-//	FromSourceName          string    `description:"计算指标来源名称"`
-//	FromTag                 string    `description:"来源指标标签"`
-//	Sort                    int       `description:"计算指标名称排序"`
-//	CreateTime              time.Time `description:"创建时间"`
-//	ModifyTime              time.Time `description:"修改时间"`
-//}
-//
-//
-////刷新计算指标数据
-//func RefreshDataFromCalculateLjzzy() (err error) {
-//	defer func() {
-//		if err != nil {
-//			fmt.Println("RefreshDataFromCalculateLjzzy Err:" + err.Error())
-//			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromCalculateLjzzy ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-//		}
-//	}()
-//	var condition string
-//	var pars []interface{}
-//	condition += " AND source=? "
-//	pars = append(pars, utils.DATA_SOURCE_CALCULATE_NSZYDPJJS)
-//	items, err := data_manage.GetEdbInfoByCondition(condition, pars)
-//	if err != nil {
-//		return err
-//	}
-//
-//	for _, v := range items {
-//		year := time.Now().Year()
-//		startDate := strconv.Itoa(year) + "-01" + "-01"
-//		endDate := time.Now().Format(utils.FormatDate)
-//
-//		fromEdbInfo, err := data_manage.GetEdbInfoById(v.FromEdbInfoId)
-//		if err != nil {
-//			br.Msg = "刷新失败"
-//			br.Msg = "获取计算关联指标失败 Err:" + err.Error() + ";"
-//			return
-//		}
-//		err = RefreshCalculateLjzzy(v.EdbInfoId, v.EdbCode, v.CalculateFormula, startDate, endDate, edbInfoIdBytes)
-//		if err != nil {
-//			return err
-//		}
-//	}
-//	return err
-//}
-//
-//
-////刷新累计值转月值数据
-//func RefreshCalculateLjzzy(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	o.Begin()
-//	defer func() {
-//		if err != nil {
-//			o.Rollback()
-//		} else {
-//			o.Commit()
-//		}
-//	}()
-//
-//	if err != nil {
-//		return
-//	}
-//	edbInfoIdStr := strconv.Itoa(edbInfoId)
-//	//计算数据
-//	var condition string
-//	var pars []interface{}
-//	condition += " AND edb_info_id=? "
-//	pars = append(pars, fromEdbInfo.EdbInfoId)
-//
-//	if startDate != "" {
-//		condition += " AND data_time>=? "
-//		pars = append(pars, startDate)
-//	}
-//	if endDate != "" {
-//		condition += " AND data_time<=? "
-//		pars = append(pars, endDate)
-//	}
-//
-//	dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 1)
-//	if err != nil {
-//		return err
-//	}
-//
-//	yearMap := make(map[int]map[int]*EdbInfoSearchData)
-//	dataLen := len(dataList)
-//	for i := 0; i < dataLen; i++ {
-//		item := dataList[i]
-//		//日其中获取年
-//		itemDate, err := time.Parse(utils.FormatDate, item.DataTime)
-//		if err != nil {
-//			return err
-//		}
-//		year := itemDate.Year()
-//		month := int(itemDate.Month())
-//		if monthMap, yok := yearMap[year]; yok {
-//			monthMap[month] = item
-//			yearMap[year] = monthMap
-//		} else {
-//			monthMap = make(map[int]*EdbInfoSearchData)
-//			monthMap[month] = item
-//			yearMap[year] = monthMap
-//		}
-//	}
-//
-//	addSql := ` INSERT INTO edb_data_calculate_ljzzy(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
-//	nowStr := time.Now().Format(utils.FormatDateTime)
-//	var isAdd bool
-//
-//	for yk, yv := range yearMap {
-//		if _, mok := yv[2]; !mok {
-//			//fmt.Println(yk, yv, "continue")
-//			continue
-//		}
-//		for i := 1; i <= 12; i++ {
-//			fmt.Println(yk, i, yv[i])
-//			dataCurrentItem := yv[i]
-//			var date string
-//			var val float64
-//			if i == 1 || i == 2 {
-//				dataTwoItem := yv[2]
-//				if dataCurrentItem != nil && dataTwoItem != nil {
-//					date = dataCurrentItem.DataTime
-//					val = dataTwoItem.Value
-//				}
-//			} else {
-//				dataPreItem := yv[i-1]
-//				if dataCurrentItem != nil && dataPreItem != nil {
-//					date = dataCurrentItem.DataTime
-//					val = dataCurrentItem.Value - dataPreItem.Value
-//				}
-//			}
-//			if date != "" {
-//				//判断数据是否存在
-//				count, err := GetEdbDataCalculateLjzzyByCodeAndDate(edbCode, date)
-//				if err != nil && err.Error() != utils.ErrNoRow() {
-//					return err
-//				}
-//				if count <= 0 {
-//					dataTime, _ := time.Parse(utils.FormatDate, date)
-//					timestamp := dataTime.UnixNano() / 1e6
-//					timeStr := fmt.Sprintf("%d", timestamp)
-//
-//					addSql += "("
-//					addSql += edbInfoIdStr + "," + "'" + edbCode + "'" + "," + "'" + date + "'" + "," + utils.SubFloatToString(val, 4) + "," + "'" + nowStr + "'" +
-//						"," + "'" + nowStr + "'" + "," + "1"
-//					addSql += "," + "'" + timeStr + "'"
-//					addSql += "),"
-//					isAdd = true
-//				} else {
-//					val = utils.FixFloat(val, 4)
-//					err = ModifyEdbDataCalculateLjzzy(int64(edbInfoId), date, val)
-//					if err != nil {
-//						return err
-//					}
-//				}
-//			}
-//		}
-//	}
-//	if isAdd {
-//		addSql = strings.TrimRight(addSql, ",")
-//		_, err = o.Raw(addSql).Exec()
-//		if err != nil {
-//			return err
-//		}
-//	}
-//	return
-//}
-//
-//type EdbInfoCalculateLjzzyDetail struct {
-//	EdbInfoCalculateLjzzyId int       `orm:"column(edb_info_calculate_ljzzy_id);pk"`
-//	EdbInfoId               int       `description:"指标id"`
-//	EdbCode                 string    `description:"指标编码"`
-//	FromEdbInfoId           int       `description:"计算指标id"`
-//	FromEdbCode             string    `description:"计算指标编码"`
-//	FromEdbName             string    `description:"计算指标名称"`
-//	FromSource              int       `description:"计算指标来源"`
-//	FromSourceName          string    `description:"计算指标来源名称"`
-//	FromTag                 string    `description:"来源指标标签"`
-//	Sort                    int       `description:"计算指标名称排序"`
-//	CreateTime              time.Time `description:"创建时间"`
-//	ModifyTime              time.Time `description:"修改时间"`
-//	StartDate               string    `description:"开始日期"`
-//	EndDate                 string    `description:"结束日期"`
-//}
-//
-//func GetEdbInfoCalculateLjzzyDetailDetail(edbInfoId int) (item *EdbInfoCalculateLjzzyDetail, err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_info_calculate_ljzzy AS a
-//			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
-//			WHERE a.edb_info_id=? `
-//	err = o.Raw(sql, edbInfoId).QueryRow(&item)
-//	return
-//}
-//
-//func GetEdbDataCalculateLjzzyByCodeAndDate(edbCode string, startDate string) (count int, err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	sql := ` SELECT COUNT(1) AS count FROM edb_info_calculate_ljzzy WHERE edb_code=? AND data_time=? `
-//	err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
-//	return
-//}
-//
-//func ModifyEdbDataCalculateLjzzy(edbInfoId int64, dataTime string, value float64) (err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	sql := ` UPDATE edb_info_calculate_ljzzy SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
-//	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
-//	return
-//}

+ 0 - 164
services/data/edb_info_calculate_nszydpjjs.go

@@ -1,164 +0,0 @@
-package data
-//
-//import (
-//	"fmt"
-//	"github.com/shopspring/decimal"
-//	"hongze/hongze_task/utils"
-//	"rdluck_tools/orm"
-//	"strconv"
-//	"strings"
-//	"time"
-//)
-//
-//type EdbInfoCalculateNszydpjjs struct {
-//	EdbInfoCalculateNszydpjjsId int       `orm:"column(edb_info_calculate_nszydpjjs_id);pk"`
-//	EdbInfoId                   int       `description:"指标id"`
-//	EdbCode                     string    `description:"指标编码"`
-//	FromEdbInfoId               int       `description:"计算指标id"`
-//	FromEdbCode                 string    `description:"计算指标编码"`
-//	FromEdbName                 string    `description:"计算指标名称"`
-//	FromSource                  int       `description:"计算指标来源"`
-//	FromSourceName              string    `description:"计算指标来源名称"`
-//	FromTag                     string    `description:"来源指标标签"`
-//	Sort                        int       `description:"计算指标名称排序"`
-//	CreateTime                  time.Time `description:"创建时间"`
-//	ModifyTime                  time.Time `description:"修改时间"`
-//}
-//
-////刷新 N数值移动平均计算
-//func RefreshCalculateNszydpjjs(edbInfoId, source, formulaInt int, fromEdbInfo *EdbInfo, edbCode string) (err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	o.Begin()
-//	defer func() {
-//		if err != nil {
-//			o.Rollback()
-//		} else {
-//			o.Commit()
-//		}
-//	}()
-//
-//	if err != nil {
-//		return
-//	}
-//	edbInfoIdStr := strconv.Itoa(edbInfoId)
-//
-//	//计算数据
-//	var condition string
-//	var pars []interface{}
-//	condition += " AND edb_info_id=? "
-//	pars = append(pars, edbInfoId)
-//
-//	dataList, err := GetEdbDataListAll(condition, pars, source, 0)
-//	if err != nil {
-//		return err
-//	}
-//
-//	existDataMap := make(map[string]*EdbInfoSearchData)
-//	for _, v := range dataList {
-//		existDataMap[v.DataTime] = v
-//	}
-//
-//	//计算来源数据
-//	var fromCondition string
-//	var fromPars []interface{}
-//	condition += " AND edb_info_id=? "
-//	pars = append(pars, fromEdbInfo.EdbInfoId)
-//
-//	fromDataList, err := GetEdbDataListAll(fromCondition, fromPars, fromEdbInfo.Source, 0)
-//	if err != nil {
-//		return err
-//	}
-//
-//	var fromDateArr []string
-//	fromDataMap := make(map[string]*EdbInfoSearchData)
-//	for _, v := range fromDataList {
-//		fromDateArr = append(fromDateArr, v.DataTime)
-//		fromDataMap[v.DataTime] = v
-//	}
-//
-//	addSql := ` INSERT INTO edb_data_calculate_nszydpjjs(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
-//	var isAdd bool
-//
-//	arrLen := len(fromDateArr)
-//	for ak, av := range fromDateArr {
-//		if _, existOk := existDataMap[av]; !existOk {
-//			//处理第一个值
-//			var valArr []float64
-//			if findItem, ok := fromDataMap[av]; ok {
-//				valArr = append(valArr, findItem.Value)
-//			} else {
-//				continue
-//			}
-//			if ak+1 != arrLen {
-//				//处理除第一个值之外的N-1个值
-//				for i := 1; i < formulaInt; i++ {
-//					arrIndex := ak + i
-//					if arrIndex >= arrLen {
-//						break
-//					}
-//					arrVal := fromDateArr[arrIndex]
-//					if findItem, ok := fromDataMap[arrVal]; ok {
-//						valArr = append(valArr, findItem.Value)
-//					} else {
-//						continue
-//					}
-//				}
-//			}
-//			valArrLen := len(valArr)
-//			var totalVal float64
-//			for _, v := range valArr {
-//				totalVal = totalVal + v
-//			}
-//			af := decimal.NewFromFloat(totalVal)
-//			bf := decimal.NewFromFloat(float64(valArrLen))
-//			val, _ := af.Div(bf).Float64()
-//			currentDate, err := time.Parse(utils.FormatDate, av)
-//			if err != nil {
-//				return err
-//			}
-//
-//			timestamp := currentDate.UnixNano() / 1e6
-//			timestampStr := fmt.Sprintf("%d", timestamp)
-//
-//			addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//			isAdd = true
-//		}
-//	}
-//
-//	if isAdd {
-//		addSql = strings.TrimRight(addSql, ",")
-//		_, err = o.Raw(addSql).Exec()
-//		if err != nil {
-//			return err
-//		}
-//	}
-//	return
-//}
-//
-//type EdbInfoCalculateNszydpjjsDetail struct {
-//	EdbInfoCalculateNszydpjjsId int       `orm:"column(edb_info_calculate_nszydpjjs_id);pk"`
-//	EdbInfoId                   int       `description:"指标id"`
-//	EdbCode                     string    `description:"指标编码"`
-//	FromEdbInfoId               int       `description:"计算指标id"`
-//	FromEdbCode                 string    `description:"计算指标编码"`
-//	FromEdbName                 string    `description:"计算指标名称"`
-//	FromSource                  int       `description:"计算指标来源"`
-//	FromSourceName              string    `description:"计算指标来源名称"`
-//	FromTag                     string    `description:"来源指标标签"`
-//	Sort                        int       `description:"计算指标名称排序"`
-//	CreateTime                  time.Time `description:"创建时间"`
-//	ModifyTime                  time.Time `description:"修改时间"`
-//	StartDate                   string    `description:"开始日期"`
-//	EndDate                     string    `description:"结束日期"`
-//}
-//
-//func GetEdbInfoCalculateNszydpjjsDetail(edbInfoId int) (item *EdbInfoCalculateNszydpjjsDetail, err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_info_calculate_nszydpjjs AS a
-//			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
-//			WHERE a.edb_info_id=? `
-//	err = o.Raw(sql, edbInfoId).QueryRow(&item)
-//	return
-//}

+ 0 - 319
services/data/edb_info_calculate_tbz.go

@@ -1,319 +0,0 @@
-package data
-//
-//import (
-//	"fmt"
-//	"github.com/shopspring/decimal"
-//	"hongze/hongze_task/utils"
-//	"rdluck_tools/orm"
-//	"strconv"
-//	"strings"
-//	"time"
-//)
-//
-//type EdbInfoCalculateTbz struct {
-//	EdbInfoCalculateTbzId int       `orm:"column(edb_info_calculate_tbz_id);pk"`
-//	EdbInfoId             int       `description:"指标id"`
-//	EdbCode               string    `description:"指标编码"`
-//	FromEdbInfoId         int       `description:"计算指标id"`
-//	FromEdbCode           string    `description:"计算指标编码"`
-//	FromEdbName           string    `description:"计算指标名称"`
-//	FromSource            int       `description:"计算指标来源"`
-//	FromSourceName        string    `description:"计算指标来源名称"`
-//	FromTag               string    `description:"来源指标标签"`
-//	Sort                  int       `description:"计算指标名称排序"`
-//	CreateTime            time.Time `description:"创建时间"`
-//	ModifyTime            time.Time `description:"修改时间"`
-//}
-//
-//func GetAddSql(edbInfoId, edbCode, dataTime, timestampStr string, value float64) (addSql string) {
-//	nowStr := time.Now().Format(utils.FormatDateTime)
-//	addSql += "("
-//	addSql += edbInfoId + "," + "'" + edbCode + "'" + "," + "'" + dataTime + "'" + "," + utils.SubFloatToString(value, 4) + "," + "'" + nowStr + "'" +
-//		"," + "'" + nowStr + "'" + "," + "1"
-//	addSql += "," + "'" + timestampStr + "'"
-//	addSql += "),"
-//	return
-//}
-//
-//func TbzDiv(a, b float64) float64 {
-//	af := decimal.NewFromFloat(float64(a))
-//	bf := decimal.NewFromFloat(float64(b))
-//	val, _ := af.Div(bf).Float64()
-//	val = val - 1
-//	return val
-//}
-//
-////刷新同比值数据
-//func RefreshCalculateTbz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	o.Begin()
-//	defer func() {
-//		if err != nil {
-//			o.Rollback()
-//		} else {
-//			o.Commit()
-//		}
-//	}()
-//
-//	if err != nil {
-//		return
-//	}
-//	edbInfoIdStr := strconv.Itoa(edbInfoId)
-//	//计算数据
-//
-//	//计算数据
-//	var condition string
-//	var pars []interface{}
-//	condition += " AND edb_info_id=? "
-//	pars = append(pars, edbInfoId)
-//
-//	if startDate != "" {
-//		condition += " AND data_time>=? "
-//		pars = append(pars, startDate)
-//	}
-//	if endDate != "" {
-//		condition += " AND data_time<=? "
-//		pars = append(pars, endDate)
-//	}
-//
-//	dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 0)
-//	if err != nil {
-//		return err
-//	}
-//	var dateArr []string
-//	dataMap := make(map[string]*EdbInfoSearchData)
-//	for _, v := range dataList {
-//		dateArr = append(dateArr, v.DataTime)
-//		dataMap[v.DataTime] = v
-//	}
-//
-//	addSql := ` INSERT INTO edb_data_calculate_tbz(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
-//	var isAdd bool
-//	for ak, av := range dateArr {
-//		fmt.Println(ak, av)
-//		currentItem := dataMap[av]
-//		if currentItem != nil {
-//			//当前日期
-//			currentDate, err := time.Parse(utils.FormatDate, av)
-//			if err != nil {
-//				return err
-//			}
-//			//上一年的日期
-//			preDate := currentDate.AddDate(-1, 0, 0)
-//			preDateStr := preDate.Format(utils.FormatDate)
-//			if findItem, ok := dataMap[preDateStr]; ok { //上一年同期找到
-//				//dataTime, _ := time.Parse(utils.FormatDate, date)
-//				timestamp := currentDate.UnixNano() / 1e6
-//				timestampStr := fmt.Sprintf("%d", timestamp)
-//				val := TbzDiv(currentItem.Value, findItem.Value)
-//
-//				count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
-//				if err != nil && err.Error() != utils.ErrNoRow() {
-//					return err
-//				}
-//				if count <= 0 {
-//					addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//					isAdd = true
-//				} else {
-//					err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
-//					if err != nil {
-//						return err
-//					}
-//				}
-//				utils.FileLog.Info("同期找到:" + av + ";" + preDateStr)
-//				continue
-//			} else {
-//				if fromEdbInfo.Frequency == "月度" { //向上和向下,各找一个月
-//					nextDateDay := preDate.AddDate(0, 1, 0)
-//					nextDateDayStr := nextDateDay.Format(utils.FormatDate)
-//
-//					preDateDay := preDate.AddDate(0, -1, 0)
-//					preDateDayStr := preDateDay.Format(utils.FormatDate)
-//
-//					for i := 0; i <= 6; i++ {
-//						if i >= 1 {
-//							nextDateDay = nextDateDay.AddDate(0, 0, i)
-//							nextDateDayStr = nextDateDay.Format(utils.FormatDate)
-//						}
-//						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
-//							timestamp := currentDate.UnixNano() / 1e6
-//							timestampStr := fmt.Sprintf("%d", timestamp)
-//							val := TbzDiv(currentItem.Value, findItem.Value)
-//
-//							count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
-//							if err != nil && err.Error() != utils.ErrNoRow() {
-//								return err
-//							}
-//							if count <= 0 {
-//								addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//								isAdd = true
-//							} else {
-//								err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
-//								if err != nil {
-//									return err
-//								}
-//							}
-//							break
-//						} else {
-//							if i >= 1 {
-//								preDateDay = preDate.AddDate(0, 0, -i)
-//								preDateDayStr = nextDateDay.Format(utils.FormatDate)
-//							}
-//							if findItem, ok := dataMap[preDateDayStr]; ok { //上一年同期->上一个月找到
-//								timestamp := currentDate.UnixNano() / 1e6
-//								timestampStr := fmt.Sprintf("%d", timestamp)
-//								val := TbzDiv(currentItem.Value, findItem.Value)
-//
-//								count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
-//								if err != nil && err.Error() != utils.ErrNoRow() {
-//									return err
-//								}
-//								if count <= 0 {
-//									addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//									isAdd = true
-//								} else {
-//									err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
-//									if err != nil {
-//										return err
-//									}
-//								}
-//							}
-//							break
-//						}
-//					}
-//				} else if fromEdbInfo.Frequency == "季度" || fromEdbInfo.Frequency == "年度" {
-//					if findItem, ok := dataMap[preDateStr]; ok { //上一年同期->下一个月找到
-//						timestamp := currentDate.UnixNano() / 1e6
-//						timestampStr := fmt.Sprintf("%d", timestamp)
-//						val := TbzDiv(currentItem.Value, findItem.Value)
-//
-//						count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
-//						if err != nil && err.Error() != utils.ErrNoRow() {
-//							return err
-//						}
-//						if count <= 0 {
-//							addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//							isAdd = true
-//						} else {
-//							err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
-//							if err != nil {
-//								return err
-//							}
-//						}
-//						break
-//					}
-//				} else {
-//					nextDateDay := preDate.AddDate(0, 0, 1)
-//					nextDateDayStr := nextDateDay.Format(utils.FormatDate)
-//
-//					preDateDay := preDate.AddDate(0, 0, -1)
-//					preDateDayStr := preDateDay.Format(utils.FormatDate)
-//
-//					for i := 0; i < 35; i++ {
-//						if i >= 1 {
-//							nextDateDay = nextDateDay.AddDate(0, 0, i)
-//							nextDateDayStr = nextDateDay.Format(utils.FormatDate)
-//						}
-//						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
-//							timestamp := currentDate.UnixNano() / 1e6
-//							timestampStr := fmt.Sprintf("%d", timestamp)
-//							val := TbzDiv(currentItem.Value, findItem.Value)
-//
-//							count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
-//							if err != nil && err.Error() != utils.ErrNoRow() {
-//								return err
-//							}
-//							if count <= 0 {
-//								addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//								isAdd = true
-//							} else {
-//								err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
-//								if err != nil {
-//									return err
-//								}
-//							}
-//							break
-//						} else {
-//							if i >= 1 {
-//								preDateDay = preDate.AddDate(0, 0, -i)
-//								preDateDayStr = nextDateDay.Format(utils.FormatDate)
-//							}
-//							if findItem, ok := dataMap[preDateDayStr]; ok { //上一年同期->上一个月找到
-//								timestamp := currentDate.UnixNano() / 1e6
-//								timestampStr := fmt.Sprintf("%d", timestamp)
-//								val := TbzDiv(currentItem.Value, findItem.Value)
-//
-//								count, err := GetEdbDataCalculateTbzByCodeAndDate(edbCode, av)
-//								if err != nil && err.Error() != utils.ErrNoRow() {
-//									return err
-//								}
-//								if count <= 0 {
-//									addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//									isAdd = true
-//								} else {
-//									err = ModifyEdbDataCalculateTbz(int64(edbInfoId), av, val)
-//									if err != nil {
-//										return err
-//									}
-//								}
-//							}
-//							break
-//						}
-//					}
-//				}
-//			}
-//		}
-//	}
-//	if isAdd {
-//		addSql = strings.TrimRight(addSql, ",")
-//		_, err = o.Raw(addSql).Exec()
-//		if err != nil {
-//			return err
-//		}
-//	}
-//	return
-//}
-//
-//type EdbInfoCalculateTbzDetail struct {
-//	EdbInfoCalculateTbzId int       `orm:"column(edb_info_calculate_tbz_id);pk"`
-//	EdbInfoId             int       `description:"指标id"`
-//	EdbCode               string    `description:"指标编码"`
-//	FromEdbInfoId         int       `description:"计算指标id"`
-//	FromEdbCode           string    `description:"计算指标编码"`
-//	FromEdbName           string    `description:"计算指标名称"`
-//	FromSource            int       `description:"计算指标来源"`
-//	FromSourceName        string    `description:"计算指标来源名称"`
-//	FromTag               string    `description:"来源指标标签"`
-//	Sort                  int       `description:"计算指标名称排序"`
-//	CreateTime            time.Time `description:"创建时间"`
-//	ModifyTime            time.Time `description:"修改时间"`
-//	StartDate             string    `description:"开始日期"`
-//	EndDate               string    `description:"结束日期"`
-//}
-//
-//func GetEdbInfoCalculateTbzDetailDetail(edbInfoId int) (item *EdbInfoCalculateTbzDetail, err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_data_calculate_tbz AS a
-//			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
-//			WHERE a.edb_info_id=? `
-//	err = o.Raw(sql, edbInfoId).QueryRow(&item)
-//	return
-//}
-//
-//func GetEdbDataCalculateTbzByCodeAndDate(edbCode string, startDate string) (count int, err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	sql := ` SELECT COUNT(1) AS count FROM edb_data_calculate_tbz WHERE edb_code=? AND data_time=? `
-//	err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
-//	return
-//}
-//
-//func ModifyEdbDataCalculateTbz(edbInfoId int64, dataTime string, value float64) (err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	sql := ` UPDATE edb_data_calculate_tbz SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
-//	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
-//	return
-//}

+ 0 - 310
services/data/edb_info_calculate_tcz.go

@@ -1,310 +0,0 @@
-package data
-//
-//import (
-//	"fmt"
-//	"github.com/shopspring/decimal"
-//	"hongze/hongze_task/utils"
-//	"rdluck_tools/orm"
-//	"strconv"
-//	"strings"
-//	"time"
-//)
-//
-//type EdbInfoCalculateTcz struct {
-//	EdbInfoCalculateTbzId int       `orm:"column(edb_info_calculate_tcz_id);pk"`
-//	EdbInfoId             int       `description:"指标id"`
-//	EdbCode               string    `description:"指标编码"`
-//	FromEdbInfoId         int       `description:"计算指标id"`
-//	FromEdbCode           string    `description:"计算指标编码"`
-//	FromEdbName           string    `description:"计算指标名称"`
-//	FromSource            int       `description:"计算指标来源"`
-//	FromSourceName        string    `description:"计算指标来源名称"`
-//	FromTag               string    `description:"来源指标标签"`
-//	Sort                  int       `description:"计算指标名称排序"`
-//	CreateTime            time.Time `description:"创建时间"`
-//	ModifyTime            time.Time `description:"修改时间"`
-//}
-//
-//
-//func TczSub(a, b float64) float64 {
-//	af := decimal.NewFromFloat(float64(a))
-//	fmt.Println(af)
-//	bf := decimal.NewFromFloat(float64(b))
-//	val, _ := af.Sub(bf).Float64()
-//	return val
-//}
-//
-////刷新同差值数据
-//func RefreshCalculateTcz(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	o.Begin()
-//	defer func() {
-//		if err != nil {
-//			o.Rollback()
-//		} else {
-//			o.Commit()
-//		}
-//	}()
-//
-//	if err != nil {
-//		return
-//	}
-//	edbInfoIdStr := strconv.Itoa(edbInfoId)
-//	//计算数据
-//
-//	//计算数据
-//	var condition string
-//	var pars []interface{}
-//	condition += " AND edb_info_id=? "
-//	pars = append(pars, edbInfoId)
-//
-//	if startDate != "" {
-//		condition += " AND data_time>=? "
-//		pars = append(pars, startDate)
-//	}
-//	if endDate != "" {
-//		condition += " AND data_time<=? "
-//		pars = append(pars, endDate)
-//	}
-//
-//	dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 0)
-//	if err != nil {
-//		return err
-//	}
-//	var dateArr []string
-//	dataMap := make(map[string]*EdbInfoSearchData)
-//	for _, v := range dataList {
-//		dateArr = append(dateArr, v.DataTime)
-//		dataMap[v.DataTime] = v
-//	}
-//
-//	addSql := ` INSERT INTO edb_data_calculate_tcz(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
-//	var isAdd bool
-//	for ak, av := range dateArr {
-//		fmt.Println(ak, av)
-//		currentItem := dataMap[av]
-//		if currentItem != nil {
-//			//当前日期
-//			currentDate, err := time.Parse(utils.FormatDate, av)
-//			if err != nil {
-//				return err
-//			}
-//			//上一年的日期
-//			preDate := currentDate.AddDate(-1, 0, 0)
-//			preDateStr := preDate.Format(utils.FormatDate)
-//			if findItem, ok := dataMap[preDateStr]; ok { //上一年同期找到
-//				//dataTime, _ := time.Parse(utils.FormatDate, date)
-//				timestamp := currentDate.UnixNano() / 1e6
-//				timestampStr := fmt.Sprintf("%d", timestamp)
-//				val := TczSub(currentItem.Value, findItem.Value)
-//
-//				count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
-//				if err != nil && err.Error() != utils.ErrNoRow() {
-//					return err
-//				}
-//				if count <= 0 {
-//					addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//					isAdd = true
-//				} else {
-//					err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
-//					if err != nil {
-//						return err
-//					}
-//				}
-//				utils.FileLog.Info("同期找到:" + av + ";" + preDateStr)
-//				continue
-//			} else {
-//				if fromEdbInfo.Frequency == "月度" { //向上和向下,各找一个月
-//					nextDateDay := preDate.AddDate(0, 1, 0)
-//					nextDateDayStr := nextDateDay.Format(utils.FormatDate)
-//
-//					preDateDay := preDate.AddDate(0, -1, 0)
-//					preDateDayStr := preDateDay.Format(utils.FormatDate)
-//
-//					for i := 0; i <= 6; i++ {
-//						if i >= 1 {
-//							nextDateDay = nextDateDay.AddDate(0, 0, i)
-//							nextDateDayStr = nextDateDay.Format(utils.FormatDate)
-//						}
-//						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
-//							timestamp := currentDate.UnixNano() / 1e6
-//							timestampStr := fmt.Sprintf("%d", timestamp)
-//							val := TczSub(currentItem.Value, findItem.Value)
-//
-//							count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
-//							if err != nil && err.Error() != utils.ErrNoRow() {
-//								return err
-//							}
-//							if count <= 0 {
-//								addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//								isAdd = true
-//							} else {
-//								err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
-//								if err != nil {
-//									return err
-//								}
-//							}
-//							break
-//						} else {
-//							if i >= 1 {
-//								preDateDay = preDate.AddDate(0, 0, -i)
-//								preDateDayStr = nextDateDay.Format(utils.FormatDate)
-//							}
-//							if findItem, ok := dataMap[preDateDayStr]; ok { //上一年同期->上一个月找到
-//								timestamp := currentDate.UnixNano() / 1e6
-//								timestampStr := fmt.Sprintf("%d", timestamp)
-//								val := TczSub(currentItem.Value, findItem.Value)
-//
-//								count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
-//								if err != nil && err.Error() != utils.ErrNoRow() {
-//									return err
-//								}
-//								if count <= 0 {
-//									addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//									isAdd = true
-//								} else {
-//									err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
-//									if err != nil {
-//										return err
-//									}
-//								}
-//							}
-//							break
-//						}
-//					}
-//				} else if fromEdbInfo.Frequency == "季度" || fromEdbInfo.Frequency == "年度" {
-//					if findItem, ok := dataMap[preDateStr]; ok { //上一年同期->下一个月找到
-//						timestamp := currentDate.UnixNano() / 1e6
-//						timestampStr := fmt.Sprintf("%d", timestamp)
-//						val := TczSub(currentItem.Value, findItem.Value)
-//
-//						count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
-//						if err != nil && err.Error() != utils.ErrNoRow() {
-//							return err
-//						}
-//						if count <= 0 {
-//							addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//							isAdd = true
-//						} else {
-//							err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
-//							if err != nil {
-//								return err
-//							}
-//						}
-//						break
-//					}
-//				} else {
-//					nextDateDay := preDate.AddDate(0, 0, 1)
-//					nextDateDayStr := nextDateDay.Format(utils.FormatDate)
-//
-//					preDateDay := preDate.AddDate(0, 0, -1)
-//					preDateDayStr := preDateDay.Format(utils.FormatDate)
-//
-//					for i := 0; i < 35; i++ {
-//						if i >= 1 {
-//							nextDateDay = nextDateDay.AddDate(0, 0, i)
-//							nextDateDayStr = nextDateDay.Format(utils.FormatDate)
-//						}
-//						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
-//							timestamp := currentDate.UnixNano() / 1e6
-//							timestampStr := fmt.Sprintf("%d", timestamp)
-//							val := TczSub(currentItem.Value, findItem.Value)
-//
-//							count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
-//							if err != nil && err.Error() != utils.ErrNoRow() {
-//								return err
-//							}
-//							if count <= 0 {
-//								addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//								isAdd = true
-//							} else {
-//								err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
-//								if err != nil {
-//									return err
-//								}
-//							}
-//							break
-//						} else {
-//							if i >= 1 {
-//								preDateDay = preDate.AddDate(0, 0, -i)
-//								preDateDayStr = nextDateDay.Format(utils.FormatDate)
-//							}
-//							if findItem, ok := dataMap[preDateDayStr]; ok { //上一年同期->上一个月找到
-//								timestamp := currentDate.UnixNano() / 1e6
-//								timestampStr := fmt.Sprintf("%d", timestamp)
-//								val := TczSub(currentItem.Value, findItem.Value)
-//
-//								count, err := GetEdbDataCalculateTczByCodeAndDate(edbCode, av)
-//								if err != nil && err.Error() != utils.ErrNoRow() {
-//									return err
-//								}
-//								if count <= 0 {
-//									addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
-//									isAdd = true
-//								} else {
-//									err = ModifyEdbDataCalculateTcz(int64(edbInfoId), av, val)
-//									if err != nil {
-//										return err
-//									}
-//								}
-//							}
-//							break
-//						}
-//					}
-//				}
-//			}
-//		}
-//	}
-//	if isAdd {
-//		addSql = strings.TrimRight(addSql, ",")
-//		_, err = o.Raw(addSql).Exec()
-//		if err != nil {
-//			return err
-//		}
-//	}
-//	return
-//}
-//
-//type EdbInfoCalculateTczDetail struct {
-//	EdbInfoCalculateTczId int       `orm:"column(edb_info_calculate_tcz_id);pk"`
-//	EdbInfoId             int       `description:"指标id"`
-//	EdbCode               string    `description:"指标编码"`
-//	FromEdbInfoId         int       `description:"计算指标id"`
-//	FromEdbCode           string    `description:"计算指标编码"`
-//	FromEdbName           string    `description:"计算指标名称"`
-//	FromSource            int       `description:"计算指标来源"`
-//	FromSourceName        string    `description:"计算指标来源名称"`
-//	FromTag               string    `description:"来源指标标签"`
-//	Sort                  int       `description:"计算指标名称排序"`
-//	CreateTime            time.Time `description:"创建时间"`
-//	ModifyTime            time.Time `description:"修改时间"`
-//	StartDate             string    `description:"开始日期"`
-//	EndDate               string    `description:"结束日期"`
-//}
-//
-//func GetEdbInfoCalculateTczDetailDetail(edbInfoId int) (item *EdbInfoCalculateTczDetail, err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_info_calculate_tcz AS a
-//			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
-//			WHERE a.edb_info_id=? `
-//	err = o.Raw(sql, edbInfoId).QueryRow(&item)
-//	return
-//}
-//
-//func GetEdbDataCalculateTczByCodeAndDate(edbCode string, startDate string) (count int, err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	sql := ` SELECT COUNT(1) AS count FROM edb_info_calculate_tcz WHERE edb_code=? AND data_time=? `
-//	err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
-//	return
-//}
-//
-//func ModifyEdbDataCalculateTcz(edbInfoId int64, dataTime string, value float64) (err error) {
-//	o := orm.NewOrm()
-//	o.Using("data")
-//	sql := ` UPDATE edb_info_calculate_tcz SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
-//	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
-//	return
-//}

+ 1 - 1
services/task.go

@@ -145,6 +145,6 @@ func RefreshData() (err error){
 
 func RefreshCalculateData() (err error){
 	//计算指标
-	go data.RefreshDataFromCalculate()
+	go data.RefreshDataFromCalculateAll()
 	return
 }