| @@ -0,0 +1,51 @@ | |||
| package models | |||
| import ( | |||
| "code.gitea.io/gitea/modules/timeutil" | |||
| ) | |||
| type TechConvergeBaseInfo struct { | |||
| ID int64 `xorm:"pk autoincr"` | |||
| ProjectNumber string `xorm:"index"` //项目立项编号 | |||
| ProjectName string //科技项目名称 | |||
| Institution string //项目承担单位 | |||
| ApplyYear int //申报年度 | |||
| Province string //所属省(省市) | |||
| Category string //单位性质 | |||
| Recommend string //推荐单位 | |||
| Owner string //项目负责人 | |||
| Phone string //负责人电话 | |||
| Email string //负责人邮箱 | |||
| Contact string //项目联系人 | |||
| ContactPhone string //联系人电话 | |||
| ContactEmail string //联系人邮箱 | |||
| ExecutePeriod int //执行周期 | |||
| ExecuteStartYear int //执行开始年份 | |||
| ExecuteEndYear int //执行结束年份 | |||
| ExecuteDeadLine string //执行期限 | |||
| Type string //项目类型 | |||
| StartUp timeutil.TimeStamp //启动会时间 | |||
| NameAndInstitution1 string | |||
| NameAndInstitution2 string | |||
| NameAndInstitution3 string | |||
| NameAndInstitution4 string | |||
| NameAndInstitution5 string | |||
| AllInstitution string `xorm:"TEXT"` | |||
| CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` | |||
| UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` | |||
| } | |||
| type RepoConvergeInfo struct { | |||
| ID int64 `xorm:"pk autoincr"` | |||
| RepoID int64 | |||
| Url string | |||
| BaseInfoID int64 | |||
| Institution string | |||
| UID int64 | |||
| Status int | |||
| CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` | |||
| UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` | |||
| User *User `xorm:"-"` | |||
| Repo *Repository `xorm:"-"` | |||
| BaseInfo *TechConvergeBaseInfo `xorm:"-"` | |||
| } | |||
| @@ -62,6 +62,8 @@ import ( | |||
| "net/http" | |||
| "strings" | |||
| "code.gitea.io/gitea/routers/api/v1/tech" | |||
| "code.gitea.io/gitea/models" | |||
| "code.gitea.io/gitea/modules/auth" | |||
| @@ -535,6 +537,15 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
| }, reqToken()) | |||
| m.Group("/tech", func() { | |||
| m.Post("/basic", tech.ImportBasicInfo) | |||
| m.Get("/custom", repo.GetCustomImages) | |||
| m.Get("/star", repo.GetStarImages) | |||
| m.Get("/npu", repo.GetNpuImages) | |||
| }, reqToken()) | |||
| m.Group("/attachments", func() { | |||
| m.Get("/:uuid", repo.GetAttachment) | |||
| @@ -0,0 +1,48 @@ | |||
| package tech | |||
| import ( | |||
| "net/http" | |||
| "strconv" | |||
| "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 = row[2] | |||
| baseInfo.ApplyYear, err = strconv.Atoi(row[1]) | |||
| log.Warn("base info apply year parse err ", i) | |||
| baseInfo.ProjectName = row[3] | |||
| baseInfo.Type = row[16] | |||
| baseInfo.Owner = row[8] | |||
| baseInfo.Email = row[10] | |||
| baseInfo.Phone = row[9] | |||
| baseInfo.Recommend = row[7] | |||
| baseInfo.Institution = row[4] | |||
| } | |||
| } | |||
| } | |||