data_source_longzhong.go 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "github.com/tealeg/xlsx"
  7. "hongze/hongze_task/models"
  8. "hongze/hongze_task/utils"
  9. "net/url"
  10. "os"
  11. "path/filepath"
  12. "rdluck_tools/http"
  13. "strconv"
  14. "time"
  15. )
  16. //获取隆众信息表中指标
  17. func GetLongZhongTargetInfoByExcel() {
  18. var err error
  19. defer func() {
  20. if err != nil {
  21. fmt.Println("err:" + err.Error())
  22. go utils.SendEmail("获取隆众指标信息失败"+time.Now().Format("2006-01-02 15:04:05"), ";Err:"+err.Error(), utils.EmailSendToUsers)
  23. return
  24. }
  25. }()
  26. excelPath := `./static/longzhong_0824.xlsx`
  27. file, err := xlsx.OpenFile(excelPath)
  28. if err != nil {
  29. fmt.Println("err:", err.Error())
  30. return
  31. }
  32. sheets := file.Sheets
  33. for k, v := range sheets {
  34. fmt.Println(k, v.Name)
  35. classify, err := models.GetEdbdataClassifyByClassifyName(v.Name)
  36. if err != nil {
  37. if err.Error() == utils.ErrNoRow() {
  38. err = errors.New("分类不存在:Err:" + err.Error())
  39. } else {
  40. err = err
  41. }
  42. return
  43. }
  44. if classify == nil {
  45. err = errors.New("分类不存在,请重新核对")
  46. return
  47. }
  48. classifyId := classify.ClassifyId
  49. classifyName := classify.ClassifyName
  50. fmt.Println(classifyId, classifyName)
  51. maxRow := v.MaxRow
  52. //maxCol := v.MaxCol
  53. fmt.Println(classifyName, maxRow)
  54. for i := 0; i < maxRow; i++ {
  55. row, err := v.Row(i)
  56. if err != nil {
  57. return
  58. }
  59. longzhongClassify := ""
  60. if i > 0 {
  61. longzhongClassifyNew := row.GetCell(0).String()
  62. if longzhongClassifyNew != "" {
  63. longzhongClassify = longzhongClassifyNew
  64. }
  65. secName := row.GetCell(1).Value
  66. frequency := row.GetCell(2).Value
  67. LongzhongId := row.GetCell(3).Value
  68. remark := row.GetCell(4).String()
  69. item := new(models.DataSourceLongzhong)
  70. item.ClassifyId = classifyId
  71. item.ClassifyName = classifyName
  72. item.SecName = secName
  73. item.Frequency = frequency
  74. item.LongzhongId = LongzhongId
  75. item.Remark = remark
  76. item.LongzhongClassify = longzhongClassify
  77. _, err = models.AddDataSourceLongzhong(item)
  78. if err != nil {
  79. fmt.Println("Err:", err.Error())
  80. return
  81. }
  82. }
  83. }
  84. }
  85. }
  86. func GetLzProductList() (err error) {
  87. utils.FileLog.Info("start GetLzProductList")
  88. defer func() {
  89. if err != nil {
  90. fmt.Println("Err:" + err.Error())
  91. go utils.SendEmail("获取隆众指标数据失败"+time.Now().Format("2006-01-02 15:04:05"), ";Err:"+err.Error(), utils.EmailSendToUsers)
  92. }
  93. }()
  94. postUrl := `http://info.oilchem.net/cust/interfacenew/getProductUnitListNew`
  95. username := "hzmd"
  96. password := "HZMD2020"
  97. timestamp := fmt.Sprintf("%d", time.Now().Unix())
  98. fmt.Println(timestamp)
  99. token := utils.MD5(username + timestamp + utils.MD5(password))
  100. fmt.Println("token:", token)
  101. param := url.Values{}
  102. param.Add("username", username)
  103. param.Add("password", password)
  104. param.Add("timestamp", timestamp)
  105. param.Add("token", token)
  106. utils.FileLog.Info("%s", param.Encode())
  107. body, err := http.Post(postUrl, param.Encode())
  108. if err != nil {
  109. fmt.Println("err:", err.Error())
  110. return
  111. }
  112. result := string(body)
  113. if result == "" {
  114. err = errors.New("返回内容为空")
  115. return
  116. }
  117. resp := new(models.LzProductInfoResp)
  118. err = json.Unmarshal(body, &resp)
  119. if err != nil {
  120. fmt.Println("json.Unmarshal Err:" + err.Error())
  121. return
  122. }
  123. if resp.Code != "1" {
  124. fmt.Println("获取信息失败")
  125. err = errors.New("Code:" + resp.Code + ";Msg:" + resp.Msg)
  126. return
  127. }
  128. fmt.Println("len")
  129. fmt.Println(len(resp.Data))
  130. for _, v := range resp.Data {
  131. fmt.Println(v.Unitid, v.ProName, v.ProUnitName)
  132. var classifyId int
  133. var classifyName string
  134. classify, err := models.GetEdbdataClassifyByClassifyName(v.ProName)
  135. if err != nil && err.Error() != utils.ErrNoRow() {
  136. fmt.Println("获取分类失败,Err:" + err.Error())
  137. return err
  138. }
  139. if classify == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  140. classifyItem := new(models.EdbdataClassify)
  141. classifyItem.ClassifyName = v.ProName
  142. classifyItem.ParentId = 4
  143. classifyItem.CreateTime = time.Now()
  144. newId, err := models.AddEdbdataClassify(classifyItem)
  145. if err != nil {
  146. fmt.Println("新增分类失败,Err:" + err.Error())
  147. return err
  148. }
  149. classifyId = int(newId)
  150. classifyName = v.ProName
  151. } else {
  152. classifyId = classify.ClassifyId
  153. classifyName = classify.ClassifyName
  154. }
  155. count, err := models.GetLongzhonginfoCount(classifyId, v.Unitid)
  156. if err != nil {
  157. fmt.Println("判断指标是否存在失败,Err:" + err.Error())
  158. return err
  159. }
  160. if count > 0 { //修改
  161. lzProduct := new(models.Longzhonginfo)
  162. lzProduct.SecName = v.ProUnitName
  163. lzProduct.Frequency = v.LzType
  164. lzProduct.ClassifyId = classifyId
  165. lzProduct.ClassifyName = classifyName
  166. lzProduct.Unit = v.Unit
  167. lzProduct.CreateTime = time.Now()
  168. if v.IsNormal == "" {
  169. v.IsNormal = "1"
  170. }
  171. lzProduct.IsNormal = v.IsNormal
  172. lzProduct.LastModifyDate = v.Maxdate
  173. lzProduct.Unitid = v.Unitid
  174. lzProduct.TempId = v.Tempid
  175. lzProduct.TempName = v.TempName
  176. lzProduct.ModifyTime = time.Now()
  177. err = models.ModifyLongzhonginfo(lzProduct)
  178. if err != nil {
  179. fmt.Println("修改失败,Err:" + err.Error())
  180. return err
  181. }
  182. } else { //新增
  183. maxId, err := models.GetLongzhonginfoMaxId()
  184. if err != nil {
  185. fmt.Println("获取编码失败,err:" + err.Error())
  186. return err
  187. }
  188. tradeCode := fmt.Sprintf("L%06d", maxId+1)
  189. lzProduct := new(models.Longzhonginfo)
  190. lzProduct.TradeCode = tradeCode
  191. lzProduct.SecName = v.ProUnitName
  192. lzProduct.Frequency = v.LzType
  193. lzProduct.ClassifyId = classifyId
  194. lzProduct.ClassifyName = classifyName
  195. lzProduct.Unit = v.Unit
  196. lzProduct.CreateTime = time.Now()
  197. if v.IsNormal == "" {
  198. v.IsNormal = "1"
  199. }
  200. lzProduct.IsNormal = v.IsNormal
  201. lzProduct.LastModifyDate = v.Maxdate
  202. lzProduct.Unitid = v.Unitid
  203. lzProduct.TempId = v.Tempid
  204. lzProduct.TempName = v.TempName
  205. lzProduct.ModifyTime = time.Now()
  206. _, err = models.AddLongzhonginfo(lzProduct)
  207. if err != nil {
  208. fmt.Println("新增指标信息失败")
  209. return err
  210. }
  211. }
  212. }
  213. return
  214. }
  215. func GetLzProductDetail() (err error) {
  216. utils.FileLog.Info("start GetLzProductDetail")
  217. defer func() {
  218. if err != nil {
  219. fmt.Println("Err:" + err.Error())
  220. }
  221. }()
  222. startDate := time.Now().AddDate(0, 0, -7).Format(utils.FormatDate)
  223. endDate := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
  224. time.Sleep(5 * time.Second)
  225. pageSize := 30
  226. postUrl := `http://info.oilchem.net/cust/interfacenew/getProductUnitDetailNew`
  227. username := "hzmd"
  228. password := "HZMD2020"
  229. totalPage := 10
  230. for i := 1; i <= totalPage; i++ {
  231. fmt.Println("page:", i)
  232. timestamp := fmt.Sprintf("%d", time.Now().Unix())
  233. token := utils.MD5(username + timestamp + utils.MD5(password))
  234. param := url.Values{}
  235. param.Add("username", username)
  236. param.Add("password", password)
  237. param.Add("timestamp", timestamp)
  238. param.Add("token", token)
  239. //param.Add("id", "334")
  240. param.Add("startDate", startDate)
  241. param.Add("endDate", endDate)
  242. param.Add("pagesize", strconv.Itoa(pageSize))
  243. param.Add("page", strconv.Itoa(i))
  244. utils.FileLog.Info("%s", param.Encode())
  245. body, err := http.Post(postUrl, param.Encode())
  246. if err != nil {
  247. fmt.Println("err:", err.Error())
  248. return err
  249. }
  250. fmt.Println(string(body))
  251. utils.FileLog.Info("%s", string(body))
  252. resp := new(models.LzProductInfoDetailResp)
  253. err = json.Unmarshal(body, &resp)
  254. if err != nil {
  255. fmt.Println("Unmarshal Err:" + err.Error())
  256. return err
  257. }
  258. if resp.Code != "1" {
  259. fmt.Println("获取信息失败")
  260. err = errors.New("Code:" + resp.Code + ";Msg:" + resp.Msg)
  261. return err
  262. }
  263. if i == totalPage && resp.Pagesize >= pageSize {
  264. totalPage = totalPage + 5
  265. }
  266. for k, v := range resp.Data {
  267. fmt.Println(k, v.UnitId, v.ProCnName)
  268. target, err := models.GetLongzhonginfoByUnitId(v.ProCnName, v.UnitId)
  269. if err != nil {
  270. if err.Error() != utils.ErrNoRow() {
  271. fmt.Println("获取target失败,err:" + err.Error())
  272. continue
  273. }
  274. fmt.Println("err:" + err.Error())
  275. return err
  276. }
  277. if target == nil {
  278. fmt.Println("target is empty:"+v.ProCnName, v.UnitId)
  279. continue
  280. }
  281. count, err := models.GetLongzhongdataCount(target.LongzhonginfoId, v.DataTime)
  282. if err != nil {
  283. fmt.Println("GetLongzhongdataCount Err:" + err.Error())
  284. return err
  285. }
  286. if count > 0 {
  287. lzdetail := new(models.Longzhongdata)
  288. lzdetail.CreateTime = time.Now()
  289. lzdetail.ModifyTime = time.Now()
  290. lzdetail.TradeCode = target.TradeCode
  291. lzdetail.LongzhonginfoId = target.LongzhonginfoId
  292. lzdetail.Dt = v.DataTime
  293. lzdetail.Close = v.UnitValue
  294. lzdetail.UnitDesc = v.UnitDesc
  295. lzdetail.UpdTime = v.UpdTime
  296. lzdetail.AddTime=v.AddTime
  297. lzdetail.DisplayTime=v.DisplayTime
  298. err = models.ModifyLongzhongdata(lzdetail)
  299. if err != nil {
  300. fmt.Println("ModifyLongzhongdata Err:" + err.Error())
  301. return err
  302. }
  303. } else {
  304. lzdetail := new(models.Longzhongdata)
  305. lzdetail.CreateTime = time.Now()
  306. lzdetail.ModifyTime = time.Now()
  307. lzdetail.TradeCode = target.TradeCode
  308. lzdetail.LongzhonginfoId = target.LongzhonginfoId
  309. lzdetail.Dt = v.DataTime
  310. lzdetail.Close = v.UnitValue
  311. lzdetail.UnitDesc = v.UnitDesc
  312. lzdetail.UpdTime = v.UpdTime
  313. lzdetail.AddTime=v.AddTime
  314. lzdetail.DisplayTime=v.DisplayTime
  315. err = models.AddLongzhongdata(lzdetail)
  316. if err != nil {
  317. fmt.Println("AddLongzhongdata Err:" + err.Error())
  318. return err
  319. }
  320. }
  321. }
  322. if resp.Pagesize < pageSize || len(resp.Data) == 0 {
  323. return err
  324. }
  325. time.Sleep(2 * time.Second)
  326. }
  327. return
  328. }
  329. //获取历史隆众石化数据
  330. func GetHistoryLzProductDetail() (err error) {
  331. utils.FileLog.Info("start GetHistoryLzProductDetail")
  332. var msg string
  333. defer func() {
  334. if err != nil {
  335. fmt.Println("Err:" + err.Error())
  336. }
  337. if msg != "" {
  338. fmt.Println("msg:" + msg)
  339. }
  340. }()
  341. infoList, err := models.GetLongzhonginfoList()
  342. if err != nil {
  343. msg = "获取指标列表失败,Err:" + err.Error()
  344. return
  345. }
  346. for ik, iv := range infoList {
  347. fmt.Println(ik, iv.SecName,iv.LongzhonginfoId)
  348. startDate := "2020-01-01" //time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
  349. endDate := "2020-12-31" //time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
  350. //time.Sleep(1 * time.Second)
  351. pageSize := 30
  352. postUrl := `http://info.oilchem.net/cust/interfacenew/getProductUnitDetailNew`
  353. username := "hzmd"
  354. password := "HZMD2020"
  355. totalPage := 10
  356. for i := 1; i <= totalPage; i++ {
  357. fmt.Println("page:", i)
  358. timestamp := fmt.Sprintf("%d", time.Now().Unix())
  359. token := utils.MD5(username + timestamp + utils.MD5(password))
  360. param := url.Values{}
  361. param.Add("username", username)
  362. param.Add("password", password)
  363. param.Add("timestamp", timestamp)
  364. param.Add("token", token)
  365. param.Add("id", strconv.Itoa(iv.Unitid))
  366. param.Add("startDate", startDate)
  367. param.Add("endDate", endDate)
  368. if i > 1 {
  369. param.Add("page", strconv.Itoa(i))
  370. }
  371. param.Add("pagesize", strconv.Itoa(pageSize))
  372. utils.FileLog.Info("%s", param.Encode())
  373. fmt.Println("post url:", postUrl)
  374. fmt.Println("post params:", param.Encode())
  375. body, err := http.Post(postUrl, param.Encode())
  376. if err != nil {
  377. fmt.Println("err:", err.Error())
  378. return err
  379. }
  380. utils.FileLog.Info("%s", string(body))
  381. fmt.Println("body:", string(body))
  382. resp := new(models.LzProductInfoDetailResp)
  383. err = json.Unmarshal(body, &resp)
  384. if err != nil {
  385. fmt.Println("Unmarshal Err:" + err.Error())
  386. fmt.Println("body:", string(body))
  387. return err
  388. }
  389. if resp.Code != "1" {
  390. fmt.Println("获取信息失败")
  391. err = errors.New("Code:" + resp.Code + ";Msg:" + resp.Msg)
  392. return err
  393. }
  394. if i == totalPage && resp.Pagesize >= pageSize {
  395. totalPage = totalPage + 5
  396. }
  397. for k, v := range resp.Data {
  398. fmt.Println(k, v.UnitId, v.ProCnName)
  399. target, err := models.GetLongzhonginfoByUnitId(v.ProCnName, v.UnitId)
  400. if err != nil {
  401. if err.Error() != utils.ErrNoRow() {
  402. fmt.Println("获取target失败,err:" + err.Error())
  403. continue
  404. }
  405. fmt.Println("err:" + err.Error())
  406. return err
  407. }
  408. if target == nil {
  409. fmt.Println("target is empty:"+v.ProCnName, v.UnitId)
  410. continue
  411. }
  412. count, err := models.GetLongzhongdataCount(target.LongzhonginfoId, v.DataTime)
  413. if err != nil {
  414. fmt.Println("GetLongzhongdataCount Err:" + err.Error())
  415. return err
  416. }
  417. if count > 0 {
  418. fmt.Println("数据已存在:", iv.Unitid, iv.SecName, v.UnitValue, v.DataTime)
  419. lzdetail := new(models.Longzhongdata)
  420. lzdetail.CreateTime = time.Now()
  421. lzdetail.ModifyTime = time.Now()
  422. lzdetail.TradeCode = target.TradeCode
  423. lzdetail.LongzhonginfoId = target.LongzhonginfoId
  424. lzdetail.Dt = v.DataTime
  425. lzdetail.Close = v.UnitValue
  426. lzdetail.UnitDesc = v.UnitDesc
  427. lzdetail.UpdTime = v.UpdTime
  428. lzdetail.AddTime=v.AddTime
  429. lzdetail.DisplayTime=v.DisplayTime
  430. err = models.ModifyLongzhongdata(lzdetail)
  431. if err != nil {
  432. fmt.Println("ModifyLongzhongdata Err:" + err.Error())
  433. return err
  434. }
  435. } else {
  436. lzdetail := new(models.Longzhongdata)
  437. lzdetail.CreateTime = time.Now()
  438. lzdetail.ModifyTime = time.Now()
  439. lzdetail.TradeCode = target.TradeCode
  440. lzdetail.LongzhonginfoId = target.LongzhonginfoId
  441. lzdetail.Dt = v.DataTime
  442. lzdetail.Close = v.UnitValue
  443. lzdetail.UnitDesc = v.UnitDesc
  444. lzdetail.UpdTime = v.UpdTime
  445. lzdetail.AddTime=v.AddTime
  446. lzdetail.DisplayTime=v.DisplayTime
  447. err = models.AddLongzhongdata(lzdetail)
  448. if err != nil {
  449. fmt.Println("AddLongzhongdata Err:" + err.Error())
  450. return err
  451. }
  452. }
  453. }
  454. if i == 1 && len(resp.Data) == 0 {
  455. utils.FileLog.Info("%d", iv.Unitid)
  456. }
  457. if resp.Pagesize < pageSize || len(resp.Data) == 0 {
  458. break
  459. }
  460. //time.Sleep(1 * time.Second)
  461. }
  462. err = models.ModifyLongzhonginfoIsNormal(iv.LongzhonginfoId)
  463. if err != nil {
  464. fmt.Println("ModifyLongzhonginfoIsNormal:Err" + err.Error())
  465. }
  466. fmt.Println("sleep", iv.SecName)
  467. time.Sleep(1 * time.Second)
  468. }
  469. return
  470. }
  471. func GetLzPrice() {
  472. fmt.Println("start")
  473. /*getUrl:=`https://openapi.oilchem.net/price/getProduct?password=HZMD2020&type=guoji&username=hzmd`
  474. result,err:=http.Get(getUrl)
  475. fmt.Println(string(result),err)
  476. utils.FileLog.Info("%s",string(result))*/
  477. getUrl := `https://openapi.oilchem.net/price/getPrice?password=HZMD2020&type=guoji&username=hzmd&inStartDate=2020-08-20&inEndDate=2020-08-26`
  478. result, err := http.Get(getUrl)
  479. fmt.Println(string(result), err)
  480. utils.FileLog.Info("%s", string(result))
  481. fmt.Println("end")
  482. }
  483. func LzExportExcel() {
  484. var err error
  485. defer func() {
  486. if err != nil {
  487. fmt.Println("err:" + err.Error())
  488. }
  489. }()
  490. parentId := 4
  491. classifyList, err := models.GetEdbdataClassifyByParentId(parentId)
  492. if err != nil {
  493. return
  494. }
  495. xlsxFile := xlsx.NewFile()
  496. if err != nil {
  497. fmt.Println("生成文件失败" + err.Error())
  498. return
  499. }
  500. dir, _ := os.Executable()
  501. exPath := filepath.Dir(dir)
  502. downLoadnFilePath := exPath + "/static/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  503. fmt.Println("downLoadnFilePath")
  504. fmt.Println(downLoadnFilePath)
  505. for _, v := range classifyList {
  506. fmt.Println(v.ClassifyId, v.ClassifyName)
  507. //获取指标
  508. secNameList, err := models.GetLongzhonginfoByClassifyId(v.ClassifyId)
  509. if err != nil {
  510. fmt.Println("获取数据失败,Err:" + err.Error())
  511. return
  512. }
  513. if len(secNameList) <= 0 {
  514. continue
  515. }
  516. sheetNew, err := xlsxFile.AddSheet(v.ClassifyName)
  517. if err != nil {
  518. fmt.Println("新增Sheet失败", err.Error())
  519. return
  520. }
  521. //获取指标数据
  522. windRow := sheetNew.AddRow()
  523. secNameRow := sheetNew.AddRow()
  524. frequencyRow := sheetNew.AddRow()
  525. unitRow := sheetNew.AddRow()
  526. lastModifyDateRow := sheetNew.AddRow()
  527. //获取分类下指标最大数据量
  528. dataMax, err := models.GetLongzhongDataMaxCount(v.ClassifyId)
  529. if err != nil {
  530. fmt.Println("获取指标最大数据量失败", err.Error())
  531. return
  532. }
  533. for _, sv := range secNameList {
  534. fmt.Println("line 399:", v.ClassifyId, v.ClassifyName, sv.SecName, sv.Frequency)
  535. windRow.AddCell().SetValue("Wind")
  536. secNameRow.AddCell().SetValue("指标名称")
  537. frequencyRow.AddCell().SetValue("频率")
  538. unitRow.AddCell().SetValue("单位")
  539. lastModifyDateRow.AddCell().SetValue("更新时间")
  540. secNameRow.AddCell().SetValue(sv.SecName)
  541. frequencyRow.AddCell().SetValue(sv.Frequency)
  542. unitRow.AddCell().SetValue(sv.Unit)
  543. lastModifyDateRow.AddCell().SetValue(sv.LastModifyDate)
  544. windRow.AddCell()
  545. windRow.AddCell()
  546. secNameRow.AddCell()
  547. frequencyRow.AddCell()
  548. unitRow.AddCell()
  549. lastModifyDateRow.AddCell()
  550. //获取数据
  551. dataList, err := models.GetLongzhongDataById(sv.LongzhonginfoId)
  552. if err != nil {
  553. fmt.Println("GetLongzhongDataById Err:" + err.Error())
  554. return
  555. }
  556. if len(dataList) <= 0 {
  557. for n := 0; n < dataMax; n++ {
  558. rowIndex := 5 + n
  559. row, err := sheetNew.Row(rowIndex)
  560. if err != nil {
  561. fmt.Println("add row err:" + err.Error())
  562. return
  563. }
  564. row.AddCell()
  565. row.AddCell()
  566. row.AddCell()
  567. }
  568. } else {
  569. endRowIndex := 0
  570. for rk, dv := range dataList {
  571. rowIndex := 5 + rk
  572. row, err := sheetNew.Row(rowIndex)
  573. if err != nil {
  574. fmt.Println("add row err:" + err.Error())
  575. return
  576. }
  577. row.AddCell().SetValue(dv.Dt)
  578. row.AddCell().SetFloat(dv.Close)
  579. row.AddCell()
  580. endRowIndex = rowIndex
  581. }
  582. if len(dataList) < dataMax {
  583. dataLen := dataMax - len(dataList)
  584. for n := 0; n < dataLen; n++ {
  585. rowIndex := (endRowIndex + 1) + n
  586. row, err := sheetNew.Row(rowIndex)
  587. if err != nil {
  588. fmt.Println("add row err:" + err.Error())
  589. return
  590. }
  591. row.AddCell()
  592. row.AddCell()
  593. row.AddCell()
  594. }
  595. }
  596. }
  597. }
  598. }
  599. err = xlsxFile.Save(downLoadnFilePath)
  600. fmt.Print("downLoadnFilePath:", downLoadnFilePath)
  601. if err != nil {
  602. return
  603. }
  604. }
  605. func GetLzProductPriceProduct() (err error) {
  606. var msg string
  607. defer func() {
  608. if err != nil {
  609. fmt.Println("Err:" + err.Error())
  610. go utils.SendEmail("获取隆众价格指标失败"+time.Now().Format("2006-01-02 15:04:05"), ";Err:"+err.Error(), utils.EmailSendToUsers)
  611. }
  612. if msg != "" {
  613. fmt.Println("msg:", msg)
  614. go utils.SendEmail("获取隆众价格指标失败"+time.Now().Format("2006-01-02 15:04:05"), ";msg:"+msg, utils.EmailSendToUsers)
  615. }
  616. }()
  617. //chuchang, guonei, guoji, oil ,lingshou,guojioil,base,国内出厂,国内市场,国际市场,国内成品油批发价,国内成品油零售价,国际原油,基准价
  618. typeMap := make(map[string]string)
  619. typeMap["chuchang"] = "国内出厂"
  620. typeMap["guonei"] = "国内市场"
  621. typeMap["guoji"] = "国际市场"
  622. typeMap["oil"] = "国内成品油批发价"
  623. typeMap["lingshou"] = "国内成品油零售价"
  624. typeMap["guojioil"] = "国际原油"
  625. typeMap["base"] = "基准价"
  626. username := "hzmd"
  627. password := "HZMD2020"
  628. for k, v := range typeMap {
  629. fmt.Println(k, v)
  630. getUrl := `https://openapi.oilchem.net/price/getProduct?password=` + password + `&type=` + k + `&username=` + username + ``
  631. body, err := http.Get(getUrl)
  632. if err != nil {
  633. msg = "获取隆众价格指标失败:Err" + err.Error()
  634. return err
  635. }
  636. fmt.Println("getUrl:", getUrl)
  637. fmt.Println("body", string(body))
  638. utils.FileLog.Info("%s", string(body))
  639. infoList := new(models.LzPriceInfoResp)
  640. err = json.Unmarshal(body, &infoList)
  641. if err != nil {
  642. msg = "获取隆众价格指标失败:Unmarshal Err " + err.Error() + " ;body:" + string(body)
  643. return err
  644. }
  645. if infoList.Code != 1 {
  646. msg = "获取隆众价格指标失败:body " + string(body)
  647. return nil
  648. }
  649. for _, n := range infoList.Data {
  650. count, err := models.GetLongzhongpriceinfoCount(n.Id)
  651. if err != nil {
  652. msg = "判断隆众价格指标是否存在失败:err " + err.Error()
  653. return err
  654. }
  655. item := new(models.Longzhongpriceinfo)
  656. item.Standard = n.Standard
  657. item.ModelName = n.ModelName
  658. item.Unit = n.Unit
  659. item.AreaName = n.AreaName
  660. item.PriceType = n.PriceType
  661. item.Memo = n.Memo
  662. item.PriceId = n.Id
  663. item.ProductName = n.ProductName
  664. item.InfoType = k
  665. item.InfoTypeRemark = v
  666. item.MarketName = n.MarketName
  667. item.ManufactureName = n.ManufactureName
  668. if count > 0 {
  669. fmt.Println("存在", n.ProductName, n.Id)
  670. //修改
  671. err = models.ModifyLongzhongpriceinfo(item)
  672. if err != nil {
  673. msg = "修改隆众价格指标失败:err " + err.Error()
  674. return err
  675. }
  676. } else {
  677. _, err = models.AddLongzhongpriceinfo(item)
  678. if err != nil {
  679. msg = "新增隆众价格指标失败:err " + err.Error()
  680. return err
  681. }
  682. }
  683. }
  684. time.Sleep(31 * time.Second)
  685. }
  686. return
  687. }
  688. func GetLzProductPriceData() (err error) {
  689. var msg string
  690. defer func() {
  691. if err != nil {
  692. fmt.Println("Err:" + err.Error())
  693. go utils.SendEmail("获取隆众价格指标失败"+time.Now().Format("2006-01-02 15:04:05"), ";Err:"+err.Error(), utils.EmailSendToUsers)
  694. }
  695. if msg != "" {
  696. fmt.Println("msg:", msg)
  697. go utils.SendEmail("获取隆众价格指标失败"+time.Now().Format("2006-01-02 15:04:05"), ";msg:"+msg, utils.EmailSendToUsers)
  698. utils.FileLog.Info("%s", msg)
  699. }
  700. }()
  701. priceInfoList, err := models.GetLongzhongpriceinfo()
  702. if err != nil {
  703. msg = "获取价格指标失败,Err:" + err.Error()
  704. return
  705. }
  706. username := "hzmd"
  707. password := "HZMD2020"
  708. startDate := time.Now().AddDate(0, 0, -7).Format(utils.FormatDate)
  709. endDate := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
  710. for k, v := range priceInfoList {
  711. fmt.Println(k, v)
  712. getUrl := `https://openapi.oilchem.net/price/getPrice?password=` + password + `&type=` + v.InfoType + `&username=` + username + `&inStartDate=` + startDate + `&inEndDate=` + endDate + `&id=` + v.PriceId
  713. body, err := http.Get(getUrl)
  714. if err != nil {
  715. msg = "获取隆众价格数据失败:Err" + err.Error()
  716. return err
  717. }
  718. fmt.Println("getUrl:", getUrl)
  719. fmt.Println("body", string(body))
  720. infoList := new(models.LzPriceDataResp)
  721. err = json.Unmarshal(body, &infoList)
  722. if err != nil {
  723. msg = "获取隆众价格数据失败:Unmarshal Err " + err.Error() + " ;body:" + string(body)
  724. return err
  725. }
  726. if infoList.Code != 1 {
  727. msg = "获取隆众价格数据失败:body " + string(body)
  728. return nil
  729. }
  730. for _, n := range infoList.Data {
  731. count, err := models.GetLongzhongpricedataCount(v.LongzhongpriceinfoId, n.PriceDate)
  732. if err != nil {
  733. msg = "获取隆众价格数据失败:err " + err.Error()
  734. return err
  735. }
  736. if count > 0 {
  737. fmt.Println("存在", n.PriceDate, n.Id)
  738. } else {
  739. item := new(models.Longzhongpricedata)
  740. item.LongzhongpriceinfoId = v.LongzhongpriceinfoId
  741. item.PriceDate = n.PriceDate
  742. item.Memo = n.Memo
  743. item.Price = n.Price
  744. item.CnyPrice = n.CnyPrice
  745. item.ZsyPrice = n.ZsyPrice
  746. item.ZshPrice = n.ZshPrice
  747. item.LowPrice = n.LowPrice
  748. item.HighPrice = n.HighPrice
  749. item.RisePrice = n.RisePrice
  750. item.TonPrice = n.TonPrice
  751. item.PriceType = n.PriceType
  752. item.UpdateDate = n.UpdateDate
  753. _, err = models.AddLongzhongpricedata(item)
  754. if err != nil {
  755. msg = "新增隆众价格数据失败:err " + err.Error()
  756. return err
  757. }
  758. }
  759. }
  760. }
  761. return
  762. }
  763. func LzPriceExportExcel() {
  764. var err error
  765. defer func() {
  766. if err != nil {
  767. fmt.Println("err:" + err.Error())
  768. }
  769. }()
  770. classifyList, err := models.GetLzPriceClassify()
  771. if err != nil {
  772. return
  773. }
  774. xlsxFile := xlsx.NewFile()
  775. if err != nil {
  776. fmt.Println("生成文件失败" + err.Error())
  777. return
  778. }
  779. dir, _ := os.Executable()
  780. exPath := filepath.Dir(dir)
  781. downLoadnFilePath := exPath + "/static/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  782. fmt.Println("downLoadnFilePath")
  783. fmt.Println(downLoadnFilePath)
  784. for _, v := range classifyList {
  785. fmt.Println(v.ProductName)
  786. //获取指标
  787. secNameList, err := models.GetLongzhongpriceinfoByClassifyName(v.ProductName)
  788. if err != nil {
  789. fmt.Println("获取数据失败,Err:" + err.Error())
  790. return
  791. }
  792. if len(secNameList) <= 0 {
  793. continue
  794. }
  795. sheetNew, err := xlsxFile.AddSheet(v.ProductName)
  796. if err != nil {
  797. fmt.Println("新增Sheet失败", err.Error())
  798. return
  799. }
  800. //获取指标数据
  801. windRow := sheetNew.AddRow()
  802. secNameRow := sheetNew.AddRow()
  803. frequencyRow := sheetNew.AddRow()
  804. unitRow := sheetNew.AddRow()
  805. lastModifyDateRow := sheetNew.AddRow()
  806. marketRow := sheetNew.AddRow()
  807. manufactureRow := sheetNew.AddRow()
  808. titleRow := sheetNew.AddRow()
  809. //获取分类下指标最大数据量
  810. dataMax, err := models.GetLongzhongPriceDataMaxCount(v.ProductName)
  811. if err != nil {
  812. fmt.Println("获取指标最大数据量失败", err.Error())
  813. return
  814. }
  815. for _, sv := range secNameList {
  816. fmt.Println("line 399:", v.ProductName, sv.InfoTypeRemark, sv.AreaName)
  817. windRow.AddCell().SetString("Wind")
  818. secNameRow.AddCell().SetValue("分类")
  819. frequencyRow.AddCell().SetValue("价格类型")
  820. unitRow.AddCell().SetValue("单位")
  821. lastModifyDateRow.AddCell().SetValue("地区")
  822. marketRow.AddCell().SetValue("市场名称")
  823. manufactureRow.AddCell().SetValue("厂家名称")
  824. secNameRow.AddCell().SetValue(sv.InfoTypeRemark)
  825. frequencyRow.AddCell().SetValue(sv.PriceType)
  826. unitRow.AddCell().SetValue(sv.Unit)
  827. lastModifyDateRow.AddCell().SetValue(sv.AreaName)
  828. marketRow.AddCell().SetValue(sv.MarketName)
  829. manufactureRow.AddCell().SetValue(sv.ManufactureName)
  830. windRow.AddCell()
  831. windRow.AddCell()
  832. windRow.AddCell()
  833. windRow.AddCell()
  834. secNameRow.AddCell()
  835. frequencyRow.AddCell()
  836. unitRow.AddCell()
  837. lastModifyDateRow.AddCell()
  838. marketRow.AddCell()
  839. manufactureRow.AddCell()
  840. secNameRow.AddCell()
  841. frequencyRow.AddCell()
  842. unitRow.AddCell()
  843. lastModifyDateRow.AddCell()
  844. marketRow.AddCell()
  845. manufactureRow.AddCell()
  846. secNameRow.AddCell()
  847. frequencyRow.AddCell()
  848. unitRow.AddCell()
  849. lastModifyDateRow.AddCell()
  850. marketRow.AddCell()
  851. manufactureRow.AddCell()
  852. titleRow.AddCell().SetValue("价格日期")
  853. titleRow.AddCell().SetValue("价格")
  854. titleRow.AddCell().SetValue("低端价格")
  855. titleRow.AddCell().SetValue("高端价格")
  856. titleRow.AddCell()
  857. //获取数据
  858. dataList, err := models.GetLongzhongPriceDataById(sv.LongzhongpriceinfoId)
  859. if err != nil {
  860. fmt.Println("GetLongzhongDataById Err:" + err.Error())
  861. return
  862. }
  863. if len(dataList) <= 0 {
  864. for n := 0; n < dataMax; n++ {
  865. rowIndex := 8 + n
  866. row, err := sheetNew.Row(rowIndex)
  867. if err != nil {
  868. fmt.Println("add row err:" + err.Error())
  869. return
  870. }
  871. row.AddCell()
  872. row.AddCell()
  873. row.AddCell()
  874. row.AddCell()
  875. row.AddCell()
  876. }
  877. } else {
  878. endRowIndex := 0
  879. for rk, dv := range dataList {
  880. rowIndex := 8 + rk
  881. row, err := sheetNew.Row(rowIndex)
  882. if err != nil {
  883. fmt.Println("add row err:" + err.Error())
  884. return
  885. }
  886. row.AddCell().SetValue(dv.PriceDate)
  887. row.AddCell().SetFloat(dv.Price)
  888. row.AddCell().SetFloat(dv.LowPrice)
  889. row.AddCell().SetFloat(dv.HighPrice)
  890. row.AddCell()
  891. endRowIndex = rowIndex
  892. }
  893. if len(dataList) < dataMax {
  894. dataLen := dataMax - len(dataList)
  895. for n := 0; n < dataLen; n++ {
  896. rowIndex := (endRowIndex + 1) + n
  897. row, err := sheetNew.Row(rowIndex)
  898. if err != nil {
  899. fmt.Println("add row err:" + err.Error())
  900. return
  901. }
  902. row.AddCell()
  903. row.AddCell()
  904. row.AddCell()
  905. row.AddCell()
  906. row.AddCell()
  907. }
  908. }
  909. }
  910. }
  911. }
  912. err = xlsxFile.Save(downLoadnFilePath)
  913. fmt.Print("downLoadnFilePath:", downLoadnFilePath)
  914. if err != nil {
  915. return
  916. }
  917. }