commodity_coal.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_index_lib/models"
  5. "eta/eta_index_lib/utils"
  6. "fmt"
  7. "github.com/mozillazg/go-pinyin"
  8. "os"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. // 煤炭网
  14. type CoalMineDataController struct {
  15. BaseAuthController
  16. }
  17. // @Title 刷新数据
  18. // @Description 刷新数据接口
  19. // @Param request body models.CoalMineDataReq true "type json string"
  20. // @Success 200 {object} models.EdbClassify
  21. // @router /jsm/history [post]
  22. func (this *CoalMineDataController) JsmHistory() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. this.Data["json"] = br
  26. this.ServeJSON()
  27. }()
  28. var req models.CoalMineDataReq
  29. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  30. if err != nil {
  31. br.Msg = "参数解析异常!"
  32. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  33. return
  34. }
  35. defer func() {
  36. if err != nil {
  37. fmt.Println("RefreshDataFromCoalCoastal Err:" + err.Error())
  38. utils.FileLog.Info(fmt.Sprintf("RefreshDataFromCoalCoastal, Err: %s", err))
  39. }
  40. }()
  41. //path := "/home/code/python/coal_mail/emailFile/沿海八省动力煤终端用户供耗存数据更新.xlsx"
  42. var mappingItems []*models.BaseFromCoalmineMapping
  43. var indexItems []*models.BaseFromCoalmineJsmIndex
  44. var codeMap = make(map[string]string)
  45. var indexMap = make(map[string]string)
  46. var nameMap = make(map[int]string)
  47. var dataTime string
  48. var sheetName, unit string
  49. var province string
  50. var exchange string
  51. codeList, err := models.GetBaseFromCoalmineMapping()
  52. if err != nil && err.Error() != utils.ErrNoRow() {
  53. utils.FileLog.Info("获取煤炭指标失败:", err)
  54. return
  55. }
  56. if len(codeList) > 0 {
  57. for _, v := range codeList {
  58. codeMap[v.IndexName] = v.IndexCode
  59. }
  60. }
  61. indexCompanyList, err := models.GetBaseFromCoalmineIndex()
  62. if err != nil && err.Error() != utils.ErrNoRow() {
  63. utils.FileLog.Info("获取煤炭公司指标失败:", err)
  64. return
  65. }
  66. if len(indexCompanyList) > 0 {
  67. for _, v := range indexCompanyList {
  68. indexMap[v.IndexName+v.DataTime] = v.DealValue
  69. }
  70. }
  71. sheet := req.SheetData
  72. sheetName = sheet.Name
  73. //遍历行读取
  74. maxCol := sheet.MaxCol
  75. for i := 0; i < maxCol; i++ {
  76. if i == 0 {
  77. row := sheet.Rows[i]
  78. cells := row.Cells
  79. for k, cell := range cells {
  80. text := cell.Value
  81. if k > 0 {
  82. switch k {
  83. case 1:
  84. province = "山西"
  85. text = strings.TrimLeft(text, "山西")
  86. case 4:
  87. province = "内蒙古"
  88. text = strings.TrimLeft(text, "内蒙古")
  89. case 7:
  90. province = "陕西"
  91. text = strings.TrimLeft(text, "陕西")
  92. }
  93. exchange = text
  94. text = province + text
  95. var item models.BaseFromCoalmineMapping
  96. item.IndexName = text
  97. nameMap[k] = item.IndexName
  98. //code
  99. exists := ContainsSpecialName(text)
  100. var code string
  101. if exists {
  102. abbr := trimProvinceName(text)
  103. //取处理后公司名首字母缩写
  104. a := pinyin.NewArgs()
  105. rows := pinyin.Pinyin(sheetName, a)
  106. for i := 0; i < len(rows); i++ {
  107. if len(rows[i]) != 0 {
  108. str := rows[i][0]
  109. pi := str[0:1]
  110. code += pi
  111. }
  112. }
  113. item.IndexCode = abbr + code + "jsm"
  114. } else {
  115. a := pinyin.NewArgs()
  116. rows := pinyin.Pinyin(text+sheetName, a)
  117. for i := 0; i < len(rows); i++ {
  118. if len(rows[i]) != 0 {
  119. str := rows[i][0]
  120. pi := str[0:1]
  121. code += pi
  122. }
  123. }
  124. item.IndexCode = code + "jsm"
  125. }
  126. item.CreateTime = time.Now()
  127. mappingItems = append(mappingItems, &item)
  128. }
  129. }
  130. }
  131. if i > 0 {
  132. row := sheet.Rows[i]
  133. cells := row.Cells
  134. for k, cell := range cells {
  135. if k < 9 {
  136. var item models.BaseFromCoalmineJsmIndex
  137. if k == 0 {
  138. text := cell.Value
  139. dataTime = ExcelDateToDate(text).Format(utils.FormatDate)
  140. }
  141. if k > 0 {
  142. text := cell.Value
  143. item.IndexName = nameMap[k]
  144. item.IndexCode = codeMap[nameMap[k]]
  145. item.DealValue = text
  146. item.Source = "三省周度"
  147. item.DataTime = dataTime
  148. item.Frequency = "周度"
  149. item.ModifyTime = time.Now()
  150. item.CreateTime = time.Now()
  151. item.Exchange = exchange
  152. }
  153. item.Unit = unit
  154. indexItems = append(indexItems, &item)
  155. }
  156. }
  157. }
  158. }
  159. ////添加数据到数据库
  160. for _, v := range mappingItems {
  161. if codeMap[v.IndexName] == "" {
  162. codeMap[v.IndexName] = v.IndexCode
  163. newId, err := models.AddBaseFromCoalmineMapping(v)
  164. if err != nil {
  165. for i := 0; i < 10; i++ {
  166. v.IndexCode = v.IndexCode + strconv.Itoa(i)
  167. codeMap[v.IndexName] = v.IndexCode
  168. //newId, err := models.AddBaseFromCoalmineMapping(v)
  169. //if err != nil {
  170. // fmt.Println("再次添加公司指标名称错误", err)
  171. // continue
  172. //} else {
  173. // fmt.Println("新增公司成功", newId)
  174. // break
  175. //}
  176. }
  177. } else {
  178. fmt.Println("新增公司成功", newId)
  179. }
  180. }
  181. }
  182. //fmt.Println("指标操作完成")
  183. //给indexItem中的code赋值并插入index表
  184. for _, v := range indexItems {
  185. v.IndexCode = codeMap[v.IndexName]
  186. if indexMap[v.IndexName+v.DataTime] == "" && v.DealValue != "" {
  187. newId, err := models.AddBaseFromCoalmineIndex(v)
  188. if err != nil {
  189. fmt.Println("添加数据错误", err)
  190. } else {
  191. fmt.Println("新增成功", newId)
  192. }
  193. } else {
  194. if indexMap[v.IndexName+v.DataTime] != v.DealValue && v.DealValue != "" {
  195. err = models.UpdateBaseFromCoalmineIndex(v)
  196. if err != nil {
  197. fmt.Println("修改数据错误错误", err)
  198. return
  199. }
  200. }
  201. }
  202. }
  203. return
  204. }
  205. func ttrimProvinceName(name string) string {
  206. name = strings.Replace(name, "陕西省", "sn", -1)
  207. name = strings.Replace(name, "陕西", "sn", -1)
  208. name = strings.Replace(name, "海南市", "hi", -1)
  209. name = strings.Replace(name, "海南", "hi", -1)
  210. name = strings.Replace(name, "河南省", "ha", -1)
  211. name = strings.Replace(name, "河南", "ha", -1)
  212. name = strings.Replace(name, "河北省", "he", -1)
  213. name = strings.Replace(name, "河北", "he", -1)
  214. name = strings.Replace(name, "澳门", "mo", -1)
  215. name = strings.Replace(name, "内蒙古自治区", "nm", -1)
  216. name = strings.Replace(name, "内蒙古", "nm", -1)
  217. name = strings.Replace(name, "黑龙江", "hl", -1)
  218. name = strings.Replace(name, "(", "", -1)
  219. name = strings.Replace(name, ")", "", -1)
  220. name = strings.Replace(name, "+", "", -1)
  221. return name
  222. }
  223. func ExcelDateToDate(excelDate string) time.Time {
  224. excelTime := time.Date(1899, time.December, 30, 0, 0, 0, 0, time.UTC)
  225. var days, _ = strconv.Atoi(excelDate)
  226. return excelTime.Add(time.Second * time.Duration(days*86400))
  227. }
  228. func PathExists(path string) (bool, error) {
  229. _, err := os.Stat(path)
  230. if err == nil { //文件或者目录存在
  231. return true, nil
  232. }
  233. if os.IsNotExist(err) {
  234. return false, nil
  235. }
  236. return false, err
  237. }
  238. func TrimCompanyName(name string) string {
  239. name = strings.Replace(name, "有限", "", -1)
  240. name = strings.Replace(name, "股份", "", -1)
  241. name = strings.Replace(name, "责任", "", -1)
  242. name = strings.Replace(name, "公司", "", -1)
  243. name = strings.Replace(name, "(", "", -1)
  244. name = strings.Replace(name, ")", "", -1)
  245. return name
  246. }
  247. func ContainsSpecialName(name string) bool {
  248. return strings.Contains(name, "陕西") ||
  249. strings.Contains(name, "海南") ||
  250. strings.Contains(name, "河南") ||
  251. strings.Contains(name, "河北") ||
  252. strings.Contains(name, "澳门") ||
  253. strings.Contains(name, "内蒙古") ||
  254. strings.Contains(name, "黑龙江")
  255. }
  256. func TrimProvinceName(name string) string {
  257. name = strings.Replace(name, "陕西省", "sns", -1)
  258. name = strings.Replace(name, "陕西", "sn", -1)
  259. name = strings.Replace(name, "海南市", "hi", -1)
  260. name = strings.Replace(name, "海南", "hi", -1)
  261. name = strings.Replace(name, "河南省", "has", -1)
  262. name = strings.Replace(name, "河南", "ha", -1)
  263. name = strings.Replace(name, "河北省", "hes", -1)
  264. name = strings.Replace(name, "河北", "he", -1)
  265. name = strings.Replace(name, "澳门", "mo", -1)
  266. name = strings.Replace(name, "内蒙古自治区", "nm", -1)
  267. name = strings.Replace(name, "内蒙古", "nm", -1)
  268. name = strings.Replace(name, "黑龙江", "hl", -1)
  269. name = strings.Replace(name, "(", "", -1)
  270. name = strings.Replace(name, ")", "", -1)
  271. name = strings.Replace(name, "+", "", -1)
  272. return name
  273. }
  274. func trimProvinceName(name string) string {
  275. name = strings.Replace(name, "陕西省", "sn", -1)
  276. name = strings.Replace(name, "陕西", "sn", -1)
  277. name = strings.Replace(name, "海南市", "hi", -1)
  278. name = strings.Replace(name, "海南", "hi", -1)
  279. name = strings.Replace(name, "河南省", "ha", -1)
  280. name = strings.Replace(name, "河南", "ha", -1)
  281. name = strings.Replace(name, "河北省", "he", -1)
  282. name = strings.Replace(name, "河北", "he", -1)
  283. name = strings.Replace(name, "澳门", "mo", -1)
  284. name = strings.Replace(name, "内蒙古自治区", "nm", -1)
  285. name = strings.Replace(name, "内蒙古", "nm", -1)
  286. name = strings.Replace(name, "黑龙江", "hl", -1)
  287. name = strings.Replace(name, "(", "", -1)
  288. name = strings.Replace(name, ")", "", -1)
  289. name = strings.Replace(name, "+", "", -1)
  290. return name
  291. }