1、增加多模态数据融合功能
This commit is contained in:
		
							parent
							
								
									e5c0984c00
								
							
						
					
					
						commit
						7451a0cc62
					
				|  | @ -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) | ||||
|  |  | |||
|  | @ -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"` | ||||
|  |  | |||
|  | @ -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"` | ||||
| } | ||||
|  |  | |||
|  | @ -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") | ||||
|  |  | |||
|  | @ -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 { | ||||
|  |  | |||
|  | @ -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"`              //纬度
 | ||||
| } | ||||
|  |  | |||
|  | @ -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) | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue