edb_lib.go 13 KB

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