增加动力学循环发送道岔状态任务;修改jsonTime反序列化方法

This commit is contained in:
joylink_zhangsai 2023-08-01 14:47:04 +08:00
parent bfa8deb77c
commit 2971e68f40
14 changed files with 309 additions and 4690 deletions

View File

@ -6,6 +6,7 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
"joylink.club/bj-rtsts-server/db/model" "joylink.club/bj-rtsts-server/db/model"
"joylink.club/bj-rtsts-server/dto" "joylink.club/bj-rtsts-server/dto"
"joylink.club/bj-rtsts-server/dto/publishedGi"
"joylink.club/bj-rtsts-server/middleware" "joylink.club/bj-rtsts-server/middleware"
"joylink.club/bj-rtsts-server/service" "joylink.club/bj-rtsts-server/service"
"net/http" "net/http"
@ -31,8 +32,7 @@ func InitPublishedGiRouter(api *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddl
// @Tags 发布的图形数据Api // @Tags 发布的图形数据Api
// @Accept json // @Accept json
// @Produce json // @Produce json
// @Param Authorization header string true "JWT Token" // @Param pagePublishedGiReqDto query publishedGi.PublishedGiReqDto true "分页查询参数"
// @Param pagePublishedGiReqDto query dto.PublishedGiReqDto true "分页查询参数"
// @Success 200 {object} dto.PageDto // @Success 200 {object} dto.PageDto
// @Failure 401 {object} dto.ErrorDto // @Failure 401 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto // @Failure 500 {object} dto.ErrorDto
@ -40,16 +40,12 @@ func InitPublishedGiRouter(api *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddl
func pageQueryPublishedGi(c *gin.Context) { func pageQueryPublishedGi(c *gin.Context) {
user, _ := c.Get(middleware.IdentityKey) user, _ := c.Get(middleware.IdentityKey)
zap.S().Debug("分页查询发布的图形数据", user) zap.S().Debug("分页查询发布的图形数据", user)
req := dto.PublishedGiReqDto{} req := publishedGi.PublishedGiReqDto{}
if err := c.ShouldBind(&req); err != nil { if err := c.ShouldBind(&req); err != nil {
//zap.S().Warn("分页查询参数绑定错误,使用默认参数", err) panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: err.Error()})
req.Default()
} }
zap.S().Debug("分页查询发布的图形数据", req) zap.S().Debug("分页查询发布的图形数据", req)
page, err := service.PageQueryPublishedGi(&req) page := service.PageQueryPublishedGi(&req)
if err != nil {
panic(err)
}
c.JSON(http.StatusOK, page) c.JSON(http.StatusOK, page)
} }
@ -63,8 +59,7 @@ func pageQueryPublishedGi(c *gin.Context) {
// @Tags 发布的图形数据Api // @Tags 发布的图形数据Api
// @Accept json // @Accept json
// @Produce json // @Produce json
// @Param Authorization header string true "JWT Token" // @Param pagePublishedGiReqDto query publishedGi.PublishedGiReqDto true "查询参数"
// @Param pagePublishedGiReqDto query dto.PublishedGiReqDto true "查询参数"
// @Success 200 {object} []model.PublishedGi // @Success 200 {object} []model.PublishedGi
// @Failure 401 {object} dto.ErrorDto // @Failure 401 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto // @Failure 500 {object} dto.ErrorDto
@ -72,15 +67,12 @@ func pageQueryPublishedGi(c *gin.Context) {
func listQueryPublishedGi(c *gin.Context) { func listQueryPublishedGi(c *gin.Context) {
user, _ := c.Get(middleware.IdentityKey) user, _ := c.Get(middleware.IdentityKey)
zap.S().Debug("列表查询发布的图形数据", user) zap.S().Debug("列表查询发布的图形数据", user)
req := dto.PublishedGiReqDto{} req := publishedGi.PublishedGiReqDto{}
if err := c.ShouldBind(&req); err != nil { if err := c.ShouldBindQuery(&req); err != nil {
zap.S().Warn("列表查询参数绑定错误", err) panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: err.Error()})
} }
zap.S().Debug("列表查询发布的图形数据", req) zap.S().Debug("列表查询发布的图形数据", req)
list, err := service.ListQueryPublishedGi(&req) list := service.ListQueryPublishedGi(&req)
if err != nil {
panic(err)
}
c.JSON(http.StatusOK, list) c.JSON(http.StatusOK, list)
} }
@ -94,7 +86,6 @@ func listQueryPublishedGi(c *gin.Context) {
// @Tags 发布的图形数据Api // @Tags 发布的图形数据Api
// @Accept json // @Accept json
// @Produce json // @Produce json
// @Param Authorization header string true "JWT Token"
// @Param id path int true "id" // @Param id path int true "id"
// @Success 200 {object} model.PublishedGi // @Success 200 {object} model.PublishedGi
// @Failure 401 {object} dto.ErrorDto // @Failure 401 {object} dto.ErrorDto
@ -106,7 +97,7 @@ func getPublishedGiById(c *gin.Context) {
idStr := c.Param("id") idStr := c.Param("id")
id, err := strconv.Atoi(idStr) id, err := strconv.Atoi(idStr)
if err != nil { if err != nil {
panic("id参数解析错误") panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: err.Error()})
} }
zap.S().Debug("id查询发布的图形数据", id) zap.S().Debug("id查询发布的图形数据", id)
entity, err := service.GetPublishedGiById(id) entity, err := service.GetPublishedGiById(id)
@ -126,8 +117,7 @@ func getPublishedGiById(c *gin.Context) {
// @Tags 发布的图形数据Api // @Tags 发布的图形数据Api
// @Accept json // @Accept json
// @Produce json // @Produce json
// @Param Authorization header string true "JWT Token" // @Param PublishReqDto query publishedGi.PublishReqDto true "查询参数"
// @Param PublishReqDto query dto.PublishReqDto true "查询参数"
// @Success 200 // @Success 200
// @Failure 401 {object} dto.ErrorDto // @Failure 401 {object} dto.ErrorDto
// @Failure 500 {object} dto.ErrorDto // @Failure 500 {object} dto.ErrorDto
@ -135,10 +125,11 @@ func getPublishedGiById(c *gin.Context) {
func publishFromDraft(c *gin.Context) { func publishFromDraft(c *gin.Context) {
user, _ := c.Get(middleware.IdentityKey) user, _ := c.Get(middleware.IdentityKey)
zap.S().Debug("发布图形数据", user) zap.S().Debug("发布图形数据", user)
req := dto.PublishReqDto{} req := publishedGi.PublishReqDto{}
if err := c.ShouldBind(&req); err != nil { if err := c.ShouldBind(&req); err != nil {
zap.S().Warn("发布图形数据参数绑定错误", err) panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: err.Error()})
} }
//todo
zap.S().Debug("发布图形数据请求参数", req) zap.S().Debug("发布图形数据请求参数", req)
service.PublishFormDraft(&req, user.(*model.User)) service.PublishFormDraft(&req, user.(*model.User))
} }
@ -153,7 +144,6 @@ func publishFromDraft(c *gin.Context) {
// @Tags 发布的图形数据Api // @Tags 发布的图形数据Api
// @Accept json // @Accept json
// @Produce json // @Produce json
// @Param Authorization header string true "JWT Token"
// @Param id path int true "id" // @Param id path int true "id"
// @Success 200 {object} nil // @Success 200 {object} nil
// @Failure 401 {object} dto.ErrorDto // @Failure 401 {object} dto.ErrorDto
@ -165,7 +155,7 @@ func deletePublishedGiById(c *gin.Context) {
idStr := c.Param("id") idStr := c.Param("id")
id, err := strconv.Atoi(idStr) id, err := strconv.Atoi(idStr)
if err != nil { if err != nil {
panic("id参数解析错误") panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: err.Error()})
} }
zap.S().Debug("id查询发布的图形数据", id) zap.S().Debug("id查询发布的图形数据", id)
service.DeletePublishedGiById(id) service.DeletePublishedGiById(id)

View File

@ -413,13 +413,6 @@ const docTemplate = `{
], ],
"summary": "列表查询发布的图形数据", "summary": "列表查询发布的图形数据",
"parameters": [ "parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"type": "string", "type": "string",
"name": "name", "name": "name",
@ -440,6 +433,11 @@ const docTemplate = `{
"name": "size", "name": "size",
"in": "query", "in": "query",
"required": true "required": true
},
{
"type": "string",
"name": "time",
"in": "query"
} }
], ],
"responses": { "responses": {
@ -486,13 +484,6 @@ const docTemplate = `{
], ],
"summary": "分页查询发布的图形数据", "summary": "分页查询发布的图形数据",
"parameters": [ "parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"type": "string", "type": "string",
"name": "name", "name": "name",
@ -513,6 +504,11 @@ const docTemplate = `{
"name": "size", "name": "size",
"in": "query", "in": "query",
"required": true "required": true
},
{
"type": "string",
"name": "time",
"in": "query"
} }
], ],
"responses": { "responses": {
@ -555,17 +551,10 @@ const docTemplate = `{
], ],
"summary": "从草稿发布数据", "summary": "从草稿发布数据",
"parameters": [ "parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"type": "integer", "type": "integer",
"description": "草稿数据的id", "description": "草稿数据的id",
"name": "draftId", "name": "draftingId",
"in": "query" "in": "query"
}, },
{ {
@ -613,13 +602,6 @@ const docTemplate = `{
], ],
"summary": "id查询发布的图形数据", "summary": "id查询发布的图形数据",
"parameters": [ "parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"type": "integer", "type": "integer",
"description": "id", "description": "id",
@ -667,13 +649,6 @@ const docTemplate = `{
], ],
"summary": "id删除发布的图形数据", "summary": "id删除发布的图形数据",
"parameters": [ "parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"type": "integer", "type": "integer",
"description": "id", "description": "id",
@ -805,56 +780,6 @@ const docTemplate = `{
} }
} }
}, },
"/api/v1/simulation/destroy/{id}": {
"post": {
"security": [
{
"JwtAuth": []
}
],
"description": "ATS测试仿真-添加列车",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"ATS测试仿真Api"
],
"summary": "ATS仿真销毁",
"parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{
"type": "integer",
"description": "仿真id",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "string"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/dto.ErrorDto"
}
}
}
}
},
"/api/v1/simulation/list": { "/api/v1/simulation/list": {
"get": { "get": {
"security": [ "security": [
@ -1005,6 +930,56 @@ const docTemplate = `{
} }
} }
}, },
"/api/v1/simulation/train/destroy/{id}": {
"get": {
"security": [
{
"JwtAuth": []
}
],
"description": "ATS测试仿真-添加列车",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"ATS测试仿真Api"
],
"summary": "ATS仿真销毁",
"parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{
"type": "integer",
"description": "仿真id",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "string"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/dto.ErrorDto"
}
}
}
}
},
"/api/v1/simulation/train/remove": { "/api/v1/simulation/train/remove": {
"post": { "post": {
"security": [ "security": [
@ -1460,7 +1435,9 @@ const docTemplate = `{
"type": "object", "type": "object",
"required": [ "required": [
"simulationId", "simulationId",
"switchIndex" "switchIndex",
"turnNormal",
"turnReverse"
], ],
"properties": { "properties": {
"simulationId": { "simulationId": {
@ -1564,7 +1541,7 @@ const docTemplate = `{
// SwaggerInfo holds exported Swagger Info so clients can modify it // SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = &swag.Spec{ var SwaggerInfo = &swag.Spec{
Version: "1.0", Version: "1.0",
Host: "localhost:8080", Host: "localhost:9091",
BasePath: "/", BasePath: "/",
Schemes: []string{}, Schemes: []string{},
Title: "CBTC测试系统API", Title: "CBTC测试系统API",

View File

@ -6,7 +6,7 @@
"contact": {}, "contact": {},
"version": "1.0" "version": "1.0"
}, },
"host": "localhost:8080", "host": "localhost:9091",
"basePath": "/", "basePath": "/",
"paths": { "paths": {
"/api/v1/drafting": { "/api/v1/drafting": {
@ -406,13 +406,6 @@
], ],
"summary": "列表查询发布的图形数据", "summary": "列表查询发布的图形数据",
"parameters": [ "parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"type": "string", "type": "string",
"name": "name", "name": "name",
@ -433,6 +426,11 @@
"name": "size", "name": "size",
"in": "query", "in": "query",
"required": true "required": true
},
{
"type": "string",
"name": "time",
"in": "query"
} }
], ],
"responses": { "responses": {
@ -479,13 +477,6 @@
], ],
"summary": "分页查询发布的图形数据", "summary": "分页查询发布的图形数据",
"parameters": [ "parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"type": "string", "type": "string",
"name": "name", "name": "name",
@ -506,6 +497,11 @@
"name": "size", "name": "size",
"in": "query", "in": "query",
"required": true "required": true
},
{
"type": "string",
"name": "time",
"in": "query"
} }
], ],
"responses": { "responses": {
@ -548,17 +544,10 @@
], ],
"summary": "从草稿发布数据", "summary": "从草稿发布数据",
"parameters": [ "parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"type": "integer", "type": "integer",
"description": "草稿数据的id", "description": "草稿数据的id",
"name": "draftId", "name": "draftingId",
"in": "query" "in": "query"
}, },
{ {
@ -606,13 +595,6 @@
], ],
"summary": "id查询发布的图形数据", "summary": "id查询发布的图形数据",
"parameters": [ "parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"type": "integer", "type": "integer",
"description": "id", "description": "id",
@ -660,13 +642,6 @@
], ],
"summary": "id删除发布的图形数据", "summary": "id删除发布的图形数据",
"parameters": [ "parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"type": "integer", "type": "integer",
"description": "id", "description": "id",
@ -798,56 +773,6 @@
} }
} }
}, },
"/api/v1/simulation/destroy/{id}": {
"post": {
"security": [
{
"JwtAuth": []
}
],
"description": "ATS测试仿真-添加列车",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"ATS测试仿真Api"
],
"summary": "ATS仿真销毁",
"parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{
"type": "integer",
"description": "仿真id",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "string"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/dto.ErrorDto"
}
}
}
}
},
"/api/v1/simulation/list": { "/api/v1/simulation/list": {
"get": { "get": {
"security": [ "security": [
@ -998,6 +923,56 @@
} }
} }
}, },
"/api/v1/simulation/train/destroy/{id}": {
"get": {
"security": [
{
"JwtAuth": []
}
],
"description": "ATS测试仿真-添加列车",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"ATS测试仿真Api"
],
"summary": "ATS仿真销毁",
"parameters": [
{
"type": "string",
"description": "JWT Token",
"name": "Authorization",
"in": "header",
"required": true
},
{
"type": "integer",
"description": "仿真id",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "string"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/dto.ErrorDto"
}
}
}
}
},
"/api/v1/simulation/train/remove": { "/api/v1/simulation/train/remove": {
"post": { "post": {
"security": [ "security": [
@ -1453,7 +1428,9 @@
"type": "object", "type": "object",
"required": [ "required": [
"simulationId", "simulationId",
"switchIndex" "switchIndex",
"turnNormal",
"turnReverse"
], ],
"properties": { "properties": {
"simulationId": { "simulationId": {

View File

@ -153,6 +153,8 @@ definitions:
required: required:
- simulationId - simulationId
- switchIndex - switchIndex
- turnNormal
- turnReverse
type: object type: object
dto.TokenRespDto: dto.TokenRespDto:
properties: properties:
@ -206,7 +208,7 @@ definitions:
description: 发布用户id description: 发布用户id
type: integer type: integer
type: object type: object
host: localhost:8080 host: localhost:9091
info: info:
contact: {} contact: {}
description: CBTC测试服务. description: CBTC测试服务.
@ -460,11 +462,6 @@ paths:
- application/json - application/json
description: 可以通过名称过滤 description: 可以通过名称过滤
parameters: parameters:
- description: JWT Token
in: header
name: Authorization
required: true
type: string
- description: id - description: id
in: path in: path
name: id name: id
@ -493,11 +490,6 @@ paths:
- application/json - application/json
description: 可以通过名称过滤 description: 可以通过名称过滤
parameters: parameters:
- description: JWT Token
in: header
name: Authorization
required: true
type: string
- description: id - description: id
in: path in: path
name: id name: id
@ -529,11 +521,6 @@ paths:
- application/json - application/json
description: 可以通过名称过滤 description: 可以通过名称过滤
parameters: parameters:
- description: JWT Token
in: header
name: Authorization
required: true
type: string
- in: query - in: query
name: name name: name
type: string type: string
@ -549,6 +536,9 @@ paths:
name: size name: size
required: true required: true
type: integer type: integer
- in: query
name: time
type: string
produces: produces:
- application/json - application/json
responses: responses:
@ -577,11 +567,6 @@ paths:
- application/json - application/json
description: 可以通过名称过滤 description: 可以通过名称过滤
parameters: parameters:
- description: JWT Token
in: header
name: Authorization
required: true
type: string
- in: query - in: query
name: name name: name
type: string type: string
@ -597,6 +582,9 @@ paths:
name: size name: size
required: true required: true
type: integer type: integer
- in: query
name: time
type: string
produces: produces:
- application/json - application/json
responses: responses:
@ -622,14 +610,9 @@ paths:
consumes: consumes:
- application/json - application/json
parameters: parameters:
- description: JWT Token
in: header
name: Authorization
required: true
type: string
- description: 草稿数据的id - description: 草稿数据的id
in: query in: query
name: draftId name: draftingId
type: integer type: integer
- description: 发布后的名称 - description: 发布后的名称
in: query in: query
@ -719,38 +702,6 @@ paths:
summary: 创建ATS测试仿真 summary: 创建ATS测试仿真
tags: tags:
- ATS测试仿真Api - ATS测试仿真Api
/api/v1/simulation/destroy/{id}:
post:
consumes:
- application/json
description: ATS测试仿真-添加列车
parameters:
- description: JWT Token
in: header
name: Authorization
required: true
type: string
- description: 仿真id
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
type: string
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/dto.ErrorDto'
security:
- JwtAuth: []
summary: ATS仿真销毁
tags:
- ATS测试仿真Api
/api/v1/simulation/list: /api/v1/simulation/list:
get: get:
consumes: consumes:
@ -846,6 +797,38 @@ paths:
summary: ATS测试仿真-添加列车 summary: ATS测试仿真-添加列车
tags: tags:
- ATS测试仿真Api - ATS测试仿真Api
/api/v1/simulation/train/destroy/{id}:
get:
consumes:
- application/json
description: ATS测试仿真-添加列车
parameters:
- description: JWT Token
in: header
name: Authorization
required: true
type: string
- description: 仿真id
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
type: string
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/dto.ErrorDto'
security:
- JwtAuth: []
summary: ATS仿真销毁
tags:
- ATS测试仿真Api
/api/v1/simulation/train/remove: /api/v1/simulation/train/remove:
post: post:
consumes: consumes:

View File

@ -45,11 +45,10 @@ func (jt *JsonTime) MarshalJSON() ([]byte, error) {
} }
func (jt *JsonTime) UnmarshalJSON(data []byte) error { func (jt *JsonTime) UnmarshalJSON(data []byte) error {
var str string if data[0] == '"' {
err := json.Unmarshal(data, &str) data = data[1 : len(data)-1]
if err != nil {
panic(ErrorDto{ArgumentParseError, fmt.Sprintf("时间参数解析出错:\n%s", err.Error())})
} }
str := string(data)
parse, err := time.Parse(time.DateTime, str) parse, err := time.Parse(time.DateTime, str)
if err != nil { if err != nil {
panic(ErrorDto{ArgumentParseError, fmt.Sprintf("时间参数格式化出错:\n%s", err.Error())}) panic(ErrorDto{ArgumentParseError, fmt.Sprintf("时间参数格式化出错:\n%s", err.Error())})
@ -58,6 +57,10 @@ func (jt *JsonTime) UnmarshalJSON(data []byte) error {
return nil return nil
} }
func (jt *JsonTime) String() string {
return time.Time(*jt).Format(time.DateTime)
}
// 数据库分页偏移 // 数据库分页偏移
func (p *PageQueryDto) Offset() int { func (p *PageQueryDto) Offset() int {
if p.Page > 0 { if p.Page > 0 {

View File

@ -1,25 +0,0 @@
package dto
import "time"
type PublishedGiReqDto struct {
PageQueryDto
Name string `json:"name" form:"name"`
}
type PublishReqDto struct {
//发布后的名称
Name string `json:"name" form:"name"`
//草稿数据的id
DraftId int32 `json:"draftId" form:"draftId"`
////是否覆盖同名数据
//Overwrite bool `json:"overwrite" form:"overwrite"`
}
type PublishedGi struct {
ID int32
Name string
Proto []byte
UserID int32
PublishAt time.Time
}

View File

@ -0,0 +1,50 @@
package publishedGi
import (
"joylink.club/bj-rtsts-server/db/model"
"joylink.club/bj-rtsts-server/dto"
)
type PublishedGiReqDto struct {
dto.PageQueryDto
Name string `json:"name" form:"name"`
Time dto.JsonTime `json:"time" form:"time" time_format:"2006-01-02 15:04:05"`
}
type PublishReqDto struct {
//发布后的名称
Name string `json:"name" form:"name"`
//草稿数据的id
DraftId int32 `json:"draftingId" form:"draftingId"`
//Time dto.JsonTime `json:"time" form:"time"`
////是否覆盖同名数据
//Overwrite bool `json:"overwrite" form:"overwrite"`
}
type PublishedGiDto struct {
ID int32 `json:"id"`
Name string `json:"name"`
Proto []byte `json:"proto"`
UserID int32 `json:"userID"`
PublishAt dto.JsonTime `json:"publishAt" time_format:"2006-01-02 15:04:05"`
}
func ConvertFrom(gi *model.PublishedGi) *PublishedGiDto {
return &PublishedGiDto{
ID: gi.ID,
Name: gi.Name,
Proto: gi.Proto,
UserID: gi.UserID,
PublishAt: dto.JsonTime(gi.PublishAt),
}
}
func ConvertFromSlice(giSlice []*model.PublishedGi) []*PublishedGiDto {
var result []*PublishedGiDto
for _, gi := range giSlice {
result = append(result, ConvertFrom(gi))
}
return result
}

View File

@ -7,8 +7,27 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
"joylink.club/bj-rtsts-server/config" "joylink.club/bj-rtsts-server/config"
"net" "net"
"time"
) )
var (
// TurnoutInfoChan 用来存放要发送的道岔信息
TurnoutInfoChan = make(chan *TurnoutInfo, 1000)
)
func RunSendTurnoutInfoTask() {
go func() {
tick := time.Tick(10 * time.Millisecond)
for range tick {
info := <-TurnoutInfoChan
err := SendTurnoutInfo(info)
if err != nil {
zap.S().Error(err)
}
}
}()
}
// SendTurnoutInfo 发送道岔信息 // SendTurnoutInfo 发送道岔信息
func SendTurnoutInfo(info *TurnoutInfo) error { func SendTurnoutInfo(info *TurnoutInfo) error {
defer func() { defer func() {
@ -21,6 +40,7 @@ func SendTurnoutInfo(info *TurnoutInfo) error {
conn, err := net.DialUDP("udp", nil, remoteAddr) conn, err := net.DialUDP("udp", nil, remoteAddr)
if err != nil { if err != nil {
zap.S().Error("UDP通信失败", err) zap.S().Error("UDP通信失败", err)
return err
} }
defer func(conn *net.UDPConn) { defer func(conn *net.UDPConn) {
err := conn.Close() err := conn.Close()

4
go.mod
View File

@ -27,10 +27,14 @@ require (
github.com/go-openapi/swag v0.22.4 // indirect github.com/go-openapi/swag v0.22.4 // indirect
github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect
github.com/golang-jwt/jwt/v4 v4.4.3 // indirect github.com/golang-jwt/jwt/v4 v4.4.3 // indirect
github.com/howeyc/fsnotify v0.9.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect github.com/jinzhu/now v1.1.5 // indirect
github.com/josharian/intern v1.0.0 // indirect github.com/josharian/intern v1.0.0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.12 // indirect
github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a // indirect
github.com/pilu/fresh v0.0.0-20190826141211-0fa698148017 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect
go.opentelemetry.io/otel v1.10.0 // indirect go.opentelemetry.io/otel v1.10.0 // indirect
go.opentelemetry.io/otel/trace v1.10.0 // indirect go.opentelemetry.io/otel/trace v1.10.0 // indirect

11
go.sum
View File

@ -41,6 +41,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/appleboy/gin-jwt/v2 v2.9.1 h1:l29et8iLW6omcHltsOP6LLk4s3v4g2FbFs0koxGWVZs= github.com/appleboy/gin-jwt/v2 v2.9.1 h1:l29et8iLW6omcHltsOP6LLk4s3v4g2FbFs0koxGWVZs=
github.com/appleboy/gin-jwt/v2 v2.9.1/go.mod h1:jwcPZJ92uoC9nOUTOKWoN/f6JZOgMSKlFSHw5/FrRUk= github.com/appleboy/gin-jwt/v2 v2.9.1/go.mod h1:jwcPZJ92uoC9nOUTOKWoN/f6JZOgMSKlFSHw5/FrRUk=
github.com/appleboy/gofight/v2 v2.1.2 h1:VOy3jow4vIK8BRQJoC/I9muxyYlJ2yb9ht2hZoS3rf4= github.com/appleboy/gofight/v2 v2.1.2 h1:VOy3jow4vIK8BRQJoC/I9muxyYlJ2yb9ht2hZoS3rf4=
@ -194,6 +196,8 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/howeyc/fsnotify v0.9.0 h1:0gtV5JmOKH4A8SsFxG2BczSeXWWPvcMT0euZt5gDAxY=
github.com/howeyc/fsnotify v0.9.0/go.mod h1:41HzSPxBGeFRQKEEwgh49TRw/nKBsYZ2cF1OzPjSJsA=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
@ -239,6 +243,8 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
@ -263,6 +269,10 @@ github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZO
github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a h1:Tg4E4cXPZSZyd3H1tJlYo6ZreXV0ZJvE/lorNqyw1AU=
github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a/go.mod h1:9Or9aIl95Kp43zONcHd5tLZGKXb9iLx0pZjau0uJ5zg=
github.com/pilu/fresh v0.0.0-20190826141211-0fa698148017 h1:XXDLZIIt9NqdeIEva0DM+z1npM0Tsx6h5TYqwNvXfP0=
github.com/pilu/fresh v0.0.0-20190826141211-0fa698148017/go.mod h1:2LLTtftTZSdAPR/iVyennXZDLZOYzyDn+T0qEKJ8eSw=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@ -502,6 +512,7 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

View File

@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"joylink.club/bj-rtsts-server/dynamics"
swaggerFiles "github.com/swaggo/files" // swagger embed files swaggerFiles "github.com/swaggo/files" // swagger embed files
ginSwagger "github.com/swaggo/gin-swagger" // gin-swagger middleware ginSwagger "github.com/swaggo/gin-swagger" // gin-swagger middleware
@ -15,7 +16,7 @@ import (
// @version 1.0 // @version 1.0
// @description CBTC测试服务. // @description CBTC测试服务.
// @host localhost:8080 // @host localhost:9091
// @BasePath / // @BasePath /
// @securityDefinitions.apikey JwtAuth // @securityDefinitions.apikey JwtAuth
@ -35,6 +36,8 @@ func main() {
docs.SwaggerInfo.Title = "CBTC测试系统API" docs.SwaggerInfo.Title = "CBTC测试系统API"
engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
dynamics.RunSendTurnoutInfoTask()
serverConfig := config.Config.Server serverConfig := config.Config.Server
if serverConfig.Port == 0 { if serverConfig.Port == 0 {
serverConfig.Port = 8080 serverConfig.Port = 8080

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,39 +2,46 @@ package service
import ( import (
"fmt" "fmt"
"time"
"joylink.club/bj-rtsts-server/db/dbquery" "joylink.club/bj-rtsts-server/db/dbquery"
"joylink.club/bj-rtsts-server/db/model" "joylink.club/bj-rtsts-server/db/model"
"joylink.club/bj-rtsts-server/dto" "joylink.club/bj-rtsts-server/dto"
"joylink.club/bj-rtsts-server/dto/publishedGi"
"time"
) )
func PageQueryPublishedGi(req *dto.PublishedGiReqDto) (*dto.PageDto, error) { func PageQueryPublishedGi(req *publishedGi.PublishedGiReqDto) *dto.PageDto {
w := dbquery.PublishedGi.Where()
if req.Name != "" {
w = w.Where(dbquery.PublishedGi.Name.Like(fmt.Sprintf("%%%s%%", req.Name)))
}
result, count, err := w.Debug().FindByPage(req.Offset(), req.Size)
return &dto.PageDto{
Total: int(count),
PageQueryDto: req.PageQueryDto,
Records: result,
}, err
}
func ListQueryPublishedGi(req *dto.PublishedGiReqDto) ([]*model.PublishedGi, error) {
where := dbquery.PublishedGi.Where() where := dbquery.PublishedGi.Where()
if req.Name != "" { if req.Name != "" {
where.Where(dbquery.PublishedGi.Name.Like(fmt.Sprintf("%%%s%%", req.Name))) where.Where(dbquery.PublishedGi.Name.Like(fmt.Sprintf("%%%s%%", req.Name)))
} }
return where.Debug().Find() result, count, err := where.Debug().FindByPage(req.Offset(), req.Size)
if err != nil {
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err.Error()})
}
return &dto.PageDto{
Total: int(count),
PageQueryDto: req.PageQueryDto,
Records: publishedGi.ConvertFromSlice(result),
}
}
func ListQueryPublishedGi(req *publishedGi.PublishedGiReqDto) []*publishedGi.PublishedGiDto {
where := dbquery.PublishedGi.Where()
if req.Name != "" {
where.Where(dbquery.PublishedGi.Name.Like(fmt.Sprintf("%%%s%%", req.Name)))
}
find, err := where.Debug().Find()
if err != nil {
panic(dto.ErrorDto{Code: dto.DataOperationError, Message: err.Error()})
}
return publishedGi.ConvertFromSlice(find)
} }
func GetPublishedGiById(id int) (*model.PublishedGi, error) { func GetPublishedGiById(id int) (*model.PublishedGi, error) {
return dbquery.PublishedGi.Where(dbquery.PublishedGi.ID.Eq(int32(id))).Debug().First() return dbquery.PublishedGi.Where(dbquery.PublishedGi.ID.Eq(int32(id))).Debug().First()
} }
func PublishFormDraft(req *dto.PublishReqDto, user *model.User) { func PublishFormDraft(req *publishedGi.PublishReqDto, user *model.User) {
draft := QueryDrafting(req.DraftId) draft := QueryDrafting(req.DraftId)
if draft.Proto == nil || len(draft.Proto) == 0 { if draft.Proto == nil || len(draft.Proto) == 0 {
panic(fmt.Sprintf("草稿[%v]绘图数据信息为空", req.DraftId)) panic(fmt.Sprintf("草稿[%v]绘图数据信息为空", req.DraftId))