diff --git a/internal/handler/manage.go b/internal/handler/manage.go index 77d043f..6a0ac29 100644 --- a/internal/handler/manage.go +++ b/internal/handler/manage.go @@ -206,6 +206,29 @@ func (s HandlerService) GetProjectResult(c *gin.Context) (data interface{}, err go s.SaveLog("获取项目检测结果", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") return } +func (s HandlerService) GetProjectData(c *gin.Context) (data interface{}, err error) { + repo := service.NewManageService(s.AppConfig, s.Engine, s.Logger) + us, _ := c.Get("operatorUser") + userInfo := us.(*model.SystemUser) + var req proto.ProjectDataRequest + err = c.ShouldBindJSON(&req) + if err != nil { + go s.SaveLog("GetProjectData", "Manage", "", "", ToString(req), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") + return nil, e.NewValidErr(err) + } + if req.Size < 1 { + req.Size = 20 + } + if req.Size > 100 { + req.Size = 100 + } + if req.Page < 1 { + req.Page = 1 + } + data, err = repo.GetProjectData(c, req) + go s.SaveLog("获取项目数据", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") + return +} func (s HandlerService) ProductList(c *gin.Context) (data interface{}, err error) { repo := service.NewManageService(s.AppConfig, s.Engine, s.Logger) diff --git a/internal/proto/request.go b/internal/proto/request.go index 3ca731f..beaa1ca 100644 --- a/internal/proto/request.go +++ b/internal/proto/request.go @@ -131,6 +131,15 @@ func (p ProjectRequest) ToString() string { return string(data) } +type ProjectDataRequest struct { + ProjectId int64 `json:"projectId"` + LineNum int `json:"lineNum"` + KPileStart string `json:"kPileStart"` + KPileEnd string `json:"kPileEnd"` + FileType int `json:"fileType"` + BasePageList +} + type ProjectItemRequest struct { ProjectId int64 `json:"projectId"` ProjectName string `json:"projectName"` diff --git a/internal/proto/response.go b/internal/proto/response.go index 891bd63..8aaae79 100644 --- a/internal/proto/response.go +++ b/internal/proto/response.go @@ -273,3 +273,18 @@ type TrainTaskInfoItem struct { CreateAt int64 `json:"createAt"` UpdateAt int64 `json:"updateAt"` } + +type ProjectSrcFile struct { + FileId int64 `json:"fileId"` + FileName string `json:"fileName"` + FileType int `json:"fileType"` + MilepostNumber string `json:"milepostNumber"` + AccessUrl string `json:"accessUrl"` + UpDown string `json:"upDown"` + LineNum int `json:"lineNum"` + Longitude float64 `json:"longitude"` + Latitude float64 `json:"latitude"` + SrcImg string `json:"srcImg"` + CreateAt int64 `json:"createAt"` + UpdateAt int64 `json:"updateAt"` +} diff --git a/internal/router/router.go b/internal/router/router.go index 7903db0..518af8e 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -64,6 +64,7 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi project.POST("/edit", e.ErrorWrapper(hs.EditProject)) project.POST("/delete", e.ErrorWrapper(hs.DelProject)) project.POST("/result", e.ErrorWrapper(hs.GetProjectResult)) + project.POST("/data", e.ErrorWrapper(hs.GetProjectData)) } product := manage.Group("/product") diff --git a/internal/service/manage.go b/internal/service/manage.go index 7e7cd2c..bce0b88 100644 --- a/internal/service/manage.go +++ b/internal/service/manage.go @@ -29,6 +29,7 @@ type ManageService interface { EditProject(ctx context.Context, req proto.ProjectItemRequest) (rsp *proto.BaseResponse, err error) DelProject(ctx context.Context, req proto.ProjectItemRequest) (rsp *proto.BaseResponse, err error) GetProjectResult(ctx context.Context, req proto.ProjectRequest) (rsp *proto.BaseResponse, err error) + GetProjectData(ctx context.Context, req proto.ProjectDataRequest) (rsp *proto.BaseResponse, err error) ProductList(ctx context.Context, req proto.ProductRequest) (rsp *proto.BaseResponse, err error) GetProductInfo(ctx context.Context, req proto.ProductItemRequest) (rsp *proto.BaseResponse, err error) @@ -645,7 +646,78 @@ ReturnPoint: } return rsp, err } +func (rp *repo) GetProjectData(ctx context.Context, req proto.ProjectDataRequest) (rsp *proto.BaseResponse, err error) { + rsp = new(proto.BaseResponse) + select { + case <-ctx.Done(): + err = fmt.Errorf("超时/取消") + rsp.Code = http.StatusInternalServerError + rsp.Status = http.StatusText(http.StatusInternalServerError) + rsp.Message = "超时/取消" + rsp.Err = ctx.Err() + return rsp, ctx.Err() + default: + var ( + count int64 + ) + srcList := make([]model.FileManager, 0) + dataset := make([]int64, 0) + err = rp.engine.SQL("select dataset_id from dataset where project_id = ?", req.ProjectId).Find(&dataset) + if err != nil { + goto ReturnPoint + } + sess := rp.engine.In("dataset_id", dataset) + if len(req.KPileStart) > 0 { + sess = sess.And("milepost_number >= ?", req.KPileStart) + } + if len(req.KPileEnd) > 0 { + sess = sess.And("milepost_number <= ?", req.KPileEnd) + } + if req.FileType > 0 { + sess = sess.And("file_type = ?", req.FileType) + } + count, err = sess.Limit(int(req.Size), int(((req.Page)-1)*req.Size)).Asc("create_at"). + FindAndCount(&srcList) + if err != nil { + goto ReturnPoint + } + list := make([]proto.ProjectSrcFile, len(srcList)) + for k, v := range srcList { + upDown := "上行" + if v.UpDown == 1 { + upDown = "下行" + } + list[k] = proto.ProjectSrcFile{ + FileId: v.FileId, + FileName: v.FileName, + FileType: v.FileType, + MilepostNumber: v.MilepostNumber, + AccessUrl: v.AccessUrl, + UpDown: upDown, + LineNum: v.LineNum, + Longitude: v.Longitude, + Latitude: v.Latitude, + CreateAt: v.CreateAt, + UpdateAt: v.UpdateAt, + } + } + rsp.Code = http.StatusOK + rsp.Status = http.StatusText(http.StatusOK) + rsp.Message = "成功" + rsp = FillPaging(count, req.Page, req.Size, list, rsp) + rsp.Err = err + return rsp, err + } +ReturnPoint: + if err != nil { + rsp.Code = http.StatusInternalServerError + rsp.Status = http.StatusText(http.StatusInternalServerError) + rsp.Err = err + rsp.Message = "失败" + } + return rsp, err +} func (rp *repo) ProductList(ctx context.Context, req proto.ProductRequest) (rsp *proto.BaseResponse, err error) { rsp = new(proto.BaseResponse) select { diff --git a/model/file.go b/model/file.go index 4266b88..e7f0003 100644 --- a/model/file.go +++ b/model/file.go @@ -1,16 +1,22 @@ package model type FileManager struct { - FileId int64 `xorm:"not null pk autoincr INT(11)" json:"fileId"` //文件编号 - FileName string `xorm:"VARCHAR(200)" json:"fileName"` //文件名 - AccessUrl string `xorm:"VARCHAR(400)" json:"url"` //访问路径 - Scene string `xorm:"VARCHAR(40)" json:"scene"` //应用场景,0 : 其他, 1: 道路; 2: 桥梁; 3:隧道; 4: 边坡 - DataType int `xorm:"TINYINT index default 0" json:"dataType"` //数据类型,1:数据集;2:病害库;3:应用;0:其他 - DatasetId int64 `xorm:"INT(11) index default 0" json:"datasetId"` //数据集 - FileSize int64 `xorm:"BIGINT" json:"fileSize"` //文件大小 - FileMd5 string `xorm:"VARCHAR(64)" json:"fileMd5"` //文件MD5 - IsDisease int `xorm:"TINYINT index default 0" json:"isDisease"` //数据标注状态; 0:未标注;1:有病害;2:无病害 - Creator int64 `xorm:"INT(11) index" json:"creator"` //上传人 - CreateAt int64 `xorm:"created" json:"createAt"` //上传时间 - UpdateAt int64 `xorm:"updated" json:"updateAt"` //更新时间 + FileId int64 `xorm:"not null pk autoincr INT(11)" json:"fileId"` //文件编号 + FileName string `xorm:"VARCHAR(200)" json:"fileName"` //文件名 + AccessUrl string `xorm:"VARCHAR(400)" json:"url"` //访问路径 + Scene string `xorm:"VARCHAR(40)" json:"scene"` //应用场景,0 : 其他, 1: 道路; 2: 桥梁; 3:隧道; 4: 边坡 + DataType int `xorm:"TINYINT index default 0" json:"dataType"` //数据类型,1:数据集;2:病害库;3:应用;0:其他 + DatasetId int64 `xorm:"INT(11) index default 0" json:"datasetId"` //数据集 + FileSize int64 `xorm:"BIGINT" json:"fileSize"` //文件大小 + FileMd5 string `xorm:"VARCHAR(64)" json:"fileMd5"` //文件MD5 + IsDisease int `xorm:"TINYINT index default 0" json:"isDisease"` //数据标注状态; 0:未标注;1:有病害;2:无病害 + Creator int64 `xorm:"INT(11) index" json:"creator"` //上传人 + CreateAt int64 `xorm:"created" json:"createAt"` //上传时间 + UpdateAt int64 `xorm:"updated" json:"updateAt"` //更新时间 + MilepostNumber string `xorm:"VARCHAR(64)" json:"milepostNumber"` //里程桩号 + FileType int `xorm:"SMALLINT default 1" json:"fileType"` //文件类型 1:图片 2: 视频 3:雷达图谱 + LineNum int `xorm:"SMALLINT default 0" json:"lineNum"` //车道号 + UpDown int `xorm:"TINYINT default 0" json:"upDown"` //上下行, 0:上行;1:下行 + Longitude float64 `xorm:"decimal(18,6)" json:"longitude"` //经度 + Latitude float64 `xorm:"decimal(18,6)" json:"latitude"` //纬度 } diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index fe58ca4..67f6885 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -4,7 +4,11 @@ import ( "crypto/hmac" "crypto/sha1" "encoding/base64" + "fmt" + "math" "math/rand" + "strconv" + "strings" "time" ) @@ -38,3 +42,29 @@ func GetUserSha1Pass(pass, salt string) string { res := base64.StdEncoding.EncodeToString(mac.Sum(nil)) return res } + +// GetMilepost 里程桩加减里程,返回里程桩 +func GetMilepost(start, num, upDown string) string { + arr := strings.Split(start, "+") + var ( + kilometre, meter, milepost, counter, res, resMilepost, resMeter float64 + ) + if len(arr) == 1 { + meter = 0 + } else { + meter, _ = strconv.ParseFloat(arr[1], 64) + } + str := strings.Replace(arr[0], "k", "", -1) + str = strings.Replace(str, "K", "", -1) + kilometre, _ = strconv.ParseFloat(str, 64) + milepost = kilometre + meter/1000 + counter, _ = strconv.ParseFloat(num, 64) + if upDown == "D" { + res = milepost - counter + } else { + res = milepost + counter + } + resMilepost = math.Floor(res) + resMeter = (res - resMilepost) * 100 + return fmt.Sprintf("K%d+%.2f", int(resMilepost), resMeter) +}