data_source_longzhong.go 27 KB

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