Explorar o código

PCSG-批量导入Bloomberg数据

hsun hai 11 meses
pai
achega
106e4451d3
Modificáronse 5 ficheiros con 189 adicións e 0 borrados
  1. 30 0
      controllers/data_init.go
  2. 1 0
      go.mod
  3. 7 0
      go.sum
  4. 9 0
      routers/commentsRouter.go
  5. 142 0
      services/init_pcsg_bloomberg.go

+ 30 - 0
controllers/data_init.go

@@ -194,3 +194,33 @@ func (this *DataInitController) AddToEdbInfo() {
 	br.Ret = 200
 	br.Msg = "初始化成功"
 }
+
+// InitPCSGBloomberg
+// @Title 批量导入中石油新加坡Bloomberg指标
+// @Description 批量导入中石油新加坡Bloomberg指标
+// @Param   FileName  query  string  true  "文件名称"
+// @Success Ret=200
+// @router /pcsg/bloomberg [get]
+func (this *DataInitController) InitPCSGBloomberg() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	fileName := this.GetString("FileName")
+	if fileName == "" {
+		br.Msg = "文件名称不能为空"
+		return
+	}
+
+	filePath := "/docs/" + fileName
+	fmt.Println("filePath:" + filePath)
+	services.InitPCSGBloombergData(filePath)
+
+	br.Ret = 200
+	br.Msg = "初始化成功"
+}

+ 1 - 0
go.mod

@@ -3,6 +3,7 @@ module eta/eta_data_init
 go 1.21.7
 
 require (
+	github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de
 	github.com/beego/bee/v2 v2.1.0
 	github.com/beego/beego/v2 v2.1.0
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible

+ 7 - 0
go.sum

@@ -6,6 +6,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/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhPwqqXc4/vE0f7GvRjuAsbW+HOIe8KnA=
+github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw=
 github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=
 github.com/beego/bee/v2 v2.1.0 h1:4WngbAnkvVOyKy74WXcRH3clon76wkjhuzrV2mx2fQU=
 github.com/beego/bee/v2 v2.1.0/go.mod h1:wDhKy5TNxv46LHKsK2gyxo38ObCOm9PbCN89lWHK3EU=
@@ -109,6 +111,7 @@ github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.5 h1:J+gdV2cUmX7ZqL2B0lFcW0m+egaHC2V3lpO8nWxyYiQ=
 github.com/lib/pq v1.10.5/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
@@ -162,8 +165,10 @@ github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7
 github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
 github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM=
 github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
+github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
 github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg=
 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
 github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik=
 github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
@@ -180,6 +185,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
@@ -255,5 +261,6 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

+ 9 - 0
routers/commentsRouter.go

@@ -88,6 +88,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_data_init/controllers:DataInitController"] = append(beego.GlobalControllerRouter["eta/eta_data_init/controllers:DataInitController"],
+        beego.ControllerComments{
+            Method: "InitPCSGBloomberg",
+            Router: `/pcsg/bloomberg`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_data_init/controllers:DataInitController"] = append(beego.GlobalControllerRouter["eta/eta_data_init/controllers:DataInitController"],
         beego.ControllerComments{
             Method: "SmmToIndexLib",

+ 142 - 0
services/init_pcsg_bloomberg.go

@@ -0,0 +1,142 @@
+package services
+
+import (
+	"eta/eta_data_init/utils"
+	"fmt"
+	"github.com/araddon/dateparse"
+	"github.com/xuri/excelize/v2"
+	"math"
+	"os"
+	"path/filepath"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// InitPCSGBloombergData 初始化中石油新加坡Bloomberg指标
+func InitPCSGBloombergData(dataPath string) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err.Error())
+			utils.FileLog.Info("InitPCSGBloombergData Err: " + err.Error())
+		}
+	}()
+
+	// 读取excel
+	path, e := filepath.Abs(os.Args[0])
+	if e != nil {
+		err = fmt.Errorf("file abs err: %s", e.Error())
+		return
+	}
+
+	dir := filepath.Dir(path)
+	dataPath = dir + dataPath
+	//dataPath = "docs/HistorySample_0508.xlsx"
+	f, e := excelize.OpenFile(dataPath)
+	if e != nil {
+		err = fmt.Errorf("open file err: %s", e.Error())
+		return
+	}
+	defer func() {
+		if e = f.Close(); e != nil {
+			err = fmt.Errorf("f close err: %s", e.Error())
+		}
+	}()
+
+	type ExcelRows struct {
+		IndexCode string                `description:"指标编码"`
+		DataMap   map[time.Time]float64 `description:"数据日期/值"`
+	}
+	indexMap := make(map[string]*ExcelRows, 0)
+
+	sheets := f.GetSheetList()
+	for _, sheet := range sheets {
+		fmt.Printf("sheet: %s\n", sheet)
+
+		rows, e := f.GetRows(sheet)
+		if e != nil {
+			err = fmt.Errorf("f GetRows err: %s", e.Error())
+			return
+		}
+		if len(rows) == 0 {
+			continue
+		}
+
+		for rk, row := range rows {
+			// 标题行
+			if rk <= 0 {
+				continue
+			}
+
+			// 数据行
+			var rCode, rDate, rVal string
+			for ck, cell := range row {
+				cell = strings.TrimSpace(cell)
+				switch ck {
+				case 4:
+					rCode = cell
+				case 6:
+					rDate = cell
+				case 7:
+					rVal = cell
+				}
+			}
+			if rCode == "" {
+				fmt.Printf("%d行指标编码为空\n", rk+1)
+				continue
+			}
+			if indexMap[rCode] == nil {
+				indexMap[rCode] = new(ExcelRows)
+				indexMap[rCode].DataMap = make(map[time.Time]float64, 0)
+			}
+			indexMap[rCode].IndexCode = rCode
+
+			// 日期/值
+			if rDate == "" {
+				fmt.Printf("%d行数据日期为空\n", rk+1)
+				continue
+			}
+			// 格式dd-mm-yy
+			rDate = strings.ReplaceAll(rDate, "-", ".")
+			d, e := dateparse.ParseAny(rDate)
+			if e != nil {
+				fmt.Printf("%d行数据日期格式有误: %s, err: %v\n", rk+1, rDate, e)
+				continue
+			}
+			if rVal == "" || rVal == "NULL" {
+				fmt.Printf("%d行数据值为空\n", rk+1)
+				continue
+			}
+			val, e := strconv.ParseFloat(rVal, 64)
+			if e != nil {
+				fmt.Printf("%d行数据值有误: %s\n", rk+1, rVal)
+				continue
+			}
+			// 保留四位小数
+			rounded := math.Round(val*10000) / 10000
+			if rounded == math.Floor(rounded) {
+				val = float64(int64(rounded))
+			} else {
+				val = rounded
+			}
+			indexMap[rCode].DataMap[d] = val
+		}
+	}
+
+	// 请求接口导入数据
+	method := "bloomberg/pcsg/import_history_data"
+	for _, v := range indexMap {
+		if v.IndexCode == "" {
+			continue
+		}
+		requestMap := make(map[string]interface{})
+		requestMap["IndexCode"] = v.IndexCode
+		requestMap["DataMap"] = v.DataMap
+		indexRes, e := PostEdbLib(requestMap, method)
+		if e != nil {
+			fmt.Printf("post edb lib err: %s; result: %s", e.Error(), string(indexRes))
+			continue
+		}
+	}
+}