|
@@ -0,0 +1,312 @@
|
|
|
+package controllers
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "eta/eta_index_lib/models"
|
|
|
+ "eta/eta_index_lib/utils"
|
|
|
+ "fmt"
|
|
|
+ "github.com/mozillazg/go-pinyin"
|
|
|
+ "os"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+// 煤炭网
|
|
|
+type CoalMineDataController struct {
|
|
|
+ BaseAuthController
|
|
|
+}
|
|
|
+
|
|
|
+// @Title 刷新数据
|
|
|
+// @Description 刷新数据接口
|
|
|
+// @Param request body models.CoalMineDataReq true "type json string"
|
|
|
+// @Success 200 {object} models.EdbClassify
|
|
|
+// @router /jsm/history [post]
|
|
|
+func (this *CoalMineDataController) JsmHistory() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ var req models.CoalMineDataReq
|
|
|
+
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("RefreshDataFromCoalCoastal Err:" + err.Error())
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("RefreshDataFromCoalCoastal, Err: %s", err))
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ //path := "/home/code/python/coal_mail/emailFile/沿海八省动力煤终端用户供耗存数据更新.xlsx"
|
|
|
+
|
|
|
+ var mappingItems []*models.BaseFromCoalmineMapping
|
|
|
+ var indexItems []*models.BaseFromCoalmineJsmIndex
|
|
|
+ var codeMap = make(map[string]string)
|
|
|
+ var indexMap = make(map[string]string)
|
|
|
+ var nameMap = make(map[int]string)
|
|
|
+ var dataTime string
|
|
|
+ var sheetName, unit string
|
|
|
+ var province string
|
|
|
+ var exchange string
|
|
|
+
|
|
|
+ codeList, err := models.GetBaseFromCoalmineMapping()
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ utils.FileLog.Info("获取煤炭指标失败:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(codeList) > 0 {
|
|
|
+ for _, v := range codeList {
|
|
|
+ codeMap[v.IndexName] = v.IndexCode
|
|
|
+ }
|
|
|
+ }
|
|
|
+ indexCompanyList, err := models.GetBaseFromCoalmineIndex()
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ utils.FileLog.Info("获取煤炭公司指标失败:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(indexCompanyList) > 0 {
|
|
|
+ for _, v := range indexCompanyList {
|
|
|
+ indexMap[v.IndexName+v.DataTime] = v.DealValue
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ sheet := req.SheetData
|
|
|
+
|
|
|
+ sheetName = sheet.Name
|
|
|
+ //遍历行读取
|
|
|
+ maxCol := sheet.MaxCol
|
|
|
+ for i := 0; i < maxCol; i++ {
|
|
|
+ if i == 0 {
|
|
|
+ row := sheet.Rows[i]
|
|
|
+ cells := row.Cells
|
|
|
+
|
|
|
+ for k, cell := range cells {
|
|
|
+ text := cell.Value
|
|
|
+ if k > 0 {
|
|
|
+ switch k {
|
|
|
+ case 1:
|
|
|
+ province = "山西"
|
|
|
+ text = strings.TrimLeft(text, "山西")
|
|
|
+ case 4:
|
|
|
+ province = "内蒙古"
|
|
|
+ text = strings.TrimLeft(text, "内蒙古")
|
|
|
+ case 7:
|
|
|
+ province = "陕西"
|
|
|
+ text = strings.TrimLeft(text, "陕西")
|
|
|
+ }
|
|
|
+
|
|
|
+ exchange = text
|
|
|
+ text = province + text
|
|
|
+
|
|
|
+ var item models.BaseFromCoalmineMapping
|
|
|
+ item.IndexName = text
|
|
|
+ nameMap[k] = item.IndexName
|
|
|
+ //code
|
|
|
+ exists := ContainsSpecialName(text)
|
|
|
+ var code string
|
|
|
+ if exists {
|
|
|
+ abbr := trimProvinceName(text)
|
|
|
+ //取处理后公司名首字母缩写
|
|
|
+ a := pinyin.NewArgs()
|
|
|
+ rows := pinyin.Pinyin(sheetName, a)
|
|
|
+ for i := 0; i < len(rows); i++ {
|
|
|
+ if len(rows[i]) != 0 {
|
|
|
+ str := rows[i][0]
|
|
|
+ pi := str[0:1]
|
|
|
+ code += pi
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.IndexCode = abbr + code + "jsm"
|
|
|
+ } else {
|
|
|
+ a := pinyin.NewArgs()
|
|
|
+ rows := pinyin.Pinyin(text+sheetName, a)
|
|
|
+ for i := 0; i < len(rows); i++ {
|
|
|
+ if len(rows[i]) != 0 {
|
|
|
+ str := rows[i][0]
|
|
|
+ pi := str[0:1]
|
|
|
+ code += pi
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.IndexCode = code + "jsm"
|
|
|
+ }
|
|
|
+ item.CreateTime = time.Now()
|
|
|
+ mappingItems = append(mappingItems, &item)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if i > 0 {
|
|
|
+ row := sheet.Rows[i]
|
|
|
+ cells := row.Cells
|
|
|
+ for k, cell := range cells {
|
|
|
+ if k < 9 {
|
|
|
+ var item models.BaseFromCoalmineJsmIndex
|
|
|
+ if k == 0 {
|
|
|
+ text := cell.Value
|
|
|
+ dataTime = ExcelDateToDate(text).Format(utils.FormatDate)
|
|
|
+ }
|
|
|
+ if k > 0 {
|
|
|
+ text := cell.Value
|
|
|
+ item.IndexName = nameMap[k]
|
|
|
+ item.IndexCode = codeMap[nameMap[k]]
|
|
|
+ item.DealValue = text
|
|
|
+ item.Source = "三省周度"
|
|
|
+ item.DataTime = dataTime
|
|
|
+ item.Frequency = "周度"
|
|
|
+ item.ModifyTime = time.Now()
|
|
|
+ item.CreateTime = time.Now()
|
|
|
+ item.Exchange = exchange
|
|
|
+ }
|
|
|
+ item.Unit = unit
|
|
|
+ indexItems = append(indexItems, &item)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ////添加数据到数据库
|
|
|
+ for _, v := range mappingItems {
|
|
|
+ if codeMap[v.IndexName] == "" {
|
|
|
+ codeMap[v.IndexName] = v.IndexCode
|
|
|
+ newId, err := models.AddBaseFromCoalmineMapping(v)
|
|
|
+ if err != nil {
|
|
|
+ for i := 0; i < 10; i++ {
|
|
|
+ v.IndexCode = v.IndexCode + strconv.Itoa(i)
|
|
|
+ codeMap[v.IndexName] = v.IndexCode
|
|
|
+ //newId, err := models.AddBaseFromCoalmineMapping(v)
|
|
|
+ //if err != nil {
|
|
|
+ // fmt.Println("再次添加公司指标名称错误", err)
|
|
|
+ // continue
|
|
|
+ //} else {
|
|
|
+ // fmt.Println("新增公司成功", newId)
|
|
|
+ // break
|
|
|
+ //}
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ fmt.Println("新增公司成功", newId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //fmt.Println("指标操作完成")
|
|
|
+
|
|
|
+ //给indexItem中的code赋值并插入index表
|
|
|
+ for _, v := range indexItems {
|
|
|
+ v.IndexCode = codeMap[v.IndexName]
|
|
|
+ if indexMap[v.IndexName+v.DataTime] == "" && v.DealValue != "" {
|
|
|
+ newId, err := models.AddBaseFromCoalmineIndex(v)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("添加数据错误", err)
|
|
|
+ } else {
|
|
|
+ fmt.Println("新增成功", newId)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if indexMap[v.IndexName+v.DataTime] != v.DealValue && v.DealValue != "" {
|
|
|
+ err = models.UpdateBaseFromCoalmineIndex(v)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("修改数据错误错误", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func ttrimProvinceName(name string) string {
|
|
|
+ name = strings.Replace(name, "陕西省", "sn", -1)
|
|
|
+ name = strings.Replace(name, "陕西", "sn", -1)
|
|
|
+ name = strings.Replace(name, "海南市", "hi", -1)
|
|
|
+ name = strings.Replace(name, "海南", "hi", -1)
|
|
|
+ name = strings.Replace(name, "河南省", "ha", -1)
|
|
|
+ name = strings.Replace(name, "河南", "ha", -1)
|
|
|
+ name = strings.Replace(name, "河北省", "he", -1)
|
|
|
+ name = strings.Replace(name, "河北", "he", -1)
|
|
|
+ name = strings.Replace(name, "澳门", "mo", -1)
|
|
|
+ name = strings.Replace(name, "内蒙古自治区", "nm", -1)
|
|
|
+ name = strings.Replace(name, "内蒙古", "nm", -1)
|
|
|
+ name = strings.Replace(name, "黑龙江", "hl", -1)
|
|
|
+ name = strings.Replace(name, "(", "", -1)
|
|
|
+ name = strings.Replace(name, ")", "", -1)
|
|
|
+ name = strings.Replace(name, "+", "", -1)
|
|
|
+ return name
|
|
|
+}
|
|
|
+
|
|
|
+func ExcelDateToDate(excelDate string) time.Time {
|
|
|
+ excelTime := time.Date(1899, time.December, 30, 0, 0, 0, 0, time.UTC)
|
|
|
+ var days, _ = strconv.Atoi(excelDate)
|
|
|
+ return excelTime.Add(time.Second * time.Duration(days*86400))
|
|
|
+}
|
|
|
+
|
|
|
+func PathExists(path string) (bool, error) {
|
|
|
+ _, err := os.Stat(path)
|
|
|
+ if err == nil { //文件或者目录存在
|
|
|
+ return true, nil
|
|
|
+ }
|
|
|
+ if os.IsNotExist(err) {
|
|
|
+ return false, nil
|
|
|
+ }
|
|
|
+ return false, err
|
|
|
+}
|
|
|
+
|
|
|
+func TrimCompanyName(name string) string {
|
|
|
+ name = strings.Replace(name, "有限", "", -1)
|
|
|
+ name = strings.Replace(name, "股份", "", -1)
|
|
|
+ name = strings.Replace(name, "责任", "", -1)
|
|
|
+ name = strings.Replace(name, "公司", "", -1)
|
|
|
+ name = strings.Replace(name, "(", "", -1)
|
|
|
+ name = strings.Replace(name, ")", "", -1)
|
|
|
+ return name
|
|
|
+}
|
|
|
+
|
|
|
+func ContainsSpecialName(name string) bool {
|
|
|
+ return strings.Contains(name, "陕西") ||
|
|
|
+ strings.Contains(name, "海南") ||
|
|
|
+ strings.Contains(name, "河南") ||
|
|
|
+ strings.Contains(name, "河北") ||
|
|
|
+ strings.Contains(name, "澳门") ||
|
|
|
+ strings.Contains(name, "内蒙古") ||
|
|
|
+ strings.Contains(name, "黑龙江")
|
|
|
+}
|
|
|
+
|
|
|
+func TrimProvinceName(name string) string {
|
|
|
+ name = strings.Replace(name, "陕西省", "sns", -1)
|
|
|
+ name = strings.Replace(name, "陕西", "sn", -1)
|
|
|
+ name = strings.Replace(name, "海南市", "hi", -1)
|
|
|
+ name = strings.Replace(name, "海南", "hi", -1)
|
|
|
+ name = strings.Replace(name, "河南省", "has", -1)
|
|
|
+ name = strings.Replace(name, "河南", "ha", -1)
|
|
|
+ name = strings.Replace(name, "河北省", "hes", -1)
|
|
|
+ name = strings.Replace(name, "河北", "he", -1)
|
|
|
+ name = strings.Replace(name, "澳门", "mo", -1)
|
|
|
+ name = strings.Replace(name, "内蒙古自治区", "nm", -1)
|
|
|
+ name = strings.Replace(name, "内蒙古", "nm", -1)
|
|
|
+ name = strings.Replace(name, "黑龙江", "hl", -1)
|
|
|
+ name = strings.Replace(name, "(", "", -1)
|
|
|
+ name = strings.Replace(name, ")", "", -1)
|
|
|
+ name = strings.Replace(name, "+", "", -1)
|
|
|
+ return name
|
|
|
+}
|
|
|
+
|
|
|
+func trimProvinceName(name string) string {
|
|
|
+ name = strings.Replace(name, "陕西省", "sn", -1)
|
|
|
+ name = strings.Replace(name, "陕西", "sn", -1)
|
|
|
+ name = strings.Replace(name, "海南市", "hi", -1)
|
|
|
+ name = strings.Replace(name, "海南", "hi", -1)
|
|
|
+ name = strings.Replace(name, "河南省", "ha", -1)
|
|
|
+ name = strings.Replace(name, "河南", "ha", -1)
|
|
|
+ name = strings.Replace(name, "河北省", "he", -1)
|
|
|
+ name = strings.Replace(name, "河北", "he", -1)
|
|
|
+ name = strings.Replace(name, "澳门", "mo", -1)
|
|
|
+ name = strings.Replace(name, "内蒙古自治区", "nm", -1)
|
|
|
+ name = strings.Replace(name, "内蒙古", "nm", -1)
|
|
|
+ name = strings.Replace(name, "黑龙江", "hl", -1)
|
|
|
+ name = strings.Replace(name, "(", "", -1)
|
|
|
+ name = strings.Replace(name, ")", "", -1)
|
|
|
+ name = strings.Replace(name, "+", "", -1)
|
|
|
+ return name
|
|
|
+}
|