edb_lib.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. package watch
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/mysteel_watch/global"
  6. "eta/mysteel_watch/models/index"
  7. "eta/mysteel_watch/utils"
  8. "fmt"
  9. "io/ioutil"
  10. "net/http"
  11. "strings"
  12. )
  13. type BaseResponse struct {
  14. Ret int
  15. Msg string
  16. ErrMsg string
  17. ErrCode string
  18. Data interface{}
  19. Success bool `description:"true 执行成功,false 执行失败"`
  20. IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
  21. IsAddLog bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
  22. }
  23. type IndexesResponse struct {
  24. Ret int
  25. Msg string
  26. ErrMsg string
  27. ErrCode string
  28. Data []index.BaseFromMysteelChemicalIndex
  29. Success bool `description:"true 执行成功,false 执行失败"`
  30. IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
  31. IsAddLog bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
  32. }
  33. type IndexResponse struct {
  34. Ret int
  35. Msg string
  36. ErrMsg string
  37. ErrCode string
  38. Data index.BaseFromMysteelChemicalIndex
  39. Success bool `description:"true 执行成功,false 执行失败"`
  40. IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
  41. IsAddLog bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
  42. }
  43. // postRefreshEdbData 刷新指标数据
  44. //func postRefreshEdbData(param map[string]interface{}) (resp *BaseResponse, err error) {
  45. // urlStr := "mysteel_chemical/refresh"
  46. //
  47. // if global.CONFIG.Serve.EdbLibUrl == `` {
  48. // err = errors.New("刷新未配置")
  49. // return
  50. // }
  51. // postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  52. // postData, err := json.Marshal(param)
  53. // if err != nil {
  54. // return
  55. // }
  56. // result, err := HttpPost(postUrl, string(postData), "application/json")
  57. // if err != nil {
  58. // return
  59. // }
  60. // if result != nil {
  61. // global.LOG.Info(" Refresh Result: " + string(result))
  62. // err = json.Unmarshal(result, &resp)
  63. // if err != nil {
  64. // return
  65. // }
  66. // return resp, nil
  67. // }
  68. // return nil, err
  69. //}
  70. // postHandleMysteelIndex 处理指标和指标数据
  71. func postHandleMysteelIndex(req *HandleMysteelIndexReq) (resp *BaseResponse, err error) {
  72. urlStr := "/mysteel_chemical/handle/mysteel/index"
  73. if global.CONFIG.Serve.EdbLibUrl == `` {
  74. err = errors.New("刷新未配置")
  75. return
  76. }
  77. postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  78. postData, err := json.Marshal(req)
  79. if err != nil {
  80. return
  81. }
  82. //fmt.Println("postData:" + string(postData))
  83. global.LOG.Debug(" postData: " + string(postData))
  84. result, err := HttpPost(postUrl, string(postData), "application/json")
  85. if err != nil {
  86. return
  87. }
  88. if result != nil {
  89. global.LOG.Debug(" postHandleMysteelIndex Result: " + string(result))
  90. err = json.Unmarshal(result, &resp)
  91. if err != nil {
  92. return
  93. }
  94. return resp, nil
  95. }
  96. return nil, err
  97. }
  98. // GetMaxFileIndexReq 获取最大文件数请求
  99. type GetMaxFileIndexReq struct {
  100. Frequency string
  101. EndDate string
  102. TerminalCode string `description:"终端编码"`
  103. }
  104. // GetNoMergeIndexByFrequencyCount 获取未合并的指标总数量
  105. func GetNoMergeIndexByFrequencyCount(req GetMaxFileIndexReq) (total float64, err error) {
  106. urlStr := "/mysteel_chemical/getNoMergeIndexByFrequencyCount"
  107. if global.CONFIG.Serve.EdbLibUrl == `` {
  108. err = errors.New("刷新未配置")
  109. return
  110. }
  111. postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  112. postData, err := json.Marshal(req)
  113. if err != nil {
  114. return
  115. }
  116. result, err := HttpPost(postUrl, string(postData), "application/json")
  117. if err != nil {
  118. return
  119. }
  120. var resp BaseResponse
  121. global.LOG.Debug(" GetNoMergeIndexByFrequencyCount Result: " + string(result))
  122. err = json.Unmarshal(result, &resp)
  123. if err != nil {
  124. return
  125. }
  126. t, ok := resp.Data.(float64)
  127. if ok {
  128. total = t
  129. }
  130. return
  131. }
  132. // GetMaxFileIndex 获取最大的文件编号下标
  133. func GetMaxFileIndex(req GetMaxFileIndexReq) (baseFromMysteelChemicalIndex index.BaseFromMysteelChemicalIndex, err error) {
  134. urlStr := "/mysteel_chemical/getMaxFileIndex"
  135. if global.CONFIG.Serve.EdbLibUrl == `` {
  136. err = errors.New("刷新未配置")
  137. return
  138. }
  139. postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  140. postData, err := json.Marshal(req)
  141. if err != nil {
  142. return
  143. }
  144. result, err := HttpPost(postUrl, string(postData), "application/json")
  145. if err != nil {
  146. return
  147. }
  148. var resp IndexResponse
  149. global.LOG.Debug(" Refresh Result: " + string(result))
  150. err = json.Unmarshal(result, &resp)
  151. if err != nil {
  152. return
  153. }
  154. baseFromMysteelChemicalIndex = resp.Data
  155. return
  156. }
  157. // GetNoMergeIndexByFrequencyPageReq 获取最大文件数请求
  158. type GetNoMergeIndexByFrequencyPageReq struct {
  159. Frequency string
  160. Limit int
  161. }
  162. type GetNoMergeIndexByFrequencyPageReqV2 struct {
  163. Frequency string
  164. EndDate string
  165. StartSize int
  166. PageSize int
  167. TerminalCode string `description:"终端编码"`
  168. }
  169. // GetNoMergeIndexByFrequencyPage 当下需要合并到excel的指标
  170. func GetNoMergeIndexByFrequencyPage(frequency string, limit int) (item []index.BaseFromMysteelChemicalIndex, err error) {
  171. urlStr := "/mysteel_chemical/getNoMergeIndexByFrequencyPage"
  172. if global.CONFIG.Serve.EdbLibUrl == `` {
  173. err = errors.New("刷新未配置")
  174. return
  175. }
  176. postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  177. postData, err := json.Marshal(GetNoMergeIndexByFrequencyPageReq{
  178. Frequency: frequency,
  179. Limit: limit,
  180. })
  181. if err != nil {
  182. return
  183. }
  184. result, err := HttpPost(postUrl, string(postData), "application/json")
  185. if err != nil {
  186. return
  187. }
  188. var resp IndexesResponse
  189. global.LOG.Debug(" GetNoMergeIndexByFrequencyPage Result: " + string(result))
  190. err = json.Unmarshal(result, &resp)
  191. if err != nil {
  192. return
  193. }
  194. item = resp.Data
  195. return
  196. }
  197. // GetIndexCountByMergeFilePathReq 获取该文件下标已经存在多少的指标请求体
  198. type GetIndexCountByMergeFilePathReq struct {
  199. MergeFilePath string
  200. }
  201. // GetIndexCountByMergeFilePath 获取该文件下标已经存在多少的指标
  202. func GetIndexCountByMergeFilePath(mergeFilePath string) (total float64, err error) {
  203. if global.CONFIG.Serve.EdbLibUrl == `` {
  204. err = errors.New("刷新未配置")
  205. return
  206. }
  207. if mergeFilePath == "" {
  208. err = fmt.Errorf("文件路径为空")
  209. return
  210. }
  211. baseUrl := "/mysteel_chemical/getIndexCountByMergeFilePath"
  212. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  213. postData, err := json.Marshal(GetIndexCountByMergeFilePathReq{
  214. MergeFilePath: mergeFilePath,
  215. })
  216. result, err := HttpPost(url, string(postData), "application/json")
  217. if err != nil {
  218. return
  219. }
  220. var resp BaseResponse
  221. global.LOG.Debug(" GetIndexCountByMergeFilePath Result: " + string(result))
  222. err = json.Unmarshal(result, &resp)
  223. if err != nil {
  224. return
  225. }
  226. t, ok := resp.Data.(float64)
  227. if ok {
  228. total = t
  229. }
  230. return
  231. }
  232. // GetIndexCreate 获取两分钟前新增的指标
  233. func GetIndexCreate() (items []index.BaseFromMysteelChemicalIndex, err error) {
  234. if global.CONFIG.Serve.EdbLibUrl == `` {
  235. err = errors.New("刷新未配置")
  236. return
  237. }
  238. baseUrl := "/mysteel_chemical/getIndexCreate?TerminalCode=" + global.CONFIG.Serve.TerminalCode
  239. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  240. result, err := HttpPost(url, "", "application/json")
  241. if err != nil {
  242. return
  243. }
  244. var resp IndexesResponse
  245. global.LOG.Debug(" GetIndexCreate Result: " + string(result))
  246. err = json.Unmarshal(result, &resp)
  247. if err != nil {
  248. return
  249. }
  250. items = resp.Data
  251. return
  252. }
  253. // GetIndexRefreshAllByMergeFile 获取全部刷新所需文件
  254. func GetIndexRefreshAllByMergeFile() (items []index.BaseFromMysteelChemicalIndex, err error) {
  255. if global.CONFIG.Serve.EdbLibUrl == `` {
  256. err = errors.New("刷新未配置")
  257. return
  258. }
  259. baseUrl := "/mysteel_chemical/query/refresh"
  260. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  261. result, err := HttpPost(url, "", "application/json")
  262. if err != nil {
  263. return
  264. }
  265. var resp IndexesResponse
  266. global.LOG.Debug(" GetIndexRefreshAllByMergeFile Result: " + string(result))
  267. err = json.Unmarshal(result, &resp)
  268. if err != nil {
  269. return
  270. }
  271. items = resp.Data
  272. return
  273. }
  274. // GetIndexRefreshMethanolByMergeFile 获取需要刷新的甲醇文件
  275. func GetIndexRefreshMethanolByMergeFile() (items []index.BaseFromMysteelChemicalIndex, err error) {
  276. if global.CONFIG.Serve.EdbLibUrl == `` {
  277. err = errors.New("刷新未配置")
  278. return
  279. }
  280. baseUrl := "/mysteel_chemical/getIndexRefreshMethanolByMergeFile"
  281. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  282. result, err := HttpPost(url, "", "application/json")
  283. if err != nil {
  284. return
  285. }
  286. var resp IndexesResponse
  287. global.LOG.Debug(" GetIndexRefreshMethanolByMergeFile Result: " + string(result))
  288. err = json.Unmarshal(result, &resp)
  289. if err != nil {
  290. return
  291. }
  292. items = resp.Data
  293. return
  294. }
  295. // GetIndexRefreshMethanolByTimely 获取需要及时刷新的文件
  296. func GetIndexRefreshMethanolByTimely() (items []index.BaseFromMysteelChemicalIndex, err error) {
  297. if global.CONFIG.Serve.EdbLibUrl == `` {
  298. err = errors.New("刷新未配置")
  299. return
  300. }
  301. baseUrl := "/mysteel_chemical/getIndexRefreshMethanolByTimely"
  302. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  303. result, err := HttpPost(url, "", "application/json")
  304. if err != nil {
  305. return
  306. }
  307. var resp IndexesResponse
  308. global.LOG.Debug(" GetIndexRefreshMethanolByTimely Result: " + string(result))
  309. err = json.Unmarshal(result, &resp)
  310. if err != nil {
  311. return
  312. }
  313. items = resp.Data
  314. return
  315. }
  316. type GetIndexByFrequencyReq struct {
  317. Frequency string
  318. }
  319. // GetIndexByFrequency 根据频率获取指标
  320. func GetIndexByFrequency(frequency string) (items []index.BaseFromMysteelChemicalIndex, err error) {
  321. if global.CONFIG.Serve.EdbLibUrl == `` {
  322. err = errors.New("刷新未配置")
  323. return
  324. }
  325. if frequency == "" {
  326. err = fmt.Errorf("频率为空")
  327. return
  328. }
  329. baseUrl := "/mysteel_chemical/getIndexByFrequency"
  330. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  331. postData, err := json.Marshal(GetIndexByFrequencyReq{
  332. Frequency: frequency,
  333. })
  334. result, err := HttpPost(url, string(postData), "application/json")
  335. if err != nil {
  336. return
  337. }
  338. var resp IndexesResponse
  339. global.LOG.Debug(" GetIndexByFrequency Result: " + string(result))
  340. err = json.Unmarshal(result, &resp)
  341. if err != nil {
  342. return
  343. }
  344. items = resp.Data
  345. return
  346. }
  347. type GetIndexRefreshWeekReq struct {
  348. NowWeekZn string
  349. StartTime string
  350. EndTime string
  351. }
  352. // GetIndexRefreshWeek 根据周获取指标
  353. func GetIndexRefreshWeek(nowWeekZn, startTime, endTime string) (items []index.BaseFromMysteelChemicalIndex, err error) {
  354. if global.CONFIG.Serve.EdbLibUrl == `` {
  355. err = errors.New("刷新未配置")
  356. return
  357. }
  358. if nowWeekZn == "" || startTime == "" || endTime == "" {
  359. err = fmt.Errorf("参数有误, nowWeekZn: %s, startTime: %s, endTime: %s", nowWeekZn, startTime, endTime)
  360. return
  361. }
  362. baseUrl := "/mysteel_chemical/getIndexRefreshWeek"
  363. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  364. postData, err := json.Marshal(GetIndexRefreshWeekReq{
  365. NowWeekZn: nowWeekZn,
  366. StartTime: startTime,
  367. EndTime: endTime,
  368. })
  369. result, err := HttpPost(url, string(postData), "application/json")
  370. if err != nil {
  371. return
  372. }
  373. var resp IndexesResponse
  374. global.LOG.Debug(" GetIndexRefreshWeek Result: " + string(result))
  375. err = json.Unmarshal(result, &resp)
  376. if err != nil {
  377. return
  378. }
  379. items = resp.Data
  380. return
  381. }
  382. // UpdateIndexReq 更新指标
  383. type UpdateIndexReq struct {
  384. Item *index.BaseFromMysteelChemicalIndex
  385. UpdateCols []string
  386. }
  387. // MultiUpdateIndex 批量更新指标
  388. func MultiUpdateIndex(req []UpdateIndexReq) (err error) {
  389. if global.CONFIG.Serve.EdbLibUrl == `` {
  390. err = errors.New("刷新未配置")
  391. return
  392. }
  393. if len(req) == 0 {
  394. err = fmt.Errorf("无指标需要更新")
  395. return
  396. }
  397. urlStr := "/mysteel_chemical/multiUpdateIndex"
  398. postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  399. postData, err := json.Marshal(req)
  400. if err != nil {
  401. return
  402. }
  403. result, err := HttpPost(postUrl, string(postData), "application/json")
  404. if err != nil {
  405. return
  406. }
  407. var resp BaseResponse
  408. global.LOG.Debug(" MultiUpdateIndex Result: " + string(result))
  409. err = json.Unmarshal(result, &resp)
  410. if err != nil {
  411. return
  412. }
  413. if resp.Ret != 200 {
  414. err = fmt.Errorf(resp.ErrMsg)
  415. }
  416. return
  417. }
  418. type RefreshCheckByDayReq struct {
  419. Source int `description:"来源id"`
  420. LatestDate string `description:"数据最新日期"`
  421. FrequencyBatch string `description:"更新频度"`
  422. }
  423. type RefreshCheckByDayData struct {
  424. UpdateNum int `description:"已更新指标数"`
  425. UnUpdateNum int `description:"未更新指标数"`
  426. }
  427. type RefreshCheckByDayResponse struct {
  428. Ret int
  429. Msg string
  430. ErrMsg string
  431. ErrCode string
  432. Data RefreshCheckByDayData
  433. Success bool `description:"true 执行成功,false 执行失败"`
  434. }
  435. // RefreshCheckByDay 每日更新检查
  436. func RefreshCheckByDay(req RefreshCheckByDayReq) (data RefreshCheckByDayData, err error) {
  437. if global.CONFIG.Serve.EdbLibUrl == `` {
  438. err = errors.New("刷新未配置")
  439. return
  440. }
  441. urlStr := "/edb_info/refresh_check"
  442. postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  443. postData, err := json.Marshal(req)
  444. if err != nil {
  445. return
  446. }
  447. result, err := HttpPost(postUrl, string(postData), "application/json")
  448. if err != nil {
  449. return
  450. }
  451. var resp RefreshCheckByDayResponse
  452. global.LOG.Debug(" RefreshCheckByDay Result: " + string(result))
  453. err = json.Unmarshal(result, &resp)
  454. if err != nil {
  455. return
  456. }
  457. if resp.Ret != 200 {
  458. err = fmt.Errorf(resp.ErrMsg)
  459. }
  460. data = resp.Data
  461. return
  462. }
  463. func HttpPost(url, postData string, params ...string) ([]byte, error) {
  464. body := ioutil.NopCloser(strings.NewReader(postData))
  465. client := &http.Client{}
  466. req, err := http.NewRequest("POST", url, body)
  467. if err != nil {
  468. return nil, err
  469. }
  470. contentType := "application/x-www-form-urlencoded;charset=utf-8"
  471. if len(params) > 0 && params[0] != "" {
  472. contentType = params[0]
  473. }
  474. req.Header.Set("Content-Type", contentType)
  475. req.Header.Set("authorization", utils.MD5(global.CONFIG.Serve.AppEdbLibNameEn+global.CONFIG.Serve.EdbLibMd5Key))
  476. resp, err := client.Do(req)
  477. if resp != nil {
  478. defer resp.Body.Close()
  479. b, err := ioutil.ReadAll(resp.Body)
  480. //fmt.Println("HttpPost:" + string(b))
  481. return b, err
  482. }
  483. return nil, err
  484. }