data_source_longzhong.go 27 KB

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