commodity_coal_mine.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. package services
  2. import (
  3. "fmt"
  4. "github.com/tealeg/xlsx"
  5. "hongze/hongze_data_crawler/models"
  6. "hongze/hongze_data_crawler/utils"
  7. "strings"
  8. "time"
  9. )
  10. func FileCoalJsm() (err error) {
  11. defer func() {
  12. if err != nil {
  13. fmt.Println("RefreshDataFromDalian Err:" + err.Error())
  14. go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromDalian ErrMsg:"+err.Error(), utils.EmailSendToUsers)
  15. }
  16. }()
  17. path := "static/file/jsm.xlsx"
  18. xlFile, err := xlsx.OpenFile(path)
  19. if err != nil {
  20. return
  21. }
  22. var source string
  23. var province string
  24. var description string
  25. var exchange string
  26. var rank string
  27. var city string
  28. var companyName string
  29. var group string
  30. var dateMap = make(map[int]string)
  31. var codeMap = make(map[string]string)
  32. var indexMap = make(map[string]string)
  33. var codeCompanyMap = make(map[string]string)
  34. var items []*models.BaseFromCoalmineMapping
  35. var itemsCompany []*models.BaseFromCoalmineCompanyMapping
  36. var itemsIndex []*models.BaseFromCoalmineIndex
  37. var itemsCompanyIndex []*models.BaseFromCoalmineCompanyIndex
  38. codeList, err := models.GetBaseFromCoalmineMapping()
  39. if err != nil && err.Error() != utils.ErrNoRow() {
  40. utils.FileLog.Info("获取煤炭指标失败:", err)
  41. return err
  42. }
  43. if len(codeList) > 0 {
  44. for _, v := range codeList {
  45. codeMap[v.IndexName] = v.IndexCode
  46. }
  47. }
  48. codeCompanyList, err := models.GetBaseFromCoalmineCompanyMapping()
  49. if err != nil && err.Error() != utils.ErrNoRow() {
  50. utils.FileLog.Info("获取煤炭公司指标失败:", err)
  51. return err
  52. }
  53. if len(codeCompanyList) > 0 {
  54. for _, v := range codeCompanyList {
  55. codeCompanyMap[v.IndexName] = v.IndexCode
  56. }
  57. }
  58. indexCompanyList, err := models.GetBaseFromCoalmineIndex()
  59. if err != nil && err.Error() != utils.ErrNoRow() {
  60. utils.FileLog.Info("获取煤炭公司指标失败:", err)
  61. return err
  62. }
  63. if len(indexCompanyList) > 0 {
  64. for _, v := range indexCompanyList {
  65. indexMap[v.IndexName+v.DataTime] = v.DealValue
  66. }
  67. }
  68. for _, sheet := range xlFile.Sheets {
  69. //遍历行读取
  70. maxRow := sheet.MaxRow
  71. for i := 0; i < maxRow; i++ {
  72. //获取制表来源
  73. if i == 1 {
  74. row := sheet.Row(i)
  75. cells := row.Cells
  76. Loop:
  77. for k, cell := range cells {
  78. text := cell.String()
  79. if k == 0 {
  80. source = text
  81. break Loop
  82. }
  83. }
  84. if source != "" {
  85. source = strings.Replace(source, "制表单位:", "", -1)
  86. }
  87. }
  88. //获取样本情况
  89. if i > 3 && i < 16 {
  90. row := sheet.Row(i)
  91. cells := row.Cells
  92. Loop2:
  93. for k, cell := range cells {
  94. text := cell.String()
  95. if text != "" {
  96. if k == 1 {
  97. province = text
  98. }
  99. if k == 3 {
  100. description = text
  101. }
  102. if k == 4 {
  103. item := new(models.BaseFromCoalmineMapping)
  104. exchange = text
  105. item.IndexName = source + "_" + province + "_" + exchange
  106. item.IndexCode = utils.MD5(item.IndexName)
  107. item.Exchange = exchange
  108. item.Description = description
  109. item.Province = province
  110. item.Source = source
  111. item.CreateTime = time.Now()
  112. items = append(items, item)
  113. break Loop2
  114. }
  115. }
  116. }
  117. }
  118. //获取日期
  119. if i == 3 {
  120. row := sheet.Row(i)
  121. cells := row.Cells
  122. for k, cell := range cells {
  123. text := cell.String()
  124. stamp, _ := time.ParseInLocation("01-02-06", text, time.Now().Location())
  125. if k > 4 {
  126. dateMap[k] = stamp.Format(utils.FormatDate)
  127. }
  128. }
  129. }
  130. //获取具体产量
  131. if i > 3 && i < 16 {
  132. row := sheet.Row(i)
  133. cells := row.Cells
  134. for k, cell := range cells {
  135. text := cell.String()
  136. if k > 4 {
  137. item := new(models.BaseFromCoalmineIndex)
  138. item.IndexName = source + "_" + province + "_" + exchange
  139. item.IndexCode = codeMap[item.IndexName]
  140. item.Exchange = exchange
  141. item.DealValue = text
  142. item.DataTime = dateMap[k]
  143. item.ModifyTime = time.Now()
  144. item.CreateTime = time.Now()
  145. itemsIndex = append(itemsIndex, item)
  146. }
  147. }
  148. }
  149. //获取公司指标名称
  150. if i > 17 {
  151. row := sheet.Row(i)
  152. cells := row.Cells
  153. Loop3:
  154. for k, cell := range cells {
  155. text := cell.String()
  156. if text != "" {
  157. if k == 0 {
  158. rank = text
  159. }
  160. if k == 1 {
  161. province = text
  162. }
  163. if k == 2 {
  164. city = text
  165. }
  166. if k == 3 {
  167. companyName = text
  168. }
  169. if k == 4 {
  170. item := new(models.BaseFromCoalmineCompanyMapping)
  171. group = text
  172. item.IndexName = source + "_" + province + "_" + city + "_" + companyName
  173. item.IndexCode = utils.MD5(item.IndexName)
  174. item.Rank = rank
  175. item.Province = province
  176. item.City = city
  177. item.CompanyName = companyName
  178. item.GroupName = group
  179. item.Source = source
  180. item.CreateTime = time.Now()
  181. itemsCompany = append(itemsCompany, item)
  182. break Loop3
  183. }
  184. }
  185. }
  186. }
  187. //获取公司具体产量
  188. if i > 18 {
  189. row := sheet.Row(i)
  190. cells := row.Cells
  191. for k, cell := range cells {
  192. text := cell.String()
  193. if k > 4 {
  194. item := new(models.BaseFromCoalmineCompanyIndex)
  195. item.IndexName = source + "_" + province + "_" + city + "_" + companyName
  196. item.IndexCode = codeCompanyMap[item.IndexName]
  197. item.DealValue = text
  198. item.DataTime = dateMap[k]
  199. item.ModifyTime = time.Now()
  200. item.CreateTime = time.Now()
  201. //fmt.Println(item)
  202. itemsCompanyIndex = append(itemsCompanyIndex, item)
  203. }
  204. }
  205. }
  206. }
  207. }
  208. //添加数据到数据库
  209. for _, v := range items {
  210. if codeMap[v.IndexName] == "" {
  211. codeMap[v.IndexName] = v.IndexCode
  212. newId, err := models.AddBaseFromCoalmineMapping(v)
  213. if err != nil {
  214. fmt.Println("添加指标名称错误")
  215. } else {
  216. fmt.Println("添加指标名称成功", newId)
  217. }
  218. }
  219. }
  220. fmt.Println("指标操作完成")
  221. for _, v := range itemsIndex {
  222. v.IndexCode = codeMap[v.IndexName]
  223. if indexMap[v.IndexName+v.DataTime] == "" && v.DealValue != "" {
  224. newId, err := models.AddBaseFromCoalmineIndex(v)
  225. if err != nil {
  226. fmt.Println("添加数据错误", err)
  227. } else {
  228. fmt.Println("新增成功", newId)
  229. }
  230. } else {
  231. if indexMap[v.IndexName+v.DataTime] == v.IndexName+v.DataTime && indexMap[v.IndexName+v.DataTime] != v.DealValue {
  232. err = models.UpdateBaseFromCoalmineIndex(v)
  233. if err != nil {
  234. fmt.Println("修改数据错误错误", err)
  235. return
  236. }
  237. }
  238. }
  239. }
  240. fmt.Println("数据操作完成")
  241. for _, v := range itemsCompany {
  242. if codeCompanyMap[v.IndexName] == "" {
  243. codeCompanyMap[v.IndexName] = v.IndexCode
  244. newId, err := models.AddBaseFromCoalmineCompanyMapping(v)
  245. if err != nil {
  246. fmt.Println("添加公司指标名称错误", err)
  247. } else {
  248. fmt.Println("新增公司成功", newId)
  249. }
  250. }
  251. }
  252. fmt.Println("公司指标操作完成")
  253. //for _, v := range itemsCompanyIndex {
  254. // newId, err := models.AddBaseFromCoalmineCompanyIndex(v)
  255. // if err != nil {
  256. // fmt.Println("添加公司数据错误", err)
  257. //return
  258. // } else {
  259. // fmt.Println("新增公司数据成功", newId)
  260. // }
  261. //}
  262. return
  263. }