1、增加多模态数据融合功能

This commit is contained in:
wangjian 2023-07-10 15:28:20 +08:00
parent e5c0984c00
commit 7451a0cc62
7 changed files with 168 additions and 12 deletions

View File

@ -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, "") go s.SaveLog("获取项目检测结果", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return 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) { func (s HandlerService) ProductList(c *gin.Context) (data interface{}, err error) {
repo := service.NewManageService(s.AppConfig, s.Engine, s.Logger) repo := service.NewManageService(s.AppConfig, s.Engine, s.Logger)

View File

@ -131,6 +131,15 @@ func (p ProjectRequest) ToString() string {
return string(data) 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 { type ProjectItemRequest struct {
ProjectId int64 `json:"projectId"` ProjectId int64 `json:"projectId"`
ProjectName string `json:"projectName"` ProjectName string `json:"projectName"`

View File

@ -273,3 +273,18 @@ type TrainTaskInfoItem struct {
CreateAt int64 `json:"createAt"` CreateAt int64 `json:"createAt"`
UpdateAt int64 `json:"updateAt"` 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"`
}

View File

@ -64,6 +64,7 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi
project.POST("/edit", e.ErrorWrapper(hs.EditProject)) project.POST("/edit", e.ErrorWrapper(hs.EditProject))
project.POST("/delete", e.ErrorWrapper(hs.DelProject)) project.POST("/delete", e.ErrorWrapper(hs.DelProject))
project.POST("/result", e.ErrorWrapper(hs.GetProjectResult)) project.POST("/result", e.ErrorWrapper(hs.GetProjectResult))
project.POST("/data", e.ErrorWrapper(hs.GetProjectData))
} }
product := manage.Group("/product") product := manage.Group("/product")

View File

@ -29,6 +29,7 @@ type ManageService interface {
EditProject(ctx context.Context, req proto.ProjectItemRequest) (rsp *proto.BaseResponse, err error) EditProject(ctx context.Context, req proto.ProjectItemRequest) (rsp *proto.BaseResponse, err error)
DelProject(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) 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) ProductList(ctx context.Context, req proto.ProductRequest) (rsp *proto.BaseResponse, err error)
GetProductInfo(ctx context.Context, req proto.ProductItemRequest) (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 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) { func (rp *repo) ProductList(ctx context.Context, req proto.ProductRequest) (rsp *proto.BaseResponse, err error) {
rsp = new(proto.BaseResponse) rsp = new(proto.BaseResponse)
select { select {

View File

@ -1,16 +1,22 @@
package model package model
type FileManager struct { type FileManager struct {
FileId int64 `xorm:"not null pk autoincr INT(11)" json:"fileId"` //文件编号 FileId int64 `xorm:"not null pk autoincr INT(11)" json:"fileId"` //文件编号
FileName string `xorm:"VARCHAR(200)" json:"fileName"` //文件名 FileName string `xorm:"VARCHAR(200)" json:"fileName"` //文件名
AccessUrl string `xorm:"VARCHAR(400)" json:"url"` //访问路径 AccessUrl string `xorm:"VARCHAR(400)" json:"url"` //访问路径
Scene string `xorm:"VARCHAR(40)" json:"scene"` //应用场景0 : 其他, 1: 道路; 2: 桥梁; 3:隧道; 4: 边坡 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:其他 DataType int `xorm:"TINYINT index default 0" json:"dataType"` //数据类型1:数据集;2:病害库;3:应用;0:其他
DatasetId int64 `xorm:"INT(11) index default 0" json:"datasetId"` //数据集 DatasetId int64 `xorm:"INT(11) index default 0" json:"datasetId"` //数据集
FileSize int64 `xorm:"BIGINT" json:"fileSize"` //文件大小 FileSize int64 `xorm:"BIGINT" json:"fileSize"` //文件大小
FileMd5 string `xorm:"VARCHAR(64)" json:"fileMd5"` //文件MD5 FileMd5 string `xorm:"VARCHAR(64)" json:"fileMd5"` //文件MD5
IsDisease int `xorm:"TINYINT index default 0" json:"isDisease"` //数据标注状态; 0:未标注;1:有病害;2:无病害 IsDisease int `xorm:"TINYINT index default 0" json:"isDisease"` //数据标注状态; 0:未标注;1:有病害;2:无病害
Creator int64 `xorm:"INT(11) index" json:"creator"` //上传人 Creator int64 `xorm:"INT(11) index" json:"creator"` //上传人
CreateAt int64 `xorm:"created" json:"createAt"` //上传时间 CreateAt int64 `xorm:"created" json:"createAt"` //上传时间
UpdateAt int64 `xorm:"updated" json:"updateAt"` //更新时间 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"` //纬度
} }

View File

@ -4,7 +4,11 @@ import (
"crypto/hmac" "crypto/hmac"
"crypto/sha1" "crypto/sha1"
"encoding/base64" "encoding/base64"
"fmt"
"math"
"math/rand" "math/rand"
"strconv"
"strings"
"time" "time"
) )
@ -38,3 +42,29 @@ func GetUserSha1Pass(pass, salt string) string {
res := base64.StdEncoding.EncodeToString(mac.Sum(nil)) res := base64.StdEncoding.EncodeToString(mac.Sum(nil))
return res 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)
}