edb_lib.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. package watch
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/mysteel_watch/global"
  7. "hongze/mysteel_watch/models/index"
  8. "hongze/mysteel_watch/utils"
  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. result, err := HttpPost(postUrl, string(postData), "application/json")
  83. if err != nil {
  84. return
  85. }
  86. if result != nil {
  87. global.LOG.Info(" postHandleMysteelIndex Result: " + string(result))
  88. err = json.Unmarshal(result, &resp)
  89. if err != nil {
  90. return
  91. }
  92. return resp, nil
  93. }
  94. return nil, err
  95. }
  96. // GetMaxFileIndexReq 获取最大文件数请求
  97. type GetMaxFileIndexReq struct {
  98. Frequency string
  99. }
  100. // GetNoMergeIndexByFrequencyCount 获取未合并的指标总数量
  101. func GetNoMergeIndexByFrequencyCount(req GetMaxFileIndexReq) (total float64, err error) {
  102. urlStr := "/mysteel_chemical/getNoMergeIndexByFrequencyCount"
  103. if global.CONFIG.Serve.EdbLibUrl == `` {
  104. err = errors.New("刷新未配置")
  105. return
  106. }
  107. postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  108. postData, err := json.Marshal(req)
  109. if err != nil {
  110. return
  111. }
  112. result, err := HttpPost(postUrl, string(postData), "application/json")
  113. if err != nil {
  114. return
  115. }
  116. var resp BaseResponse
  117. global.LOG.Info(" GetNoMergeIndexByFrequencyCount Result: " + string(result))
  118. err = json.Unmarshal(result, &resp)
  119. if err != nil {
  120. return
  121. }
  122. t, ok := resp.Data.(float64)
  123. if ok {
  124. total = t
  125. }
  126. return
  127. }
  128. // GetMaxFileIndex 获取最大的文件编号下标
  129. func GetMaxFileIndex(req GetMaxFileIndexReq) (baseFromMysteelChemicalIndex index.BaseFromMysteelChemicalIndex, err error) {
  130. urlStr := "/mysteel_chemical/getMaxFileIndex"
  131. if global.CONFIG.Serve.EdbLibUrl == `` {
  132. err = errors.New("刷新未配置")
  133. return
  134. }
  135. postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  136. postData, err := json.Marshal(req)
  137. if err != nil {
  138. return
  139. }
  140. result, err := HttpPost(postUrl, string(postData), "application/json")
  141. if err != nil {
  142. return
  143. }
  144. var resp IndexResponse
  145. global.LOG.Info(" Refresh Result: " + string(result))
  146. err = json.Unmarshal(result, &resp)
  147. if err != nil {
  148. return
  149. }
  150. baseFromMysteelChemicalIndex = resp.Data
  151. return
  152. }
  153. // GetNoMergeIndexByFrequencyPageReq 获取最大文件数请求
  154. type GetNoMergeIndexByFrequencyPageReq struct {
  155. Frequency string
  156. Limit int
  157. }
  158. // GetNoMergeIndexByFrequencyPage 当下需要合并到excel的指标
  159. func GetNoMergeIndexByFrequencyPage(frequency string, limit int) (item []index.BaseFromMysteelChemicalIndex, err error) {
  160. urlStr := "/mysteel_chemical/getNoMergeIndexByFrequencyPage"
  161. if global.CONFIG.Serve.EdbLibUrl == `` {
  162. err = errors.New("刷新未配置")
  163. return
  164. }
  165. postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  166. postData, err := json.Marshal(GetNoMergeIndexByFrequencyPageReq{
  167. Frequency: frequency,
  168. Limit: limit,
  169. })
  170. if err != nil {
  171. return
  172. }
  173. result, err := HttpPost(postUrl, string(postData), "application/json")
  174. if err != nil {
  175. return
  176. }
  177. var resp IndexesResponse
  178. global.LOG.Info(" GetNoMergeIndexByFrequencyPage Result: " + string(result))
  179. err = json.Unmarshal(result, &resp)
  180. if err != nil {
  181. return
  182. }
  183. item = resp.Data
  184. return
  185. }
  186. // GetIndexCountByMergeFilePathReq 获取该文件下标已经存在多少的指标请求体
  187. type GetIndexCountByMergeFilePathReq struct {
  188. MergeFilePath string
  189. }
  190. // GetIndexCountByMergeFilePath 获取该文件下标已经存在多少的指标
  191. func GetIndexCountByMergeFilePath(mergeFilePath string) (total float64, err error) {
  192. if global.CONFIG.Serve.EdbLibUrl == `` {
  193. err = errors.New("刷新未配置")
  194. return
  195. }
  196. if mergeFilePath == "" {
  197. err = fmt.Errorf("文件路径为空")
  198. return
  199. }
  200. baseUrl := "/mysteel_chemical/getIndexCountByMergeFilePath"
  201. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  202. postData, err := json.Marshal(GetIndexCountByMergeFilePathReq{
  203. MergeFilePath: mergeFilePath,
  204. })
  205. result, err := HttpPost(url, string(postData), "application/json")
  206. if err != nil {
  207. return
  208. }
  209. var resp BaseResponse
  210. global.LOG.Info(" GetIndexCountByMergeFilePath Result: " + string(result))
  211. err = json.Unmarshal(result, &resp)
  212. if err != nil {
  213. return
  214. }
  215. t, ok := resp.Data.(float64)
  216. if ok {
  217. total = t
  218. }
  219. return
  220. }
  221. // GetIndexCreate 获取两分钟前新增的指标
  222. func GetIndexCreate() (items []index.BaseFromMysteelChemicalIndex, err error) {
  223. if global.CONFIG.Serve.EdbLibUrl == `` {
  224. err = errors.New("刷新未配置")
  225. return
  226. }
  227. baseUrl := "/mysteel_chemical/getIndexCreate"
  228. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  229. result, err := HttpPost(url, "", "application/json")
  230. if err != nil {
  231. return
  232. }
  233. var resp IndexesResponse
  234. global.LOG.Info(" GetIndexCreate Result: " + string(result))
  235. err = json.Unmarshal(result, &resp)
  236. if err != nil {
  237. return
  238. }
  239. items = resp.Data
  240. return
  241. }
  242. // GetIndexRefreshAllByMergeFile 获取全部刷新所需文件
  243. func GetIndexRefreshAllByMergeFile() (items []index.BaseFromMysteelChemicalIndex, err error) {
  244. if global.CONFIG.Serve.EdbLibUrl == `` {
  245. err = errors.New("刷新未配置")
  246. return
  247. }
  248. baseUrl := "/mysteel_chemical/query/refresh"
  249. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  250. result, err := HttpPost(url, "", "application/json")
  251. if err != nil {
  252. return
  253. }
  254. var resp IndexesResponse
  255. global.LOG.Info(" GetIndexRefreshAllByMergeFile Result: " + string(result))
  256. err = json.Unmarshal(result, &resp)
  257. if err != nil {
  258. return
  259. }
  260. items = resp.Data
  261. return
  262. }
  263. // GetIndexRefreshMethanolByMergeFile 获取需要刷新的甲醇文件
  264. func GetIndexRefreshMethanolByMergeFile() (items []index.BaseFromMysteelChemicalIndex, err error) {
  265. if global.CONFIG.Serve.EdbLibUrl == `` {
  266. err = errors.New("刷新未配置")
  267. return
  268. }
  269. baseUrl := "/mysteel_chemical/getIndexRefreshMethanolByMergeFile"
  270. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  271. result, err := HttpPost(url, "", "application/json")
  272. if err != nil {
  273. return
  274. }
  275. var resp IndexesResponse
  276. global.LOG.Info(" GetIndexRefreshMethanolByMergeFile Result: " + string(result))
  277. err = json.Unmarshal(result, &resp)
  278. if err != nil {
  279. return
  280. }
  281. items = resp.Data
  282. return
  283. }
  284. // GetIndexRefreshMethanolByTimely 获取需要及时刷新的文件
  285. func GetIndexRefreshMethanolByTimely() (items []index.BaseFromMysteelChemicalIndex, err error) {
  286. if global.CONFIG.Serve.EdbLibUrl == `` {
  287. err = errors.New("刷新未配置")
  288. return
  289. }
  290. baseUrl := "/mysteel_chemical/getIndexRefreshMethanolByTimely"
  291. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  292. result, err := HttpPost(url, "", "application/json")
  293. if err != nil {
  294. return
  295. }
  296. var resp IndexesResponse
  297. global.LOG.Info(" GetIndexRefreshMethanolByTimely Result: " + string(result))
  298. err = json.Unmarshal(result, &resp)
  299. if err != nil {
  300. return
  301. }
  302. items = resp.Data
  303. return
  304. }
  305. type GetIndexByFrequencyReq struct {
  306. Frequency string
  307. }
  308. // GetIndexByFrequency 根据频率获取指标
  309. func GetIndexByFrequency(frequency string) (items []index.BaseFromMysteelChemicalIndex, err error) {
  310. if global.CONFIG.Serve.EdbLibUrl == `` {
  311. err = errors.New("刷新未配置")
  312. return
  313. }
  314. if frequency == "" {
  315. err = fmt.Errorf("频率为空")
  316. return
  317. }
  318. baseUrl := "/mysteel_chemical/getIndexByFrequency"
  319. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  320. postData, err := json.Marshal(GetIndexByFrequencyReq{
  321. Frequency: frequency,
  322. })
  323. result, err := HttpPost(url, string(postData), "application/json")
  324. if err != nil {
  325. return
  326. }
  327. var resp IndexesResponse
  328. global.LOG.Info(" GetIndexByFrequency Result: " + string(result))
  329. err = json.Unmarshal(result, &resp)
  330. if err != nil {
  331. return
  332. }
  333. items = resp.Data
  334. return
  335. }
  336. type GetIndexRefreshWeekReq struct {
  337. NowWeekZn string
  338. StartTime string
  339. EndTime string
  340. }
  341. // GetIndexRefreshWeek 根据周获取指标
  342. func GetIndexRefreshWeek(nowWeekZn, startTime, endTime string) (items []index.BaseFromMysteelChemicalIndex, err error) {
  343. if global.CONFIG.Serve.EdbLibUrl == `` {
  344. err = errors.New("刷新未配置")
  345. return
  346. }
  347. if nowWeekZn == "" || startTime == "" || endTime == "" {
  348. err = fmt.Errorf("参数有误, nowWeekZn: %s, startTime: %s, endTime: %s", nowWeekZn, startTime, endTime)
  349. return
  350. }
  351. baseUrl := "/mysteel_chemical/getIndexRefreshWeek"
  352. url := fmt.Sprint(global.CONFIG.Serve.EdbLibUrl, baseUrl)
  353. postData, err := json.Marshal(GetIndexRefreshWeekReq{
  354. NowWeekZn: nowWeekZn,
  355. StartTime: startTime,
  356. EndTime: endTime,
  357. })
  358. result, err := HttpPost(url, string(postData), "application/json")
  359. if err != nil {
  360. return
  361. }
  362. var resp IndexesResponse
  363. global.LOG.Info(" GetIndexRefreshWeek Result: " + string(result))
  364. err = json.Unmarshal(result, &resp)
  365. if err != nil {
  366. return
  367. }
  368. items = resp.Data
  369. return
  370. }
  371. // UpdateIndexReq 更新指标
  372. type UpdateIndexReq struct {
  373. Item *index.BaseFromMysteelChemicalIndex
  374. UpdateCols []string
  375. }
  376. // MultiUpdateIndex 批量更新指标
  377. func MultiUpdateIndex(req []UpdateIndexReq) (err error) {
  378. if global.CONFIG.Serve.EdbLibUrl == `` {
  379. err = errors.New("刷新未配置")
  380. return
  381. }
  382. if len(req) == 0 {
  383. err = fmt.Errorf("无指标需要更新")
  384. return
  385. }
  386. urlStr := "/mysteel_chemical/multiUpdateIndex"
  387. postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
  388. postData, err := json.Marshal(req)
  389. if err != nil {
  390. return
  391. }
  392. result, err := HttpPost(postUrl, string(postData), "application/json")
  393. if err != nil {
  394. return
  395. }
  396. var resp BaseResponse
  397. global.LOG.Info(" MultiUpdateIndex Result: " + string(result))
  398. err = json.Unmarshal(result, &resp)
  399. if err != nil {
  400. return
  401. }
  402. if resp.Ret != 200 {
  403. err = fmt.Errorf(resp.ErrMsg)
  404. }
  405. return
  406. }
  407. func HttpPost(url, postData string, params ...string) ([]byte, error) {
  408. body := ioutil.NopCloser(strings.NewReader(postData))
  409. client := &http.Client{}
  410. req, err := http.NewRequest("POST", url, body)
  411. if err != nil {
  412. return nil, err
  413. }
  414. contentType := "application/x-www-form-urlencoded;charset=utf-8"
  415. if len(params) > 0 && params[0] != "" {
  416. contentType = params[0]
  417. }
  418. req.Header.Set("Content-Type", contentType)
  419. req.Header.Set("authorization", utils.MD5(utils.APP_EDB_LIB_NAME_EN+utils.EDB_LIB_Md5_KEY))
  420. resp, err := client.Do(req)
  421. if resp != nil {
  422. defer resp.Body.Close()
  423. b, err := ioutil.ReadAll(resp.Body)
  424. fmt.Println("HttpPost:" + string(b))
  425. return b, err
  426. }
  427. return nil, err
  428. }