base_from_yongyi.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. package services
  2. import (
  3. "context"
  4. "encoding/json"
  5. "eta/eta_data_analysis/models"
  6. "eta/eta_data_analysis/services/base_from_yongyi_v2"
  7. "eta/eta_data_analysis/utils"
  8. "fmt"
  9. "github.com/patrickmn/go-cache"
  10. "github.com/xuri/excelize/v2"
  11. "io/fs"
  12. "os"
  13. "path"
  14. "path/filepath"
  15. "strings"
  16. "syscall"
  17. "time"
  18. )
  19. /*
  20. 日度-商品猪出栏价
  21. 日度-商品猪标肥价差
  22. 日度-商品猪全国均价和宰量
  23. 日度-屠宰企业屠宰量
  24. 周度-商品猪出栏价
  25. 周度-体重
  26. 周度-屠宰厂宰前活猪重
  27. 周度-各体重段价差
  28. 周度-50公斤二元母猪价格
  29. 周度-规模场15公斤仔猪出栏价
  30. 周度-宰后结算价
  31. 周度-冻品库存
  32. 周度-冻品库存多样本
  33. 周度-猪肉价(前三等级白条均价)
  34. 月度出栏完成率
  35. 月度计划出栏量
  36. 月度-能繁母猪存栏(2020年2月新增)
  37. 月度-小猪存栏(2020年5月新增)
  38. 月度-中猪存栏(2020年5月新增)
  39. 月度-大猪存栏(2020年5月新增)
  40. 月度-商品猪出栏量
  41. */
  42. func HandleYongyiExcelDaily(filePath string) (err error) {
  43. //filePath := fmt.Sprintf("%s/%s_day.xlsx", utils.YongyiFilePath, time.Now().Format(utils.FormatDate))
  44. /*xlFile, err := xlsx.OpenFile(filePath)
  45. if err != nil {
  46. err = fmt.Errorf("打开文件失败, Err: %s", err)
  47. utils.FileLog.Info(fmt.Sprintf("打开文件:%s 失败, Err: %s", filePath, err))
  48. return
  49. }
  50. terminalCode := utils.TerminalCode
  51. for _, sheet := range xlFile.Sheets {
  52. var indexList []*models.YongyiExcelIndex
  53. switch sheet.Name {
  54. case "出栏价":
  55. indexList, err = base_from_yongyi.HandleYongyiExcelDaily1(sheet)
  56. case "标肥价差":
  57. indexList, err = base_from_yongyi.HandleYongyiExcelDaily2(sheet)
  58. case "价格+宰量":
  59. indexList, err = base_from_yongyi.HandleYongyiExcelDaily3(sheet)
  60. case "屠宰企业日度屠宰量":
  61. indexList, err = base_from_yongyi.HandleYongyiExcelDaily4(sheet)
  62. default:
  63. continue
  64. }
  65. if err != nil {
  66. utils.FileLog.Info(fmt.Sprintf("解析sheet:%s 失败, Err: %s", sheet.Name, err))
  67. continue
  68. }
  69. if len(indexList) > 0 {
  70. params := make(map[string]interface{})
  71. params["List"] = indexList
  72. params["TerminalCode"] = terminalCode
  73. result, e := PostEdbLib(params, utils.LIB_ROUTE_YONGYI_HANDLE)
  74. if e != nil {
  75. b, _ := json.Marshal(params)
  76. utils.FileLog.Info(fmt.Sprintf("sheet :%s PostEdbLib err: %s, params: %s", sheet.Name, e.Error(), string(b)))
  77. return
  78. }
  79. resp := new(models.BaseEdbLibResponse)
  80. if e := json.Unmarshal(result, &resp); e != nil {
  81. utils.FileLog.Info(fmt.Sprintf("sheet :%s json.Unmarshal err: %s", sheet.Name, e))
  82. continue
  83. }
  84. if resp.Ret != 200 {
  85. utils.FileLog.Info(fmt.Sprintf("sheet :%s Msg: %s, ErrMsg: %s", sheet.Name, resp.Msg, resp.ErrMsg))
  86. continue
  87. }
  88. }
  89. }*/
  90. return
  91. }
  92. func HandleYongyiExcelWeekly(filePath string) (err error) {
  93. // filePath := fmt.Sprintf("%s/%s_week.xlsx", utils.YongyiFilePath, time.Now().Format(utils.FormatDate))
  94. /*xlFile, err := xlsx.OpenFile(filePath)
  95. if err != nil {
  96. err = fmt.Errorf("打开文件失败, Err: %s", err)
  97. utils.FileLog.Info(fmt.Sprintf("打开文件:%s 失败, Err: %s", filePath, err))
  98. return
  99. }
  100. terminalCode := utils.TerminalCode
  101. for _, sheet := range xlFile.Sheets {
  102. var indexList []*models.YongyiExcelIndex
  103. switch sheet.Name {
  104. case "周度-商品猪出栏价":
  105. indexList, err = base_from_yongyi.HandleYongyiExcelWeekly1(sheet)
  106. case "周度-体重":
  107. indexList, err = base_from_yongyi.HandleYongyiExcelWeekly2(sheet)
  108. case "周度-屠宰厂宰前活猪重":
  109. indexList, err = base_from_yongyi.HandleYongyiExcelWeekly3(sheet)
  110. case "周度-各体重段价差":
  111. indexList, err = base_from_yongyi.HandleYongyiExcelWeekly4(sheet)
  112. case "周度-50公斤二元母猪价格", "周度-规模场15公斤仔猪出栏价", "周度-宰后结算价", "周度-冻品库存", "周度-猪肉价(前三等级白条均价)":
  113. indexList, err = base_from_yongyi.HandleYongyiExcelWeekly5(sheet)
  114. case "周度-冻品库存多样本", "月度出栏完成率":
  115. indexList, err = base_from_yongyi.HandleYongyiExcelWeekly6(sheet)
  116. case "月度计划出栏量":
  117. indexList, err = base_from_yongyi.HandleYongyiExcelWeekly7(sheet)
  118. case "月度-能繁母猪存栏(2020年2月新增)":
  119. indexList, err = base_from_yongyi.HandleYongyiExcelWeekly8(sheet)
  120. case "月度-小猪存栏(2020年5月新增)", "月度-中猪存栏(2020年5月新增)", "月度-大猪存栏(2020年5月新增)":
  121. indexList, err = base_from_yongyi.HandleYongyiExcelWeekly9(sheet)
  122. case "月度-商品猪出栏量":
  123. indexList, err = base_from_yongyi.HandleYongyiExcelWeekly10(sheet)
  124. default:
  125. continue
  126. }
  127. if err != nil {
  128. utils.FileLog.Info(fmt.Sprintf("解析sheet:%s 失败, Err: %s", sheet.Name, err))
  129. continue
  130. }
  131. if len(indexList) > 0 {
  132. params := make(map[string]interface{})
  133. params["List"] = indexList
  134. params["TerminalCode"] = terminalCode
  135. result, e := PostEdbLib(params, utils.LIB_ROUTE_YONGYI_HANDLE)
  136. if e != nil {
  137. b, _ := json.Marshal(params)
  138. utils.FileLog.Info(fmt.Sprintf("sheet :%s PostEdbLib err: %s, params: %s", sheet.Name, e.Error(), string(b)))
  139. return
  140. }
  141. resp := new(models.BaseEdbLibResponse)
  142. if e := json.Unmarshal(result, &resp); e != nil {
  143. utils.FileLog.Info(fmt.Sprintf("sheet :%s json.Unmarshal err: %s", sheet.Name, e))
  144. continue
  145. }
  146. if resp.Ret != 200 {
  147. utils.FileLog.Info(fmt.Sprintf("sheet :%s Msg: %s, ErrMsg: %s", sheet.Name, resp.Msg, resp.ErrMsg))
  148. continue
  149. }
  150. }
  151. }*/
  152. return
  153. }
  154. const (
  155. YongyiDownloadUrl = "http://127.0.0.1:7010/yongyi/download"
  156. )
  157. // YongyiDownloadDaily
  158. // @Description: 调用python服务去涌益咨询官网下载日度excel文件
  159. // @datetime 2023-12-19 09:39:05
  160. func YongyiDownloadDaily(cont context.Context) (err error) {
  161. // todo 判断文件是否已经下载,如果已经下载到则无需重复下载
  162. var cacheClient *cache.Cache
  163. if cacheClient == nil {
  164. cacheClient = cache.New(365*24*time.Hour, 365*24*time.Hour)
  165. }
  166. // 2023年12月19日涌益咨询日度数据
  167. path := fmt.Sprintf("%s/%s%s", utils.YongyiFilePath, time.Now().Format(utils.FormatDateYearMonthDay), "涌益咨询日度数据.xlsx")
  168. _, ok := cacheClient.Get(path)
  169. fmt.Println("YongyiDownloadDaily: " + path)
  170. if ok {
  171. utils.FileLog.Info("YongyiDownloadDaily: 文件已存在无需再下载")
  172. return
  173. }
  174. url := fmt.Sprintf("%s?dayFlag=1&weekFlag=0", YongyiDownloadUrl)
  175. fmt.Println("YongyiDownload URL:" + url)
  176. body, err := HttpGet(url)
  177. if err != nil {
  178. utils.FileLog.Info("YongyiDownload Err:" + err.Error())
  179. return
  180. }
  181. utils.FileLog.Debug("YongyiDownload Result:" + string(body))
  182. return
  183. }
  184. // YongyiDownloadWeekyly
  185. // @Description: 调用python服务去涌益咨询官网下载周度excel文件
  186. // @datetime 2023-12-19 09:39:05
  187. func YongyiDownloadWeekyly(cont context.Context) (err error) {
  188. weekFlag := 1
  189. // 判断文件是否已经下载,如果已经下载到则无需重复下载
  190. var cacheClient *cache.Cache
  191. if cacheClient == nil {
  192. cacheClient = cache.New(365*24*time.Hour, 365*24*time.Hour)
  193. }
  194. // 2023.11.10-2023.11.16涌益咨询 周度数据.xlsx
  195. // 获取本周的时间范围, 即当前时间
  196. endDate := time.Now().Format(utils.FormatDatePoint)
  197. startDate := time.Now().AddDate(0, 0, -6).Format(utils.FormatDatePoint)
  198. dataFileExsit := false
  199. chartFileExist := false
  200. path := fmt.Sprintf("%s/%s-%s%s", utils.YongyiFilePath, startDate, endDate, "涌益咨询周度数据.xlsx")
  201. fmt.Println("YongyiDownloadWeekyly: " + path)
  202. _, ok := cacheClient.Get(path)
  203. if ok {
  204. utils.FileLog.Info("YongyiDownloadWeekyly: 文件已存在无需再下载")
  205. dataFileExsit = true
  206. } else {
  207. // 从已处理的表格中查询是否已存在,如果已存在,也无需下载
  208. _, err = os.Stat(path)
  209. if err == nil { //文件或者目录存在
  210. dataFileExsit = true
  211. }
  212. }
  213. path = fmt.Sprintf("%s/%s-%s%s", utils.YongyiFilePath, startDate, endDate, "周度图表版图.xlsx")
  214. fmt.Println("YongyiDownloadWeekyly: " + path)
  215. _, ok = cacheClient.Get(path)
  216. if ok {
  217. utils.FileLog.Info("YongyiDownloadWeekyly: 文件已存在无需再下载")
  218. chartFileExist = true
  219. } else {
  220. // 从已处理的表格中查询是否已存在,如果已存在,也无需下载
  221. _, err = os.Stat(path)
  222. if err == nil { //文件或者目录存在
  223. chartFileExist = true
  224. }
  225. }
  226. if dataFileExsit && chartFileExist {
  227. return
  228. }
  229. url := fmt.Sprintf("%s?dayFlag=0&weekFlag=%d", YongyiDownloadUrl, weekFlag)
  230. fmt.Println("YongyiDownload URL:" + url)
  231. body, err := HttpGet(url)
  232. if err != nil {
  233. utils.FileLog.Info("YongyiDownload Err:" + err.Error())
  234. return
  235. }
  236. utils.FileLog.Debug("YongyiDownload Result:" + string(body))
  237. return
  238. }
  239. // 监听涌溢咨询文件夹是否有新增的excel文件
  240. func ReadWatchYongyiFile(cont context.Context) (err error) {
  241. fmt.Println("ReadWatchYongyiFile start")
  242. defer func() {
  243. if err != nil {
  244. fmt.Println("ReadWatchYongyiFile Err:" + err.Error())
  245. }
  246. }()
  247. var cacheClient *cache.Cache
  248. if cacheClient == nil {
  249. cacheClient = cache.New(365*24*time.Hour, 365*24*time.Hour)
  250. }
  251. err = filepath.Walk(utils.YongyiFilePath, func(path string, info fs.FileInfo, err error) error {
  252. if err != nil {
  253. return err
  254. }
  255. if !info.IsDir() {
  256. fmt.Println("ReadWatchYongyiFile path" + path)
  257. fileInfo, e := os.Stat(path)
  258. if e != nil {
  259. fmt.Println("ReadWatchYongyiFile os.Stat:", e.Error())
  260. }
  261. winFileAttr := fileInfo.Sys().(*syscall.Win32FileAttributeData)
  262. modifyTimeStr := utils.SecondToTime(winFileAttr.LastWriteTime.Nanoseconds() / 1e9).Format(utils.FormatDateTime)
  263. fmt.Println("ReadWatchYongyiFile modifyTimeStr" + modifyTimeStr)
  264. existModifyTime, ok := cacheClient.Get(path)
  265. moveFlag := false
  266. if ok {
  267. // 更新
  268. fmt.Println("ReadWatchYongyiFile existModifyTime" + existModifyTime.(string))
  269. existModifyTimeStr := existModifyTime.(string)
  270. if existModifyTimeStr != modifyTimeStr {
  271. if strings.Contains(path, "涌益咨询") && strings.Contains(path, "日度") {
  272. time.Sleep(time.Second * 10)
  273. err = HandleYongyiExcelDailyV2(path)
  274. if err == nil {
  275. moveFlag = true
  276. }
  277. // todo 移动文件到新目录下
  278. } else if strings.Contains(path, "涌益咨询") && strings.Contains(path, "周度图表版图") {
  279. time.Sleep(time.Second * 10)
  280. err = HandleYongyiExcelWeeklyChart(path)
  281. if err == nil {
  282. moveFlag = true
  283. }
  284. } else if strings.Contains(path, "涌益咨询") && strings.Contains(path, "周度数据") {
  285. time.Sleep(time.Second * 10)
  286. err = HandleYongyiExcelWeeklyV2(path)
  287. if err == nil {
  288. moveFlag = true
  289. }
  290. }
  291. }
  292. } else {
  293. // 新增
  294. if strings.Contains(path, "涌益咨询") && strings.Contains(path, "日度") {
  295. time.Sleep(time.Second * 10)
  296. err = HandleYongyiExcelDailyV2(path)
  297. if err == nil {
  298. moveFlag = true
  299. }
  300. } else if strings.Contains(path, "涌益咨询") && strings.Contains(path, "周度图表版图") {
  301. time.Sleep(time.Second * 10)
  302. err = HandleYongyiExcelWeeklyChart(path)
  303. if err == nil {
  304. moveFlag = true
  305. }
  306. } else if strings.Contains(path, "涌益咨询") && strings.Contains(path, "周度数据") {
  307. time.Sleep(time.Second * 10)
  308. err = HandleYongyiExcelWeeklyV2(path)
  309. if err == nil {
  310. moveFlag = true
  311. }
  312. }
  313. }
  314. if moveFlag {
  315. // 移动文件至已处理目录
  316. e = utils.CreateDirIfNotExists(utils.YongyiReadFilePath)
  317. if e != nil {
  318. //err = fmt.Errorf("CreateDirIfNotExists err: %s", e.Error())
  319. fmt.Printf("ReadWatchYongyiFile CreateDirIfNotExists err: %s\n", e.Error())
  320. }
  321. destPath := filepath.Join(utils.YongyiReadFilePath, info.Name())
  322. e = os.Rename(path, destPath)
  323. if e != nil {
  324. //err = fmt.Errorf("file move err: %s", e.Error())
  325. fmt.Printf("ReadWatchYongyiFile file move err: %s\n", e.Error())
  326. }
  327. }
  328. cacheClient.Delete(path)
  329. cacheClient.Set(path, modifyTimeStr, 24*time.Hour)
  330. }
  331. return nil
  332. })
  333. return
  334. }
  335. var YongyiDailyHandlers = map[string]func(f *excelize.File, sheetName string) ([]*models.YongyiExcelIndex, error){
  336. "出栏价": base_from_yongyi_v2.HandleYongyiExcelDaily1,
  337. "标肥价差": base_from_yongyi_v2.HandleYongyiExcelDaily2,
  338. "价格+宰量": base_from_yongyi_v2.HandleYongyiExcelDaily3,
  339. "屠宰企业日度屠宰量": base_from_yongyi_v2.HandleYongyiExcelDaily4,
  340. }
  341. var YongyiWeeklyHandlers = map[string]func(f *excelize.File, sheetName string) ([]*models.YongyiExcelIndex, error){
  342. "周度-商品猪出栏价": base_from_yongyi_v2.HandleYongyiExcelWeekly1,
  343. "周度-体重": base_from_yongyi_v2.HandleYongyiExcelWeekly2,
  344. "周度-屠宰厂宰前活猪重": base_from_yongyi_v2.HandleYongyiExcelWeekly3,
  345. "周度-各体重段价差": base_from_yongyi_v2.HandleYongyiExcelWeekly4,
  346. "周度-50公斤二元母猪价格": base_from_yongyi_v2.HandleYongyiExcelWeekly5,
  347. "周度-规模场15公斤仔猪出栏价": base_from_yongyi_v2.HandleYongyiExcelWeekly5,
  348. "周度-宰后结算价": base_from_yongyi_v2.HandleYongyiExcelWeekly5,
  349. "周度-冻品库存": base_from_yongyi_v2.HandleYongyiExcelWeekly5,
  350. "周度-猪肉价(前三等级白条均价)": base_from_yongyi_v2.HandleYongyiExcelWeekly5,
  351. "周度-冻品库存多样本": base_from_yongyi_v2.HandleYongyiExcelWeekly6,
  352. "月度出栏完成率": base_from_yongyi_v2.HandleYongyiExcelWeekly6,
  353. "月度计划出栏量": base_from_yongyi_v2.HandleYongyiExcelWeekly7,
  354. "月度-能繁母猪存栏(2020年2月新增)": base_from_yongyi_v2.HandleYongyiExcelWeekly8,
  355. "月度-小猪存栏(2020年5月新增)": base_from_yongyi_v2.HandleYongyiExcelWeekly9,
  356. "月度-中猪存栏(2020年5月新增)": base_from_yongyi_v2.HandleYongyiExcelWeekly9,
  357. "月度-大猪存栏(2020年5月新增)": base_from_yongyi_v2.HandleYongyiExcelWeekly9,
  358. "月度-商品猪出栏量": base_from_yongyi_v2.HandleYongyiExcelWeekly10,
  359. "历史猪价": base_from_yongyi_v2.HandleYongyiExcelWeekly12,
  360. "二育成本": base_from_yongyi_v2.HandleYongyiExcelWeekly13,
  361. "二育销量": base_from_yongyi_v2.HandleYongyiExcelWeekly14,
  362. "育肥栏舍利用率": base_from_yongyi_v2.HandleYongyiExcelWeekly15,
  363. "周度-养殖利润最新": base_from_yongyi_v2.HandleYongyiExcelWeekly16,
  364. "周度-当期、预期成本": base_from_yongyi_v2.HandleYongyiExcelWeekly17,
  365. "育肥全价料出厂价": base_from_yongyi_v2.HandleYongyiExcelWeekly18,
  366. "周度-成本计算附件": base_from_yongyi_v2.HandleYongyiExcelWeekly19,
  367. "周度-毛白价差": base_from_yongyi_v2.HandleYongyiExcelWeekly20,
  368. "仔猪、母猪": base_from_yongyi_v2.HandleYongyiExcelWeekly21,
  369. "周度-河南屠宰白条成本": base_from_yongyi_v2.HandleYongyiExcelWeekly22,
  370. "周度-淘汰母猪价格": base_from_yongyi_v2.HandleYongyiExcelWeekly23, //todo 少两个指标,云南和贵州,数据都不符合规范
  371. "鲜销率": base_from_yongyi_v2.HandleYongyiExcelWeekly24, //todo 等待解析(正月初六-二月初四)2022.2.6-3.6
  372. "周度-猪肉产品价格": base_from_yongyi_v2.HandleYongyiExcelWeekly25,
  373. "周度-屠宰企业日度屠宰量": base_from_yongyi_v2.HandleYongyiExcelWeekly26,
  374. "周度-屠宰新2022.10.28": base_from_yongyi_v2.HandleYongyiExcelWeekly27,
  375. "月度-淘汰母猪屠宰厂宰杀量": base_from_yongyi_v2.HandleYongyiExcelWeekly28,
  376. "月度-猪料销量": base_from_yongyi_v2.HandleYongyiExcelWeekly29,
  377. "月度-屠宰企业开工率": base_from_yongyi_v2.HandleYongyiExcelWeekly30,
  378. "月度-屠宰厂公母比例": base_from_yongyi_v2.HandleYongyiExcelWeekly31,
  379. "月度-生产指标(2021.5.7新增)": base_from_yongyi_v2.HandleYongyiExcelWeekly32,
  380. "月度-生产指标2": base_from_yongyi_v2.HandleYongyiExcelWeekly33,
  381. "月度-二元三元能繁比例": base_from_yongyi_v2.HandleYongyiExcelWeekly34, //todo 2019年1-6月
  382. "月度-能繁母猪存栏量": base_from_yongyi_v2.HandleYongyiExcelWeekly35,
  383. "月度-原种场二元后备母猪销量及出栏日龄": base_from_yongyi_v2.HandleYongyiExcelWeekly11,
  384. }
  385. var YongyiWeeklyChartHandlers = map[string]func(f *excelize.File, sheetName string) ([]*models.YongyiExcelIndex, error){
  386. "涌益样本测算": base_from_yongyi_v2.HandleYongyiExcelWeekly36,
  387. }
  388. func HandleYongyiExcelDailyV2(filePath string) (err error) {
  389. //filePath = fmt.Sprintf("/Users/xiexiaoyuan/Downloads/2024年2月2日涌益咨询日度数据.xlsx")
  390. defer func() {
  391. if err != nil {
  392. fmt.Printf("HandleYongyiExcelDailyV2 ErrMsg: %s\n", err.Error())
  393. utils.FileLog.Info(fmt.Sprintf("HandleYongyiExcelDailyV2 ErrMsg: %s", err.Error()))
  394. }
  395. }()
  396. _ = path.Base(filePath)
  397. f, e := excelize.OpenFile(filePath)
  398. if e != nil {
  399. err = fmt.Errorf("open file err: %s", e.Error())
  400. return
  401. }
  402. defer func() {
  403. if e = f.Close(); e != nil {
  404. err = fmt.Errorf("f close err: %s", e.Error())
  405. }
  406. }()
  407. terminalCode := utils.TerminalCode
  408. for _, sheetName := range f.GetSheetMap() {
  409. // 检查是否有对应的处理函数
  410. handler, ok := YongyiDailyHandlers[sheetName]
  411. if !ok {
  412. continue // 如果没有,则跳过当前sheet
  413. }
  414. // 调用处理函数,并处理可能发生的错误
  415. indexList, e := handler(f, sheetName)
  416. if e != nil {
  417. utils.FileLog.Info(fmt.Sprintf("解析sheet:%s 失败, Err: %s", sheetName, err))
  418. continue
  419. }
  420. if len(indexList) > 0 {
  421. params := make(map[string]interface{})
  422. params["List"] = indexList
  423. params["TerminalCode"] = terminalCode
  424. result, e := PostEdbLib(params, utils.LIB_ROUTE_YONGYI_HANDLE)
  425. if e != nil {
  426. b, _ := json.Marshal(params)
  427. utils.FileLog.Info(fmt.Sprintf("sheet :%s PostEdbLib err: %s, params: %s", sheetName, e.Error(), string(b)))
  428. continue
  429. }
  430. resp := new(models.BaseEdbLibResponse)
  431. if e := json.Unmarshal(result, &resp); e != nil {
  432. utils.FileLog.Info(fmt.Sprintf("sheet :%s json.Unmarshal err: %s", sheetName, e))
  433. continue
  434. }
  435. if resp.Ret != 200 {
  436. utils.FileLog.Info(fmt.Sprintf("sheet :%s Msg: %s, ErrMsg: %s", sheetName, resp.Msg, resp.ErrMsg))
  437. continue
  438. }
  439. }
  440. }
  441. return
  442. }
  443. func HandleYongyiExcelWeeklyV2(filePath string) (err error) {
  444. //filePath = fmt.Sprintf("/Users/xiexiaoyuan/Downloads/涌益生猪项目数据库-3/2024.1.26-2024.2.1涌益咨询周度数据.xlsx")
  445. defer func() {
  446. if err != nil {
  447. fmt.Printf("HandleYongyiExcelWeeklyV2 ErrMsg: %s\n", err.Error())
  448. utils.FileLog.Info(fmt.Sprintf("HandleYongyiExcelWeeklyV2 ErrMsg: %s", err.Error()))
  449. }
  450. }()
  451. _ = path.Base(filePath)
  452. f, e := excelize.OpenFile(filePath)
  453. if e != nil {
  454. err = fmt.Errorf("open file err: %s", e.Error())
  455. return
  456. }
  457. defer func() {
  458. if e = f.Close(); e != nil {
  459. err = fmt.Errorf("f close err: %s", e.Error())
  460. }
  461. }()
  462. terminalCode := utils.TerminalCode
  463. for _, sheetName := range f.GetSheetMap() {
  464. // 检查是否有对应的处理函数
  465. handler, ok := YongyiWeeklyHandlers[sheetName]
  466. if !ok {
  467. continue // 如果没有,则跳过当前sheet
  468. }
  469. // 调用处理函数,并处理可能发生的错误
  470. indexList, e := handler(f, sheetName)
  471. if e != nil {
  472. utils.FileLog.Info(fmt.Sprintf("解析sheet:%s 失败, Err: %s", sheetName, err))
  473. continue
  474. }
  475. if len(indexList) > 0 {
  476. params := make(map[string]interface{})
  477. params["List"] = indexList
  478. params["TerminalCode"] = terminalCode
  479. result, e := PostEdbLib(params, utils.LIB_ROUTE_YONGYI_HANDLE)
  480. if e != nil {
  481. b, _ := json.Marshal(params)
  482. utils.FileLog.Info(fmt.Sprintf("sheet :%s PostEdbLib err: %s, params: %s", sheetName, e.Error(), string(b)))
  483. continue
  484. }
  485. resp := new(models.BaseEdbLibResponse)
  486. if e := json.Unmarshal(result, &resp); e != nil {
  487. utils.FileLog.Info(fmt.Sprintf("sheet :%s json.Unmarshal err: %s", sheetName, e))
  488. continue
  489. }
  490. if resp.Ret != 200 {
  491. utils.FileLog.Info(fmt.Sprintf("sheet :%s Msg: %s, ErrMsg: %s", sheetName, resp.Msg, resp.ErrMsg))
  492. continue
  493. }
  494. }
  495. }
  496. return
  497. }
  498. func HandleYongyiExcelWeeklyChart(filePath string) (err error) {
  499. //filePath = fmt.Sprintf("/Users/xiexiaoyuan/Downloads/涌益生猪项目数据库-3/2024.1.26-2024.2.1周度图表版图.xlsx")
  500. defer func() {
  501. if err != nil {
  502. fmt.Printf("HandleYongyiExcelWeeklyChart ErrMsg: %s\n", err.Error())
  503. utils.FileLog.Info(fmt.Sprintf("HandleYongyiExcelWeeklyChart ErrMsg: %s", err.Error()))
  504. }
  505. }()
  506. _ = path.Base(filePath)
  507. f, e := excelize.OpenFile(filePath)
  508. if e != nil {
  509. err = fmt.Errorf("open file err: %s", e.Error())
  510. return
  511. }
  512. defer func() {
  513. if e = f.Close(); e != nil {
  514. err = fmt.Errorf("f close err: %s", e.Error())
  515. }
  516. }()
  517. terminalCode := utils.TerminalCode
  518. for _, sheetName := range f.GetSheetMap() {
  519. // 检查是否有对应的处理函数
  520. handler, ok := YongyiWeeklyChartHandlers[sheetName]
  521. if !ok {
  522. continue // 如果没有,则跳过当前sheet
  523. }
  524. // 调用处理函数,并处理可能发生的错误
  525. indexList, e := handler(f, sheetName)
  526. if e != nil {
  527. utils.FileLog.Info(fmt.Sprintf("解析sheet:%s 失败, Err: %s", sheetName, err))
  528. continue
  529. }
  530. if len(indexList) > 0 {
  531. params := make(map[string]interface{})
  532. params["List"] = indexList
  533. params["TerminalCode"] = terminalCode
  534. result, e := PostEdbLib(params, utils.LIB_ROUTE_YONGYI_HANDLE)
  535. if e != nil {
  536. b, _ := json.Marshal(params)
  537. utils.FileLog.Info(fmt.Sprintf("sheet :%s PostEdbLib err: %s, params: %s", sheetName, e.Error(), string(b)))
  538. continue
  539. }
  540. resp := new(models.BaseEdbLibResponse)
  541. if e := json.Unmarshal(result, &resp); e != nil {
  542. utils.FileLog.Info(fmt.Sprintf("sheet :%s json.Unmarshal err: %s", sheetName, e))
  543. continue
  544. }
  545. if resp.Ret != 200 {
  546. utils.FileLog.Info(fmt.Sprintf("sheet :%s Msg: %s, ErrMsg: %s", sheetName, resp.Msg, resp.ErrMsg))
  547. continue
  548. }
  549. }
  550. }
  551. return
  552. }