watch.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. package watch
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/mysteel_watch/global"
  6. "hongze/mysteel_watch/models"
  7. "hongze/mysteel_watch/models/index"
  8. "hongze/mysteel_watch/utils"
  9. "io/ioutil"
  10. "log"
  11. "net/http"
  12. "os"
  13. "path/filepath"
  14. "strings"
  15. "sync"
  16. "time"
  17. "github.com/fsnotify/fsnotify"
  18. "github.com/xuri/excelize/v2"
  19. )
  20. func ListenFolderNew() {
  21. fmt.Println("-----文件夹监听-------")
  22. watcher, err := fsnotify.NewWatcher()
  23. if err != nil {
  24. fmt.Println("fsnotify.NewWatcher err:" + err.Error())
  25. log.Fatal(err)
  26. }
  27. defer watcher.Close()
  28. done2 := make(chan bool)
  29. go func() {
  30. for {
  31. select {
  32. case event, ok := <-watcher.Events:
  33. fmt.Println("event.Name", event.Name)
  34. fmt.Println(event.Op)
  35. if ok && event.Op == fsnotify.Create &&
  36. !strings.Contains(event.Name, "tmp") &&
  37. !strings.Contains(event.Name, ".TMP") &&
  38. !strings.Contains(event.Name, "~") &&
  39. (strings.Contains(event.Name, "xlsx") || strings.Contains(event.Name, "xls")) {
  40. WatchIndexFile(event.Name)
  41. }
  42. case err := <-watcher.Errors:
  43. fmt.Println("watcher.Errors:", err)
  44. log.Println("error:", err)
  45. case <-time.After(60 * time.Second):
  46. continue
  47. }
  48. }
  49. }()
  50. fmt.Println("watch dir:" + utils.IndexSaveDir)
  51. err = watcher.Add(utils.IndexSaveDir)
  52. if err != nil {
  53. fmt.Println("watcher.Add:" + err.Error())
  54. log.Fatal(err)
  55. }
  56. <-done2
  57. }
  58. // ListenFolderNewMerge 生产合并文件夹监听
  59. func ListenFolderNewMerge() {
  60. fmt.Println("-----生产合并文件夹监听-------")
  61. watcher, err := fsnotify.NewWatcher()
  62. if err != nil {
  63. log.Fatal(err)
  64. }
  65. defer watcher.Close()
  66. done2 := make(chan bool)
  67. go func() {
  68. for {
  69. select {
  70. case event, ok := <-watcher.Events:
  71. if ok && (event.Op == fsnotify.Create || event.Op == fsnotify.Write) &&
  72. !strings.Contains(event.Name, "tmp") &&
  73. !strings.Contains(event.Name, ".TMP") &&
  74. !strings.Contains(event.Name, "~") &&
  75. (strings.Contains(event.Name, "xlsx") || strings.Contains(event.Name, "xls")) {
  76. WatchIndexFileMergeRelease(event.Name)
  77. }
  78. case err := <-watcher.Errors:
  79. log.Println("error:", err)
  80. case <-time.After(60 * time.Second):
  81. continue
  82. }
  83. }
  84. }()
  85. err = watcher.Add(utils.IndexMsergeSaveDir)
  86. if err != nil {
  87. log.Fatal(err)
  88. }
  89. <-done2
  90. }
  91. // WatchIndexFile 检测指标文件
  92. func WatchIndexFile(filePath string) {
  93. fmt.Println("filePath:", filePath)
  94. //filePath:D:\mysteel_data\CM0000568866_release.xlsx
  95. time.Sleep(10 * time.Second)
  96. if !utils.FileIsExist(filePath) {
  97. fmt.Println("filePath is not exist:" + filePath)
  98. return
  99. }
  100. //读取文件内容
  101. global.LOG.Info("WatchFile:" + filePath)
  102. f, err := excelize.OpenFile(filePath)
  103. global.LOG.Info("OpenFile:" + filePath)
  104. if err != nil {
  105. fmt.Println("OpenFile:" + filePath + ",Err:" + err.Error())
  106. return
  107. }
  108. var newFilePath string
  109. defer func() {
  110. if err := f.Close(); err != nil {
  111. fmt.Println("FileClose Err:" + err.Error())
  112. return
  113. }
  114. //重命名文件
  115. if filePath != newFilePath {
  116. err := os.Rename(filePath, newFilePath)
  117. if err != nil {
  118. fmt.Println("os.Rename Err:" + err.Error())
  119. }
  120. }
  121. }()
  122. var runMode string
  123. if strings.Contains(filePath, "debug") {
  124. runMode = "debug"
  125. } else {
  126. runMode = "release"
  127. }
  128. dir, fp := filepath.Split(filePath)
  129. var wg = sync.WaitGroup{}
  130. wg.Add(1)
  131. go func() {
  132. sheetList := f.GetSheetList()
  133. for _, sv := range sheetList {
  134. var indexName, indexCode, unit, source, frequency, startDate, endDate, describe, updateDate string
  135. var indexId int64
  136. rows, err := f.GetRows(sv)
  137. if err != nil {
  138. fmt.Println("f.GetRows:err:" + err.Error())
  139. return
  140. }
  141. indexObj := new(index.BaseFromMysteelChemicalIndex)
  142. dataList := make([]index.BaseFromMysteelChemicalData, 0)
  143. dataMap := make(map[string]string)
  144. for rk, row := range rows {
  145. if rk > 0 {
  146. if rk < 10 {
  147. for ck, colCell := range row {
  148. if ck == 1 {
  149. if rk == 1 {
  150. indexName = colCell
  151. }
  152. if rk == 2 {
  153. unit = colCell
  154. }
  155. if rk == 3 {
  156. source = colCell
  157. }
  158. if rk == 4 {
  159. indexCode = colCell
  160. }
  161. if rk == 5 {
  162. frequency = colCell
  163. if !strings.Contains(frequency, "度") {
  164. frequency = frequency + "度"
  165. }
  166. }
  167. if rk == 6 {
  168. dateArr := strings.Split(colCell, "~")
  169. if len(dateArr) >= 2 {
  170. startDate = dateArr[0]
  171. endDate = dateArr[1]
  172. }
  173. }
  174. if rk == 7 {
  175. describe = colCell
  176. }
  177. if rk == 9 {
  178. updateDate = colCell
  179. }
  180. }
  181. }
  182. if rk == 9 {
  183. if indexName == "" {
  184. global.LOG.Info("未刷新到指标数据:filePath:" + filePath)
  185. break
  186. }
  187. //判断指标是否存在
  188. var isAdd int
  189. item, err := indexObj.GetIndexItem(runMode, indexCode)
  190. if err != nil {
  191. if err.Error() == "record not found" {
  192. isAdd = 1
  193. } else {
  194. isAdd = -1
  195. fmt.Println("GetIndexItem Err:" + err.Error())
  196. return
  197. }
  198. }
  199. if item != nil && item.BaseFromMysteelChemicalIndexId > 0 {
  200. fmt.Println("item:", item)
  201. isAdd = 2
  202. } else {
  203. isAdd = 1
  204. }
  205. fmt.Println("isAdd:", isAdd)
  206. if !strings.Contains(frequency, "度") {
  207. frequency = frequency + "度"
  208. }
  209. var frequencyStr string
  210. if strings.Contains(frequency, "日") {
  211. frequencyStr = "day"
  212. } else if strings.Contains(frequency, "周") {
  213. frequencyStr = "week"
  214. } else if strings.Contains(frequency, "月") || strings.Contains(frequency, "旬") {
  215. frequencyStr = "month"
  216. } else if strings.Contains(frequency, "年") {
  217. frequencyStr = "year"
  218. }
  219. frequencyStr = "_" + frequencyStr
  220. if !strings.Contains(filePath, frequencyStr) {
  221. fpArr := strings.Split(fp, "_")
  222. for k, v := range fpArr {
  223. if k == 0 {
  224. newFilePath = v + frequencyStr
  225. } else {
  226. newFilePath = newFilePath + "_" + v
  227. }
  228. }
  229. newFilePath = dir + newFilePath
  230. } else {
  231. newFilePath = filePath
  232. }
  233. if isAdd == 1 {
  234. indexObj.IndexCode = indexCode
  235. indexObj.IndexName = indexName
  236. indexObj.Unit = unit
  237. indexObj.Source = source
  238. indexObj.Describe = describe
  239. indexObj.StartDate, _ = time.ParseInLocation(utils.FormatDate, startDate, time.Local)
  240. indexObj.EndDate, _ = time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  241. indexObj.Frequency = frequency
  242. indexObj.FilePath = newFilePath
  243. err = indexObj.Add(runMode)
  244. if err != nil {
  245. fmt.Println("add err:" + err.Error())
  246. return
  247. }
  248. indexId = indexObj.BaseFromMysteelChemicalIndexId
  249. } else if isAdd == 2 {
  250. indexObj.IndexCode = indexCode
  251. indexObj.IndexName = indexName
  252. indexObj.Unit = unit
  253. indexObj.Source = source
  254. indexObj.Describe = describe
  255. indexObj.StartDate, _ = time.ParseInLocation(utils.FormatDate, startDate, time.Local)
  256. indexObj.EndDate, _ = time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  257. indexObj.Frequency = frequency
  258. indexObj.FilePath = newFilePath
  259. indexObj.ModifyTime = time.Now()
  260. indexId = item.BaseFromMysteelChemicalIndexId
  261. //修改数据
  262. updateColsArr := make([]string, 0)
  263. updateColsArr = append(updateColsArr, "index_name")
  264. updateColsArr = append(updateColsArr, "unit")
  265. updateColsArr = append(updateColsArr, "source")
  266. updateColsArr = append(updateColsArr, "frequency")
  267. updateColsArr = append(updateColsArr, "start_date")
  268. updateColsArr = append(updateColsArr, "end_date")
  269. updateColsArr = append(updateColsArr, "describe")
  270. updateColsArr = append(updateColsArr, "end_date")
  271. updateColsArr = append(updateColsArr, "modify_time")
  272. updateColsArr = append(updateColsArr, "file_path")
  273. indexObj.Update(runMode, updateColsArr)
  274. dataObj := new(index.BaseFromMysteelChemicalData)
  275. //获取已存在的所有数据
  276. dataList, err := dataObj.GetIndexDataList(runMode, indexCode)
  277. if err != nil {
  278. fmt.Println("GetIndexDataList Err:" + err.Error())
  279. return
  280. }
  281. fmt.Println("dataListLen:", len(dataList))
  282. for _, v := range dataList {
  283. dateStr := v.DataTime.Format(utils.FormatDate)
  284. dataMap[dateStr] = v.Value
  285. }
  286. }
  287. }
  288. } else {
  289. var date, value string
  290. for ck, colCell := range row {
  291. if ck == 0 {
  292. date = colCell
  293. } else {
  294. value = colCell
  295. }
  296. }
  297. if _, ok := dataMap[date]; !ok {
  298. dateTime, err := time.ParseInLocation(utils.FormatDate, date, time.Local)
  299. if err != nil {
  300. fmt.Println("time.ParseInLocation Err:" + err.Error())
  301. return
  302. }
  303. if !strings.Contains(value, "#N/A") {
  304. dataItem := new(index.BaseFromMysteelChemicalData)
  305. dataItem.BaseFromMysteelChemicalIndexId = indexId
  306. dataItem.IndexCode = indexCode
  307. dataItem.DataTime = dateTime
  308. dataItem.Value = value
  309. dataItem.UpdateDate = updateDate
  310. dataItem.CreateTime = time.Now()
  311. dataItem.ModifyTime = time.Now()
  312. dataList = append(dataList, *dataItem)
  313. }
  314. }
  315. }
  316. }
  317. }
  318. if len(dataList) > 0 {
  319. dataObj := new(index.BaseFromMysteelChemicalData)
  320. err = dataObj.Add(runMode, dataList)
  321. if err != nil {
  322. fmt.Println("dataObj.Add() Err:" + err.Error())
  323. }
  324. }
  325. }
  326. wg.Done()
  327. }()
  328. wg.Wait()
  329. }
  330. // WatchIndexFileMergeRelease 监听生产的合并excel文件的处理
  331. func WatchIndexFileMergeRelease(filePath string) {
  332. fmt.Println("filePath:", filePath)
  333. //return
  334. //filePath:D:\mysteel_data\CM0000568866_release.xlsx
  335. time.Sleep(5 * time.Second)
  336. if !utils.FileIsExist(filePath) {
  337. fmt.Println("filePath is not exist:" + filePath)
  338. return
  339. }
  340. //读取文件内容
  341. global.LOG.Info("WatchFile:" + filePath)
  342. f, err := excelize.OpenFile(filePath)
  343. global.LOG.Info("OpenFile:" + filePath)
  344. if err != nil {
  345. fmt.Println("OpenFile:" + filePath + ",Err:" + err.Error())
  346. return
  347. }
  348. defer func() {
  349. if err := f.Close(); err != nil {
  350. fmt.Println("FileClose Err:" + err.Error())
  351. return
  352. }
  353. }()
  354. runMode := "release"
  355. var wg = sync.WaitGroup{}
  356. wg.Add(1)
  357. go func() {
  358. sheetList := f.GetSheetList()
  359. for _, sv := range sheetList {
  360. lenRow := 0 //指标数
  361. // excel表的指标数据
  362. indexExcelDataList := make([]map[string]string, 0)
  363. indexNameMap := make(map[int]string)
  364. indexCodeMap := make(map[int]string)
  365. unitMap := make(map[int]string)
  366. sourceMap := make(map[int]string)
  367. frequencyMap := make(map[int]string)
  368. startDateMap := make(map[int]string)
  369. endDateMap := make(map[int]string)
  370. describeMap := make(map[int]string)
  371. updateDateMap := make(map[int]string)
  372. rows, err := f.GetRows(sv)
  373. if err != nil {
  374. fmt.Println("GetRows Err:", err)
  375. return
  376. }
  377. for row, cols := range rows {
  378. if row == 0 {
  379. // 第一行是 钢联数据的备注
  380. continue
  381. }
  382. // 指标名称
  383. if row == 1 {
  384. lenRow = len(cols) - 1
  385. for i := 1; i <= lenRow; i++ {
  386. tmpIndexExcelDataList := make(map[string]string, 0)
  387. indexExcelDataList = append(indexExcelDataList, tmpIndexExcelDataList)
  388. }
  389. }
  390. if row < 10 {
  391. for k, colCell := range cols {
  392. switch row {
  393. case 1: //指标名称
  394. indexNameMap[k-1] = colCell
  395. case 2: //单位
  396. unitMap[k-1] = colCell
  397. case 3: //数据来源
  398. sourceMap[k-1] = colCell
  399. case 4: //指标编码
  400. indexCodeMap[k-1] = colCell
  401. case 5: //频度
  402. tmpFrequency := colCell
  403. if !strings.Contains(tmpFrequency, "度") {
  404. tmpFrequency = tmpFrequency + "度"
  405. }
  406. frequencyMap[k-1] = tmpFrequency
  407. case 6: //时间区间
  408. dateArr := strings.Split(colCell, "~")
  409. if len(dateArr) >= 2 {
  410. startDateMap[k-1] = dateArr[0]
  411. endDateMap[k-1] = dateArr[1]
  412. }
  413. case 7: //备注
  414. describeMap[k-1] = colCell
  415. case 9:
  416. updateDateMap[k-1] = colCell
  417. }
  418. }
  419. } else {
  420. date := ``
  421. for k, col := range cols {
  422. if k == 0 {
  423. date = col
  424. continue
  425. }
  426. if date == `` {
  427. continue
  428. }
  429. if col != `` {
  430. indexExcelDataList[k-1][date] = col
  431. }
  432. }
  433. }
  434. }
  435. for k, excelDataMap := range indexExcelDataList {
  436. mysteelIndexHandle(runMode, indexNameMap[k], indexCodeMap[k], unitMap[k], sourceMap[k], frequencyMap[k], startDateMap[k], endDateMap[k], describeMap[k], updateDateMap[k], excelDataMap)
  437. }
  438. }
  439. wg.Done()
  440. }()
  441. wg.Wait()
  442. }
  443. // mysteelIndexHandle 钢联数据处理
  444. func mysteelIndexHandle(runMode, indexName, indexCode, unit, source, frequency, startDate, endDate, describe, updateDate string, excelDataMap map[string]string) {
  445. var err error
  446. //return
  447. indexObj := new(index.BaseFromMysteelChemicalIndex)
  448. var indexId int64
  449. addDataList := make([]index.BaseFromMysteelChemicalData, 0)
  450. exitDataMap := make(map[string]*index.BaseFromMysteelChemicalData)
  451. // 修改指标信息
  452. if indexName == "" {
  453. global.LOG.Info("未刷新到指标数据:indexName:" + indexName)
  454. return
  455. }
  456. //判断指标是否存在
  457. var isAdd int
  458. item, err := indexObj.GetIndexItem(runMode, indexCode)
  459. if err != nil {
  460. if err.Error() == "record not found" {
  461. isAdd = 1
  462. } else {
  463. isAdd = -1
  464. fmt.Println("GetIndexItem Err:" + err.Error())
  465. return
  466. }
  467. }
  468. if item != nil && item.BaseFromMysteelChemicalIndexId > 0 {
  469. fmt.Println("item:", item)
  470. isAdd = 2
  471. } else {
  472. isAdd = 1
  473. }
  474. fmt.Println("isAdd:", isAdd)
  475. if !strings.Contains(frequency, "度") {
  476. frequency = frequency + "度"
  477. }
  478. if isAdd == 1 {
  479. indexObj.IndexCode = indexCode
  480. indexObj.IndexName = indexName
  481. indexObj.Unit = unit
  482. indexObj.Source = source
  483. indexObj.Describe = describe
  484. indexObj.StartDate, _ = time.ParseInLocation(utils.FormatDate, startDate, time.Local)
  485. indexObj.EndDate, _ = time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  486. indexObj.Frequency = frequency
  487. err = indexObj.Add(runMode)
  488. if err != nil {
  489. fmt.Println("add err:" + err.Error())
  490. return
  491. }
  492. indexId = indexObj.BaseFromMysteelChemicalIndexId
  493. } else if isAdd == 2 {
  494. indexObj.IndexCode = indexCode
  495. indexObj.IndexName = indexName
  496. indexObj.Unit = unit
  497. indexObj.Source = source
  498. indexObj.Describe = describe
  499. indexObj.StartDate, _ = time.ParseInLocation(utils.FormatDate, startDate, time.Local)
  500. indexObj.EndDate, _ = time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  501. indexObj.Frequency = frequency
  502. indexObj.ModifyTime = time.Now()
  503. indexId = item.BaseFromMysteelChemicalIndexId
  504. //修改数据
  505. updateColsArr := make([]string, 0)
  506. updateColsArr = append(updateColsArr, "index_name")
  507. updateColsArr = append(updateColsArr, "unit")
  508. updateColsArr = append(updateColsArr, "source")
  509. updateColsArr = append(updateColsArr, "frequency")
  510. updateColsArr = append(updateColsArr, "start_date")
  511. updateColsArr = append(updateColsArr, "end_date")
  512. updateColsArr = append(updateColsArr, "describe")
  513. updateColsArr = append(updateColsArr, "end_date")
  514. updateColsArr = append(updateColsArr, "modify_time")
  515. indexObj.Update(runMode, updateColsArr)
  516. dataObj := new(index.BaseFromMysteelChemicalData)
  517. //获取已存在的所有数据
  518. exitDataList, err := dataObj.GetIndexDataList(runMode, indexCode)
  519. if err != nil {
  520. fmt.Println("GetIndexDataList Err:" + err.Error())
  521. return
  522. }
  523. fmt.Println("exitDataListLen:", len(exitDataList))
  524. for _, v := range exitDataList {
  525. dateStr := v.DataTime.Format(utils.FormatDate)
  526. exitDataMap[dateStr] = v
  527. }
  528. }
  529. dataObj := new(index.BaseFromMysteelChemicalData)
  530. // 遍历excel数据,然后跟现有的数据做校验,不存在则入库
  531. for date, value := range excelDataMap {
  532. if findData, ok := exitDataMap[date]; !ok {
  533. dateTime, err := time.ParseInLocation(utils.FormatDate, date, time.Local)
  534. if err != nil {
  535. fmt.Println("time.ParseInLocation Err:" + err.Error())
  536. return
  537. }
  538. if !strings.Contains(value, "#N/A") {
  539. dataItem := new(index.BaseFromMysteelChemicalData)
  540. dataItem.BaseFromMysteelChemicalIndexId = indexId
  541. dataItem.IndexCode = indexCode
  542. dataItem.DataTime = dateTime
  543. dataItem.Value = value
  544. dataItem.UpdateDate = updateDate
  545. dataItem.CreateTime = time.Now()
  546. dataItem.ModifyTime = time.Now()
  547. addDataList = append(addDataList, *dataItem)
  548. }
  549. } else {
  550. if findData != nil && findData.Value != value && !strings.Contains(value, "#N/A") { //修改数据
  551. dataObj.Value = value
  552. dataObj.ModifyTime = time.Now()
  553. dataObj.BaseFromMysteelChemicalDataId = findData.BaseFromMysteelChemicalDataId
  554. updateDataColsArr := make([]string, 0)
  555. updateDataColsArr = append(updateDataColsArr, "value")
  556. updateDataColsArr = append(updateDataColsArr, "modify_time")
  557. dataObj.Update(runMode, updateDataColsArr)
  558. global.LOG.Info(findData.IndexCode + " " + findData.Value + "-" + value)
  559. }
  560. }
  561. }
  562. if len(addDataList) > 0 {
  563. err = dataObj.Add(runMode, addDataList)
  564. if err != nil {
  565. fmt.Println("dataObj.Add() Err:" + err.Error())
  566. }
  567. }
  568. go syncEdbDataMysteelChemical(runMode, indexCode)
  569. }
  570. func syncEdbDataMysteelChemical(runMode, indexCode string) {
  571. indexObj := new(models.EdbInfo)
  572. var isAdd int
  573. item, err := indexObj.GetEdbInfoItem(runMode, indexCode)
  574. if err != nil {
  575. if err.Error() == "record not found" {
  576. isAdd = 1
  577. } else {
  578. isAdd = -1
  579. fmt.Println("GetEdbInfoItem Err:" + err.Error())
  580. return
  581. }
  582. }
  583. if item != nil && item.EdbInfoId > 0 {
  584. fmt.Println("item:", item)
  585. isAdd = 2
  586. } else {
  587. isAdd = 1 //
  588. }
  589. if isAdd == 1 { //新增
  590. return
  591. }
  592. param := make(map[string]interface{})
  593. param["EdbCode"] = indexCode
  594. param["EdbInfoId"] = item.EdbInfoId
  595. param["StartDate"] = item.EndDate
  596. postRefreshEdbData(param)
  597. }
  598. type BaseResponse struct {
  599. Ret int
  600. Msg string
  601. ErrMsg string
  602. ErrCode string
  603. Data interface{}
  604. Success bool `description:"true 执行成功,false 执行失败"`
  605. IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
  606. IsAddLog bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
  607. }
  608. // postRefreshEdbData 刷新指标数据
  609. func postRefreshEdbData(param map[string]interface{}) (resp *BaseResponse, err error) {
  610. urlStr := "mysteel_chemical/refresh"
  611. EDB_LIB_URL := "http://47.102.213.75:8300/edbapi/"
  612. postUrl := EDB_LIB_URL + urlStr
  613. postData, err := json.Marshal(param)
  614. if err != nil {
  615. return
  616. }
  617. result, err := HttpPost(postUrl, string(postData), "application/json")
  618. if err != nil {
  619. return
  620. }
  621. global.LOG.Info(" Refresh Result: " + string(result))
  622. err = json.Unmarshal(result, &resp)
  623. if err != nil {
  624. return
  625. }
  626. return resp, nil
  627. }
  628. func HttpPost(url, postData string, params ...string) ([]byte, error) {
  629. body := ioutil.NopCloser(strings.NewReader(postData))
  630. client := &http.Client{}
  631. req, err := http.NewRequest("POST", url, body)
  632. if err != nil {
  633. return nil, err
  634. }
  635. contentType := "application/x-www-form-urlencoded;charset=utf-8"
  636. if len(params) > 0 && params[0] != "" {
  637. contentType = params[0]
  638. }
  639. req.Header.Set("Content-Type", contentType)
  640. req.Header.Set("authorization", utils.MD5(utils.APP_EDB_LIB_NAME_EN+utils.EDB_LIB_Md5_KEY))
  641. resp, err := client.Do(req)
  642. defer resp.Body.Close()
  643. b, err := ioutil.ReadAll(resp.Body)
  644. fmt.Println("HttpPost:" + string(b))
  645. return b, err
  646. }
  647. /*
  648. CREATE动作即临时文件的创建
  649. WRITE写文件动作
  650. CHMOD修改文件属性
  651. REMOVE删除临时文件。
  652. */