瀏覽代碼

Merge branch 'ETA_1.5.3'

zwxi 1 年之前
父節點
當前提交
a9084a824b

+ 1487 - 0
controllers/commodity_coal.go

@@ -0,0 +1,1487 @@
+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
+	}
+	//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 coalInfoMap = make(map[string][]string)
+	var dataTime string
+	var 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[0]
+
+	//遍历行读取
+	maxCol := sheet.MaxRow
+	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, "陕西")
+					case 10:
+						province = "442家"
+						text = "产量"
+					}
+					if k != 1 && k != 4 && k != 7 && k != 10 {
+						unit = "%"
+					} else {
+						unit = "万吨"
+					}
+
+					exchange = text
+					text = province + text
+
+					var item models.BaseFromCoalmineMapping
+					item.IndexName = text
+					nameMap[k] = item.IndexName
+					coalInfoMap[item.IndexName] = append(coalInfoMap[item.IndexName], exchange, province, unit)
+					//code
+					exists := ContainsSpecialName(province)
+					var code string
+					if exists {
+						abbr := trimProvinceName(text)
+						provinceAbbr := trimProvinceName(province)
+						//取处理后公司名首字母缩写
+						a := pinyin.NewArgs()
+						rows := pinyin.Pinyin(abbr, 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 = provinceAbbr + code + "jsm"
+					} else {
+						a := pinyin.NewArgs()
+						rows := pinyin.Pinyin(text, 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 {
+				var item models.BaseFromCoalmineJsmIndex
+				if k == 0 {
+					text := cell.Value
+					parsedTime, err := time.Parse("01-02-06", text)
+					if err != nil {
+						fmt.Println("解析时间字符串出错:", err)
+						return
+					}
+					dataTime = parsedTime.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()
+					if len(coalInfoMap[item.IndexName]) == 3 {
+						item.Exchange = coalInfoMap[item.IndexName][0]
+						item.Province = coalInfoMap[item.IndexName][1]
+						item.Unit = coalInfoMap[item.IndexName][2]
+					}
+					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
+				}
+			}
+		}
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	return
+}
+
+// @Title 刷新数据
+// @Description 刷新数据接口
+// @Param	request	body models.CoalMineDataReq true "type json string"
+// @Success 200 {object} models.EdbClassify
+// @router /coastal/history [post]
+func (this *CoalMineDataController) CoastalHistory() {
+	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
+	}
+
+	var mappingItems []*models.BaseFromCoalmineMapping
+	var indexItems []*models.BaseFromCoalmineCoastalIndex
+	var codeMap = make(map[string]string)
+	var indexMap = make(map[string]string)
+	var nameMap = make(map[int]string)
+	var groupMap = make(map[int]string)
+	var dataTime string
+	var unit 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.GetBaseFromCoalmineCoastalIndex()
+	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
+		}
+	}
+
+	for ii, sheet := range req.SheetData {
+
+		//遍历行读取
+		maxCol := len(sheet.Rows)
+		for i := 0; i < maxCol; i++ {
+			if i == 0 {
+				row := sheet.Rows[i]
+				cells := row.Cells
+				for k, cell := range cells {
+					if k > 1 && k < 9 {
+						text := cell.Value
+						text = strings.Replace(text, ":", "", -1)
+						text = strings.Replace(text, ":", "", -1)
+						if ii == 3 {
+							text += "供煤"
+						}
+						groupMap[k] = 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(abbr, 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 + "coastal"
+						} else {
+							a := pinyin.NewArgs()
+							rows := pinyin.Pinyin(item.IndexName, 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 + "coastal"
+						}
+						item.CreateTime = time.Now()
+						mappingItems = append(mappingItems, &item)
+					}
+					if ii == 2 {
+						unit = "天"
+					} else {
+						unit = "万吨"
+					}
+				}
+			}
+			if i > 0 {
+				row := sheet.Rows[i]
+				cells := row.Cells
+				for k, cell := range cells {
+					if k < 9 {
+						var item models.BaseFromCoalmineCoastalIndex
+						if k == 0 {
+							text := cell.Value
+							if text == "" {
+								continue
+							}
+							if len(text) < 6 {
+								dataTime = ExcelDateToDate(text).Format(utils.FormatDate)
+							} else {
+								parsedTime, err := time.Parse("01-02-06", text)
+								if err != nil {
+									parsedTime, err = time.Parse("2006/01/02", text)
+									if err != nil {
+										fmt.Println("解析时间字符串出错:", err)
+										return
+									}
+								}
+								dataTime = parsedTime.Format(utils.FormatDate)
+							}
+						}
+						if k > 1 {
+							text := cell.Value
+							item.IndexName = nameMap[k]
+							item.IndexCode = codeMap[nameMap[k]]
+							item.DealValue = text
+							item.GroupName = groupMap[k]
+							item.Source = "沿海八省"
+							item.DataTime = dataTime
+							item.Frequency = "日度"
+							item.ModifyTime = time.Now()
+							item.CreateTime = time.Now()
+							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.AddBaseFromCoalCoastalIndex(v)
+			if err != nil {
+				fmt.Println("添加数据错误", err)
+			} else {
+				fmt.Println("新增成功", newId)
+			}
+		} else {
+			if indexMap[v.IndexName+v.DataTime] != v.DealValue && v.DealValue != "" {
+				err = models.UpdateBaseFromCoalCoastalIndex(v)
+				if err != nil {
+					fmt.Println("修改数据错误错误", err)
+					return
+				}
+			}
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	return
+}
+
+// @Title 刷新数据
+// @Description 刷新数据接口
+// @Param	request	body models.CoalMineDataReq true "type json string"
+// @Success 200 {object} models.EdbClassify
+// @router /inland/history [post]
+func (this *CoalMineDataController) InlandHistory() {
+	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
+	}
+
+	var mappingItems []*models.BaseFromCoalmineMapping
+	var indexItems []*models.BaseFromCoalmineInlandIndex
+	var codeMap = make(map[string]string)
+	var indexMap = make(map[string]string)
+	var nameMap = make(map[int]string)
+	var groupMap = make(map[int]string)
+	var dataTime string
+	var sheetName 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.GetBaseFromCoalmineInlandIndex()
+	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
+		}
+	}
+
+	for _, sheet := range req.SheetData {
+		sheetName = sheet.Name
+		fmt.Println("sheetName:", sheetName)
+		var unit string
+		if sheetName == "可用天数" {
+			unit = "天"
+		} else {
+			unit = "万吨"
+		}
+		//遍历行读取
+		maxCol := sheet.MaxCol
+		for i := 0; i < maxCol; i++ {
+			if i == 0 {
+				row := sheet.Rows[i]
+				cells := row.Cells
+				for k, cell := range cells {
+					if k > 0 && k < 18 {
+						text := cell.Value
+						groupMap[k] = text
+						var item models.BaseFromCoalmineMapping
+						//合计命名
+						if k == 9 {
+							item.IndexName = sheetName
+						}
+						item.IndexName = text + sheetName
+						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 + "inland"
+						} 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 + "inland"
+						}
+						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 < 18 {
+						var item models.BaseFromCoalmineInlandIndex
+						if k == 0 {
+							text := cell.Value
+							if text == "" {
+								continue
+							}
+							if len(text) < 6 {
+								dataTime = ExcelDateToDate(text).Format(utils.FormatDate)
+							} else {
+								parsedTime, err := time.Parse("01-02-06", text)
+								if err != nil {
+									parsedTime, err = time.Parse("2006/01/02", text)
+									if err != nil {
+										fmt.Println("解析时间字符串出错:", err)
+										return
+									}
+								}
+								dataTime = parsedTime.Format(utils.FormatDate)
+							}
+						}
+						if k > 0 {
+							text := cell.Value
+							item.IndexName = nameMap[k]
+							item.IndexCode = codeMap[nameMap[k]]
+							item.DealValue = text
+							item.GroupName = groupMap[k]
+							item.Source = "内陆十七省"
+							item.DataTime = dataTime
+							item.Unit = unit
+							item.Frequency = "日度"
+							item.ModifyTime = time.Now()
+							item.CreateTime = time.Now()
+						}
+						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.AddBaseFromCoalInlandIndex(v)
+			if err != nil {
+				fmt.Println("添加数据错误", err)
+			} else {
+				fmt.Println("新增成功", newId)
+			}
+		} else {
+			if indexMap[v.IndexName+v.DataTime] != v.DealValue && v.DealValue != "" {
+				err = models.UpdateBaseFromCoalInlandIndex(v)
+				if err != nil {
+					fmt.Println("修改数据错误错误", err)
+					return
+				}
+			}
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	return
+}
+
+// @Title 刷新数据
+// @Description 刷新数据接口
+// @Param	request	body models.CoalMineDataReq true "type json string"
+// @Success 200 {object} models.EdbClassify
+// @router /jsm [post]
+func (this *CoalMineDataController) Jsm() {
+	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
+	}
+	//path := "/home/code/python/coal_mail/emailFile/沿海八省动力煤终端用户供耗存数据更新.xlsx"
+
+	var province string
+	var description string
+	var exchange string
+	var city string
+	var companyName string
+	var group string
+
+	var dateMap = make(map[int]string)
+	var codeMap = make(map[string]string)
+	var indexMap = make(map[string]string)
+	var codeCompanyMap = make(map[string]string)
+	var indexCompanyMap = make(map[string]string)
+	var items []*models.BaseFromCoalmineMapping
+	var itemsCompany []*models.BaseFromCoalmineMapping
+	var itemsIndex []*models.BaseFromCoalmineJsmIndex
+	var itemsCompanyIndex []*models.BaseFromCoalmineCompanyIndex
+	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
+		}
+	}
+
+	codeCompanyList, err := models.GetBaseFromCoalmineMapping()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		utils.FileLog.Info("获取煤炭公司指标失败:", err)
+		return
+	}
+	if len(codeCompanyList) > 0 {
+		for _, v := range codeCompanyList {
+			codeCompanyMap[v.IndexName] = v.IndexCode
+		}
+	}
+
+	indexList, err := models.GetBaseFromCoalmineIndex()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		utils.FileLog.Info("获取煤炭公司指标失败:", err)
+		return
+	}
+	if len(indexList) > 0 {
+		for _, v := range indexList {
+			indexMap[v.IndexName+v.DataTime] = v.DealValue
+		}
+	}
+
+	indexCompanyList, err := models.GetBaseFromCoalmineCompanyIndex()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		utils.FileLog.Info("获取煤炭公司指标失败:", err)
+		return
+	}
+	if len(indexCompanyList) > 0 {
+		for _, v := range indexCompanyList {
+			indexCompanyMap[v.IndexName+v.DataTime] = v.DealValue
+		}
+	}
+
+	for _, sheet := range req.SheetData {
+		//遍历行读取
+		maxRow := sheet.MaxRow
+		for i := 0; i < maxRow; i++ {
+			//获取样本情况
+			if i > 3 && i < 16 {
+				row := sheet.Rows[i]
+				cells := row.Cells
+			Loop2:
+				for k, cell := range cells {
+					text := cell.Value
+					if text != "" {
+						if k == 1 {
+							province = text
+						}
+						if k == 3 {
+							description = text
+						}
+						if k == 4 {
+							item := new(models.BaseFromCoalmineMapping)
+							exchange = text
+
+							exists := ContainsSpecialName(province)
+							var strResult string
+							if exists {
+								abbr := TrimProvinceName(province)
+								//取处理后公司名首字母缩写
+								a := pinyin.NewArgs()
+								rows := pinyin.Pinyin(exchange, a)
+								for i := 0; i < len(rows); i++ {
+									if len(rows[i]) != 0 {
+										str := rows[i][0]
+										pi := str[0:1]
+										strResult += pi
+									}
+								}
+								item.IndexCode = abbr + strResult + "jsm"
+							} else {
+								//取处理后公司名首字母缩写
+								a := pinyin.NewArgs()
+								rows := pinyin.Pinyin(province+exchange, a)
+								for i := 0; i < len(rows); i++ {
+									if len(rows[i]) != 0 {
+										str := rows[i][0]
+										pi := str[0:1]
+										strResult += pi
+									}
+								}
+								item.IndexCode = strResult + "jsm"
+							}
+
+							item.IndexName = province + exchange
+
+							item.CreateTime = time.Now()
+							items = append(items, item)
+							break Loop2
+						}
+					}
+				}
+			}
+			//获取日期
+			if i == 3 {
+				row := sheet.Rows[i]
+				cells := row.Cells
+				for k, cell := range cells {
+					text := cell.Value
+					stamp, _ := time.ParseInLocation("01-02-06", text, time.Now().Location())
+					if k > 4 {
+						dateMap[k] = stamp.Format(utils.FormatDate)
+					}
+				}
+			}
+			//获取具体产量
+			if i > 3 && i < 16 {
+				row := sheet.Rows[i]
+				cells := row.Cells
+				for k, cell := range cells {
+					text := cell.Value
+					if k > 4 {
+						item := new(models.BaseFromCoalmineJsmIndex)
+						item.IndexName = province + exchange
+						item.IndexCode = codeMap[item.IndexName]
+						item.Exchange = exchange
+						item.DealValue = text
+						item.DataTime = dateMap[k]
+						item.Exchange = exchange
+						item.Description = description
+						item.Province = province
+						item.Source = "三省周度"
+						if exchange == "产量" {
+							item.Unit = "万吨"
+						} else {
+							item.Unit = "百分比"
+						}
+						item.Frequency = "周度"
+						item.ModifyTime = time.Now()
+						item.CreateTime = time.Now()
+						itemsIndex = append(itemsIndex, item)
+					}
+				}
+			}
+
+			//获取公司指标名称
+			if i > 17 {
+				row := sheet.Rows[i]
+				cells := row.Cells
+			Loop3:
+				for k, cell := range cells {
+					text := cell.Value
+					if text != "" {
+						if k == 1 {
+							province = text
+						}
+						if k == 2 {
+							city = text
+						}
+						if k == 3 {
+							companyName = text
+						}
+						if k == 4 {
+							item := new(models.BaseFromCoalmineMapping)
+							group = text
+							trimName := TrimCompanyName(companyName)
+							item.IndexName = trimName
+							//取处理后公司名首字母缩写
+							strResult := ""
+							a := pinyin.NewArgs()
+							rows := pinyin.Pinyin(trimName, a)
+							for i := 0; i < len(rows); i++ {
+								if len(rows[i]) != 0 {
+									str := rows[i][0]
+									pi := str[0:1]
+									strResult += pi
+								}
+							}
+							item.IndexCode = strResult + "company"
+							item.CreateTime = time.Now()
+							itemsCompany = append(itemsCompany, item)
+							break Loop3
+						}
+					}
+				}
+			}
+
+			//获取公司具体产量
+			if i > 18 {
+				row := sheet.Rows[i]
+				cells := row.Cells
+				for k, cell := range cells {
+					text := cell.Value
+					if k > 4 {
+						item := new(models.BaseFromCoalmineCompanyIndex)
+						companyName = TrimCompanyName(companyName)
+						item.IndexName = companyName
+						item.IndexCode = codeCompanyMap[item.IndexName]
+						item.DealValue = text
+						item.DataTime = dateMap[k]
+						item.Province = province
+						item.City = city
+
+						//处理无类别名时的情况
+						if group == "无" {
+							item.GroupName = companyName
+						} else {
+							item.GroupName = group
+						}
+
+						item.Source = "三省企业"
+						item.Unit = "万吨"
+						item.Frequency = "周度"
+						item.ModifyTime = time.Now()
+						item.CreateTime = time.Now()
+						//fmt.Println(item)
+						itemsCompanyIndex = append(itemsCompanyIndex, item)
+					}
+				}
+			}
+		}
+	}
+
+	//添加数据到数据库
+	for _, v := range items {
+		if codeMap[v.IndexName] == "" {
+			codeMap[v.IndexName] = v.IndexCode
+			newId, err := models.AddBaseFromCoalmineMapping(v)
+			if err != nil {
+				fmt.Println("添加指标名称错误")
+			} else {
+				fmt.Println("添加指标名称成功", newId)
+			}
+		}
+	}
+	fmt.Println("指标操作完成")
+
+	for _, v := range itemsIndex {
+		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
+				}
+			}
+		}
+	}
+	fmt.Println("数据操作完成")
+
+	for _, v := range itemsCompany {
+		if codeCompanyMap[v.IndexName] == "" {
+			codeCompanyMap[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)
+					codeCompanyMap[v.IndexName] = v.IndexCode
+					newId, err := models.AddBaseFromCoalmineMapping(v)
+					if err != nil {
+						fmt.Println("再次添加公司指标名称错误", err)
+						fmt.Println(v.IndexName, v.IndexCode)
+						continue
+					} else {
+						fmt.Println("新增公司成功", newId)
+						break
+					}
+				}
+			} else {
+				fmt.Println("新增公司成功", newId)
+			}
+		}
+	}
+	fmt.Println("公司指标操作完成")
+
+	for _, v := range itemsCompanyIndex {
+		v.IndexCode = codeCompanyMap[v.IndexName]
+		if indexCompanyMap[v.IndexName+v.DataTime] == "" && v.DealValue != "" {
+			newId, err := models.AddBaseFromCoalmineCompanyIndex(v)
+			if err != nil {
+				fmt.Println("添加公司数据错误", err)
+			} else {
+				fmt.Println("新增公司数据成功", newId)
+			}
+		} else {
+			if indexCompanyMap[v.IndexName+v.DataTime] != v.DealValue && v.DealValue != "" {
+				err = models.UpdateBaseFromCoalmineCompanyIndex(v)
+				if err != nil {
+					fmt.Println("修改数据错误错误", err)
+				}
+			}
+		}
+
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	return
+}
+
+// @Title 刷新数据
+// @Description 刷新数据接口
+// @Param	request	body models.CoalMineDataReq true "type json string"
+// @Success 200 {object} models.EdbClassify
+// @router /coastal [post]
+func (this *CoalMineDataController) Coastal() {
+	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
+	}
+
+	var mappingItems []*models.BaseFromCoalmineMapping
+	var indexItems []*models.BaseFromCoalmineCoastalIndex
+	var codeMap = make(map[string]string)
+	var indexMap = make(map[string]string)
+	var nameMap = make(map[int]string)
+	var groupMap = make(map[int]string)
+	var dataTime string
+	var sheetName, unit 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.GetBaseFromCoalmineCoastalIndex()
+	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
+		}
+	}
+
+	for _, sheet := range 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 {
+					if k > 0 && k < 9 {
+						text := cell.Value
+						groupMap[k] = text
+						var item models.BaseFromCoalmineMapping
+						//合计命名
+						if k == 9 {
+							item.IndexName = sheetName
+						}
+						item.IndexName = text + sheetName
+						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 + "coastal"
+						} 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 + "coastal"
+						}
+						item.CreateTime = time.Now()
+						mappingItems = append(mappingItems, &item)
+					}
+					if k == 10 {
+						unit = strings.Replace(cell.Value, "单位:", "", -1)
+					}
+				}
+			}
+			if i > 0 {
+				var row models.Row
+				if i < len(sheet.Rows) {
+					row = sheet.Rows[i]
+				}
+				cells := row.Cells
+				for k, cell := range cells {
+					if k < 9 {
+						var item models.BaseFromCoalmineCoastalIndex
+						if k == 0 {
+							text := cell.Value
+							if text == "" {
+								continue
+							}
+							if len(text) < 6 {
+								dataTime = ExcelDateToDate(text).Format(utils.FormatDate)
+							} else {
+								parsedTime, err := time.Parse("01-02-06", text)
+								if err != nil {
+									parsedTime, err = time.Parse("2006/01/02", text)
+									if err != nil {
+										fmt.Println("解析时间字符串出错:", err)
+										return
+									}
+								}
+								dataTime = parsedTime.Format(utils.FormatDate)
+							}
+						}
+						if k > 0 {
+							text := cell.Value
+							item.IndexName = nameMap[k]
+							item.IndexCode = codeMap[nameMap[k]]
+							item.DealValue = text
+							item.GroupName = groupMap[k]
+							item.Source = "沿海八省"
+							item.DataTime = dataTime
+							item.Frequency = "日度"
+							item.ModifyTime = time.Now()
+							item.CreateTime = time.Now()
+						}
+						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.AddBaseFromCoalCoastalIndex(v)
+			if err != nil {
+				fmt.Println("添加数据错误", err)
+			} else {
+				fmt.Println("新增成功", newId)
+			}
+		} else {
+			if indexMap[v.IndexName+v.DataTime] != v.DealValue && v.DealValue != "" {
+				err = models.UpdateBaseFromCoalCoastalIndex(v)
+				if err != nil {
+					fmt.Println("修改数据错误错误", err)
+					return
+				}
+			}
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	return
+}
+
+// @Title 刷新数据
+// @Description 刷新数据接口
+// @Param	request	body models.CoalMineDataReq true "type json string"
+// @Success 200 {object} models.EdbClassify
+// @router /inland [post]
+func (this *CoalMineDataController) Inland() {
+	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
+	}
+
+	var mappingItems []*models.BaseFromCoalmineMapping
+	var indexItems []*models.BaseFromCoalmineInlandIndex
+	var codeMap = make(map[string]string)
+	var indexMap = make(map[string]string)
+	var nameMap = make(map[int]string)
+	var groupMap = make(map[int]string)
+	var dataTime string
+	var sheetName 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.GetBaseFromCoalmineInlandIndex()
+	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
+		}
+	}
+
+	for _, sheet := range req.SheetData {
+		sheetName = sheet.Name
+		fmt.Println("sheetName:", sheetName)
+		var unit string
+		if sheetName == "可用天数" {
+			unit = "天"
+		} else {
+			unit = "万吨"
+		}
+		//遍历行读取
+		maxCol := sheet.MaxCol
+		for i := 0; i < maxCol; i++ {
+			if i == 0 {
+				row := sheet.Rows[i]
+				cells := row.Cells
+				for k, cell := range cells {
+					if k > 0 && k < 18 {
+						text := cell.Value
+						groupMap[k] = text
+						var item models.BaseFromCoalmineMapping
+						//合计命名
+						if k == 9 {
+							item.IndexName = sheetName
+						}
+						item.IndexName = text + sheetName
+						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 + "inland"
+						} 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 + "inland"
+						}
+						item.CreateTime = time.Now()
+						mappingItems = append(mappingItems, &item)
+					}
+				}
+			}
+			if i > 0 {
+				var row models.Row
+				if i < len(sheet.Rows) {
+					row = sheet.Rows[i]
+				}
+				cells := row.Cells
+				for k, cell := range cells {
+					if k < 18 {
+						var item models.BaseFromCoalmineInlandIndex
+						if k == 0 {
+							text := cell.Value
+							if text == "" {
+								continue
+							}
+							if len(text) < 6 {
+								dataTime = ExcelDateToDate(text).Format(utils.FormatDate)
+							} else {
+								parsedTime, err := time.Parse("01-02-06", text)
+								if err != nil {
+									parsedTime, err = time.Parse("2006/01/02", text)
+									if err != nil {
+										fmt.Println("解析时间字符串出错:", err)
+										return
+									}
+								}
+								dataTime = parsedTime.Format(utils.FormatDate)
+							}
+						}
+						if k > 0 {
+							text := cell.Value
+							item.IndexName = nameMap[k]
+							item.IndexCode = codeMap[nameMap[k]]
+							item.DealValue = text
+							item.GroupName = groupMap[k]
+							item.Source = "内陆十七省"
+							item.DataTime = dataTime
+							item.Unit = unit
+							item.Frequency = "日度"
+							item.ModifyTime = time.Now()
+							item.CreateTime = time.Now()
+						}
+						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.AddBaseFromCoalInlandIndex(v)
+			if err != nil {
+				fmt.Println("添加数据错误", err)
+			} else {
+				fmt.Println("新增成功", newId)
+			}
+		} else {
+			if indexMap[v.IndexName+v.DataTime] != v.DealValue && v.DealValue != "" {
+				err = models.UpdateBaseFromCoalInlandIndex(v)
+				if err != nil {
+					fmt.Println("修改数据错误错误", err)
+					return
+				}
+			}
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	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, "海南可用", "hiky", -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
+}

+ 1 - 0
go.mod

@@ -13,6 +13,7 @@ require (
 	github.com/olivere/elastic/v7 v7.0.32
 	github.com/rdlucklib/rdluck_tools v1.0.3
 	github.com/shopspring/decimal v1.3.1
+	github.com/tealeg/xlsx v1.0.5
 	github.com/yidane/formula v0.0.0-20210902154546-0782e1736717
 	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
 )

+ 2 - 0
go.sum

@@ -466,6 +466,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
 github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
+github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
+github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=

+ 43 - 0
models/base_from_coal_coastal.go

@@ -0,0 +1,43 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// BaseFromCoalmineCoastalIndex 沿海八省动力煤用户供耗存数据指标表
+type BaseFromCoalmineCoastalIndex struct {
+	BaseFromCoalmineCoastalIndexID int       `orm:"column(base_from_coalmine_coastal_index_id);pk"`
+	IndexName                      string    // 省份/企业名称
+	IndexCode                      string    // 持买单量指标编码
+	DataTime                       string    // 指标时间
+	DealValue                      string    // 数据量
+	GroupName                      string    // 地区
+	Source                         string    // 来源
+	Unit                           string    //单位
+	Frequency                      string    `description:"频率"`
+	CreateTime                     time.Time `description:"插入时间"`
+	ModifyTime                     time.Time `description:"修改时间"`
+}
+
+//查询指标
+func GetBaseFromCoalmineCoastalIndex() (items []*BaseFromCoalmineCoastalIndex, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_coalmine_coastal_index`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//添加数据
+func AddBaseFromCoalCoastalIndex(item *BaseFromCoalmineCoastalIndex) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+func UpdateBaseFromCoalCoastalIndex(item *BaseFromCoalmineCoastalIndex) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE base_from_coalmine_coastal_index SET deal_value=?  WHERE index_name=?  AND  data_time = ?`
+	_, err = o.Raw(sql, item.DealValue, item.IndexName, item.DataTime).Exec()
+	return
+}

+ 43 - 0
models/base_from_coal_firm.go

@@ -0,0 +1,43 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// BaseFromCoalmineFirmIndex 煤矿产量周度公司数据表
+type BaseFromCoalmineFirmIndex struct {
+	BaseFromCoalmineFirmIndexID int       `orm:"column(base_from_coalmine_firm_index_id);pk"`
+	IndexName                   string    // 省份/企业名称
+	IndexCode                   string    // 持买单量指标编码
+	DataTime                    string    // 指标时间
+	DealValue                   string    // 数据量
+	GroupName                   string    // 集团名
+	Source                      string    // 来源
+	Unit                        string    // 来源
+	Frequency                   string    `description:"频率"`
+	CreateTime                  time.Time `description:"插入时间"`
+	ModifyTime                  time.Time `description:"修改时间"`
+}
+
+//查询指标
+func GetBaseFromCoalmineFirmIndex() (items []*BaseFromCoalmineFirmIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_coalmine_firm_index`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//添加数据
+func AddBaseFromCoalFirmIndex(item *BaseFromCoalmineFirmIndex) (lastId int64, err error) {
+	o := orm.NewOrmUsingDB("data")
+	lastId, err = o.Insert(item)
+	return
+}
+
+func UpdateBaseFromCoalFirmIndex(item *BaseFromCoalmineFirmIndex) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE base_from_coalmine_firm_index SET deal_value=?  WHERE index_name=?  AND  data_time = ?`
+	_, err = o.Raw(sql, item.DealValue, item.IndexName, item.DataTime).Exec()
+	return
+}

+ 43 - 0
models/base_from_coal_inland.go

@@ -0,0 +1,43 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// BaseFromCoalmineInlandIndex 沿海八省动力煤用户供耗存数据指标表
+type BaseFromCoalmineInlandIndex struct {
+	BaseFromCoalmineInlandIndexID int       `orm:"column(base_from_coalmine_inland_index_id);pk"`
+	IndexName                     string    // 省份/企业名称
+	IndexCode                     string    // 持买单量指标编码
+	DataTime                      string    // 指标时间
+	DealValue                     string    // 数据量
+	GroupName                     string    // 地区
+	Source                        string    // 来源
+	Unit                          string    // 来源
+	Frequency                     string    `description:"频率"`
+	CreateTime                    time.Time `description:"插入时间"`
+	ModifyTime                    time.Time `description:"修改时间"`
+}
+
+//查询指标
+func GetBaseFromCoalmineInlandIndex() (items []*BaseFromCoalmineInlandIndex, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_coalmine_inland_index`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//添加数据
+func AddBaseFromCoalInlandIndex(item *BaseFromCoalmineInlandIndex) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+func UpdateBaseFromCoalInlandIndex(item *BaseFromCoalmineInlandIndex) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE base_from_coalmine_inland_index SET deal_value=?  WHERE index_name=?  AND  data_time = ?`
+	_, err = o.Raw(sql, item.DealValue, item.IndexName, item.DataTime).Exec()
+	return
+}

+ 144 - 0
models/base_from_coalmine.go

@@ -0,0 +1,144 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type BaseFromCoalmineMapping struct {
+	BaseFromCoalmineMappingId int       `orm:"column(base_from_coalmine_mapping_id);pk"`
+	IndexName                 string    `description:"持买单量指标名称"`
+	IndexCode                 string    `description:"持买单量指标编码"`
+	CreateTime                time.Time `description:"时间"`
+}
+
+type BaseFromCoalmineJsmIndex struct {
+	BaseFromCoalmineJsmIndexId int       `orm:"column(base_from_coalmine_jsm_index_id);pk"`
+	IndexName                  string    `description:"持买单量指标名称"`
+	IndexCode                  string    `description:"持买单量指标编码"`
+	Exchange                   string    `description:"样本统计类别"`
+	DealValue                  string    `description:"成交量"`
+	DataTime                   string    `description:"数据日期"`
+	Source                     string    `description:"来源"`
+	Province                   string    `description:"省份"`
+	Description                string    `description:"描述"`
+	Unit                       string    `description:"单位"`
+	Frequency                  string    `description:"频率"`
+	CreateTime                 time.Time `description:"插入时间"`
+	ModifyTime                 time.Time `description:"修改时间"`
+}
+
+type BaseFromCoalmineCompanyIndex struct {
+	BaseFromCoalmineCompanyIndexId int       `orm:"column(base_from_coalmine_company_index_id);pk"`
+	IndexName                      string    `description:"持买单量指标名称"`
+	IndexCode                      string    `description:"持买单量指标编码"`
+	DealValue                      string    `description:"成交量"`
+	DataTime                       string    `description:"数据日期"`
+	Source                         string    `description:"来源"`
+	Province                       string    `description:"省份"`
+	City                           string    `description:"城市"`
+	GroupName                      string    `description:"集团名称"`
+	Unit                           string    `description:"单位"`
+	Frequency                      string    `description:"频率"`
+	CreateTime                     time.Time `description:"插入时间"`
+	ModifyTime                     time.Time `description:"修改时间"`
+}
+
+
+//添加指标
+func AddBaseFromCoalmineMapping(item *BaseFromCoalmineMapping) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+//查询指标
+func GetBaseFromCoalmineMapping() (items []*BaseFromCoalmineMapping, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_coalmine_mapping`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//查询数据
+func GetBaseFromCoalmineIndex() (items []*BaseFromCoalmineJsmIndex, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_coalmine_jsm_index`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+func UpdateBaseFromCoalmineIndex(item *BaseFromCoalmineJsmIndex) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE base_from_coalmine_jsm_index SET deal_value=?  WHERE index_name=?  AND  data_time = ?`
+	_, err = o.Raw(sql, item.DealValue, item.IndexName, item.DataTime).Exec()
+	return
+}
+
+//添加数据
+func AddBaseFromCoalmineIndex(item *BaseFromCoalmineJsmIndex) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+//添加公司指标
+func AddBaseFromCoalmineCompanyIndex(item *BaseFromCoalmineCompanyIndex) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+//查询公司指标
+func GetBaseFromCoalmineCompanyIndex() (items []*BaseFromCoalmineCompanyIndex, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_coalmine_company_index`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+func UpdateBaseFromCoalmineCompanyIndex(item *BaseFromCoalmineCompanyIndex) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE base_from_coalmine_company_index SET deal_value=?  WHERE index_name=?  AND  data_time = ?`
+	_, err = o.Raw(sql, item.DealValue, item.IndexName, item.DataTime).Exec()
+	return
+}
+
+type CoalMineDataReq struct {
+	SheetData []SheetData
+}
+
+
+type SheetData struct {
+	Name        string
+	Rows        []Row
+	Cols        []*Col
+	MaxRow      int
+	MaxCol      int
+	Hidden      bool
+	Selected    bool
+}
+
+
+type Row struct {
+	Cells        []Cell
+	Hidden       bool
+	Height       float64
+	OutlineLevel uint8
+	isCustom     bool
+}
+
+type Col struct {
+	Min             int
+	Max             int
+	Hidden          bool
+	Width           float64
+	Collapsed       bool
+	OutlineLevel    uint8
+	numFmt          string
+}
+
+
+type Cell struct {
+	Value          string
+}

+ 5 - 0
models/db.go

@@ -114,6 +114,11 @@ func initBaseIndex() {
 		new(BaseFromYongyiIndex),
 		new(BaseFromYongyiData),
 		new(BaseFromYongyiClassify),
+		new(BaseFromCoalmineMapping),
+		new(BaseFromCoalmineJsmIndex),
+		new(BaseFromCoalmineCoastalIndex),
+		new(BaseFromCoalmineInlandIndex),
+		new(BaseFromCoalmineCompanyIndex),
 	)
 }
 

+ 54 - 0
routers/commentsRouter.go

@@ -196,6 +196,60 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"],
+        beego.ControllerComments{
+            Method: "Coastal",
+            Router: `/coastal`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"],
+        beego.ControllerComments{
+            Method: "CoastalHistory",
+            Router: `/coastal/history`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"],
+        beego.ControllerComments{
+            Method: "Inland",
+            Router: `/inland`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"],
+        beego.ControllerComments{
+            Method: "InlandHistory",
+            Router: `/inland/history`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"],
+        beego.ControllerComments{
+            Method: "Jsm",
+            Router: `/jsm`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:CoalMineDataController"],
+        beego.ControllerComments{
+            Method: "JsmHistory",
+            Router: `/jsm/history`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_index_lib/controllers:ComTradeController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:ComTradeController"],
         beego.ControllerComments{
             Method: "Add",

+ 5 - 0
routers/router.go

@@ -214,6 +214,11 @@ func init() {
 				&controllers.EdbInfoStatController{},
 			),
 		),
+		beego.NSNamespace("/coal_mine",
+			beego.NSInclude(
+				&controllers.CoalMineDataController{},
+			),
+		),
 	)
 	beego.AddNamespace(ns)
 }