commodity_coal_inland.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. package services
  2. import (
  3. "fmt"
  4. "github.com/mozillazg/go-pinyin"
  5. "github.com/tealeg/xlsx"
  6. "hongze/hongze_data_crawler/models"
  7. "hongze/hongze_data_crawler/services/alarm_msg"
  8. "hongze/hongze_data_crawler/utils"
  9. "strconv"
  10. "time"
  11. )
  12. func FileCoalInland() () {
  13. var err error
  14. defer func() {
  15. if err != nil {
  16. fmt.Println("RefreshDataFromCoalInland Err:" + err.Error())
  17. msg := "失败提醒"+"RefreshDataFromCoalInland ErrMsg:"+err.Error()
  18. go alarm_msg.SendAlarmMsg(msg, 3)
  19. //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromCoalInland ErrMsg:"+err.Error(), utils.EmailSendToUsers)
  20. }
  21. }()
  22. path := "/home/code/python/coal_mail/emailFile/内陆17省动力煤终端用户供耗存%s.xlsx"
  23. for i := 0;i < 7;i++{
  24. npath := fmt.Sprintf(path,time.Now().AddDate(0,0,-i).Format(utils.FormatDateUnSpace))
  25. fmt.Println(npath)
  26. exist,err := PathExists(npath)
  27. if err != nil {
  28. fmt.Println(err)
  29. return
  30. }
  31. if exist{
  32. path = npath
  33. break
  34. }
  35. if i < 3 && !exist{
  36. npath := "/home/code/python/coal_mail/emailFile/内陆17省动力煤终端用户供耗存.xlsx"
  37. fmt.Println(npath)
  38. exist,err := PathExists(npath)
  39. if err != nil {
  40. fmt.Println(err)
  41. return
  42. }
  43. if exist{
  44. path = npath
  45. break
  46. }
  47. }
  48. }
  49. exist,err := PathExists(path)
  50. if err != nil {
  51. fmt.Println(err)
  52. return
  53. }
  54. if !exist{
  55. path = "/home/code/python/coal_mail/emailFile/内陆17省动力煤终端用户供耗存.xlsx"
  56. }
  57. exist,err = PathExists(path)
  58. if err != nil {
  59. fmt.Println(err)
  60. return
  61. }
  62. var xlFile *xlsx.File
  63. if exist {
  64. xlFile, err = xlsx.OpenFile(path)
  65. if err != nil {
  66. fmt.Println("OpenFile err:",err)
  67. return
  68. }
  69. }else {
  70. return
  71. }
  72. var mappingItems []*models.BaseFromCoalmineMapping
  73. var indexItems []*models.BaseFromCoalmineInlandIndex
  74. var codeMap = make(map[string]string)
  75. var indexMap = make(map[string]string)
  76. var nameMap = make(map[int]string)
  77. var groupMap = make(map[int]string)
  78. var dataTime string
  79. var sheetName string
  80. codeList, err := models.GetBaseFromCoalmineMapping()
  81. if err != nil && err.Error() != utils.ErrNoRow() {
  82. utils.FileLog.Info("获取煤炭指标失败:", err)
  83. return
  84. }
  85. if len(codeList) > 0 {
  86. for _, v := range codeList {
  87. codeMap[v.IndexName] = v.IndexCode
  88. }
  89. }
  90. indexCompanyList, err := models.GetBaseFromCoalmineInlandIndex()
  91. if err != nil && err.Error() != utils.ErrNoRow() {
  92. utils.FileLog.Info("获取煤炭公司指标失败:", err)
  93. return
  94. }
  95. if len(indexCompanyList) > 0 {
  96. for _, v := range indexCompanyList {
  97. indexMap[v.IndexName+v.DataTime] = v.DealValue
  98. }
  99. }
  100. for s, sheet := range xlFile.Sheets {
  101. sheetName = sheet.Name
  102. fmt.Println("sheetName:",sheetName)
  103. var unit string
  104. if sheetName == "可用天数" {
  105. unit = "天"
  106. }else {
  107. unit = "万吨"
  108. }
  109. //遍历行读取
  110. maxCol := sheet.MaxCol
  111. for i := 0; i < maxCol; i++ {
  112. if i == 0 {
  113. row := sheet.Row(i)
  114. cells := row.Cells
  115. for k, cell := range cells {
  116. if k > 0 && k < 18 {
  117. text := cell.String()
  118. groupMap[k] = text
  119. var item models.BaseFromCoalmineMapping
  120. //合计命名
  121. if k == 9 {
  122. item.IndexName = sheetName
  123. }
  124. item.IndexName = text + sheetName
  125. nameMap[k] = item.IndexName
  126. //code
  127. exists := ContainsSpecialName(text)
  128. var code string
  129. if exists {
  130. abbr := trimProvinceName(text)
  131. //取处理后公司名首字母缩写
  132. a := pinyin.NewArgs()
  133. rows := pinyin.Pinyin(sheetName, a)
  134. for i := 0; i < len(rows); i++ {
  135. if len(rows[i]) != 0 {
  136. str := rows[i][0]
  137. pi := str[0:1]
  138. code += pi
  139. }
  140. }
  141. item.IndexCode = abbr + code + "inland"
  142. } else {
  143. a := pinyin.NewArgs()
  144. rows := pinyin.Pinyin(text+sheetName, a)
  145. for i := 0; i < len(rows); i++ {
  146. if len(rows[i]) != 0 {
  147. str := rows[i][0]
  148. pi := str[0:1]
  149. code += pi
  150. }
  151. }
  152. item.IndexCode = code + "inland"
  153. }
  154. item.CreateTime = time.Now()
  155. mappingItems = append(mappingItems, &item)
  156. }
  157. }
  158. }
  159. if i > 0 {
  160. row := sheet.Row(i)
  161. cells := row.Cells
  162. for k, cell := range cells {
  163. if k < 18 {
  164. var item models.BaseFromCoalmineInlandIndex
  165. if k == 0 {
  166. if s == 0 {
  167. text := cell.String()
  168. t, _ := time.ParseInLocation("01-02-06", text, time.Local)
  169. dataTime = t.Format(utils.FormatDate)
  170. } else {
  171. text := cell.String()
  172. dataTime = ExcelDateToDate(text).Format(utils.FormatDate)
  173. }
  174. }
  175. if k > 0 {
  176. text := cell.String()
  177. item.IndexName = nameMap[k]
  178. item.IndexCode = codeMap[nameMap[k]]
  179. item.DealValue = text
  180. item.GroupName = groupMap[k]
  181. item.Source = "内陆十七省"
  182. item.DataTime = dataTime
  183. item.Unit = unit
  184. item.Frequency = "日度"
  185. item.ModifyTime = time.Now()
  186. item.CreateTime = time.Now()
  187. }
  188. indexItems = append(indexItems, &item)
  189. }
  190. }
  191. }
  192. }
  193. }
  194. //添加数据到数据库
  195. for _, v := range mappingItems {
  196. if codeMap[v.IndexName] == "" {
  197. codeMap[v.IndexName] = v.IndexCode
  198. newId, err := models.AddBaseFromCoalmineMapping(v)
  199. if err != nil {
  200. for i := 0; i<10; i++ {
  201. v.IndexCode = v.IndexCode + strconv.Itoa(i)
  202. codeMap[v.IndexName] = v.IndexCode
  203. newId, err := models.AddBaseFromCoalmineMapping(v)
  204. if err != nil {
  205. fmt.Println("再次添加公司指标名称错误", err)
  206. continue
  207. } else {
  208. fmt.Println("新增公司成功", newId)
  209. break
  210. }
  211. }
  212. } else {
  213. fmt.Println("新增公司成功", newId)
  214. }
  215. }
  216. }
  217. fmt.Println("指标操作完成")
  218. //给indexItem中的code赋值并插入index表
  219. for _, v := range indexItems {
  220. v.IndexCode = codeMap[v.IndexName]
  221. if indexMap[v.IndexName+v.DataTime] == "" && v.DealValue != "" {
  222. newId, err := models.AddBaseFromCoalInlandIndex(v)
  223. if err != nil {
  224. fmt.Println("添加数据错误", err)
  225. } else {
  226. fmt.Println("新增成功", newId)
  227. }
  228. } else {
  229. if indexMap[v.IndexName+v.DataTime] != v.DealValue && v.DealValue != "" {
  230. err = models.UpdateBaseFromCoalInlandIndex(v)
  231. if err != nil {
  232. fmt.Println("修改数据错误错误", err)
  233. return
  234. }
  235. }
  236. }
  237. }
  238. return
  239. }