zhangqian
2023-09-13 196437f8ba646344cf25c9fa4bd3797ca40e2154
支持获取多个任务,增加任务数量统计
10个文件已修改
244 ■■■■ 已修改文件
api/v1/task.go 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
conf/apsClient.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/docs.go 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.json 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.yaml 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/procedures.go 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/response/common.go 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/work_order.go 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/task.go 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/task.go
@@ -5,6 +5,7 @@
    "apsClient/constvar"
    "apsClient/model"
    "apsClient/model/common"
    "apsClient/model/request"
    "apsClient/model/response"
    "apsClient/nsq"
    "apsClient/pkg/contextx"
@@ -48,20 +49,32 @@
// @Tags      Task
// @Summary   获取任务
// @Produce   application/json
// @Param     object  query    request.TaskList true  "查询参数"
// @Success   200   {object}  contextx.Response{data=response.TaskData}  "成功"
// @Router    /v1/task/get [get]
func (slf *TaskApi) TaskGet(c *gin.Context) {
    ctx, ok := contextx.NewContext(c, nil)
    var params request.TaskList
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    if params.Page <= 0 {
        params.Page = 1
    }
    if params.PageSize <= 0 {
        params.PageSize = 1
    }
    taskData, code := service.NewTaskService().GetTask()
    taskDataList, count, code := service.NewTaskService().GetTask(params.Page, params.PageSize)
    if code != ecode.OK {
        ctx.Fail(code)
        return
    }
    ctx.OkWithDetailed(taskData)
    taskResponse := &response.TaskResponse{
        Tasks:     taskDataList,
        TaskCount: count,
    }
    ctx.OkWithDetailed(taskResponse)
}
// GetProcessParams
conf/apsClient.json
@@ -2,7 +2,7 @@
  "system": {
    "env": "develop",
    "port": 8003,
    "deviceId": "DeviceID1",
    "deviceId": "111",
    "netSetShellPath": "/data/network/",
    "netUpShellName": "up.sh",
    "netDownShellName": "down.sh"
docs/docs.go
@@ -392,6 +392,20 @@
                    "Task"
                ],
                "summary": "获取任务",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "页码",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "每页大小",
                        "name": "pageSize",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "成功",
@@ -422,7 +436,7 @@
                "tags": [
                    "Task"
                ],
                "summary": "下发工艺参数",
                "summary": "下发工艺参数(开始任务)",
                "parameters": [
                    {
                        "type": "integer",
@@ -450,7 +464,7 @@
                "tags": [
                    "Task"
                ],
                "summary": "任务开始",
                "summary": "任务开始(获取工艺参数)",
                "parameters": [
                    {
                        "type": "integer",
@@ -793,10 +807,12 @@
            "type": "integer",
            "enum": [
                1,
                2
                2,
                3
            ],
            "x-enum-varnames": [
                "OrderStatusUnFinished",
                "OrderStatusWaitProcess",
                "OrderStatusProcessing",
                "OrderStatusFinished"
            ]
        },
@@ -815,16 +831,21 @@
            "type": "integer",
            "enum": [
                1,
                2
                2,
                3
            ],
            "x-enum-varnames": [
                "ProcedureStatusUnFinished",
                "ProcedureStatusWaitProcess",
                "ProcedureStatusProcessing",
                "ProcedureStatusFinished"
            ]
        },
        "model.Procedures": {
            "type": "object",
            "properties": {
                "deviceId": {
                    "type": "string"
                },
                "endTime": {
                    "type": "integer"
                },
@@ -838,6 +859,9 @@
                            "$ref": "#/definitions/common.ProductProcedure"
                        }
                    ]
                },
                "procedureId": {
                    "type": "string"
                },
                "startTime": {
                    "type": "integer"
@@ -977,11 +1001,14 @@
        "response.TaskData": {
            "type": "object",
            "properties": {
                "deviceName": {
                    "type": "string"
                "allProcedures": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "deviceStatus": {
                    "type": "string"
                "currentProcedureIndex": {
                    "type": "integer"
                },
                "order": {
                    "$ref": "#/definitions/model.Order"
docs/swagger.json
@@ -380,6 +380,20 @@
                    "Task"
                ],
                "summary": "获取任务",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "页码",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "每页大小",
                        "name": "pageSize",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "成功",
@@ -410,7 +424,7 @@
                "tags": [
                    "Task"
                ],
                "summary": "下发工艺参数",
                "summary": "下发工艺参数(开始任务)",
                "parameters": [
                    {
                        "type": "integer",
@@ -438,7 +452,7 @@
                "tags": [
                    "Task"
                ],
                "summary": "任务开始",
                "summary": "任务开始(获取工艺参数)",
                "parameters": [
                    {
                        "type": "integer",
@@ -781,10 +795,12 @@
            "type": "integer",
            "enum": [
                1,
                2
                2,
                3
            ],
            "x-enum-varnames": [
                "OrderStatusUnFinished",
                "OrderStatusWaitProcess",
                "OrderStatusProcessing",
                "OrderStatusFinished"
            ]
        },
@@ -803,16 +819,21 @@
            "type": "integer",
            "enum": [
                1,
                2
                2,
                3
            ],
            "x-enum-varnames": [
                "ProcedureStatusUnFinished",
                "ProcedureStatusWaitProcess",
                "ProcedureStatusProcessing",
                "ProcedureStatusFinished"
            ]
        },
        "model.Procedures": {
            "type": "object",
            "properties": {
                "deviceId": {
                    "type": "string"
                },
                "endTime": {
                    "type": "integer"
                },
@@ -826,6 +847,9 @@
                            "$ref": "#/definitions/common.ProductProcedure"
                        }
                    ]
                },
                "procedureId": {
                    "type": "string"
                },
                "startTime": {
                    "type": "integer"
@@ -965,11 +989,14 @@
        "response.TaskData": {
            "type": "object",
            "properties": {
                "deviceName": {
                    "type": "string"
                "allProcedures": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "deviceStatus": {
                    "type": "string"
                "currentProcedureIndex": {
                    "type": "integer"
                },
                "order": {
                    "$ref": "#/definitions/model.Order"
docs/swagger.yaml
@@ -211,9 +211,11 @@
    enum:
    - 1
    - 2
    - 3
    type: integer
    x-enum-varnames:
    - OrderStatusUnFinished
    - OrderStatusWaitProcess
    - OrderStatusProcessing
    - OrderStatusFinished
  model.PlcBrand:
    properties:
@@ -226,12 +228,16 @@
    enum:
    - 1
    - 2
    - 3
    type: integer
    x-enum-varnames:
    - ProcedureStatusUnFinished
    - ProcedureStatusWaitProcess
    - ProcedureStatusProcessing
    - ProcedureStatusFinished
  model.Procedures:
    properties:
      deviceId:
        type: string
      endTime:
        type: integer
      id:
@@ -240,6 +246,8 @@
        allOf:
        - $ref: '#/definitions/common.ProductProcedure'
        description: common.ProductProcedure  对象
      procedureId:
        type: string
      startTime:
        type: integer
      status:
@@ -334,10 +342,12 @@
    type: object
  response.TaskData:
    properties:
      deviceName:
        type: string
      deviceStatus:
        type: string
      allProcedures:
        items:
          type: string
        type: array
      currentProcedureIndex:
        type: integer
      order:
        $ref: '#/definitions/model.Order'
      procedure:
@@ -566,6 +576,15 @@
      - Task
  /v1/task/get:
    get:
      parameters:
      - description: 页码
        in: query
        name: page
        type: integer
      - description: 每页大小
        in: query
        name: pageSize
        type: integer
      produces:
      - application/json
      responses:
@@ -596,7 +615,7 @@
          description: 成功
          schema:
            $ref: '#/definitions/contextx.Response'
      summary: 下发工艺参数
      summary: 下发工艺参数(开始任务)
      tags:
      - Task
  /v1/task/start/{id}:
@@ -619,7 +638,7 @@
                data:
                  $ref: '#/definitions/response.ProcessParamsResponse'
              type: object
      summary: 任务开始
      summary: 任务开始(获取工艺参数)
      tags:
      - Task
swagger: "2.0"
main.go
@@ -7,7 +7,6 @@
    "apsClient/nsq"
    "apsClient/pkg/logx"
    "apsClient/router"
    "apsClient/service"
    "apsClient/service/plc_address"
    "fmt"
    "net/http"
@@ -39,8 +38,8 @@
    //加载plc写入地址
    plc_address.LoadAddressFromFile()
    //提前加载任务
    service.NewTaskService().GetTask()
    ////提前加载任务
    //service.NewTaskService().GetTask()
    go shutdown()
    logx.Infof("apsClient start serve...")
model/procedures.go
@@ -271,6 +271,17 @@
    return records, total, nil
}
func (slf *ProceduresSearch) Count() (int64, error) {
    var (
        total int64
        db    = slf.build()
    )
    if err := db.Count(&total).Error; err != nil {
        return total, fmt.Errorf("find count err: %v", err)
    }
    return total, nil
}
func (slf *ProceduresSearch) FindNotTotal() ([]*Procedures, error) {
    var (
        records = make([]*Procedures, 0)
model/response/common.go
@@ -19,9 +19,15 @@
}
type TaskData struct {
    Order     *model.Order
    Procedure *model.Procedures
    Config
    Order                 *model.Order
    Procedure             *model.Procedures
    AllProcedures         []string
    CurrentProcedureIndex int
}
type TaskResponse struct {
    Tasks     []*TaskData
    TaskCount int64
}
type Config struct {
model/work_order.go
@@ -35,6 +35,7 @@
        StartTimeMax int64
        StartTimeMin int64
        StatusList   []OrderStatus
        WorkOrderIDs []string
    }
)
@@ -101,6 +102,11 @@
    return slf
}
func (slf *OrderSearch) SetWorkOrderIds(workOrderIds []string) *OrderSearch {
    slf.WorkOrderIDs = workOrderIds
    return slf
}
func (slf *OrderSearch) SetId(id uint) *OrderSearch {
    slf.ID = id
    return slf
service/task.go
@@ -24,39 +24,54 @@
}
// GetTask 获取任务,未完成的开始时间最早的任务
func (slf TaskService) GetTask() (taskData *response.TaskData, code int) {
    if v, ok := TaskCacheGet(); ok {
        return v, ecode.OK
    }
func (slf TaskService) GetTask(page, pageSize int) (taskDataList []*response.TaskData, count int64, code int) {
    nowTs := time.Now().Unix()
    var (
        err       error
        order     *model.Order
        procedure *model.Procedures
        err          error
        orders       []*model.Order
        procedures   []*model.Procedures
        workOrderIds []string
    )
    procedure, err = model.NewProceduresSearch(nil).SetOrder("start_time asc").
    procedures, err = model.NewProceduresSearch(nil).SetOrder("start_time asc").
        SetStartTimeMax(nowTs).
        SetDeviceId(conf.Conf.System.DeviceId).
        SetStatusNot(model.ProcedureStatusFinished).
        First()
    if err == gorm.ErrRecordNotFound {
        return nil, ecode.OK
        SetPage(page, pageSize).
        FindNotTotal()
    if err != nil {
        return nil, 0, ecode.DBErr
    }
    count, err = model.NewProceduresSearch(nil).
        SetDeviceId(conf.Conf.System.DeviceId).
        SetStatusNot(model.ProcedureStatusFinished).
        Count()
    if err != nil {
        return nil, 0, ecode.DBErr
    }
    if len(procedures) == 0 {
        return nil, 0, ecode.OK
    }
    order, err = model.NewOrderSearch(nil).SetWorkOrderId(procedure.WorkOrderID).First() //由工序反推工单
    if err == gorm.ErrRecordNotFound {
        err = nil
        return nil, ecode.OK
    for _, procedure := range procedures {
        workOrderIds = append(workOrderIds, procedure.WorkOrderID)
    }
    orders, err = model.NewOrderSearch(nil).SetWorkOrderIds(workOrderIds).FindNotTotal() //由工序反推工单
    if err != nil {
        return nil, ecode.DBErr
        return nil, 0, ecode.DBErr
    }
    taskData = new(response.TaskData)
    taskData.Order = order
    taskData.Procedure = procedure
    TaskCacheSet(taskData)
    return taskData, ecode.OK
    orderMap := make(map[string]*model.Order, len(workOrderIds))
    for _, order := range orders {
        orderMap[order.WorkOrderID] = order
    }
    for _, procedure := range procedures {
        taskData := response.TaskData{
            Order:     orderMap[procedure.WorkOrderID],
            Procedure: procedure,
        }
        taskDataList = append(taskDataList, &taskData)
    }
    return taskDataList, count, ecode.OK
}
func (slf TaskService) GetProcedureById(id int) (*model.Procedures, int) {
@@ -69,7 +84,6 @@
func (slf TaskService) UpdateProcedureStatus(db *gorm.DB, id int, status model.ProcedureStatus) error {
    if status == model.ProcedureStatusFinished {
        TaskCacheUnset()
        ProgressCacheUnset()
    }
    return model.NewProceduresSearch(db).SetId(id).UpdateByMap(map[string]interface{}{