package tech import ( "net/http" "strconv" "strings" "github.com/lunny/log" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "github.com/360EntSecGroup-Skylar/excelize/v2" ) func ImportBasicInfo(ctx *context.APIContext) { file, _, err := ctx.GetFile("file") if err != nil { ctx.JSON(http.StatusBadRequest, models.BaseErrorMessageApi(ctx.Tr("model_app.get_file_fail"))) return } defer file.Close() f, err := excelize.OpenReader(file) if err != nil { ctx.JSON(http.StatusBadRequest, models.BaseErrorMessageApi(ctx.Tr("model_app.get_file_fail"))) return } rows, err := f.GetRows(f.GetSheetName(1)) if err != nil { ctx.JSON(http.StatusBadRequest, models.BaseErrorMessageApi(ctx.Tr("model_app.get_file_fail"))) return } for i, row := range rows { if i != 0 { baseInfo := &models.TechConvergeBaseInfo{} baseInfo.ProjectNumber = strings.TrimSpace(row[2]) baseInfo.ApplyYear, err = strconv.Atoi(strings.TrimSpace(row[1])) log.Warn("base info apply year parse err ", i) baseInfo.ProjectName = strings.TrimSpace(row[3]) baseInfo.Type = strings.TrimSpace(row[16]) baseInfo.Owner = strings.TrimSpace(row[8]) baseInfo.Email = strings.TrimSpace(row[10]) baseInfo.Phone = strings.TrimSpace(row[9]) baseInfo.Recommend = strings.TrimSpace(row[7]) baseInfo.Institution = strings.TrimSpace(row[4]) baseInfo.Category = strings.TrimSpace(row[6]) baseInfo.Province = strings.TrimSpace(row[5]) baseInfo.Contact = strings.TrimSpace(row[11]) baseInfo.ContactPhone = strings.TrimSpace(row[12]) baseInfo.ContactEmail = strings.TrimSpace(row[13]) baseInfo.ExecuteMonth, _ = strconv.Atoi(strings.TrimSpace(row[14])) baseInfo.ExecutePeriod = strings.TrimSpace(row[15]) baseInfo.ExecuteStartYear, baseInfo.ExecuteEndYear = getBeginEndYear(baseInfo.ExecutePeriod) baseInfo.StartUp = strings.TrimSpace(row[17]) baseInfo.NumberTopic, _ = strconv.Atoi(strings.TrimSpace(row[30])) baseInfo.Topic1 = strings.TrimSpace(row[31]) baseInfo.Topic2 = strings.TrimSpace(row[32]) baseInfo.Topic3 = strings.TrimSpace(row[33]) baseInfo.Topic4 = strings.TrimSpace(row[34]) baseInfo.Topic5 = strings.TrimSpace(row[35]) replaceNewLineWithComma(strings.TrimSpace(row[36])) //启智项目名称、科技项目名称、项目立项编号、项目承担单位、申报年度、所属省(省市)、单位性质、推荐单位、项目负责人、负责人电话、负责人邮箱 // //、项目联系人、联系人电话、联系人邮箱、 //、启动会时间、课题数量、课题一名称及承担单位、课题二名称及承担单位、课题三名称及承担单位、课题四名称及承担单位、课题五名称及承担单位、所有参与单位、申请账号、操作 } } } func replaceNewLineWithComma(s string) string { const replacement = "," var replacer = strings.NewReplacer( "\r\n", replacement, "\r", replacement, "\n", replacement, "\v", replacement, "\f", replacement, "\u0085", replacement, "\u2028", replacement, "\u2029", replacement, ) return replacer.Replace(s) } /** 2019.12-2023.12 */ func getBeginEndYear(executePeriod string) (int, int) { period := strings.Split(executePeriod, "-") if len(period) == 2 { start := strings.Split(period[0], ".") end := strings.Split(period[1], ".") if len(start) == 2 && len(end) == 2 { startYear, err := strconv.Atoi(start[0]) endYear, err1 := strconv.Atoi(end[0]) if err == nil && err1 == nil { return startYear, endYear } } } return 0, 0 }