Преглед изворни кода

Merge remote-tracking branch 'origin/master'

Roc пре 3 година
родитељ
комит
84975082a2

+ 40 - 22
models/data_manage/edb_data_manual.go

@@ -27,7 +27,7 @@ func GetEdbDataManualMaxOrMinDate(edbCode string) (min_date, max_date string, er
 type ManualEdbdata struct {
 	TradeCode  string    `orm:"column(TRADE_CODE);pk" description:"指标编码"`
 	Dt         string    `orm:"column(DT)" description:"日期"`
-	Close      string    `orm:"column(CLOSE)" description:"值"`
+	Close      float64   `orm:"column(CLOSE)" description:"值"`
 	ModifyTime time.Time `orm:"column(modify_time)" description:"修改时间"`
 }
 
@@ -38,7 +38,7 @@ func GetEdbdataManualByTradeCode(condition string, pars []interface{}) (item []*
 	if condition != "" {
 		sql += condition
 	}
-	sql+=` ORDER BY DT DESC `
+	sql += ` ORDER BY DT DESC `
 	_, err = o.Raw(sql, pars).QueryRows(&item)
 	return
 }
@@ -60,7 +60,8 @@ func ModifyEdbDataManual(edbInfoId int64, dataTime, value string) (err error) {
 }
 
 //刷新手工指标数据
-func RefreshManual(edbInfoId int, edbCode, startDate, endDate string) (err error) {
+func RefreshManual(item *EdbInfoList) (err error) {
+	//edbInfoId int, edbCode, startDate, endDate string
 	o := orm.NewOrm()
 	o.Using("data")
 	o.Begin()
@@ -72,6 +73,9 @@ func RefreshManual(edbInfoId int, edbCode, startDate, endDate string) (err error
 		}
 	}()
 
+	edbInfoId := item.EdbInfoId
+	edbCode := item.EdbCode
+
 	if err != nil {
 		return
 	}
@@ -79,36 +83,40 @@ func RefreshManual(edbInfoId int, edbCode, startDate, endDate string) (err error
 	//计算数据
 	var condition string
 	var pars []interface{}
-
 	if edbCode != "" {
 		condition += " AND TRADE_CODE=? "
 		pars = append(pars, edbCode)
 	}
 
-	if startDate != "" {
-		condition += " AND DT>=? "
-		pars = append(pars, startDate)
-	}
+	//获取已存在的手工数据
+	manualDataList, err := GetEdbdataManualByTradeCode(condition, pars)
 
-	if endDate != "" {
-		condition += " AND DT<=? "
-		pars = append(pars, endDate)
+	var existCondition string
+	var existPars []interface{}
+	if edbCode != "" {
+		existCondition += " AND edb_code=? "
+		existPars = append(existPars, edbCode)
+	}
+	//获取ETA指标库已存在的所有数据
+	existDataList, err := GetEdbDataListAll(existCondition, existPars, utils.DATA_SOURCE_MANUAL, 0)
+	if err != nil {
+		return err
 	}
 
-	manualDataList, err := GetEdbdataManualByTradeCode(condition, pars)
+	existMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range existDataList {
+		existMap[v.DataTime] = v
+	}
 
 	addSql := ` INSERT INTO edb_data_manual(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
 	var isAdd bool
+	manualMap := make(map[string]*ManualEdbdata)
 	for _, v := range manualDataList {
 		item := v
-		count, err := GetEdbDataManualByCodeAndDate(v.TradeCode, v.Dt)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			return err
-		}
-		if count <= 0 {
+		eDate := item.Dt
+		sValue := utils.SubFloatToString(item.Close, 4)
+		if findItem, ok := existMap[v.Dt]; !ok {
 			nowStr := time.Now().Format(utils.FormatDateTime)
-			eDate := item.Dt
-			sValue := item.Close
 			dataTime, err := time.Parse(utils.FormatDate, eDate)
 			if err != nil {
 				return err
@@ -121,12 +129,22 @@ func RefreshManual(edbInfoId int, edbCode, startDate, endDate string) (err error
 			addSql += "),"
 			isAdd = true
 		} else {
-			err = ModifyEdbDataManual(int64(edbInfoId), v.Dt, v.Close)
-			if err != nil {
-				return err
+			if item.Close != findItem.Value {
+				err = ModifyEdbDataManual(int64(edbInfoId), eDate, sValue)
+				if err != nil {
+					return err
+				}
 			}
 		}
+		manualMap[v.Dt] = v
 	}
+
+	for _, v := range existDataList {
+		if _, ok := manualMap[v.DataTime]; !ok {
+			go DeleteEdbDataByIdAndSource(v.EdbDataId, utils.DATA_SOURCE_MANUAL)
+		}
+	}
+
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = o.Raw(addSql).Exec()

+ 14 - 2
models/data_manage/edb_info.go

@@ -45,8 +45,9 @@ type EdbInfoList struct {
 }
 
 type EdbInfoSearchData struct {
-	DataTime string  `description:"数据日期"`
-	Value    float64 `description:"数据"`
+	EdbDataId int     `description:"指标数据Id"`
+	DataTime  string  `description:"数据日期"`
+	Value     float64 `description:"数据"`
 }
 
 type EdbInfoSearchDataV1 struct {
@@ -199,3 +200,14 @@ func GetEdbInfoCalculateListByCondition(condition string, pars []interface{}) (i
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+func DeleteEdbDataByIdAndSource(edbDataId, source int) (err error) {
+	sql := ` DELETE FROM %s WHERE edb_data_id=? `
+	tableName := GetEdbDataTableName(source)
+	sql = fmt.Sprintf(sql, tableName)
+
+	o := orm.NewOrm()
+	o.Using("data")
+	_, err = o.Raw(sql, edbDataId).Exec()
+	return
+}

+ 2 - 18
services/data/edb_info.go

@@ -503,26 +503,10 @@ func RefreshDataFromManual(wg *sync.WaitGroup) (err error) {
 		return errors.New("GetEdbInfoByCondition:" + err.Error())
 	}
 
-	var endDate string
-	endDate = time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
 	for _, v := range items {
-		startDate := ""
-		if v.Frequency == "日度" {
-			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
-		} else if v.Frequency == "周度" {
-			startDate = v.EndDate.AddDate(0, 0, -(utils.DATA_REFRESH * 7)).Format(utils.FormatDate)
-		} else if v.Frequency == "月度" {
-			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH, 0).Format(utils.FormatDate)
-		} else if v.Frequency == "季度" {
-			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH*3, 0).Format(utils.FormatDate)
-		} else if v.Frequency == "年度" {
-			startDate = v.EndDate.AddDate(-utils.DATA_REFRESH, 0, 0).Format(utils.FormatDate)
-		} else {
-			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
-		}
-		err = data_manage.RefreshManual(v.EdbInfoId, v.EdbCode, startDate, endDate)
+		err = data_manage.RefreshManual(v)
 		if err != nil {
-			return errors.New("SyncEdbDataByThs:" + err.Error())
+			return errors.New("RefreshManual:" + err.Error())
 		}
 		item, err := data_manage.GetEdbInfoMaxAndMinInfo(v.Source, v.EdbCode)
 		if err != nil {

+ 3 - 1
services/data/edb_info_sync.go

@@ -121,13 +121,15 @@ func SyncManualDataBase() {
 	var condition string
 	var pars []interface{}
 	condition += " AND source=? "
+	condition += " AND edb_code='W000156' "
+
 	pars = append(pars, utils.DATA_SOURCE_MANUAL)
 	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
 	if err != nil {
 		return
 	}
 	for _, v := range items {
-		err = data_manage.RefreshManual(v.EdbInfoId, v.EdbCode, v.StartDate.Format(utils.FormatDate), "")
+		err = data_manage.RefreshManual(v)
 		if err != nil {
 			return
 		}