base.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. package base_from_yongyi_v2
  2. import (
  3. "eta/eta_data_analysis/models"
  4. "eta/eta_data_analysis/utils"
  5. "fmt"
  6. "github.com/xuri/excelize/v2"
  7. "strings"
  8. )
  9. func getClassifySortMap() map[string]int {
  10. classifyMap := map[string]int{
  11. "日度-商品猪出栏价": 1,
  12. "日度-商品猪标肥价差": 2,
  13. "日度-商品猪全国均价和宰量": 3,
  14. "日度-屠宰企业屠宰量": 4,
  15. "历史猪价": 5,
  16. "周度-商品猪出栏价": 6,
  17. "周度-体重": 7,
  18. "周度-屠宰厂宰前活猪重": 8,
  19. "周度-各体重段价差": 9,
  20. "二育成本": 10,
  21. "二育销量": 11,
  22. "育肥栏舍利用率": 12,
  23. "周度-养殖利润最新": 13,
  24. "周度-当期、预期成本": 14,
  25. "周度-育肥全价料出厂价": 15,
  26. "周度-成本计算附件": 16,
  27. "周度-毛白价差": 17,
  28. "周度-50公斤二元母猪价格": 18,
  29. "周度-规模场15公斤仔猪出栏价": 19,
  30. "仔猪、母猪": 20,
  31. "周度-河南屠宰白条成本": 21,
  32. "周度-淘汰母猪价格": 22,
  33. "周度-宰后结算价": 23,
  34. "周度-冻品库存": 24,
  35. "周度-冻品库存多样本": 25,
  36. "周度-鲜销率": 26,
  37. "周度-猪肉价(前三等级白条均价)": 27,
  38. "周度-猪肉产品价格": 28,
  39. "周度-屠宰企业日度屠宰量": 29,
  40. "周度-屠宰新2022.10.28": 30,
  41. "月度出栏完成率": 31,
  42. "月度计划出栏量": 32,
  43. "月度-淘汰母猪屠宰厂宰杀量": 33,
  44. "月度-猪料销量": 34,
  45. "月度-屠宰企业开工率": 35,
  46. "月度-屠宰厂公母比例": 36,
  47. "月度-生产指标(2021.5.7新增)": 37,
  48. "月度-生产指标2": 38,
  49. "月度-二元三元能繁比例": 39,
  50. "月度-能繁母猪存栏(2020年2月新增)": 40,
  51. "月度-小猪存栏(2020年5月新增)": 41,
  52. "月度-中猪存栏(2020年5月新增)": 42,
  53. "月度-大猪存栏(2020年5月新增)": 43,
  54. "月度-商品猪出栏量": 44,
  55. "月度-能繁母猪存栏量": 45,
  56. "月度-原种场二元后备母猪销量及出栏日龄": 46,
  57. "涌益样本测算": 47,
  58. }
  59. return classifyMap
  60. }
  61. var YongyiWeeklySheetMap5 map[string]*models.YongyiSheet
  62. var YongyiWeeklySheetMap6 map[string]*models.YongyiSheet
  63. var YongyiWeeklySheetMap9 map[string]*models.YongyiSheet
  64. var YongyiBaseInfoMap map[string]*models.YongyiSheet
  65. func init() {
  66. YongyiWeeklySheetMap5 = map[string]*models.YongyiSheet{
  67. "周度-50公斤二元母猪价格": {"50公斤二元母猪价格", "周度-50公斤二元母猪价格", "周度", "元/头"},
  68. "周度-规模场15公斤仔猪出栏价": {"规模场15公斤仔猪出栏价", "周度-规模场15公斤仔猪出栏价", "周度", "元/头"},
  69. "周度-宰后结算价": {"宰后结算价", "周度-宰后结算价", "周度", "元/公斤"},
  70. "周度-冻品库存": {"冻品库存", "周度-冻品库存", "周度", "%"},
  71. "周度-猪肉价(前三等级白条均价)": {"前三等级白条均价", "周度-猪肉价(前三等级白条均价)", "周度", "元/公斤"},
  72. }
  73. YongyiWeeklySheetMap6 = map[string]*models.YongyiSheet{
  74. "周度-冻品库存多样本": {"冻品库存多样本", "周度-冻品库存多样本", "周度", "%"},
  75. "月度出栏完成率": {"出栏完成率", "月度出栏完成率", "旬度", "%"},
  76. }
  77. YongyiWeeklySheetMap9 = map[string]*models.YongyiSheet{
  78. "月度-小猪存栏(2020年5月新增)": {"50kg以下小猪存栏量", "月度-小猪存栏(2020年5月新增)", "月度", "头"},
  79. "月度-中猪存栏(2020年5月新增)": {"中猪存栏量", "月度-中猪存栏(2020年5月新增)", "月度", "头"},
  80. "月度-大猪存栏(2020年5月新增)": {"大猪存栏量", "月度-大猪存栏(2020年5月新增)", "月度", "头"},
  81. }
  82. YongyiBaseInfoMap = map[string]*models.YongyiSheet{
  83. "出栏价": {"商品猪出栏价", "日度-商品猪出栏价", "日度", "元/公斤"},
  84. "标肥价差": {"", "日度-商品猪标肥价差", "日度", "元/公斤"},
  85. "价格+宰量": {"", "日度-商品猪全国均价和宰量", "日度", "元/公斤"},
  86. "屠宰企业日度屠宰量": {"商品猪日屠宰量", "日度-屠宰企业屠宰量", "日度", "头"},
  87. "周度-商品猪出栏价": {"商品猪出栏价", "周度-商品猪出栏价", "周度", "元/公斤"},
  88. "周度-体重": {"商品猪出栏体重", "周度-体重", "周度", "公斤"},
  89. "周度-屠宰厂宰前活猪重": {"商品猪宰前活猪重", "周度-屠宰厂宰前活猪重", "周度", "公斤"},
  90. "周度-各体重段价差": {"", "周度-各体重段价差", "周度", "元/斤"},
  91. "周度-50公斤二元母猪价格": {"50公斤二元母猪价格", "周度-50公斤二元母猪价格", "周度", "元/头"},
  92. "周度-规模场15公斤仔猪出栏价": {"规模场15公斤仔猪出栏价", "周度-规模场15公斤仔猪出栏价", "周度", "元/头"},
  93. "周度-宰后结算价": {"宰后结算价", "周度-宰后结算价", "周度", "元/公斤"},
  94. "周度-冻品库存": {"冻品库存", "周度-冻品库存", "周度", "%"},
  95. "周度-冻品库存多样本": {"冻品库存多样本", "周度-冻品库存多样本", "周度", "%"},
  96. "周度-猪肉价(前三等级白条均价)": {"前三等级白条均价", "周度-猪肉价(前三等级白条均价)", "周度", "元/公斤"},
  97. "月度出栏完成率": {"出栏完成率", "月度出栏完成率", "旬度", "%"},
  98. "月度计划出栏量": {"月度计划出栏量环比", "月度计划出栏量", "月度", "%"},
  99. "月度-能繁母猪存栏(2020年2月新增)": {"能繁母猪存栏量", "月度-能繁母猪存栏(2020年2月新增)", "月度", "头"},
  100. "月度-小猪存栏(2020年5月新增)": {"50kg以下小猪存栏量", "月度-小猪存栏(2020年5月新增)", "月度", "头"},
  101. "月度-中猪存栏(2020年5月新增)": {"中猪存栏量", "月度-中猪存栏(2020年5月新增)", "月度", "头"},
  102. "月度-大猪存栏(2020年5月新增)": {"大猪存栏量", "月度-大猪存栏(2020年5月新增)", "月度", "头"},
  103. "月度-商品猪出栏量": {"商品猪出栏量", "月度-商品猪出栏量", "月度", "头"},
  104. "历史猪价": {"历史猪价", "历史猪价", "月度", "元/公斤"},
  105. "二育成本": {"", "二育成本", "周度", "kg"}, //单位有四种kg、无, 元/kg, 元
  106. "二育销量": {"二育销量", "二育销量", "周度", "%"},
  107. "育肥栏舍利用率": {"育肥栏舍利用率", "育肥栏舍利用率", "旬度", "%"},
  108. "周度-养殖利润最新": {"出栏肥猪利润", "周度-养殖利润最新", "周度", "元/头"},
  109. "周度-当期、预期成本": {"", "周度-当期、预期成本", "周度", "元/kg"},
  110. "育肥全价料出厂价": {"育肥全价料出厂均价参考", "周度-育肥全价料出厂价", "周度", "元/吨"},
  111. "周度-成本计算附件": {"", "周度-成本计算附件", "周度", "元/头"}, //多个单位:元/头,%,kg,元
  112. "周度-毛白价差": {"毛白价差", "周度-毛白价差", "周度", "元/公斤"},
  113. "仔猪、母猪": {"", "仔猪、母猪", "周度", "元/头"}, //多个前缀,仔猪价,二元母猪价
  114. "周度-河南屠宰白条成本": {"河南屠宰白条成本", "周度-河南屠宰白条成本", "周度", "元/kg"}, //多个单位:kg,元/kg,元/头
  115. "周度-淘汰母猪价格": {"淘汰母猪价格", "周度-淘汰母猪价格", "周度", "元/斤"},
  116. "鲜销率": {"鲜销率", "周度-鲜销率", "周度", "%"},
  117. "周度-猪肉产品价格": {"猪肉产品价格", "周度-猪肉产品价格", "周度", "元/公斤"},
  118. "周度-屠宰企业日度屠宰量": {"屠宰企业日度屠宰量", "周度-屠宰企业日度屠宰量", "周度", "头"},
  119. "周度-屠宰新2022.10.28": {"不同规模屠宰厂宰杀量", "周度-屠宰新2022.10.28", "周度", "头"},
  120. "月度-淘汰母猪屠宰厂宰杀量": {"淘汰母猪屠宰厂宰杀量", "月度-淘汰母猪屠宰厂宰杀量", "月度", "头"},
  121. "月度-猪料销量": {"饲料销量(环比)", "月度-猪料销量", "月度", "头"}, //todo 单位有问题
  122. "月度-屠宰企业开工率": {"", "月度-屠宰企业开工率", "月度", "%"},
  123. "月度-屠宰厂公母比例": {"屠宰厂", "月度-屠宰厂公母比例", "月度", "头"}, //多个单位:头,%
  124. "月度-生产指标(2021.5.7新增)": {"生产指标", "月度-生产指标(2021.5.7新增)", "月度", "头"}, //多个单位:头,%
  125. "月度-生产指标2": {"生产指标", "月度-生产指标2", "月度", "头"}, //多个单位:头,%
  126. "月度-二元三元能繁比例": {"能繁母猪存栏量", "月度-二元三元能繁比例", "月度", "%"}, //多个单位:头,%
  127. "月度-能繁母猪存栏量": {"月度能繁母猪存栏量", "月度-能繁母猪存栏量", "月度", "头"},
  128. "月度-原种场二元后备母猪销量及出栏日龄": {"原种场二元后备母猪销量及出栏日龄", "月度-原种场二元后备母猪销量及出栏日龄", "月度", "头"},
  129. "涌益样本测算": {"涌益样本测算", "涌益样本测算", "月度", "窝"}, //多个单位:头,%,窝,公斤,元/公斤
  130. }
  131. }
  132. func GetBaseInfo(sheetName string) (classifyName string, classifySort int, frequency string, unit string, namePrefix string, namePrefixPingin string) {
  133. // 获取指标分类
  134. info, ok := YongyiBaseInfoMap[sheetName]
  135. if !ok {
  136. return
  137. }
  138. classifyName = info.ClassifyName
  139. classifyMap := getClassifySortMap()
  140. classifySort, _ = classifyMap[classifyName]
  141. frequency = info.Frequency
  142. unit = info.Unit
  143. namePrefix = info.NamePrefix
  144. namePrefixPingin = "yyzx" + utils.GetFirstPingYin(namePrefix)
  145. return
  146. }
  147. func GetMergeCells(f *excelize.File, sheet string) (mergeCellMap map[int]map[int]string, err error) {
  148. mergedCells, err := f.GetMergeCells(sheet)
  149. if err != nil {
  150. fmt.Println(err)
  151. return
  152. }
  153. mergeCellMap = make(map[int]map[int]string)
  154. // 遍历所有合并单元格范围
  155. for _, cellRange := range mergedCells {
  156. fmt.Println("Merged Cell Range:", cellRange)
  157. cellVal := cellRange.GetCellValue()
  158. // 解析合并单元格范围,例如 "A1:B2"
  159. startCell, endCell := cellRange.GetStartAxis(), cellRange.GetEndAxis()
  160. if err != nil {
  161. fmt.Println(err)
  162. continue
  163. }
  164. // 解析起始单元格的下标
  165. startCol, startRow, err := excelize.CellNameToCoordinates(startCell)
  166. if err != nil {
  167. fmt.Println(err)
  168. continue
  169. }
  170. // 解析结束单元格的下标
  171. endCol, endRow, err := excelize.CellNameToCoordinates(endCell)
  172. if err != nil {
  173. fmt.Println(err)
  174. continue
  175. }
  176. // 打印合并单元格的起始和结束下标
  177. fmt.Printf("Start: Row %d, Col %d\n", startRow, startCol)
  178. fmt.Printf("End: Row %d, Col %d\n", endRow, endCol)
  179. //把合并的单元格整理成单个单元格,用于计算
  180. for i := startRow; i <= endRow; i++ {
  181. cellMap, ok := mergeCellMap[i-1]
  182. if !ok {
  183. cellMap = make(map[int]string)
  184. }
  185. for j := startCol; j <= endCol; j++ {
  186. cellMap[j-1] = strings.TrimSpace(cellVal)
  187. }
  188. mergeCellMap[i-1] = cellMap
  189. }
  190. }
  191. return
  192. }
  193. // GetWeekly13IndexName 二育成本指标名称处理
  194. func GetWeekly13IndexName(name, level string) string {
  195. switch {
  196. case strings.Contains(name, "二育主流采购体重段"):
  197. return fmt.Sprintf("二育主流%s采购体重段", level)
  198. case strings.Contains(name, "计划出栏体重"):
  199. return fmt.Sprintf("计划%s出栏体重", level)
  200. case strings.Contains(name, "料肉比"):
  201. return fmt.Sprintf("%s料肉比", level)
  202. case strings.Contains(name, "采购成本"):
  203. return fmt.Sprintf("%s采购成本", level)
  204. case strings.Contains(name, "运费+损耗"):
  205. return fmt.Sprintf("%s运费+损耗", level)
  206. case strings.Contains(name, "增重饲料成本"):
  207. return fmt.Sprintf("%s增重饲料成本", level)
  208. case strings.Contains(name, "二育成本"):
  209. return fmt.Sprintf("%s二育成本", level)
  210. }
  211. return name
  212. }
  213. // GetWeekly13IndexUnit 二育成本指标名称处理
  214. func GetWeekly13IndexUnit(name string) string {
  215. switch {
  216. case strings.Contains(name, "二育主流采购体重段") || strings.Contains(name, "计划出栏体重"):
  217. return "kg"
  218. case strings.Contains(name, "料肉比"):
  219. return "无"
  220. case strings.Contains(name, "采购成本") || strings.Contains(name, "运费+损耗") || strings.Contains(name, "二育成本"):
  221. return "元/kg"
  222. case strings.Contains(name, "增重饲料成本"):
  223. return "元"
  224. }
  225. return name
  226. }