data_source_longzhong.go 27 KB

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