data_source_longzhong.go 27 KB

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