Explorar el Código

新增计算指标

hongze hace 3 años
padre
commit
ccf8582ef4

+ 29 - 16
go.sum

@@ -1,17 +1,17 @@
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
-github.com/PuerkitoBio/goquery v1.6.1 h1:FgjbQZKl5HTmcn4sKBgvx8vv63nhyhIpv7lJpFGCWpk=
-github.com/PuerkitoBio/goquery v1.6.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
+github.com/PuerkitoBio/goquery v1.7.1 h1:oE+T06D+1T7LNrn91B4aERsRIeCLJ/oPSa6xB9FPnz4=
+github.com/PuerkitoBio/goquery v1.7.1/go.mod h1:XY0pP4kfraEmmV1O7Uf6XyjoslwsneBbgeDjLYuN8xY=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 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.8+incompatible h1:hLUNPbx10wawWW7DeNExvTrlb90db3UnnNTFKHZEFhE=
-github.com/aliyun/aliyun-oss-go-sdk v2.1.8+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
-github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo=
-github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
+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/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=
 github.com/antlr/antlr4 v0.0.0-20190325153624-837aa60e2c47/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y=
 github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ=
@@ -43,6 +43,7 @@ github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox
 github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk=
 github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/garyburd/redigo v1.6.2/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
 github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
@@ -69,8 +70,9 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8l
 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
@@ -85,8 +87,9 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=
-github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
 github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8=
+github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 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 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
@@ -128,6 +131,8 @@ github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo=
 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
+github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
+github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
 github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw=
 github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s=
 github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=
@@ -148,19 +153,21 @@ github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnD
 github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
 github.com/yidane/formula v0.0.0-20200220154705-ec0e6bc4831b h1:e9CwJGPvgp5/7wHQcQg0ImESNHOTQfyrrPj6QYloA6A=
 github.com/yidane/formula v0.0.0-20200220154705-ec0e6bc4831b/go.mod h1:vUhtXwXDSh8NKHxIGRY1HvLhoC4Hba1RL62whvmtPUk=
+github.com/ylywyn/jpush-api-go-client v0.0.0-20190906031852-8c4466c6e369/go.mod h1:Nv7wKD2/bCdKUFNKcJRa99a+1+aSLlCRJFriFYdjz/I=
 github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
-golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q=
+golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -173,14 +180,20 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80=
 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE=
-golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
+golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=

+ 2 - 2
services/data_manage/data_calculate.go → services/data/data_calculate.go

@@ -1,4 +1,4 @@
-package data_manage
+package data
 
 import (
 	"errors"
@@ -12,7 +12,7 @@ import (
 	"github.com/yidane/formula"
 )
 
-//刷新数据
+//指标运算刷新数据
 func RefreshCalculate(edbInfoIdArr []*data_manage.EdbInfo, edbInfoId int, edbCode, formulaStr, startDate, endDate string, edbInfoIdBytes []string) (err error) {
 	defer func() {
 		if err != nil {

+ 1 - 1
services/data_manage/data_pb.go → services/data/data_pb.go

@@ -1,4 +1,4 @@
-package data_manage
+package data
 
 import (
 	"encoding/json"

+ 1 - 1
services/data_manage/data_ths.go → services/data/data_ths.go

@@ -1,4 +1,4 @@
-package data_manage
+package data
 
 import (
 	"encoding/json"

+ 1 - 1
services/data_manage/data_wind.go → services/data/data_wind.go

@@ -1,4 +1,4 @@
-package data_manage
+package data
 
 import (
 	"encoding/json"

+ 6 - 5
services/data_manage/edb_info.go → services/data/edb_info.go

@@ -1,4 +1,4 @@
-package data_manage
+package data
 
 import (
 	"errors"
@@ -43,12 +43,12 @@ func RefreshDataFromThs() (err error) {
 				return err
 			}
 		}
-		//minDate, maxDate, err := data_manage.GetEdbDataThsMaxOrMinDate(v.EdbInfoId)
+		//minDate, maxDate, err := data.GetEdbDataThsMaxOrMinDate(v.EdbInfoId)
 		//if err != nil {
 		//	return errors.New("GetEdbDataThsMaxOrMinDate:" + err.Error())
 		//}
 		//fmt.Println("minDate:" + minDate + ";maxDate:" + maxDate)
-		//err = data_manage.ModifyEdbDataInfoDate(v.EdbInfoId, maxDate)
+		//err = data.ModifyEdbDataInfoDate(v.EdbInfoId, maxDate)
 		//if err != nil {
 		//	return errors.New("ModifyEdbDataInfoDate:" + err.Error())
 		//}
@@ -130,12 +130,12 @@ func RefreshDataFromPb() (err error) {
 				return err
 			}
 		}
-		//minDate, maxDate, err := data_manage.GetEdbDataPbMaxOrMinDate(v.EdbInfoId)
+		//minDate, maxDate, err := data.GetEdbDataPbMaxOrMinDate(v.EdbInfoId)
 		//if err != nil {
 		//	return errors.New("GetEdbDataThsMaxOrMinDate:" + err.Error())
 		//}
 		//fmt.Println("minDate:" + minDate + ";maxDate:" + maxDate)
-		//err = data_manage.ModifyEdbDataInfoDate(v.EdbInfoId, maxDate)
+		//err = data.ModifyEdbDataInfoDate(v.EdbInfoId, maxDate)
 		//if err != nil {
 		//	return errors.New("ModifyEdbDataInfoDate:" + err.Error())
 		//}
@@ -189,6 +189,7 @@ func RefreshDataFromCalculate() (err error) {
 	if err != nil {
 		return err
 	}
+
 	for _, v := range items {
 		startDate := v.EndDate.AddDate(0, 0, -3).Format(utils.FormatDate)
 		endDate := time.Now().Format(utils.FormatDate)

+ 1 - 1
services/data_manage/edb_info_calculate.go → services/data/edb_info_calculate.go

@@ -1,4 +1,4 @@
-package data_manage
+package data
 
 import (
 	"fmt"

+ 229 - 0
services/data/edb_info_calculate_ljzzy.go

@@ -0,0 +1,229 @@
+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
+//}

+ 164 - 0
services/data/edb_info_calculate_nszydpjjs.go

@@ -0,0 +1,164 @@
+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
+//}

+ 319 - 0
services/data/edb_info_calculate_tbz.go

@@ -0,0 +1,319 @@
+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
+//}

+ 310 - 0
services/data/edb_info_calculate_tcz.go

@@ -0,0 +1,310 @@
+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
+//}

+ 6 - 6
services/task.go

@@ -3,7 +3,7 @@ package services
 import (
 	"fmt"
 	"github.com/astaxie/beego/toolbox"
-	"hongze/hongze_task/services/data_manage"
+	"hongze/hongze_task/services/data"
 	"hongze/hongze_task/services/company_contract"
 	"hongze/hongze_task/utils"
 )
@@ -92,7 +92,7 @@ func releaseTask(){
 	refreshCalculateData := toolbox.NewTask("refreshCalculateData", "0 10 18 * * *", RefreshCalculateData)
 	toolbox.AddTask("refreshCalculateData", refreshCalculateData)
 
-	checkPbDataInterface := toolbox.NewTask("checkPbDataInterface", "0 */5 * * * * ", data_manage.CheckPbDataInterface)
+	checkPbDataInterface := toolbox.NewTask("checkPbDataInterface", "0 */5 * * * * ", data.CheckPbDataInterface)
 	toolbox.AddTask("checkPbDataInterface", checkPbDataInterface)
 }
 
@@ -135,16 +135,16 @@ func OneMinute() (err error) {
 
 func RefreshData() (err error){
 	//wind
-	go data_manage.RefreshDataFromWind()
+	go data.RefreshDataFromWind()
 	//同花顺
-	go data_manage.RefreshDataFromThs()
+	go data.RefreshDataFromThs()
 	//彭博
-	go data_manage.RefreshDataFromPb()
+	go data.RefreshDataFromPb()
 	return
 }
 
 func RefreshCalculateData() (err error){
 	//计算指标
-	go data_manage.RefreshDataFromCalculate()
+	go data.RefreshDataFromCalculate()
 	return
 }

+ 8 - 4
utils/constants.go

@@ -63,10 +63,14 @@ const (
 
 //数据来源渠道
 const (
-	DATA_SOURCE_THS       = iota + 1 //同花顺
-	DATA_SOURCE_WIND                 //wind
-	DATA_SOURCE_PB                   //彭博
-	DATA_SOURCE_CALCULATE            //计算指标
+	DATA_SOURCE_THS                 = iota + 1 //同花顺
+	DATA_SOURCE_WIND                           //wind
+	DATA_SOURCE_PB                             //彭博
+	DATA_SOURCE_CALCULATE                      //计算指标
+	DATA_SOURCE_CALCULATE_LJZZY                //累计值转月
+	DATA_SOURCE_CALCULATE_TBZ                  //同比值
+	DATA_SOURCE_CALCULATE_TCZ                  //同差值
+	DATA_SOURCE_CALCULATE_NSZYDPJJS            //N数值移动平均计算
 )
 
 //http://datawind.hzinsights.com:8040/hz_server