1、修改bug

This commit is contained in:
wangjian 2023-06-17 09:38:26 +08:00
parent db923ac9ae
commit e5c0984c00
34 changed files with 1470 additions and 55 deletions

View File

@ -28,11 +28,46 @@ func (s HandlerService) DiseaseList(c *gin.Context) (data interface{}, err error
if req.Page < 1 { if req.Page < 1 {
req.Page = 1 req.Page = 1
} }
data, err = repo.DiseaseList(c, req) if req.Pid < 0 {
req.Pid = 0
}
data, err = repo.DiseaseListNew(c, req)
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) DiseaseStatistics(c *gin.Context) (data interface{}, err error) {
repo := service.NewDiseaseService(s.AppConfig, s.Engine, s.Logger)
us, _ := c.Get("operatorUser")
var (
userInfo *model.SystemUser
ok bool
)
if userInfo, ok = us.(*model.SystemUser); !ok {
go s.SaveLog("DiseaseList", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return nil, e.NewValidErr(err)
}
data, err = repo.DiseaseStatistics(c)
go s.SaveLog("获取标注库统计信息", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return
}
func (s HandlerService) CreateTrainDatasetByDisease(c *gin.Context) (data interface{}, err error) {
repo := service.NewDiseaseService(s.AppConfig, s.Engine, s.Logger)
us, _ := c.Get("operatorUser")
userInfo := us.(*model.SystemUser)
var req proto.TrainDatasetRequest
err = c.ShouldBindJSON(&req)
if err != nil {
go s.SaveLog("CreateTrainDatasetByDisease", "Manage", "", "", ToString(req), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return nil, e.NewValidErr(err)
}
req.UserId = userInfo.UserId
data, err = repo.CreateTrainDatasetByDisease(c, req)
go s.SaveLog("创建训练数据集", "Training", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return
}
func (s HandlerService) DiseaseTypeList(c *gin.Context) (data interface{}, err error) { func (s HandlerService) DiseaseTypeList(c *gin.Context) (data interface{}, err error) {
repo := service.NewDiseaseService(s.AppConfig, s.Engine, s.Logger) repo := service.NewDiseaseService(s.AppConfig, s.Engine, s.Logger)
us, _ := c.Get("operatorUser") us, _ := c.Get("operatorUser")

View File

@ -15,6 +15,15 @@ func (s HandlerService) GetEdgeList(c *gin.Context) (data interface{}, err error
userInfo := us.(*model.SystemUser) userInfo := us.(*model.SystemUser)
var req proto.EdgeDatasetRequest var req proto.EdgeDatasetRequest
err = c.ShouldBindJSON(&req) err = c.ShouldBindJSON(&req)
if req.Size < 1 {
req.Size = 20
}
if req.Size > 1000 {
req.Size = 1000
}
if req.Page < 1 {
req.Page = 1
}
if err != nil { if err != nil {
go s.SaveLog("GetEdgeList", "Dataset", "", "", ToString(req), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") go s.SaveLog("GetEdgeList", "Dataset", "", "", ToString(req), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return nil, e.NewValidErr(err) return nil, e.NewValidErr(err)

View File

@ -14,7 +14,11 @@ func (s HandlerService) UploadFile(c *gin.Context) (data interface{}, err error)
repo := service.NewFileService(s.AppConfig, s.Engine, s.Logger) repo := service.NewFileService(s.AppConfig, s.Engine, s.Logger)
us, _ := c.Get("operatorUser") us, _ := c.Get("operatorUser")
userInfo := us.(*model.SystemUser) userInfo := us.(*model.SystemUser)
var req proto.UploadFileRequest var (
req proto.UploadFileRequest
scene string
datasetId int64
)
form, err := c.MultipartForm() form, err := c.MultipartForm()
if err != nil { if err != nil {
go s.SaveLog("UploadFile", "Manage", "", "", userInfo.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") go s.SaveLog("UploadFile", "Manage", "", "", userInfo.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
@ -22,11 +26,20 @@ func (s HandlerService) UploadFile(c *gin.Context) (data interface{}, err error)
} }
files := form.File["file"] files := form.File["file"]
val := form.Value["scene"] val := form.Value["scene"]
scene := val[0] if len(val) > 0 {
scene = val[0]
} else {
scene = "other"
}
if len(scene) < 1 { if len(scene) < 1 {
scene = "other" scene = "other"
} }
datasetId, _ := strconv.ParseInt(form.Value["datasetId"][0], 10, 64) if len(form.Value["datasetId"]) > 0 {
datasetId, _ = strconv.ParseInt(form.Value["datasetId"][0], 10, 64)
} else {
datasetId = 0
}
req = proto.UploadFileRequest{ req = proto.UploadFileRequest{
Creator: userInfo.UserId, Creator: userInfo.UserId,
Scene: scene, Scene: scene,

View File

@ -183,6 +183,30 @@ func (s HandlerService) DelProject(c *gin.Context) (data interface{}, err error)
return return
} }
func (s HandlerService) GetProjectResult(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.ProjectRequest
err = c.ShouldBindJSON(&req)
if err != nil {
go s.SaveLog("GetProjectResult", "Manage", "", "", req.ToString(), 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.GetProjectResult(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)
us, _ := c.Get("operatorUser") us, _ := c.Get("operatorUser")

View File

@ -89,6 +89,31 @@ func (s HandlerService) ModelIssue(c *gin.Context) (data interface{}, err error)
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) ModelIssueLog(c *gin.Context) (data interface{}, err error) {
repo := service.NewModelService(s.AppConfig, s.Engine, s.Logger)
us, _ := c.Get("operatorUser")
userInfo := us.(*model.SystemUser)
var req proto.ModelIssueLogRequest
err = c.ShouldBindJSON(&req)
if err != nil {
go s.SaveLog("ModelIssueLog", "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.ModelIssueLog(c, req)
go s.SaveLog("查看模型下发日志", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return
}
func (s HandlerService) GetModelWorkflow(c *gin.Context) (data interface{}, err error) { func (s HandlerService) GetModelWorkflow(c *gin.Context) (data interface{}, err error) {
repo := service.NewModelService(s.AppConfig, s.Engine, s.Logger) repo := service.NewModelService(s.AppConfig, s.Engine, s.Logger)
us, _ := c.Get("operatorUser") us, _ := c.Get("operatorUser")

View File

@ -176,3 +176,11 @@ func (s HandlerService) NodeLastState(c *gin.Context) (data interface{}, err 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) GetAnalysisInfo(c *gin.Context) (data interface{}, err error) {
repo := service.NewSystemService(s.Engine, s.Logger)
us, _ := c.Get("operatorUser")
userInfo := us.(*model.SystemUser)
data, err = repo.GetAnalysisInfo(c)
go s.SaveLog("获取统计数据", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return
}

View File

@ -167,3 +167,61 @@ func (s HandlerService) TrainingTaskLog(c *gin.Context) (data interface{}, err e
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) TrainingTaskResult(c *gin.Context) (data interface{}, err error) {
repo := service.NewTaskService(s.Engine, s.Logger)
us, _ := c.Get("operatorUser")
userInfo := us.(*model.SystemUser)
var req proto.TaskItemRequest
err = c.ShouldBindJSON(&req)
if err != nil {
go s.SaveLog("TrainingTaskResult", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return nil, e.NewValidErr(err)
}
data, err = repo.TrainingTaskResult(c, req)
go s.SaveLog("获取训练任务结果", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return
}
func (s HandlerService) CreateTrainingTask(c *gin.Context) (data interface{}, err error) {
repo := service.NewTaskService(s.Engine, s.Logger)
us, _ := c.Get("operatorUser")
userInfo := us.(*model.SystemUser)
var req proto.TrainingTaskItemRequest
err = c.ShouldBindJSON(&req)
if err != nil {
go s.SaveLog("CreateTrainingTask", "Manage", "", "", ToString(req), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return nil, e.NewValidErr(err)
}
data, err = repo.CreateTrainingTask(c, req)
go s.SaveLog("创建训练任务", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return
}
func (s HandlerService) EditTrainingTask(c *gin.Context) (data interface{}, err error) {
repo := service.NewTaskService(s.Engine, s.Logger)
us, _ := c.Get("operatorUser")
userInfo := us.(*model.SystemUser)
var req proto.TrainingTaskItemRequest
err = c.ShouldBindJSON(&req)
if err != nil {
go s.SaveLog("EditTrainingTask", "Manage", "", "", ToString(req), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return nil, e.NewValidErr(err)
}
data, err = repo.EditTrainingTask(c, req)
go s.SaveLog("修改训练任务", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return
}
func (s HandlerService) ReRunTrainingTask(c *gin.Context) (data interface{}, err error) {
repo := service.NewTaskService(s.Engine, s.Logger)
us, _ := c.Get("operatorUser")
userInfo := us.(*model.SystemUser)
var req proto.TrainingTaskItemRequest
err = c.ShouldBindJSON(&req)
if err != nil {
go s.SaveLog("ReRunTrainingTask", "Manage", "", "", ToString(req), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return nil, e.NewValidErr(err)
}
data, err = repo.ReRunTrainingTask(c, req)
go s.SaveLog("重新执行训练任务", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "")
return
}

View File

@ -6,7 +6,7 @@ import (
) )
type BasePageList struct { type BasePageList struct {
Page int64 `json:"pageNum,omitempty" form:"page"` Page int64 `json:"page,omitempty" form:"page"`
Size int64 `json:"pageSize,omitempty" form:"pageSize"` Size int64 `json:"pageSize,omitempty" form:"pageSize"`
} }
@ -118,6 +118,8 @@ type ProjectRequest struct {
LineName string `json:"lineName"` LineName string `json:"lineName"`
ProjectName string `json:"projectName"` ProjectName string `json:"projectName"`
OwnerId int64 `json:"ownerId,omitempty"` OwnerId int64 `json:"ownerId,omitempty"`
ProjectId int64 `json:"projectId,omitempty"`
SideType int `json:"sideType,omitempty"`
BasePageList BasePageList
} }
@ -139,6 +141,8 @@ type ProjectItemRequest struct {
FixedDeviceNum int `json:"fixedDeviceNum"` FixedDeviceNum int `json:"fixedDeviceNum"`
Direction string `json:"direction"` Direction string `json:"direction"`
LaneNum int `json:"laneNum"` LaneNum int `json:"laneNum"`
BizType int `json:"bizType"`
SideType int `json:"sideType"`
Creator int64 `json:"creator"` Creator int64 `json:"creator"`
} }
@ -416,6 +420,11 @@ func (p ModelIssueRequest) ToString() string {
return string(data) return string(data)
} }
type ModelIssueLogRequest struct {
ModelId int64 `json:"modelId"`
BasePageList
}
type DeviceRequest struct { type DeviceRequest struct {
Key string `json:"key"` Key string `json:"key"`
ProductId int64 `json:"productId"` ProductId int64 `json:"productId"`
@ -496,7 +505,10 @@ func (p BrandItemRequest) ToString() string {
} }
type DiseaseRequest struct { type DiseaseRequest struct {
BizType int `json:"bizType"` DiseaseType int `json:"diseaseType"`
FileType int `json:"fileType"`
LabelType int `json:"labelType"`
Pid int `json:"pid,omitempty"`
Key string `json:"key"` Key string `json:"key"`
BasePageList BasePageList
} }
@ -725,6 +737,19 @@ func (p TaskLogItem) ToString() string {
return string(data) return string(data)
} }
type TrainingTaskItemRequest struct {
TaskId int64 `json:"taskId,omitempty"`
ModelName string `json:"taskName"` //模型名称
BizType int `json:"categoryId"` //业务类型
ModelDesc string `json:"taskDesc"` //模型描述
DatasetId int64 `json:"trainDatasetId"` //训练数据集编号
Arithmetic string `json:"arithmetic"` //算法
ImageSize int `json:"imageSize"` //图像大小
BatchSize int `json:"batchSize"` //批次大小
EpochsSize int `json:"epochsSize"` //迭代次数
OutputType string `json:"outputType"` //输出格式
}
type ReportRequest struct { type ReportRequest struct {
ReportId int64 `json:"reportId,omitempty"` ReportId int64 `json:"reportId,omitempty"`
TaskId int64 `json:"taskId,omitempty"` TaskId int64 `json:"taskId,omitempty"`
@ -748,6 +773,7 @@ type TrainDatasetRequest struct {
ValidationNumber int64 `json:"validationNumber"` ValidationNumber int64 `json:"validationNumber"`
TestNumber int64 `json:"testNumber"` TestNumber int64 `json:"testNumber"`
SplitMethod int `json:"splitMethod"` SplitMethod int `json:"splitMethod"`
BizType int `json:"bizType"`
UserId int64 `json:"userId"` UserId int64 `json:"userId"`
} }
@ -761,4 +787,5 @@ type TrainDatasetItemRequest struct {
type EdgeDatasetRequest struct { type EdgeDatasetRequest struct {
NodeId int64 `json:"nodeId"` NodeId int64 `json:"nodeId"`
Path string `json:"path"` Path string `json:"path"`
BasePageList
} }

View File

@ -66,6 +66,8 @@ type DatasetItem struct {
CreateAt int64 `json:"createAt"` CreateAt int64 `json:"createAt"`
DatasetCount int64 `json:"datasetCount"` DatasetCount int64 `json:"datasetCount"`
DatasetSize int64 `json:"datasetSize"` DatasetSize int64 `json:"datasetSize"`
LabelCount int64 `json:"labelCount"`
LabelSize int64 `json:"labelSize"`
} }
type NodeState struct { type NodeState struct {
@ -192,3 +194,82 @@ type TrainingDatasetFileItem struct {
IsDisease int `json:"isDisease"` IsDisease int `json:"isDisease"`
CategoryId int `json:"categoryId"` CategoryId int `json:"categoryId"`
} }
type DiseaseStatisticsItem struct {
DiseaseType int `json:"diseaseType"`
DiseaseName string `json:"diseaseName"`
TotalNum int64 `json:"totalNum"`
TotalSize int64 `json:"totalSize"`
}
type DiseaseFileInfoItem struct {
FileId int64 `json:"fileId"`
FileName string `json:"fileName"` //文件名
FilePath string `json:"filePath"` //文件路径
CategoryId int `json:"categoryId"` //病害分类, 1:道路 2:桥梁 3:隧道 4:边坡
CategoryName string `json:"categoryName"` //分类名称
FileType int `json:"fileType"` //文件类型, 1:图片 2:视频 3:雷达图谱
FileTypeName string `json:"fileTypeName"` //文件类型名称
FileSize int64 `json:"fileSize"` //文件大小
LabelType int `json:"labelType"` //标注类型
LabelTypeName string `json:"labelTypeName"` //标注类型名称
FileContent string `json:"fileContent"` //base64文件
CreateAt int64 `json:"createAt"` //上传时间
UpdateAt int64 `json:"updateAt"` //更新时间
Pid int64 `json:"pid"`
}
type AnalysisInfo struct {
ModelTotal int64 `json:"modelTotal"`
RoadModel int64 `json:"roadModel"`
BridgeModel int64 `json:"bridgeModel"`
TunnelModel int64 `json:"tunnelModel"`
SideSlopeModel int64 `json:"sideSlopeModel"`
ProjectTotal int64 `json:"projectTotal"`
RoadProject int64 `json:"roadProject"`
BridgeProject int64 `json:"bridgeProject"`
TunnelProject int64 `json:"tunnelProject"`
SideSlopeProject int64 `json:"sideSlopeProject"`
DeviceTotal int64 `json:"deviceTotal"`
CloudDevice int64 `json:"cloudDevice"`
EdgeDevice int64 `json:"edgeDevice"`
TotalLabelData int64 `json:"totalLabelData"`
RoadLabelData int64 `json:"roadLabelData"`
BridgeLabelData int64 `json:"bridgeLabelData"`
TunnelLabelData int64 `json:"tunnelLabelData"`
SideSlopeLabelData int64 `json:"sideSlopeLabelData"`
}
type ModelIssueLogItem struct {
Id int64 `json:"id"`
ModelId int64 `json:"modelId"`
NodeId int64 `json:"nodeId"`
NodeName string `json:"nodeName"`
Status int `json:"status"`
IssueResult string `json:"issueResult"`
CreateAt int64 `json:"createAt"`
UpdateAt int64 `json:"updateAt"`
}
type TrainTaskInfoItem struct {
TaskId int64 `json:"taskId"`
TrainDatasetId int64 `json:"trainDatasetId"`
TrainDatasetName string `json:"trainDatasetName"`
CategoryId int `json:"categoryId"`
CategoryName string `json:"categoryName"`
TaskName string `json:"taskName"`
TaskDesc string `json:"taskDesc"`
Arithmetic string `json:"arithmetic"`
ImageSize int `json:"imageSize"`
BatchSize int `json:"batchSize"`
EpochsSize int `json:"epochsSize"`
OutputType string `json:"outputType"`
StartTime int64 `json:"startTime"`
FinishTime int64 `json:"finishTime"`
Loss float64 `json:"loss"`
Accuracy float64 `json:"accuracy"`
ModelFilePath string `json:"modelFilePath"`
ModelFileMetricsPath string `json:"modelFileMetricsPath"`
Status int `json:"status"`
CreateAt int64 `json:"createAt"`
UpdateAt int64 `json:"updateAt"`
}

View File

@ -63,6 +63,7 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi
project.POST("/add", e.ErrorWrapper(hs.AddProject)) project.POST("/add", e.ErrorWrapper(hs.AddProject))
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))
} }
product := manage.Group("/product") product := manage.Group("/product")
@ -141,6 +142,7 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi
model.POST("/edit", e.ErrorWrapper(hs.EditModel)) model.POST("/edit", e.ErrorWrapper(hs.EditModel))
model.POST("/delete", e.ErrorWrapper(hs.DelModel)) model.POST("/delete", e.ErrorWrapper(hs.DelModel))
model.POST("/issue", e.ErrorWrapper(hs.ModelIssue)) model.POST("/issue", e.ErrorWrapper(hs.ModelIssue))
model.POST("/issueLog", e.ErrorWrapper(hs.ModelIssueLog))
model.POST("/workflow", e.ErrorWrapper(hs.GetModelWorkflow)) model.POST("/workflow", e.ErrorWrapper(hs.GetModelWorkflow))
} }
file := r.Group("/file") file := r.Group("/file")
@ -224,8 +226,12 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi
}) })
train := task.Group("/train") train := task.Group("/train")
{ {
train.POST("/create", e.ErrorWrapper(hs.CreateTrainingTask))
train.POST("/edit", e.ErrorWrapper(hs.EditTrainingTask))
train.POST("/reRun", e.ErrorWrapper(hs.ReRunTrainingTask))
train.POST("/list", e.ErrorWrapper(hs.TrainingTaskList)) train.POST("/list", e.ErrorWrapper(hs.TrainingTaskList))
train.POST("/info", e.ErrorWrapper(hs.TrainingTaskInfo)) train.POST("/info", e.ErrorWrapper(hs.TrainingTaskInfo))
train.POST("/result", e.ErrorWrapper(hs.TrainingTaskResult))
train.POST("/log", e.ErrorWrapper(hs.TrainingTaskLog)) train.POST("/log", e.ErrorWrapper(hs.TrainingTaskLog))
} }
} }
@ -233,6 +239,8 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi
{ {
disease.Use(middleware.JwtAuthMiddleware(logger.Logger)) disease.Use(middleware.JwtAuthMiddleware(logger.Logger))
disease.POST("/list", e.ErrorWrapper(hs.DiseaseList)) disease.POST("/list", e.ErrorWrapper(hs.DiseaseList))
disease.POST("/statistics", e.ErrorWrapper(hs.DiseaseStatistics))
disease.POST("/create", e.ErrorWrapper(hs.CreateTrainDatasetByDisease))
diseaseType := disease.Group("/type") diseaseType := disease.Group("/type")
{ {
diseaseType.POST("/list", e.ErrorWrapper(hs.DiseaseTypeList)) diseaseType.POST("/list", e.ErrorWrapper(hs.DiseaseTypeList))
@ -283,6 +291,11 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi
} }
} }
analysis := r.Group("/analysis")
{
analysis.Use(middleware.JwtAuthMiddleware(logger.Logger))
analysis.POST("/info", e.ErrorWrapper(hs.GetAnalysisInfo))
}
} }
return root return root
} }

View File

@ -108,15 +108,25 @@ func (rp *repo) DatasetList(ctx context.Context, req proto.DatasetRequest) (rsp
if err != nil { if err != nil {
goto ReturnPoint goto ReturnPoint
} }
type QuantityStatistics struct {
TotalNumber int64
TotalSize int64
}
data := make([]proto.DatasetItem, len(list)) data := make([]proto.DatasetItem, len(list))
for k, v := range list { for k, v := range list {
detailList := make([]model.FileManager, 0) detailList := make([]model.FileManager, 0)
datasetCount, err := rp.engine.Where("dataset_id = ?", v.DatasetId).And("data_type=1").FindAndCount(&detailList) datasetCount, err := rp.engine.Where("dataset_id = ?", v.DatasetId).FindAndCount(&detailList)
if err != nil { if err != nil {
goto ReturnPoint goto ReturnPoint
} }
fm := new(model.FileManager) fm := new(model.FileManager)
datasetSize, err := rp.engine.Where("dataset_id = ?", v.DatasetId).And("data_type=1").SumInt(fm, "file_size") datasetSize, err := rp.engine.Where("dataset_id = ?", v.DatasetId).SumInt(fm, "file_size")
if err != nil {
goto ReturnPoint
}
qs := new(QuantityStatistics)
_, err = rp.engine.SQL(`select sum(file_size) total_size, count(file_id) total_number from file_manager where is_disease > 0`).Get(qs)
if err != nil { if err != nil {
goto ReturnPoint goto ReturnPoint
} }
@ -132,6 +142,8 @@ func (rp *repo) DatasetList(ctx context.Context, req proto.DatasetRequest) (rsp
CreateAt: v.CreateAt, CreateAt: v.CreateAt,
DatasetCount: datasetCount, DatasetCount: datasetCount,
DatasetSize: datasetSize, DatasetSize: datasetSize,
LabelCount: qs.TotalNumber,
LabelSize: qs.TotalSize,
} }
} }
rsp.Code = http.StatusOK rsp.Code = http.StatusOK

View File

@ -4,9 +4,13 @@ import (
"context" "context"
"fmt" "fmt"
"git.hpds.cc/Component/logging" "git.hpds.cc/Component/logging"
"go.uber.org/zap"
"hpds-iot-web/config" "hpds-iot-web/config"
"hpds-iot-web/internal/proto" "hpds-iot-web/internal/proto"
"hpds-iot-web/model" "hpds-iot-web/model"
"hpds-iot-web/pkg/utils"
"math"
"math/rand"
"net/http" "net/http"
"time" "time"
"xorm.io/xorm" "xorm.io/xorm"
@ -14,10 +18,14 @@ import (
type DiseaseService interface { type DiseaseService interface {
DiseaseList(ctx context.Context, req proto.DiseaseRequest) (rsp *proto.BaseResponse, err error) DiseaseList(ctx context.Context, req proto.DiseaseRequest) (rsp *proto.BaseResponse, err error)
DiseaseListNew(ctx context.Context, req proto.DiseaseRequest) (rsp *proto.BaseResponse, err error)
DiseaseStatistics(ctx context.Context) (rsp *proto.BaseResponse, err error)
DiseaseTypeList(ctx context.Context, req proto.DiseaseTypeRequest) (rsp *proto.BaseResponse, err error) DiseaseTypeList(ctx context.Context, req proto.DiseaseTypeRequest) (rsp *proto.BaseResponse, err error)
AddDiseaseType(ctx context.Context, req proto.DiseaseTypeItemRequest) (rsp *proto.BaseResponse, err error) AddDiseaseType(ctx context.Context, req proto.DiseaseTypeItemRequest) (rsp *proto.BaseResponse, err error)
EditDiseaseType(ctx context.Context, req proto.DiseaseTypeItemRequest) (rsp *proto.BaseResponse, err error) EditDiseaseType(ctx context.Context, req proto.DiseaseTypeItemRequest) (rsp *proto.BaseResponse, err error)
DeleteDiseaseType(ctx context.Context, req proto.DiseaseTypeItemRequest) (rsp *proto.BaseResponse, err error) DeleteDiseaseType(ctx context.Context, req proto.DiseaseTypeItemRequest) (rsp *proto.BaseResponse, err error)
CreateTrainDatasetByDisease(ctx context.Context, req proto.TrainDatasetRequest) (rsp *proto.BaseResponse, err error)
} }
func NewDiseaseService(cfg *config.WebConfig, engine *xorm.Engine, logger *logging.Logger) DiseaseService { func NewDiseaseService(cfg *config.WebConfig, engine *xorm.Engine, logger *logging.Logger) DiseaseService {
@ -41,7 +49,7 @@ func (rp *repo) DiseaseList(ctx context.Context, req proto.DiseaseRequest) (rsp
default: default:
data := make([]model.Disease, 0) data := make([]model.Disease, 0)
count, err := rp.engine.Where("(? = '' or disease_name like ?)", req.Key, "%"+req.Key+"%"). count, err := rp.engine.Where("(? = '' or disease_name like ?)", req.Key, "%"+req.Key+"%").
And("(? = 0 or category_id = ?)", req.BizType, req.BizType). And("(? = 0 or category_id = ?)", req.DiseaseType, req.DiseaseType).
Limit(int(req.Size), int(((req.Page)-1)*req.Size)). Limit(int(req.Size), int(((req.Page)-1)*req.Size)).
FindAndCount(&data) FindAndCount(&data)
if err != nil { if err != nil {
@ -64,6 +72,127 @@ ReturnPoint:
return rsp, err return rsp, err
} }
func (rp *repo) DiseaseListNew(ctx context.Context, req proto.DiseaseRequest) (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
list := make([]model.LabelFile, 0)
count, err = rp.engine.Where("(? = 0 or category_id = ?)", req.DiseaseType, req.DiseaseType).
And("(?=0 or file_type = ?)", req.FileType, req.FileType).
And("(?=0 or label_type = ?)", req.LabelType, req.LabelType).
And("(?=-1 or pid = ?)", req.Pid, req.Pid).
Limit(int(req.Size), int(((req.Page)-1)*req.Size)).
FindAndCount(&list)
if err != nil {
goto ReturnPoint
}
data := make([]proto.DiseaseFileInfoItem, len(list))
for k, v := range list {
item := proto.DiseaseFileInfoItem{
FileId: v.FileId,
FileName: v.FileName,
FilePath: v.FilePath,
CategoryId: v.CategoryId,
CategoryName: model.GetBizType(v.CategoryId),
FileSize: v.FileSize,
LabelType: v.LabelType,
FileType: v.FileType,
FileTypeName: model.GetFileType(v.FileType),
LabelTypeName: model.GetLabelType(v.LabelType),
CreateAt: v.CreateAt,
UpdateAt: v.UpdateAt,
Pid: v.Pid,
}
if item.FileType == 1 || (item.FileType == 3 && item.Pid > 0) {
item.FileContent = utils.ImgFileToBase64(v.FilePath)
}
if item.FileType == 2 {
item.FileContent = utils.FileToBase64(v.FilePath)
}
data[k] = item
}
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "成功"
rsp = FillPaging(count, req.Page, req.Size, data, 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) DiseaseStatistics(ctx context.Context) (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:
list := make([]*proto.DiseaseStatisticsItem, 5)
type Statistics struct {
CategoryId int
TotalCount int64
TotalSize int64
}
//所有的数据
statList := make([]Statistics, 0)
err = rp.engine.SQL(`select category_id, sum(file_size) total_size, count(file_id) total_count from label_file group by category_id;`).Find(&statList)
if err != nil {
goto ReturnPoint
}
totalItem := &proto.DiseaseStatisticsItem{
DiseaseType: 0,
DiseaseName: "数据量总计",
}
for _, v := range statList {
item := &proto.DiseaseStatisticsItem{
DiseaseType: v.CategoryId,
DiseaseName: model.GetBizType(v.CategoryId) + "数据",
TotalNum: v.TotalCount,
TotalSize: v.TotalSize,
}
totalItem.TotalNum += v.TotalCount
totalItem.TotalSize += v.TotalSize
list[v.CategoryId] = item
}
list[0] = totalItem
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "成功"
rsp.Data = list
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) DiseaseTypeList(ctx context.Context, req proto.DiseaseTypeRequest) (rsp *proto.BaseResponse, err error) { func (rp *repo) DiseaseTypeList(ctx context.Context, req proto.DiseaseTypeRequest) (rsp *proto.BaseResponse, err error) {
rsp = new(proto.BaseResponse) rsp = new(proto.BaseResponse)
select { select {
@ -229,3 +358,260 @@ ReturnPoint:
} }
return rsp, err return rsp, err
} }
func (rp *repo) CreateTrainDatasetByDisease(ctx context.Context, req proto.TrainDatasetRequest) (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 (
h bool
//trainFileList []model.LabelFile
trainDiseaseFileList []model.LabelFile
trainNoDiseaseFileList []model.LabelFile
//valFileList []model.LabelFile
valDiseaseFileList []model.LabelFile
valNoDiseaseFileList []model.LabelFile
//testFileList []model.LabelFile
testDiseaseFileList []model.LabelFile
testNoDiseaseFileList []model.LabelFile
trainDiseaseCount int64
trainNoDiseaseCount int64
//wg sync.WaitGroup
)
log := new(model.DatasetOperationLog)
if err != nil {
goto ReturnPoint
}
fileList := make([]model.LabelFile, 0)
err = rp.engine.Where("category_id = ? and file_type = 1", req.BizType).Find(&fileList)
if err != nil {
goto ReturnPoint
}
trainDiseaseFileList = make([]model.LabelFile, 0)
err = rp.engine.Where("category_id = ? and label_type = 1 and file_type = 1", req.BizType).Find(&trainDiseaseFileList)
if err != nil {
goto ReturnPoint
}
trainNoDiseaseFileList = make([]model.LabelFile, 0)
err = rp.engine.Where("category_id = ? and label_type = 2 and file_type = 1", req.BizType).Find(&trainNoDiseaseFileList)
if err != nil {
goto ReturnPoint
}
if req.TargetData == 0 {
req.TargetData = len(fileList)
}
if req.TargetData > len(fileList) {
err = fmt.Errorf("超出现有标注数据集数量")
goto ReturnPoint
}
trainNumber := int(math.Floor(float64(int64(req.TargetData)*req.TrainNumber) / 100))
valNumber := int(math.Floor(float64(int64(req.TargetData)*req.ValidationNumber) / 100))
testNumber := req.TargetData - trainNumber - valNumber
trainDiseaseCount = int64(float64(int64(len(trainDiseaseFileList))*req.TrainNumber) / 100)
trainNoDiseaseCount = int64(float64(int64(len(trainNoDiseaseFileList))*req.TrainNumber) / 100)
if trainDiseaseCount+trainNoDiseaseCount > int64(trainNumber) {
if trainDiseaseCount > int64(trainNumber/2) {
trainDiseaseCount = int64(trainNumber / 2)
}
if trainNoDiseaseCount > int64(trainNumber)-trainDiseaseCount {
trainNoDiseaseCount = int64(trainNumber) - trainDiseaseCount
}
}
valDiseaseCount := int64(float64(int64(len(trainDiseaseFileList))*req.ValidationNumber) / 100)
valNoDiseaseCount := int64(float64(int64(len(trainNoDiseaseFileList))*req.ValidationNumber) / 100)
if valDiseaseCount+valNoDiseaseCount > int64(valNumber) {
if valDiseaseCount > int64(valNumber/2) {
valDiseaseCount = int64(valNumber / 2)
}
if valNoDiseaseCount > int64(valNumber)-valDiseaseCount {
valNoDiseaseCount = int64(valNumber) - valDiseaseCount
}
}
testDiseaseCount := int64(float64(int64(len(trainDiseaseFileList))*req.TestNumber) / 100)
testNoDiseaseCount := int64(float64(int64(len(trainNoDiseaseFileList))*req.TestNumber) / 100)
if testDiseaseCount+testNoDiseaseCount > int64(testNumber) {
if testDiseaseCount > int64(testNumber/2) {
testDiseaseCount = int64(testNumber / 2)
}
if testNoDiseaseCount > int64(testNumber)-testDiseaseCount {
testNoDiseaseCount = int64(testNumber) - testDiseaseCount
}
}
if req.SplitMethod == 1 {
rand.Seed(time.Now().UnixNano())
rand.Shuffle(len(trainDiseaseFileList), func(i, j int) {
trainDiseaseFileList[i], trainDiseaseFileList[j] = trainDiseaseFileList[j], trainDiseaseFileList[i]
})
rand.Seed(time.Now().UnixNano())
rand.Shuffle(len(trainNoDiseaseFileList), func(i, j int) {
trainNoDiseaseFileList[i], trainNoDiseaseFileList[j] = trainNoDiseaseFileList[j], trainNoDiseaseFileList[i]
})
rand.Seed(time.Now().UnixNano())
rand.Shuffle(len(fileList), func(i, j int) {
fileList[i], fileList[j] = fileList[j], fileList[i]
})
}
testDiseaseFileList = trainDiseaseFileList[:testDiseaseCount]
testNoDiseaseFileList = trainNoDiseaseFileList[:testNoDiseaseCount]
valDiseaseFileList = trainDiseaseFileList[testDiseaseCount : testDiseaseCount+valDiseaseCount]
valNoDiseaseFileList = trainNoDiseaseFileList[testNoDiseaseCount : testNoDiseaseCount+valNoDiseaseCount]
trainDiseaseFileList = trainDiseaseFileList[testDiseaseCount+valDiseaseCount : testDiseaseCount+valDiseaseCount+trainDiseaseCount]
trainNoDiseaseFileList = trainNoDiseaseFileList[testNoDiseaseCount+valNoDiseaseCount : testNoDiseaseCount+valNoDiseaseCount+trainNoDiseaseCount]
rp.logger.With(zap.String("创建训练集", "数据集大小"),
zap.Int("有病害训练数据集", len(trainDiseaseFileList)),
zap.Int("无病害训练数据集", len(trainNoDiseaseFileList)),
zap.Int("有病害验证数据集", len(valDiseaseFileList)),
zap.Int("无病害验证数据集", len(valNoDiseaseFileList)),
).Info("总数据集", zap.Int("len(fileList)", len(fileList)))
train := new(model.TrainingDataset)
h, err = rp.engine.Where("name = ?", req.TrainName).Get(train)
if err != nil {
goto ReturnPoint
}
if !h {
train.Name = req.TrainName
train.DatasetDesc = req.TrainDesc
//train.DatasetId = req.DatasetId
train.CategoryId = req.BizType
train.ValidationNumber = float64(req.ValidationNumber)
train.TestNumber = float64(req.TestNumber)
_, err = rp.engine.Insert(train)
if err != nil {
goto ReturnPoint
}
}
log.TargetData = int64(req.TargetData)
log.DatasetId = req.DatasetId
log.TrainingDatasetId = train.DatasetId
log.SplitMethod = req.SplitMethod
log.TrainNumber = int64(trainNumber)
log.ValidationNumber = int64(valNumber)
log.TestNumber = int64(testNumber)
log.Creator = req.UserId
_, err = rp.engine.Insert(log)
if err != nil {
goto ReturnPoint
}
list := make([]model.TrainingDatasetDetail, 0)
for _, v := range trainDiseaseFileList {
item := model.TrainingDatasetDetail{
FileName: v.FileName,
FilePath: v.FilePath,
DatasetId: train.DatasetId,
CategoryId: 1,
FileSize: v.FileSize,
IsDisease: 1,
OperationLogId: log.LogId,
Creator: req.UserId,
CreateAt: time.Now().Unix(),
UpdateAt: time.Now().Unix(),
}
list = append(list, item)
}
for _, v := range trainNoDiseaseFileList {
item := model.TrainingDatasetDetail{
FileName: v.FileName,
FilePath: v.FilePath,
DatasetId: train.DatasetId,
CategoryId: 1,
FileSize: v.FileSize,
IsDisease: 2,
OperationLogId: log.LogId,
Creator: req.UserId,
CreateAt: time.Now().Unix(),
UpdateAt: time.Now().Unix(),
}
list = append(list, item)
}
for _, v := range valDiseaseFileList {
item := model.TrainingDatasetDetail{
FileName: v.FileName,
FilePath: v.FilePath,
DatasetId: train.DatasetId,
CategoryId: 3,
FileSize: v.FileSize,
IsDisease: 1,
OperationLogId: log.LogId,
Creator: req.UserId,
CreateAt: time.Now().Unix(),
UpdateAt: time.Now().Unix(),
}
list = append(list, item)
}
for _, v := range valNoDiseaseFileList {
item := model.TrainingDatasetDetail{
FileName: v.FileName,
FilePath: v.FilePath,
DatasetId: train.DatasetId,
CategoryId: 3,
FileSize: v.FileSize,
IsDisease: 2,
OperationLogId: log.LogId,
Creator: req.UserId,
CreateAt: time.Now().Unix(),
UpdateAt: time.Now().Unix(),
}
list = append(list, item)
}
for _, v := range testDiseaseFileList {
item := model.TrainingDatasetDetail{
FileName: v.FileName,
FilePath: v.FilePath,
DatasetId: train.DatasetId,
CategoryId: 2,
FileSize: v.FileSize,
IsDisease: 1,
OperationLogId: log.LogId,
Creator: req.UserId,
CreateAt: time.Now().Unix(),
UpdateAt: time.Now().Unix(),
}
list = append(list, item)
}
for _, v := range testNoDiseaseFileList {
item := model.TrainingDatasetDetail{
FileName: v.FileName,
FilePath: v.FilePath,
DatasetId: train.DatasetId,
CategoryId: 2,
FileSize: v.FileSize,
IsDisease: 2,
OperationLogId: log.LogId,
Creator: req.UserId,
CreateAt: time.Now().Unix(),
UpdateAt: time.Now().Unix(),
}
list = append(list, item)
}
_, err = rp.engine.Insert(list)
if err != nil {
goto ReturnPoint
}
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "成功"
rsp.Err = err
rsp.Data = log
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
}

View File

@ -7,6 +7,7 @@ import (
"git.hpds.cc/Component/logging" "git.hpds.cc/Component/logging"
"hpds-iot-web/config" "hpds-iot-web/config"
"hpds-iot-web/internal/proto" "hpds-iot-web/internal/proto"
"hpds-iot-web/model"
"hpds-iot-web/pkg/utils" "hpds-iot-web/pkg/utils"
"net/http" "net/http"
"xorm.io/xorm" "xorm.io/xorm"
@ -36,11 +37,26 @@ func (rp *repo) GetEdgeList(ctx context.Context, req proto.EdgeDatasetRequest) (
rsp.Err = ctx.Err() rsp.Err = ctx.Err()
return rsp, ctx.Err() return rsp, ctx.Err()
default: default:
param := make(map[string]string) var (
h bool
)
node := new(model.Node)
h, err = rp.engine.ID(req.NodeId).Get(node)
if err != nil {
goto ReturnPoint
}
if !h {
err = fmt.Errorf("设备未在线")
goto ReturnPoint
}
param := make(map[string]interface{})
param["path"] = req.Path param["path"] = req.Path
param["page"] = int(req.Page)
param["pageSize"] = int(req.Size)
header := make(map[string]string) header := make(map[string]string)
header["Content-Type"] = "application/json" header["Content-Type"] = "application/json"
res, err := utils.HttpDo("http://192.168.22.151:8099/api/directory/list", "POST", param, header) res, err := utils.HttpDo(fmt.Sprintf("http://%s:8099/api/directory/list", node.LocalIP), "POST", param, header)
if err != nil { if err != nil {
goto ReturnPoint goto ReturnPoint
} }
@ -71,11 +87,23 @@ func (rp *repo) GetEdgeInfo(ctx context.Context, req proto.EdgeDatasetRequest) (
rsp.Err = ctx.Err() rsp.Err = ctx.Err()
return rsp, ctx.Err() return rsp, ctx.Err()
default: default:
param := make(map[string]string) var (
h bool
)
node := new(model.Node)
h, err = rp.engine.ID(req.NodeId).Get(node)
if err != nil {
goto ReturnPoint
}
if !h {
err = fmt.Errorf("设备未在线")
goto ReturnPoint
}
param := make(map[string]interface{})
param["path"] = req.Path param["path"] = req.Path
header := make(map[string]string) header := make(map[string]string)
header["Content-Type"] = "application/json" header["Content-Type"] = "application/json"
res, err := utils.HttpDo("http://192.168.22.151:8099/api/directory/info", "POST", param, header) res, err := utils.HttpDo(fmt.Sprintf("http://%s:8099/api/directory/info", node.LocalIP), "POST", param, header)
if err != nil { if err != nil {
goto ReturnPoint goto ReturnPoint
} }

View File

@ -28,6 +28,7 @@ type ManageService interface {
AddProject(ctx context.Context, req proto.ProjectItemRequest) (rsp *proto.BaseResponse, err error) AddProject(ctx context.Context, req proto.ProjectItemRequest) (rsp *proto.BaseResponse, err error)
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)
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)
@ -381,6 +382,7 @@ func (rp *repo) AddProject(ctx context.Context, req proto.ProjectItemRequest) (r
Direction: req.Direction, Direction: req.Direction,
LaneNum: req.LaneNum, LaneNum: req.LaneNum,
Status: 1, Status: 1,
SideType: req.SideType,
Creator: req.Creator, Creator: req.Creator,
} }
var ( var (
@ -470,6 +472,9 @@ func (rp *repo) EditProject(ctx context.Context, req proto.ProjectItemRequest) (
if req.OwnerId > 0 { if req.OwnerId > 0 {
item.OwnerId = req.OwnerId item.OwnerId = req.OwnerId
} }
if req.BizType > 0 {
item.BizType = req.BizType
}
if len(req.LineName) > 0 { if len(req.LineName) > 0 {
item.LineName = req.LineName item.LineName = req.LineName
} }
@ -500,6 +505,9 @@ func (rp *repo) EditProject(ctx context.Context, req proto.ProjectItemRequest) (
if req.LaneNum > 0 { if req.LaneNum > 0 {
item.LaneNum = req.LaneNum item.LaneNum = req.LaneNum
} }
if req.SideType > 0 && item.SideType != req.SideType {
item.SideType = req.SideType
}
_, err = rp.engine.ID(req.ProjectId).AllCols().Update(item) _, err = rp.engine.ID(req.ProjectId).AllCols().Update(item)
if err != nil { if err != nil {
goto ReturnPoint goto ReturnPoint
@ -563,6 +571,81 @@ ReturnPoint:
return rsp, err return rsp, err
} }
func (rp *repo) GetProjectResult(ctx context.Context, req proto.ProjectRequest) (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 (
h bool
count int64
)
project := new(model.Project)
h, err = rp.engine.ID(req.ProjectId).Get(project)
if err != nil {
goto ReturnPoint
}
if !h {
err = fmt.Errorf("未找到对应的项目")
goto ReturnPoint
}
if project.BizType == 4 {
if project.SideType == 1 {
list := make([]model.MultiLevelPlatform, 0)
count, err = rp.engine.Where("project_id=?", req.ProjectId).
And("(? = 0 or multi_level_platform_type=?)", req.SideType, req.SideType).
Asc("created_at").
Limit(int(req.Size), int(((req.Page)-1)*req.Size)).
FindAndCount(&list)
if err != nil {
goto ReturnPoint
}
rsp = FillPaging(count, req.Page, req.Size, list, rsp)
} else {
list := make([]model.Gnss, 0)
count, err = rp.engine.Where("project_id=?", req.ProjectId).
And("(? = 0 or gnss_type=?)", req.SideType, req.SideType).
Asc("created_at").
Limit(int(req.Size), int(((req.Page)-1)*req.Size)).
FindAndCount(&list)
if err != nil {
goto ReturnPoint
}
rsp = FillPaging(count, req.Page, req.Size, list, rsp)
}
} else {
list := make([]model.ProjectResult, 0)
count, err = rp.engine.Where("project_id=?", req.ProjectId).Asc("source_result_id").
Limit(int(req.Size), int(((req.Page)-1)*req.Size)).
FindAndCount(&list)
if err != nil {
goto ReturnPoint
}
rsp = FillPaging(count, req.Page, req.Size, list, rsp)
}
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "成功"
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

@ -22,6 +22,7 @@ type ModelService interface {
EditModel(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) EditModel(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error)
DelModel(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) DelModel(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error)
ModelIssue(ctx context.Context, req proto.ModelIssueRequest) (rsp *proto.BaseResponse, err error) ModelIssue(ctx context.Context, req proto.ModelIssueRequest) (rsp *proto.BaseResponse, err error)
ModelIssueLog(ctx context.Context, req proto.ModelIssueLogRequest) (rsp *proto.BaseResponse, err error)
GetModelWorkflow(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) GetModelWorkflow(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error)
} }
@ -46,6 +47,7 @@ func (rp *repo) ModelList(ctx context.Context, req proto.ModelRequest) (rsp *pro
default: default:
data := make([]model.Model, 0) data := make([]model.Model, 0)
count, err := rp.engine.Where("(? = '' or model_name like ?)", req.ModelName, "%"+req.ModelName+"%"). count, err := rp.engine.Where("(? = '' or model_name like ?)", req.ModelName, "%"+req.ModelName+"%").
And("(?=0 or biz_type=?)", req.BizType, req.BizType).
And("status = 1").Limit(int(req.Size), int(((req.Page)-1)*req.Size)). And("status = 1").Limit(int(req.Size), int(((req.Page)-1)*req.Size)).
FindAndCount(&data) FindAndCount(&data)
if err != nil { if err != nil {
@ -290,6 +292,7 @@ func (rp *repo) ModelIssue(ctx context.Context, req proto.ModelIssueRequest) (rs
} }
item.ModelId = req.ModelId item.ModelId = req.ModelId
item.NodeId = req.NodeId item.NodeId = req.NodeId
item.Status = 1
item.CreateAt = time.Now().Unix() item.CreateAt = time.Now().Unix()
item.UpdateAt = time.Now().Unix() item.UpdateAt = time.Now().Unix()
_, err = rp.engine.Insert(item) _, err = rp.engine.Insert(item)
@ -331,6 +334,66 @@ ReturnPoint:
return rsp, err return rsp, err
} }
func (rp *repo) ModelIssueLog(ctx context.Context, req proto.ModelIssueLogRequest) (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 (
h bool
count int64
)
m := new(model.Model)
h, err = rp.engine.ID(req.ModelId).Get(m)
if err != nil {
goto ReturnPoint
}
if !h {
err = fmt.Errorf("未能找到对应的模型")
goto ReturnPoint
}
logList := make([]model.IssueModel, 0)
count, err = rp.engine.Where("model_id=?", req.ModelId).FindAndCount(&logList)
if err != nil {
goto ReturnPoint
}
list := make([]proto.ModelIssueLogItem, len(logList))
for k, v := range logList {
list[k] = proto.ModelIssueLogItem{
Id: v.Id,
ModelId: v.ModelId,
NodeId: v.NodeId,
NodeName: model.GetNodeName(v.NodeId),
Status: v.Status,
IssueResult: v.IssueResult,
CreateAt: v.CreateAt,
UpdateAt: v.UpdateAt,
}
}
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "获取模型下发日志成功"
rsp.Err = ctx.Err()
rsp = FillPaging(count, req.Page, req.Size, list, rsp)
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) GetModelWorkflow(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) { func (rp *repo) GetModelWorkflow(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) {
rsp = new(proto.BaseResponse) rsp = new(proto.BaseResponse)
select { select {

View File

@ -23,6 +23,8 @@ type SystemService interface {
EditNode(ctx context.Context, req proto.NodeItemRequest) (rsp *proto.BaseResponse, err error) EditNode(ctx context.Context, req proto.NodeItemRequest) (rsp *proto.BaseResponse, err error)
NodeState(ctx context.Context, req proto.NodeInfoRequest) (rsp *proto.BaseResponse, err error) NodeState(ctx context.Context, req proto.NodeInfoRequest) (rsp *proto.BaseResponse, err error)
NodeLastState(ctx context.Context, req proto.NodeInfoRequest) (rsp *proto.BaseResponse, err error) NodeLastState(ctx context.Context, req proto.NodeInfoRequest) (rsp *proto.BaseResponse, err error)
GetAnalysisInfo(ctx context.Context) (rsp *proto.BaseResponse, err error)
} }
func NewSystemService(engine *xorm.Engine, logger *logging.Logger) SystemService { func NewSystemService(engine *xorm.Engine, logger *logging.Logger) SystemService {
@ -456,7 +458,7 @@ c.disk_total,c.swap_total,a.c_p_u cpu_used,c.node_status, a.mem_used,a.swap_used
a.net_out_speed, a.net_out_transfer, a.load1, a.load5, a.load15, a.tcp_conn_count, a.udp_conn_count, a.process_count, a.net_out_speed, a.net_out_transfer, a.load1, a.load5, a.load15, a.tcp_conn_count, a.udp_conn_count, a.process_count,
d.task_name exec_task from node_state a , (select node_name, max(uptime) uptime from node_state group by node_name) b, node c d.task_name exec_task from node_state a , (select node_name, max(uptime) uptime from node_state group by node_name) b, node c
left join (select t2.node_id, t2.task_name from task t2, (select node_id, max(start_time) start from task group by node_id) t1 where t2.node_id = t1.node_id and t2.start_time = t1.start and t2.status = 1) d on c.node_id = d.node_id left join (select t2.node_id, t2.task_name from task t2, (select node_id, max(start_time) start from task group by node_id) t1 where t2.node_id = t1.node_id and t2.start_time = t1.start and t2.status = 1) d on c.node_id = d.node_id
where a.node_name = b.node_name and a.uptime = b.uptime and a.node_name = c.node_guid and c.node_status > 0 and (? = '' or a.node_name = ?) `, req.NodeGuid, req.NodeGuid).Find(&list) where a.node_name = b.node_name and a.uptime = b.uptime and a.node_name = c.node_name and c.node_status > 0 and (? = '' or a.node_name = ?) `, req.NodeGuid, req.NodeGuid).Find(&list)
if err != nil { if err != nil {
goto ReturnPoint goto ReturnPoint
} }
@ -478,3 +480,105 @@ ReturnPoint:
} }
return rsp, err return rsp, err
} }
func (rp *repo) GetAnalysisInfo(ctx context.Context) (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:
data := new(proto.AnalysisInfo)
type AnalysisItem struct {
BizType int
Total int64
}
modelTotal := make([]AnalysisItem, 0)
err = rp.engine.SQL(`select biz_type, count(model_id) total from model where status = 1 group by biz_type`).Find(&modelTotal)
if err != nil {
goto ReturnPoint
}
for _, v := range modelTotal {
switch v.BizType {
case 1:
data.RoadModel = v.Total
case 2:
data.BridgeModel = v.Total
case 3:
data.TunnelModel = v.Total
case 4:
data.SideSlopeModel = v.Total
}
data.ModelTotal += v.Total
}
projectTotal := make([]AnalysisItem, 0)
err = rp.engine.SQL(`select biz_type, count(project_id) total from project where status = 1 group by biz_type`).Find(&projectTotal)
if err != nil {
goto ReturnPoint
}
for _, v := range projectTotal {
switch v.BizType {
case 1:
data.RoadProject = v.Total
case 2:
data.BridgeProject = v.Total
case 3:
data.TunnelProject = v.Total
case 4:
data.SideSlopeProject = v.Total
}
data.ProjectTotal += v.Total
}
deviceTotal := make([]AnalysisItem, 0)
err = rp.engine.SQL(`select node_type biz_type, count(node_id) total from node group by node_type`).Find(&deviceTotal)
if err != nil {
goto ReturnPoint
}
for _, v := range deviceTotal {
switch v.BizType {
case 1:
data.CloudDevice = v.Total
case 2:
data.EdgeDevice = v.Total
}
data.DeviceTotal += v.Total
}
labelTotal := make([]AnalysisItem, 0)
err = rp.engine.SQL(`select category_id biz_type, sum(file_size) total from label_file group by category_id`).Find(&labelTotal)
if err != nil {
goto ReturnPoint
}
for _, v := range labelTotal {
switch v.BizType {
case 1:
data.RoadLabelData = v.Total
case 2:
data.BridgeLabelData = v.Total
case 3:
data.TunnelLabelData = v.Total
case 4:
data.SideSlopeLabelData = v.Total
}
data.TotalLabelData += v.Total
}
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "获取统计数据"
rsp.Err = ctx.Err()
rsp.Data = data
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
}

View File

@ -30,6 +30,10 @@ type TaskService interface {
TrainingTaskList(ctx context.Context, req proto.TaskRequest) (rsp *proto.BaseResponse, err error) TrainingTaskList(ctx context.Context, req proto.TaskRequest) (rsp *proto.BaseResponse, err error)
TrainingTaskInfo(ctx context.Context, req proto.TaskItemRequest) (rsp *proto.BaseResponse, err error) TrainingTaskInfo(ctx context.Context, req proto.TaskItemRequest) (rsp *proto.BaseResponse, err error)
TrainingTaskLog(ctx context.Context, req proto.TaskItemRequest) (rsp *proto.BaseResponse, err error) TrainingTaskLog(ctx context.Context, req proto.TaskItemRequest) (rsp *proto.BaseResponse, err error)
TrainingTaskResult(ctx context.Context, req proto.TaskItemRequest) (rsp *proto.BaseResponse, err error)
CreateTrainingTask(ctx context.Context, req proto.TrainingTaskItemRequest) (rsp *proto.BaseResponse, err error)
EditTrainingTask(ctx context.Context, req proto.TrainingTaskItemRequest) (rsp *proto.BaseResponse, err error)
ReRunTrainingTask(ctx context.Context, req proto.TrainingTaskItemRequest) (rsp *proto.BaseResponse, err error)
} }
func NewTaskService(engine *xorm.Engine, logger *logging.Logger) TaskService { func NewTaskService(engine *xorm.Engine, logger *logging.Logger) TaskService {
@ -504,7 +508,7 @@ func (rp *repo) TaskResult(ctx context.Context, req proto.ReportRequest) (rsp *p
continue continue
} }
fileDiscern = ir.Image fileDiscern = ir.Image
for _, value := range ir.Diseases { for key, value := range ir.Diseases {
diseaseType = model.GetDiseaseType(value.Type, md.BizType) diseaseType = model.GetDiseaseType(value.Type, md.BizType)
if len(value.Param.MaxWidth) > 0 && width == 0 { if len(value.Param.MaxWidth) > 0 && width == 0 {
width, _ = strconv.ParseFloat(value.Param.MaxWidth, 64) width, _ = strconv.ParseFloat(value.Param.MaxWidth, 64)
@ -521,7 +525,7 @@ func (rp *repo) TaskResult(ctx context.Context, req proto.ReportRequest) (rsp *p
case "轻度": case "轻度":
diseaseLevel = 1 diseaseLevel = 1
} }
memo += fmt.Sprintf("发现[%s],等级[%s],长度[%f],最大宽度[%s],面积[%f];\n", value.Type, value.Level, value.Param.Length, value.Param.MaxWidth, value.Param.Area) memo += fmt.Sprintf("%d. 发现[%s],等级[%s],长度[%f],最大宽度[%s],面积[%f];\n", key+1, value.Type, value.Level, value.Param.Length, value.Param.MaxWidth, value.Param.Area)
} }
fn, _ := base64.StdEncoding.DecodeString(fileDiscern) fn, _ := base64.StdEncoding.DecodeString(fileDiscern)
buff := bytes.NewBuffer(fn) buff := bytes.NewBuffer(fn)
@ -747,8 +751,8 @@ func (rp *repo) TrainingTaskInfo(ctx context.Context, req proto.TaskItemRequest)
var ( var (
h bool h bool
) )
item := new(model.TrainTask) task := new(model.TrainTask)
h, err = rp.engine.ID(req.TaskId).Get(item) h, err = rp.engine.ID(req.TaskId).Get(task)
if err != nil { if err != nil {
goto ReturnPoint goto ReturnPoint
} }
@ -756,6 +760,28 @@ func (rp *repo) TrainingTaskInfo(ctx context.Context, req proto.TaskItemRequest)
err = fmt.Errorf("未能找到对应的任务信息") err = fmt.Errorf("未能找到对应的任务信息")
goto ReturnPoint goto ReturnPoint
} }
item := new(proto.TrainTaskInfoItem)
item.TaskId = task.TaskId
item.TrainDatasetId = task.TrainDatasetId
item.TrainDatasetName = model.GetTrainDatasetName(task.TrainDatasetId)
item.CategoryId = task.CategoryId
item.CategoryName = model.GetBizType(task.CategoryId)
item.TaskName = task.TaskName
item.TaskDesc = task.TaskDesc
item.Arithmetic = task.Arithmetic
item.ImageSize = task.ImageSize
item.BatchSize = task.BatchSize
item.EpochsSize = task.EpochsSize
item.OutputType = task.OutputType
item.StartTime = task.StartTime
item.FinishTime = task.FinishTime
item.Loss = task.Loss
item.Accuracy = task.Accuracy
item.ModelFilePath = task.ModelFilePath
item.ModelFileMetricsPath = task.ModelFileMetricsPath
item.Status = task.Status
item.CreateAt = task.CreateAt
item.UpdateAt = task.UpdateAt
rsp.Code = http.StatusOK rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK) rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "成功" rsp.Message = "成功"
@ -806,3 +832,247 @@ ReturnPoint:
} }
return rsp, err return rsp, err
} }
func (rp *repo) TrainingTaskResult(ctx context.Context, req proto.TaskItemRequest) (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 (
h bool
)
item := new(model.TrainTaskResult)
h, err = rp.engine.Where("task_id = ?", req.TaskId).Desc("create_at").Get(item)
if err != nil {
goto ReturnPoint
}
if !h {
err = fmt.Errorf("任务还未训练完成")
goto ReturnPoint
}
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "成功"
rsp.Err = err
rsp.Data = item
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) CreateTrainingTask(ctx context.Context, req proto.TrainingTaskItemRequest) (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 (
h bool
)
item := new(model.TrainTask)
h, err = rp.engine.Where("task_name=?", req.ModelName).Get(item)
if err != nil {
goto ReturnPoint
}
if h {
err = fmt.Errorf("已存在同名任务,请修改后继续")
goto ReturnPoint
}
item.TaskName = req.ModelName
item.TrainDatasetId = req.DatasetId
item.CategoryId = req.BizType
item.TaskDesc = req.ModelDesc
item.Arithmetic = req.Arithmetic
item.ImageSize = req.ImageSize
item.BatchSize = req.BatchSize
item.EpochsSize = req.EpochsSize
item.OutputType = req.OutputType
item.StartTime = time.Now().Unix()
item.Status = 2
_, err = rp.engine.Insert(item)
if err != nil {
goto ReturnPoint
}
payload := make(map[string]interface{})
payload["taskId"] = item.TaskId
payload["taskName"] = item.TaskName
payload["trainDatasetId"] = item.TrainDatasetId
payload["arithmetic"] = item.Arithmetic
payload["imageSize"] = item.ImageSize
payload["batchSize"] = item.BatchSize
payload["epochsSize"] = item.EpochsSize
payload["outputType"] = item.OutputType
payload["testSize"] = item.OutputType
mqClient := mq.GetMqClient("task-request", 1)
mqPayload := &mq.InstructionReq{
Command: mq.TrainTaskAdd,
Payload: payload,
}
pData, _ := json.Marshal(mqPayload)
err = mq.GenerateAndSendData(mqClient.EndPoint.(hpds_node.AccessPoint), pData, rp.logger)
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "成功"
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) EditTrainingTask(ctx context.Context, req proto.TrainingTaskItemRequest) (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 (
h bool
)
item := new(model.TrainTask)
h, err = rp.engine.ID(req.TaskId).Get(item)
if err != nil {
goto ReturnPoint
}
if !h {
err = fmt.Errorf("为找到对应任务")
goto ReturnPoint
}
item.TaskName = req.ModelName
item.TrainDatasetId = req.DatasetId
item.CategoryId = req.BizType
item.TaskDesc = req.ModelDesc
item.Arithmetic = req.Arithmetic
item.ImageSize = req.ImageSize
item.BatchSize = req.BatchSize
item.EpochsSize = req.EpochsSize
item.OutputType = req.OutputType
item.StartTime = time.Now().Unix()
item.Status = 2
_, err = rp.engine.ID(item.TaskId).AllCols().Update(item)
if err != nil {
goto ReturnPoint
}
payload := make(map[string]interface{})
payload["taskId"] = item.TaskId
payload["taskName"] = item.TaskName
payload["trainDatasetId"] = item.TrainDatasetId
payload["arithmetic"] = item.Arithmetic
payload["imageSize"] = item.ImageSize
payload["batchSize"] = item.BatchSize
payload["epochsSize"] = item.EpochsSize
payload["outputType"] = item.OutputType
payload["testSize"] = item.OutputType
mqClient := mq.GetMqClient("task-request", 1)
mqPayload := &mq.InstructionReq{
Command: mq.TrainTaskAdd,
Payload: payload,
}
pData, _ := json.Marshal(mqPayload)
err = mq.GenerateAndSendData(mqClient.EndPoint.(hpds_node.AccessPoint), pData, rp.logger)
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "成功"
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) ReRunTrainingTask(ctx context.Context, req proto.TrainingTaskItemRequest) (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 (
h bool
)
item := new(model.TrainTask)
h, err = rp.engine.ID(req.TaskId).Get(item)
if err != nil {
goto ReturnPoint
}
if !h {
err = fmt.Errorf("为找到对应任务")
goto ReturnPoint
}
item.StartTime = time.Now().Unix()
item.Status = 2
_, err = rp.engine.ID(item.TaskId).AllCols().Update(item)
if err != nil {
goto ReturnPoint
}
payload := make(map[string]interface{})
payload["taskId"] = item.TaskId
payload["taskName"] = item.TaskName
payload["trainDatasetId"] = item.TrainDatasetId
payload["arithmetic"] = item.Arithmetic
payload["imageSize"] = item.ImageSize
payload["batchSize"] = item.BatchSize
payload["epochsSize"] = item.EpochsSize
payload["outputType"] = item.OutputType
payload["testSize"] = item.OutputType
mqClient := mq.GetMqClient("task-request", 1)
mqPayload := &mq.InstructionReq{
Command: mq.TrainTaskAdd,
Payload: payload,
}
pData, _ := json.Marshal(mqPayload)
err = mq.GenerateAndSendData(mqClient.EndPoint.(hpds_node.AccessPoint), pData, rp.logger)
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "成功"
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
}

View File

@ -4,7 +4,7 @@ type TaskLog struct {
TaskLogId int64 `xorm:"not null pk autoincr BIGINT(11)" json:"taskLogId"` TaskLogId int64 `xorm:"not null pk autoincr BIGINT(11)" json:"taskLogId"`
TaskId int64 `xorm:"INT(11) index" json:"taskId"` TaskId int64 `xorm:"INT(11) index" json:"taskId"`
NodeId int64 `xorm:"INT(11) index" json:"nodeId"` NodeId int64 `xorm:"INT(11) index" json:"nodeId"`
Content string `xorm:"LANGTEXT" json:"content"` Content string `xorm:"LONGTEXT" json:"content"`
CreateAt int64 `xorm:"created" json:"createAt"` CreateAt int64 `xorm:"created" json:"createAt"`
UpdateAt int64 `xorm:"updated" json:"updateAt"` UpdateAt int64 `xorm:"updated" json:"updateAt"`
} }

View File

@ -2,8 +2,9 @@ package model
type DatasetOperationLog struct { type DatasetOperationLog struct {
LogId int64 `xorm:"not null pk autoincr INT(11)" json:"logId"` LogId int64 `xorm:"not null pk autoincr INT(11)" json:"logId"`
DatasetId int64 `xorm:"INT(11) index" json:"datasetId"` DatasetId int64 `xorm:"INT(11) index" json:"datasetId"` //数据集为0时代表该次操作来源为标注数据集
TrainingDatasetId int64 `xorm:"INT(11) index" json:"trainingDatasetId"` TrainingDatasetId int64 `xorm:"INT(11) index" json:"trainingDatasetId"` //创建的训练数据集编号
BizType int `xorm:"SMALLINT default 1 index" json:"bizType"` //数据集的业务分类
TargetData int64 `xorm:"INT(11) default 0" json:"targetData"` //目标数据, 0:全量数据; n:指定数据量 TargetData int64 `xorm:"INT(11) default 0" json:"targetData"` //目标数据, 0:全量数据; n:指定数据量
TrainNumber int64 `xorm:"INT(11)" json:"trainNumber"` //训练集数量 TrainNumber int64 `xorm:"INT(11)" json:"trainNumber"` //训练集数量
ValidationNumber int64 `xorm:"INT(11)" json:"validationNumber"` //检验集数量 ValidationNumber int64 `xorm:"INT(11)" json:"validationNumber"` //检验集数量

20
model/gnss.go Normal file
View File

@ -0,0 +1,20 @@
package model
type Gnss struct {
GnssId int64 `xorm:"not null pk autoincr INT(11)" json:"gnssId"` //
ProjectId int64 `xorm:"INT(11) index" json:"projectId"` //项目编号
GnssType int `xorm:"int default 0" json:"gnssType"` //GNSS类型
AccumulativeDisplacementX float64 `xorm:"decimal(18,6)" json:"accumulativeDisplacementX"` //累计位移X(mm)
AccumulativeDisplacementY float64 `xorm:"decimal(18,6)" json:"accumulativeDisplacementY"` //累计位移Y(mm)
AccumulativeDisplacementH float64 `xorm:"decimal(18,6)" json:"accumulativeDisplacementH"` //累计位移H(mm)
TwoDimensional float64 `xorm:"decimal(18,6)" json:"twoDimensional"` //2D
ThreeDimensional float64 `xorm:"decimal(18,6)" json:"threeDimensional"` //3D
CurrentDisplacementX float64 `xorm:"decimal(18,6)" json:"currentDisplacementX"` //当次位移X(mm)
CurrentDisplacementY float64 `xorm:"decimal(18,6)" json:"currentDisplacementY"` //当次位移Y(mm)
CurrentDisplacementH float64 `xorm:"decimal(18,6)" json:"currentDisplacementH"` //当次位移H(mm)
Azimuth float64 `xorm:"decimal(18,6)" json:"azimuth"` //方位角(°)
AccelerationX float64 `xorm:"decimal(18,6)" json:"accelerationX"` //X轴加速度(mm)
AccelerationY float64 `xorm:"decimal(18,6)" json:"accelerationY"` //Y轴加速度(mm)
AccelerationZ float64 `xorm:"decimal(18,6)" json:"accelerationZ"` //Z轴加速度(mm)
CreatedAt int64 `xorm:"created" json:"createdAt"` //
}

View File

@ -37,6 +37,8 @@ func New(driveName, dsn string, showSql bool, logger *logging.Logger) {
&Disease{}, &Disease{},
&DiseaseType{}, &DiseaseType{},
&FileManager{}, &FileManager{},
&Gnss{},
&LabelFile{},
&MatterAttribute{}, &MatterAttribute{},
&MatterCategory{}, &MatterCategory{},
&MatterEvent{}, &MatterEvent{},
@ -47,12 +49,14 @@ func New(driveName, dsn string, showSql bool, logger *logging.Logger) {
&MatterVersion{}, &MatterVersion{},
&Model{}, &Model{},
&ModelVersion{}, &ModelVersion{},
&MultiLevelPlatform{},
&Node{}, &Node{},
&NodeState{}, &NodeState{},
&IssueModel{}, &IssueModel{},
&OriginalData{}, &OriginalData{},
&Owner{}, &Owner{},
&Project{}, &Project{},
&ProjectResult{},
&SystemMenu{}, &SystemMenu{},
&OperationLog{}, &OperationLog{},
&SystemRoleMenu{}, &SystemRoleMenu{},
@ -67,6 +71,7 @@ func New(driveName, dsn string, showSql bool, logger *logging.Logger) {
&TrainingDatasetDetail{}, &TrainingDatasetDetail{},
&TrainTask{}, &TrainTask{},
&TrainTaskLog{}, &TrainTaskLog{},
&TrainTaskResult{},
) )
if err != nil { if err != nil {
logger.Error("同步数据库表结构", zap.Error(err)) logger.Error("同步数据库表结构", zap.Error(err))
@ -114,3 +119,39 @@ func GetTrainCategory(categoryId int) string {
} }
return "other" return "other"
} }
func GetBizType(categoryId int) string {
switch categoryId {
case 1:
return "道路"
case 2:
return "桥梁"
case 3:
return "隧道"
case 4:
return "边坡"
}
return "其他"
}
func GetFileType(categoryId int) string {
switch categoryId {
case 1:
return "图片"
case 2:
return "视频"
case 3:
return "雷达图谱"
}
return "其他"
}
func GetLabelType(typeId int) string {
switch typeId {
case 1:
return "有病害"
case 2:
return "无病害"
}
return "其他分类"
}

14
model/labelFile.go Normal file
View File

@ -0,0 +1,14 @@
package model
type LabelFile struct {
FileId int64 `xorm:"not null pk autoincr INT(11)" json:"fileId"`
FileName string `xorm:"VARCHAR(200)" json:"fileName"` //文件名
FilePath string `xorm:"VARCHAR(400)" json:"filePath"` //文件路径
CategoryId int `xorm:"not null SMALLINT default 1" json:"categoryId"` //病害分类, 1:道路 2:桥梁 3:隧道 4:边坡
FileSize int64 `xorm:"BIGINT" json:"fileSize"` //文件大小
FileType int `xorm:"not null SMALLINT default 1" json:"fileType"` //文件类型, 1:图片 2: 视频 3:雷达图谱
LabelType int `xorm:"SMALLINT default 1" json:"labelType"` //标注类型 1: 有病害 2: 无病害
Pid int64 `xorm:"INT(11) index default 0" json:"pid"` //上级文件,当文件是雷达图谱时,需要增加子文件
CreateAt int64 `xorm:"created" json:"createAt"` //上传时间
UpdateAt int64 `xorm:"updated" json:"updateAt"` //更新时间
}

View File

@ -0,0 +1,19 @@
package model
type MultiLevelPlatform struct {
MultiLevelPlatformId int64 `xorm:"not null pk autoincr INT(11)" json:"multiLevelPlatformId"` //
ProjectId int64 `xorm:"INT(11) index" json:"projectId"` //项目编号
MultiLevelPlatformType int `xorm:"int default 3" json:"multiLevelPlatformType"` //多级平台类型 3 三级 5 五级
X float64 `xorm:"decimal(18,6)" json:"x"` //X(m)
Y float64 `xorm:"decimal(18,6)" json:"y"` //Y(m)
H float64 `xorm:"decimal(18,6)" json:"h"` //H(m)
AccumulativeDisplacementX float64 `xorm:"decimal(18,6)" json:"accumulativeDisplacementX"` //累计位移X(mm)
AccumulativeDisplacementY float64 `xorm:"decimal(18,6)" json:"accumulativeDisplacementY"` //累计位移Y(mm)
AccumulativeDisplacementH float64 `xorm:"decimal(18,6)" json:"accumulativeDisplacementH"` //累计位移H(mm)
IntervalDisplacementX float64 `xorm:"decimal(18,6)" json:"intervalDisplacementX"` //间隔位移X(mm)
IntervalDisplacementY float64 `xorm:"decimal(18,6)" json:"intervalDisplacementY"` //间隔位移Y(mm)
IntervalDisplacementH float64 `xorm:"decimal(18,6)" json:"intervalDisplacementH"` //间隔位移H(mm)
HorizontalResultantDisplacement float64 `xorm:"decimal(18,6)" json:"horizontalResultantDisplacement"` //水平合位移(mm)
ResultantDisplacement float64 `xorm:"decimal(18,6)" json:"resultantDisplacement"` //合位移(mm)
CreatedAt int64 `xorm:"" json:"createdAt"` //
}

View File

@ -17,6 +17,7 @@ type Node struct {
Virtualization string `xorm:"varchar(1000)" json:"virtualization,omitempty"` Virtualization string `xorm:"varchar(1000)" json:"virtualization,omitempty"`
BootTime uint64 `xorm:"BIGINT" json:"bootTime,omitempty"` BootTime uint64 `xorm:"BIGINT" json:"bootTime,omitempty"`
IP string `xorm:"varchar(100)" json:"ip"` IP string `xorm:"varchar(100)" json:"ip"`
LocalIP string `xorm:"VARCHAR(100)" json:"localIP"` //本地局域网IP地址
IsGpu bool `xorm:"TINYINT(1) default 0" json:"isGpu"` IsGpu bool `xorm:"TINYINT(1) default 0" json:"isGpu"`
IsTaskExecute bool `xorm:"TINYINT(1) default 0" json:"isTaskExecute"` IsTaskExecute bool `xorm:"TINYINT(1) default 0" json:"isTaskExecute"`
CountryCode string `xorm:"varchar(100)" json:"countryCode,omitempty"` CountryCode string `xorm:"varchar(100)" json:"countryCode,omitempty"`
@ -24,3 +25,12 @@ type Node struct {
CreateAt int64 `xorm:"created" json:"createAt"` CreateAt int64 `xorm:"created" json:"createAt"`
UpdateAt int64 `xorm:"updated" json:"updateAt"` UpdateAt int64 `xorm:"updated" json:"updateAt"`
} }
func GetNodeName(nodeId int64) string {
item := new(Node)
h, err := DB.ID(nodeId).Get(item)
if err != nil || !h {
return ""
}
return item.NodeName
}

View File

@ -4,6 +4,7 @@ type Project struct {
ProjectId int64 `xorm:"not null pk autoincr INT(11)" json:"projectId"` ProjectId int64 `xorm:"not null pk autoincr INT(11)" json:"projectId"`
ProjectName string `xorm:"varchar(200) not null " json:"projectName"` ProjectName string `xorm:"varchar(200) not null " json:"projectName"`
OwnerId int64 `xorm:"not null INT(11) default 0" json:"ownerId"` OwnerId int64 `xorm:"not null INT(11) default 0" json:"ownerId"`
BizType int `xorm:"SMALLINT" json:"bizType"`
LineName string `xorm:"varchar(200) not null " json:"lineName"` LineName string `xorm:"varchar(200) not null " json:"lineName"`
StartName string `xorm:"varchar(200) not null " json:"startName"` StartName string `xorm:"varchar(200) not null " json:"startName"`
EndName string `xorm:"varchar(200) not null " json:"endName"` EndName string `xorm:"varchar(200) not null " json:"endName"`
@ -14,6 +15,7 @@ type Project struct {
StartPointLat float64 `xorm:"decimal(18,6)" json:"startPointLat"` StartPointLat float64 `xorm:"decimal(18,6)" json:"startPointLat"`
EndPointLng float64 `xorm:"decimal(18,6)" json:"endPointLng"` EndPointLng float64 `xorm:"decimal(18,6)" json:"endPointLng"`
EndPointLat float64 `xorm:"decimal(18,6)" json:"endPointLat"` EndPointLat float64 `xorm:"decimal(18,6)" json:"endPointLat"`
SideType int `xorm:"smallint default 0" json:"sideType"` //边坡平台类型,1:三、五级平台;2: gnss
Status int `xorm:"SMALLINT default 1" json:"status"` Status int `xorm:"SMALLINT default 1" json:"status"`
Creator int64 `xorm:"INT(11) default 0" json:"creator"` Creator int64 `xorm:"INT(11) default 0" json:"creator"`
Modifier int64 `xorm:"INT(11) default 0" json:"modifier"` Modifier int64 `xorm:"INT(11) default 0" json:"modifier"`

21
model/projectResult.go Normal file
View File

@ -0,0 +1,21 @@
package model
type ProjectResult struct {
Id int64 `xorm:"not null pk autoincr BIGINT" json:"id"`
ProjectId int64 `xorm:"INT(11) index" json:"projectId"` //项目编号
SourceResultId int64 `xorm:"INT(11) index" json:"sourceResultId"` //识别结果来源编号
MilepostNumber string `xorm:"VARCHAR(50)" json:"milepostNumber"` //里程桩号
UpDown string `xorm:"VARCHAR(20)" json:"upDown"` //上下行
LineNum int `xorm:"SMALLINT default 1" json:"lineNum"` //车道号
DiseaseType string `xorm:"VARCHAR(50)" json:"diseaseType"` //病害类型
DiseaseLevel string `xorm:"VARCHAR(20)" json:"diseaseLevel"` //病害等级
Length float64 `xorm:"decimal(18,6)" json:"length"` //长度
Width float64 `xorm:"decimal(18,6)" json:"width"` //宽度
Acreage float64 `xorm:"decimal(18,6)" json:"acreage"` //面积
Memo string `xorm:"VARCHAR(1000)" json:"memo"` //备注说明
Result string `xorm:"LONGTEXT" json:"result"` //识别结果
Creator int64 `xorm:"INT(11) default 0" json:"creator"`
Modifier int64 `xorm:"INT(11) default 0" json:"modifier"`
CreateAt int64 `xorm:"created" json:"createAt"`
UpdateAt int64 `xorm:"updated" json:"updateAt"`
}

View File

@ -6,12 +6,17 @@ type TrainTask struct {
CategoryId int `xorm:"not null SMALLINT default 1" json:"categoryId"` //业务分类, 1:道路 2:桥梁 3:隧道 4:边坡 CategoryId int `xorm:"not null SMALLINT default 1" json:"categoryId"` //业务分类, 1:道路 2:桥梁 3:隧道 4:边坡
TaskName string `xorm:"VARCHAR(200)" json:"taskName"` TaskName string `xorm:"VARCHAR(200)" json:"taskName"`
TaskDesc string `xorm:"VARCHAR(500)" json:"taskDesc"` TaskDesc string `xorm:"VARCHAR(500)" json:"taskDesc"`
Arithmetic string `xorm:"VARCHAR(50)" json:"arithmetic"`
ImageSize int `xorm:"INT" json:"imageSize"`
BatchSize int `xorm:"INT" json:"batchSize"`
EpochsSize int `xorm:"INT" json:"epochsSize"`
OutputType string `xorm:"VARCHAR(20)" json:"outputType"`
StartTime int64 `xorm:"BIGINT" json:"startTime"` StartTime int64 `xorm:"BIGINT" json:"startTime"`
FinishTime int64 `xorm:"BIGINT" json:"finishTime"` FinishTime int64 `xorm:"BIGINT" json:"finishTime"`
Loss float64 `xorm:"DECIMAL(18,6)" json:"loss"` Loss float64 `xorm:"DECIMAL(18,6)" json:"loss"`
Accuracy float64 `xorm:"DECIMAL(18,6)" json:"accuracy"` Accuracy float64 `xorm:"DECIMAL(18,6)" json:"accuracy"`
ModelFilePath string `xorm:"VARCHAR(2000)" json:"modelFilePath"` ModelFilePath string `xorm:"VARCHAR(2000)" json:"modelFilePath"`
PbModelFilePath string `xorm:"VARCHAR(2000)" json:"pbModelFilePath"` ModelFileMetricsPath string `xorm:"VARCHAR(2000)" json:"modelFileMetricsPath"`
Status int `xorm:"not null SMALLINT default 0" json:"status"` // 1:等待执行; 2:执行中; 3:执行完成; 4:任务分配失败; 5:任务执行失败 Status int `xorm:"not null SMALLINT default 0" json:"status"` // 1:等待执行; 2:执行中; 3:执行完成; 4:任务分配失败; 5:任务执行失败
CreateAt int64 `xorm:"created" json:"createAt"` CreateAt int64 `xorm:"created" json:"createAt"`
UpdateAt int64 `xorm:"updated" json:"updateAt"` UpdateAt int64 `xorm:"updated" json:"updateAt"`

11
model/trainTaskResult.go Normal file
View File

@ -0,0 +1,11 @@
package model
type TrainTaskResult struct {
ResultId int64 `xorm:"not null pk autoincr BIGINT(11)" json:"resultId"`
TaskId int64 `xorm:"INT(11) index" json:"taskId"`
Content string `xorm:"LONGTEXT" json:"content"`
Result string `xorm:"VARCHAR(200)" json:"result"`
Loss float64 `xorm:"DECIMAL(18,6)" json:"loss"`
Accuracy float64 `xorm:"DECIMAL(18,6)" json:"accuracy"`
CreateAt int64 `xorm:"created" json:"createAt"`
}

View File

@ -6,6 +6,17 @@ type TrainingDataset struct {
CategoryId int `xorm:"not null SMALLINT default 1" json:"categoryId"` //业务分类, 1:道路 2:桥梁 3:隧道 4:边坡 CategoryId int `xorm:"not null SMALLINT default 1" json:"categoryId"` //业务分类, 1:道路 2:桥梁 3:隧道 4:边坡
DatasetDesc string `xorm:"varchar(200)" json:"datasetDesc"` DatasetDesc string `xorm:"varchar(200)" json:"datasetDesc"`
StoreName string `xorm:"varchar(200)" json:"storeName"` //存储路径 StoreName string `xorm:"varchar(200)" json:"storeName"` //存储路径
ValidationNumber float64 `xorm:"DECIMAL(18,4)" json:"validationNumber"` //验证占比
TestNumber float64 `xorm:"DECIMAL(18,4)" json:"testNumber"` //测试占比
CreateAt int64 `xorm:"created" json:"createAt"` CreateAt int64 `xorm:"created" json:"createAt"`
UpdateAt int64 `xorm:"updated" json:"updateAt"` UpdateAt int64 `xorm:"updated" json:"updateAt"`
} }
func GetTrainDatasetName(id int64) string {
item := new(TrainingDataset)
h, err := DB.ID(id).Get(item)
if err != nil || !h {
return ""
}
return item.Name
}

View File

@ -8,7 +8,7 @@ type TrainingDatasetDetail struct {
CategoryId int `xorm:"not null SMALLINT default 1" json:"categoryId"` //训练集分类1训练集;2测试集;3:验证集 CategoryId int `xorm:"not null SMALLINT default 1" json:"categoryId"` //训练集分类1训练集;2测试集;3:验证集
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(1)" json:"isDisease"` //是否有病害 IsDisease int `xorm:"TINYINT(1)" json:"isDisease"` //是否有病害, 1:有病害;2:无病害;
OperationLogId int64 `xorm:"INT(11) index" json:"operationLogId"` //操作日志编号 OperationLogId int64 `xorm:"INT(11) index" json:"operationLogId"` //操作日志编号
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"` //上传时间

View File

@ -3,6 +3,13 @@ package mq
const ( const (
TaskAdd = iota + 1 TaskAdd = iota + 1
ModelIssue ModelIssue
TaskExecute
TaskResponse
ModelIssueRepeater
ModelIssueResponse
TaskExecuteLog
TaskLog
TrainTaskAdd
) )
type InstructionReq struct { type InstructionReq struct {

View File

@ -2,6 +2,7 @@ package utils
import ( import (
"crypto/md5" "crypto/md5"
"encoding/base64"
"encoding/hex" "encoding/hex"
"fmt" "fmt"
"git.hpds.cc/Component/logging" "git.hpds.cc/Component/logging"
@ -117,3 +118,8 @@ func DownloadMinioFileToLocalPath(accessUrl, dstPath, fileName, protocol, endpoi
} }
} }
} }
func FileToBase64(fn string) string {
buff := ReadFile(fn)
return base64.StdEncoding.EncodeToString(buff) // 加密成base64字符串
}

View File

@ -12,7 +12,7 @@ import (
"strings" "strings"
) )
func HttpDo(reqUrl, method string, params map[string]string, header map[string]string) (data []byte, err error) { func HttpDo(reqUrl, method string, params map[string]interface{}, header map[string]string) (data []byte, err error) {
var paramStr string = "" var paramStr string = ""
if contentType, ok := header["Content-Type"]; ok && strings.Contains(contentType, "json") { if contentType, ok := header["Content-Type"]; ok && strings.Contains(contentType, "json") {
bytesData, _ := json.Marshal(params) bytesData, _ := json.Marshal(params)
@ -20,9 +20,9 @@ func HttpDo(reqUrl, method string, params map[string]string, header map[string]s
} else { } else {
for k, v := range params { for k, v := range params {
if len(paramStr) == 0 { if len(paramStr) == 0 {
paramStr = fmt.Sprintf("%s=%s", k, url.QueryEscape(v)) paramStr = fmt.Sprintf("%s=%s", k, url.QueryEscape(v.(string)))
} else { } else {
paramStr = fmt.Sprintf("%s&%s=%s", paramStr, k, url.QueryEscape(v)) paramStr = fmt.Sprintf("%s&%s=%s", paramStr, k, url.QueryEscape(v.(string)))
} }
} }
} }

View File

@ -129,3 +129,11 @@ func ImageToBuff(img image.Image, imgType string) *bytes.Buffer {
} }
return buff return buff
} }
func ImgFileToBase64(fn string) string {
fileByte := ReadFile(fn)
buff := bytes.NewBuffer(fileByte)
m, _, _ := image.Decode(buff)
return "data:image/jpeg;base64," + ImageToBase64(m, "jpeg")
}