package services import ( "fmt" "github.com/tealeg/xlsx" "hongze/hongze_data_crawler/models" "hongze/hongze_data_crawler/utils" "strings" "time" ) func FileCoalJsm() (err error) { defer func() { if err != nil { fmt.Println("RefreshDataFromDalian Err:" + err.Error()) go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromDalian ErrMsg:"+err.Error(), utils.EmailSendToUsers) } }() path := "static/file/jsm.xlsx" xlFile, err := xlsx.OpenFile(path) if err != nil { return } var source string var province string var description string var exchange string var rank 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 items []*models.BaseFromCoalmineMapping var itemsCompany []*models.BaseFromCoalmineCompanyMapping var itemsIndex []*models.BaseFromCoalmineIndex var itemsCompanyIndex []*models.BaseFromCoalmineCompanyIndex codeList, err := models.GetBaseFromCoalmineMapping() if err != nil && err.Error() != utils.ErrNoRow() { utils.FileLog.Info("获取煤炭指标失败:", err) return err } if len(codeList) > 0 { for _, v := range codeList { codeMap[v.IndexName] = v.IndexCode } } codeCompanyList, err := models.GetBaseFromCoalmineCompanyMapping() if err != nil && err.Error() != utils.ErrNoRow() { utils.FileLog.Info("获取煤炭公司指标失败:", err) return err } if len(codeCompanyList) > 0 { for _, v := range codeCompanyList { codeCompanyMap[v.IndexName] = v.IndexCode } } indexCompanyList, err := models.GetBaseFromCoalmineIndex() if err != nil && err.Error() != utils.ErrNoRow() { utils.FileLog.Info("获取煤炭公司指标失败:", err) return err } if len(indexCompanyList) > 0 { for _, v := range indexCompanyList { indexMap[v.IndexName+v.DataTime] = v.DealValue } } for _, sheet := range xlFile.Sheets { //遍历行读取 maxRow := sheet.MaxRow for i := 0; i < maxRow; i++ { //获取制表来源 if i == 1 { row := sheet.Row(i) cells := row.Cells Loop: for k, cell := range cells { text := cell.String() if k == 0 { source = text break Loop } } if source != "" { source = strings.Replace(source, "制表单位:", "", -1) } } //获取样本情况 if i > 3 && i < 16 { row := sheet.Row(i) cells := row.Cells Loop2: for k, cell := range cells { text := cell.String() if text != "" { if k == 1 { province = text } if k == 3 { description = text } if k == 4 { item := new(models.BaseFromCoalmineMapping) exchange = text item.IndexName = source + "_" + province + "_" + exchange item.IndexCode = utils.MD5(item.IndexName) item.Exchange = exchange item.Description = description item.Province = province item.Source = source item.CreateTime = time.Now() items = append(items, item) break Loop2 } } } } //获取日期 if i == 3 { row := sheet.Row(i) cells := row.Cells for k, cell := range cells { text := cell.String() 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.Row(i) cells := row.Cells for k, cell := range cells { text := cell.String() if k > 4 { item := new(models.BaseFromCoalmineIndex) item.IndexName = source + "_" + province + "_" + exchange item.IndexCode = codeMap[item.IndexName] item.Exchange = exchange item.DealValue = text item.DataTime = dateMap[k] item.ModifyTime = time.Now() item.CreateTime = time.Now() itemsIndex = append(itemsIndex, item) } } } //获取公司指标名称 if i > 17 { row := sheet.Row(i) cells := row.Cells Loop3: for k, cell := range cells { text := cell.String() if text != "" { if k == 0 { rank = text } if k == 1 { province = text } if k == 2 { city = text } if k == 3 { companyName = text } if k == 4 { item := new(models.BaseFromCoalmineCompanyMapping) group = text item.IndexName = source + "_" + province + "_" + city + "_" + companyName item.IndexCode = utils.MD5(item.IndexName) item.Rank = rank item.Province = province item.City = city item.CompanyName = companyName item.GroupName = group item.Source = source item.CreateTime = time.Now() itemsCompany = append(itemsCompany, item) break Loop3 } } } } //获取公司具体产量 if i > 18 { row := sheet.Row(i) cells := row.Cells for k, cell := range cells { text := cell.String() if k > 4 { item := new(models.BaseFromCoalmineCompanyIndex) item.IndexName = source + "_" + province + "_" + city + "_" + companyName item.IndexCode = codeCompanyMap[item.IndexName] item.DealValue = text item.DataTime = dateMap[k] 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.IndexName+v.DataTime && indexMap[v.IndexName+v.DataTime] != 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.AddBaseFromCoalmineCompanyMapping(v) if err != nil { fmt.Println("添加公司指标名称错误", err) } else { fmt.Println("新增公司成功", newId) } } } fmt.Println("公司指标操作完成") //for _, v := range itemsCompanyIndex { // newId, err := models.AddBaseFromCoalmineCompanyIndex(v) // if err != nil { // fmt.Println("添加公司数据错误", err) //return // } else { // fmt.Println("新增公司数据成功", newId) // } //} return }