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 { ignore := 1 ignore2 := 10 if ii == 3 { // 第四页供煤没有星期,所以只跳过第一行 ignore = 0 ignore2 = 9 } if k > ignore && k < ignore2 { text := cell.Value text = strings.Replace(text, ":", "", -1) text = strings.Replace(text, ":", "", -1) if ii == 3 { text += "供煤" } if ii == 2 { text += "天数" } province := strings.Replace(text, "日耗", "", -1) province = strings.Replace(province, "库存", "", -1) province = strings.Replace(province, "可用天数", "", -1) province = strings.Replace(province, "供煤", "", -1) groupMap[k] = province 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 { ingore := 10 if ii == 3 { ingore = 9 } if k < ingore { 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) } } ignore := 1 if ii == 3 { // 第四页供煤没有星期,所以只跳过第一行 ignore = 0 } if k > ignore { 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 sheetName = strings.TrimLeft(sheetName, "内陆") if sheetName == "可用天数" { unit = "天" } else { unit = "万吨" } //遍历行读取 maxCol := sheet.MaxRow 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 //遍历行读取 maxRow := sheet.MaxRow for i := 0; i < maxRow; i++ { if i == 0 { row := sheet.Rows[i] cells := row.Cells for k, cell := range cells { if k > 0 && k < 9 { text := cell.Value if text == "" { continue } 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 { utils.FileLog.Info("再次添加公司指标名称错误:", err) fmt.Println("再次添加公司指标名称错误", err) continue } else { fmt.Println("新增公司成功", newId) break } } } else { fmt.Println("新增公司成功", newId) } } } utils.FileLog.Info("指标操作完成") 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) utils.FileLog.Info("添加数据错误:", err) } else { fmt.Println("新增成功", newId) } } else { if indexMap[v.IndexName+v.DataTime] != v.DealValue && v.DealValue != "" { err = models.UpdateBaseFromCoalCoastalIndex(v) if err != nil { utils.FileLog.Info("修改数据错误错误:", err) 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 { utils.FileLog.Info("解析时间字符串出错:", err) 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 { utils.FileLog.Info("再次添加公司指标名称错误:", err) fmt.Println("再次添加公司指标名称错误", err) continue } else { fmt.Println("新增公司成功", newId) break } } } else { fmt.Println("新增公司成功", newId) } } } utils.FileLog.Info("指标操作完成:") 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 { utils.FileLog.Info("添加数据错误:", err) 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 { utils.FileLog.Info("修改数据错误错误:", err) 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 /firm [post] func (this *CoalMineDataController) Firm() { 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 year, month, day string var yearMap = make(map[int]string) var monthMap = make(map[int]string) var dateMap = make(map[int]string) var mappingItems []*models.BaseFromCoalmineMapping var indexItems []*models.BaseFromCoalmineFirmIndex var codeMap = make(map[string]string) var indexMap = make(map[string]string) var groupName 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.GetBaseFromCoalmineFirmIndex() 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 { //遍历行读取 maxRow := sheet.MaxRow for i := 0; i < maxRow; i++ { //获取年份 //if i == 2 { // row := sheet.Row(i) // cells := row.Cells // for k, cell := range cells { // text := cell.String() // if k > 0 && text != "" { // year = text // fmt.Println("year:",year) // fmt.Println("k:",k) // yearMap[k] = year // } // } //} //获取月份和年度 if i == 3 { row := sheet.Rows[i] cells := row.Cells for k, cell := range cells { text := cell.Value if k > 0 && text != "" { month = text month = utils.ConvertToFormatDay(month) time, _ := time.Parse(utils.FormatDate, month) yearInt := time.Year() monthInt := int(time.Month()) year = strconv.Itoa(yearInt) yearMap[k] = year month = strconv.Itoa(monthInt) monthMap[k] = month } } } //获取旬度 if i == 4 { row := sheet.Rows[i] cells := row.Cells for k, cell := range cells { text := cell.Value if k > 0 && text != "" { if yearMap[k] != "" { year = yearMap[k] } if monthMap[k] != "" { month = monthMap[k] } day = text dateMap[k] = year + "年" + month + "月" + day } } } //获取企业或地区名及信息 if i > 4 { row := sheet.Rows[i] cells := row.Cells var companyName string for k, cell := range cells { if k == 0 { companyName = cell.Value //省名 if !strings.Contains(companyName, " ") { groupName = companyName } if groupName == "全国合计" { groupName = "全国" } //若有下面四个名称要拼上省名不然会重复 if companyName == " 地方合计" || companyName == " 地方国有" || companyName == " 地方乡镇" || companyName == " 国有重点" { companyName = groupName + companyName } companyName = strings.Replace(companyName, " ", "", -1) var item models.BaseFromCoalmineMapping //生成code exists := ContainsSpecialName(companyName) var code string if exists { abbr := trimProvinceName(companyName) //取处理后公司名首字母缩写 a := pinyin.NewArgs() rows := pinyin.Pinyin(companyName[9:], 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[:2] + code + "firm" } else { a := pinyin.NewArgs() rows := pinyin.Pinyin(companyName, 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 + "firm" } item.IndexName = companyName item.CreateTime = time.Now() mappingItems = append(mappingItems, &item) } else { dealValue := cell.Value item := models.BaseFromCoalmineFirmIndex{ IndexName: companyName, IndexCode: codeMap[companyName], DataTime: dateMap[k], DealValue: dealValue, GroupName: groupName, Source: "全国分企业", Unit: "万吨", Frequency: "旬度", CreateTime: time.Now(), ModifyTime: 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.AddBaseFromCoalFirmIndex(v) if err != nil { fmt.Println("添加数据错误", err) } else { fmt.Println("新增成功", newId) } } else { if indexMap[v.IndexName+v.DataTime] != v.DealValue && v.DealValue != "" { err = models.UpdateBaseFromCoalFirmIndex(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, "海南可用", "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 }