|
@@ -0,0 +1,166 @@
|
|
|
+package data_manage
|
|
|
+
|
|
|
+import (
|
|
|
+ "errors"
|
|
|
+ "fmt"
|
|
|
+ "github.com/shopspring/decimal"
|
|
|
+ "hongze/hongze_task/utils"
|
|
|
+ "rdluck_tools/orm"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+type EdbInfoCalculateHbz struct {
|
|
|
+ EdbInfoCalculateHbzId int `orm:"column(edb_info_calculate_hbz_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:"修改时间"`
|
|
|
+}
|
|
|
+
|
|
|
+//环比值,current:当期,pre:上期 公式: (当期-上期)/上期
|
|
|
+func HbzDiv(current, pre float64) string {
|
|
|
+ if pre == 0 {
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ currentVal := decimal.NewFromFloat(float64(current))
|
|
|
+ preVal := decimal.NewFromFloat(float64(pre))
|
|
|
+ val, _ := currentVal.Sub(preVal).Div(preVal).Float64()
|
|
|
+ val = val - 1
|
|
|
+ valStr := utils.SubFloatToString(val, 4)
|
|
|
+ return valStr
|
|
|
+}
|
|
|
+
|
|
|
+//刷新环比值数据
|
|
|
+func RefreshCalculateHbz(edbInfoId, source 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, 0)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取指标所有数据
|
|
|
+ existDataList := make([]*EdbDataBase, 0)
|
|
|
+ dataTableName := GetEdbDataTableName(source)
|
|
|
+ fmt.Println("dataTableName:", dataTableName)
|
|
|
+ sql := `SELECT * FROM %s WHERE edb_info_id=? `
|
|
|
+ sql = fmt.Sprintf(sql, dataTableName)
|
|
|
+ _, err = o.Raw(sql, edbInfoId).QueryRows(&existDataList)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ existDataMap := make(map[string]string)
|
|
|
+ for _, v := range existDataList {
|
|
|
+ existDataMap[v.DataTime] = v.Value
|
|
|
+ }
|
|
|
+ addSql := ` INSERT INTO edb_data_calculate_hbz(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
|
|
|
+ var isAdd bool
|
|
|
+ existMap := make(map[string]string)
|
|
|
+ dataLen := len(dataList)
|
|
|
+ fmt.Println("dataLen:", dataLen)
|
|
|
+ for i := 0; i < dataLen; i++ {
|
|
|
+ j := i + 1
|
|
|
+ if j < dataLen {
|
|
|
+ //当期
|
|
|
+ currentItem := dataList[i]
|
|
|
+ preItem := dataList[j]
|
|
|
+ if currentItem != nil && preItem != nil {
|
|
|
+ existKey := edbCode + currentItem.DataTime
|
|
|
+ if _, ok := existMap[existKey]; !ok {
|
|
|
+ currentDate, _ := time.Parse(utils.FormatDate, currentItem.DataTime)
|
|
|
+ timestamp := currentDate.UnixNano() / 1e6
|
|
|
+ timestampStr := fmt.Sprintf("%d", timestamp)
|
|
|
+ val := HbzDiv(currentItem.Value, preItem.Value)
|
|
|
+ if val != "" {
|
|
|
+ if existVal, findOk := existDataMap[currentItem.DataTime]; !findOk {
|
|
|
+ addSql += GetAddSql(edbInfoIdStr, edbCode, currentItem.DataTime, timestampStr, val)
|
|
|
+ isAdd = true
|
|
|
+ } else {
|
|
|
+ if existVal != val {
|
|
|
+ sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
|
|
|
+ sql = fmt.Sprintf(sql, dataTableName)
|
|
|
+ _, err = o.Raw(sql, val, edbInfoId, currentItem.DataTime).Exec()
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ existMap[existKey] = currentItem.DataTime
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if isAdd {
|
|
|
+ addSql = strings.TrimRight(addSql, ",")
|
|
|
+ _, err = o.Raw(addSql).Exec()
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+type EdbInfoCalculateHbzDetail 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 GetEdbInfoCalculateHbzDetail(edbInfoId int) (item *EdbInfoCalculateTbzDetail, err error) {
|
|
|
+ o := orm.NewOrm()
|
|
|
+ o.Using("data")
|
|
|
+ sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_info_calculate_hbz 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
|
|
|
+}
|