Browse Source

fix:添加供应分析模块

Roc 2 years ago
parent
commit
01f86266bd

+ 2 - 46
controllers/base_from_stock_plant.go

@@ -64,50 +64,6 @@ func (this *StockPlantController) Calculate() {
 	br.Msg = "获取成功"
 }
 
-// @Title 新增手工指标接口
-// @Description 新增手工指标接口
-// @Success 200 {object} models.AddEdbInfoReq
-// @router /add [post]
-func (this *StockPlantController) Add() {
-	br := new(models.BaseResponse).Init()
-	var cacheKey string
-	defer func() {
-		utils.Rc.Delete(cacheKey)
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	source := utils.DATA_SOURCE_MANUAL
-	var req models.AddEdbInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-	if req.EdbCode == "" {
-		br.Msg = "请输入指标编码!"
-		br.ErrMsg = "请输入指标编码,指标编码为空"
-		return
-	}
-	cacheKey = utils.CACHE_EDB_DATA_ADD + strconv.Itoa(source) + "_" + req.EdbCode
-	if !utils.Rc.IsExist(cacheKey) {
-		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
-		err = models.AddEdbDataFromManual(req.EdbCode)
-		if err != nil {
-			br.Msg = "获取指标信息失败!"
-			br.ErrMsg = "获取指标信息失败 AddEdbDataFromManual,Err:" + err.Error()
-			return
-		}
-		br.Ret = 200
-		br.Success = true
-		br.Msg = "获取成功"
-	} else {
-		br.Ret = 501
-		br.Success = true
-		br.Msg = "系统处理中,请稍后重试"
-	}
-}
-
 // @Title 刷新手工指标接口
 // @Description 刷新手工指标接口
 // @Success 200 {object} models.RefreshEdbInfoReq
@@ -118,7 +74,7 @@ func (this *StockPlantController) Refresh() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-	source := utils.DATA_SOURCE_MANUAL
+	source := utils.DATA_SOURCE_STOCK_PLANT
 	var req models.RefreshEdbInfoReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -159,7 +115,7 @@ func (this *StockPlantController) Refresh() {
 	}
 
 	req.StartDate = `` // 开始日期也给过滤吧,万一研究员补充了之前的数据呢,还是过滤掉吧
-	err = models.RefreshEdbDataFromManual(req.EdbInfoId, req.EdbCode, req.StartDate)
+	err = models.RefreshEdbDataFromStockPlant(req.EdbInfoId, req.EdbCode, req.StartDate)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "刷新指标信息失败!"
 		br.ErrMsg = "刷新指标信息失败 RefreshEdbDataFromManual,Err:" + err.Error()

+ 129 - 0
models/base_from_stock_plant.go

@@ -0,0 +1,129 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_edb_lib/models/supply_analysis"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// StockPlantEdbdata 存量装置数据
+type StockPlantEdbdata struct {
+	VarietyEdbId string    `orm:"column(variety_edb_id);pk" description:"指标编码"`
+	DataTime     string    `orm:"column(data_time)" description:"日期"`
+	Value        string    `orm:"column(value)" description:"值"`
+	ModifyTime   time.Time `orm:"column(modify_time)" description:"修改时间"`
+}
+
+func GetStockPlantEdbDataByCondition(condition string, pars []interface{}) (item []*StockPlantEdbdata, err error) {
+	sql := ` SELECT  * FROM base_from_stock_plant_data WHERE 1=1  `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY data_time DESC `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}
+
+// RefreshEdbDataFromStockPlant 刷新存量装置数据
+func RefreshEdbDataFromStockPlant(edbInfoId int, edbCode, startDate string) (err error) {
+	source := utils.DATA_SOURCE_STOCK_PLANT
+	o := orm.NewOrm()
+	if err != nil {
+		return
+	}
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+	//计算数据
+	var condition string
+	var pars []interface{}
+
+	// 获取供应分析的指标信息
+	varietyEdbInfo, err := supply_analysis.GetVarietyEdbInfoByEdbInfoId(edbInfoId)
+	if err != nil {
+		return
+	}
+
+	// 获取基础库的指标数据
+	condition += " AND variety_edb_id=? "
+	pars = append(pars, varietyEdbInfo.VarietyEdbId)
+
+	if startDate != "" {
+		condition += " AND data_time >=? "
+		pars = append(pars, startDate)
+	} else {
+		condition += " AND data_time != ? "
+		pars = append(pars, `0000-00-00`)
+	}
+
+	baseDataList, err := GetStockPlantEdbDataByCondition(condition, pars)
+
+	var existCondition string
+	var existPars []interface{}
+
+	existCondition += " AND edb_info_id=? "
+	existPars = append(existPars, edbInfoId)
+	if startDate != "" {
+		existCondition += " AND data_time>=? "
+		existPars = append(existPars, startDate)
+	}
+
+	existList, err := GetEdbDataByCondition(source, existCondition, existPars)
+	if err != nil {
+		return err
+	}
+	existMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range existList {
+		existMap[v.DataTime] = v
+	}
+
+	addSql := ` INSERT INTO edb_data_stock_plant (edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
+	var isAdd bool
+	manualMap := make(map[string]*StockPlantEdbdata)
+	for _, v := range baseDataList {
+		item := v
+		//fmt.Println("Item:", item.Dt, item.Close, item.TradeCode, item.ModifyTime)
+		if findItem, ok := existMap[v.DataTime]; !ok {
+			eDate := item.DataTime
+			sValue := item.Value
+
+			dataTime, err := time.Parse(utils.FormatDate, eDate)
+			if err != nil {
+				return err
+			}
+			timestamp := dataTime.UnixNano() / 1e6
+			timeStr := fmt.Sprintf("%d", timestamp)
+
+			addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, sValue)
+			isAdd = true
+		} else {
+			if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != item.Value {
+				err = ModifyEdbDataById(source, findItem.EdbDataId, item.Value)
+				if err != nil {
+					return err
+				}
+			}
+		}
+		manualMap[v.DataTime] = v
+	}
+	// 删除不存在的日期数据
+	for _, v := range existList {
+		if _, ok := manualMap[v.DataTime]; !ok {
+			go DeleteEdbDataById(source, v.EdbDataId)
+		}
+	}
+
+	// 将数据入库
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			fmt.Println("RefreshAllEdbDataByStockPlant add Err", err.Error())
+			return
+		}
+	}
+	return
+}

+ 2 - 0
models/edb_data_table.go

@@ -117,6 +117,8 @@ func GetEdbDataTableName(source int) (tableName string) {
 		tableName = "edb_data_predict_calculate_kszs"
 	case utils.DATA_SOURCE_BAIINFO:
 		tableName = "edb_data_baiinfo"
+	case utils.DATA_SOURCE_STOCK_PLANT:
+		tableName = "edb_data_stock_plant"
 	default:
 		tableName = ""
 	}

+ 11 - 1
models/supply_analysis/base_from_stock_plant_data.go

@@ -148,6 +148,7 @@ func calculateEdb(to orm.TxOrmer, varietyEdbInfo *VarietyEdbInfo, dataMap map[ti
 
 	tmpDataList := make([]float64, 0) // 每天的值
 	var preSumValDeci decimal.Decimal // 上一期的值
+	endDate := lastDate               // 实际数据最后结束的日期
 	switch varietyEdbInfo.Source {
 	//1:影响周度产量;2:周度产量变动;3:影响月度产量;4:月度产量变动
 	case 1, 2:
@@ -213,6 +214,8 @@ func calculateEdb(to orm.TxOrmer, varietyEdbInfo *VarietyEdbInfo, dataMap map[ti
 			// 如果最后一天不是周日,那么需要把日期调整到周日
 			subDay := 7 - lastDateWeek
 			tmpDate := lastDate.AddDate(0, 0, int(subDay))
+			endDate = tmpDate //数据实际结束的日期
+
 			existItem, ok := existData[tmpDate]
 
 			timestamp := tmpDate.UnixNano() / 1e6
@@ -312,9 +315,11 @@ func calculateEdb(to orm.TxOrmer, varietyEdbInfo *VarietyEdbInfo, dataMap map[ti
 
 		// 最后一月,不满一月时的计算
 		currMonthEndDay := time.Date(lastDate.Year(), lastDate.Month(), 1, 0, 0, 0, 0, time.Local).AddDate(0, 1, -1)
-		if lastDate.Equal(currMonthEndDay) {
+		if !lastDate.Equal(currMonthEndDay) {
 			// 如果最后一天不是当月的最后一天,那么需要把日期调整到当月的最后一天
 			tmpDate := currMonthEndDay
+			endDate = tmpDate //数据实际结束的日期
+
 			existItem, ok := existData[tmpDate]
 
 			timestamp := tmpDate.UnixNano() / 1e6
@@ -382,5 +387,10 @@ func calculateEdb(to orm.TxOrmer, varietyEdbInfo *VarietyEdbInfo, dataMap map[ti
 		}
 	}
 
+	varietyEdbInfo.StartDate = startDate
+	varietyEdbInfo.EndDate = endDate
+	varietyEdbInfo.ModifyTime = time.Now()
+	_, err = to.Update(varietyEdbInfo, "StartDate", "EndDate", "ModifyTime")
+
 	return
 }

+ 9 - 0
models/supply_analysis/variety_edb_info.go

@@ -28,6 +28,15 @@ func GetAllVarietyEdbInfoByVarietyId(varietyId int) (items []*VarietyEdbInfo, er
 	return
 }
 
+// GetVarietyEdbInfoByEdbInfoId 根据ETA指标库中的指标id获取指标
+func GetVarietyEdbInfoByEdbInfoId(varietyId int) (item *VarietyEdbInfo, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM variety_edb_info AS a WHERE a.edb_info_id = ? ORDER BY a.variety_edb_id ASC `
+	err = o.Raw(sql, varietyId).QueryRow(&item)
+
+	return
+}
+
 // BatchCreateVarietyEdbInfo 批量插入
 func BatchCreateVarietyEdbInfo(list []*VarietyEdbInfo) (err error) {
 	num := len(list)

+ 0 - 9
routers/commentsRouter.go

@@ -493,15 +493,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:StockPlantController"] = append(beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:StockPlantController"],
-        beego.ControllerComments{
-            Method: "Add",
-            Router: `/add`,
-            AllowHTTPMethods: []string{"post"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:StockPlantController"] = append(beego.GlobalControllerRouter["hongze/hongze_edb_lib/controllers:StockPlantController"],
         beego.ControllerComments{
             Method: "Calculate",

+ 3 - 0
utils/constants.go

@@ -86,6 +86,7 @@ const (
 	DATA_SOURCE_PREDICT_CALCULATE_NH                    //预测指标 - 计算指标(年化)->55
 	DATA_SOURCE_PREDICT_CALCULATE_KSZS                  //预测指标 - 计算指标(扩散指数)->56
 	DATA_SOURCE_BAIINFO                                 //百川盈孚 ->57
+	DATA_SOURCE_STOCK_PLANT                             //存量装置 ->58
 )
 
 // 指标来源的中文展示
@@ -146,6 +147,8 @@ const (
 	DATA_SOURCE_NAME_PREDICT_CALCULATE_JP         = `预测降频`              //预测指标 - 计算指标(降频)->54
 	DATA_SOURCE_NAME_PREDICT_CALCULATE_NH         = `预测年化`              //预测指标 - 计算指标(年化)->55
 	DATA_SOURCE_NAME_PREDICT_CALCULATE_KSZS       = `预测扩散指数`            //预测指标 - 计算指标(扩散指数)->56
+	DATA_SOURCE_NAME_BAIINFO                      = `百川盈孚`              //百川盈孚 ->57
+	DATA_SOURCE_NAME_STOCK_PLANT                  = `存量装置`              //存量装置 ->58
 )
 
 // 基础数据初始化日期