| | |
| | | "apsClient/constvar" |
| | | "apsClient/model" |
| | | "apsClient/model/common" |
| | | "apsClient/model/request" |
| | | "apsClient/model/response" |
| | | "apsClient/nsq" |
| | | "apsClient/pkg/contextx" |
| | |
| | | // @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, ¶ms) |
| | | 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 |
| | |
| | | "system": { |
| | | "env": "develop", |
| | | "port": 8003, |
| | | "deviceId": "DeviceID1", |
| | | "deviceId": "111", |
| | | "netSetShellPath": "/data/network/", |
| | | "netUpShellName": "up.sh", |
| | | "netDownShellName": "down.sh" |
| | |
| | | "Task" |
| | | ], |
| | | "summary": "获取任务", |
| | | "parameters": [ |
| | | { |
| | | "type": "integer", |
| | | "description": "页码", |
| | | "name": "page", |
| | | "in": "query" |
| | | }, |
| | | { |
| | | "type": "integer", |
| | | "description": "每页大小", |
| | | "name": "pageSize", |
| | | "in": "query" |
| | | } |
| | | ], |
| | | "responses": { |
| | | "200": { |
| | | "description": "成功", |
| | |
| | | "tags": [ |
| | | "Task" |
| | | ], |
| | | "summary": "下发工艺参数", |
| | | "summary": "下发工艺参数(开始任务)", |
| | | "parameters": [ |
| | | { |
| | | "type": "integer", |
| | |
| | | "tags": [ |
| | | "Task" |
| | | ], |
| | | "summary": "任务开始", |
| | | "summary": "任务开始(获取工艺参数)", |
| | | "parameters": [ |
| | | { |
| | | "type": "integer", |
| | |
| | | "type": "integer", |
| | | "enum": [ |
| | | 1, |
| | | 2 |
| | | 2, |
| | | 3 |
| | | ], |
| | | "x-enum-varnames": [ |
| | | "OrderStatusUnFinished", |
| | | "OrderStatusWaitProcess", |
| | | "OrderStatusProcessing", |
| | | "OrderStatusFinished" |
| | | ] |
| | | }, |
| | |
| | | "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" |
| | | }, |
| | |
| | | "$ref": "#/definitions/common.ProductProcedure" |
| | | } |
| | | ] |
| | | }, |
| | | "procedureId": { |
| | | "type": "string" |
| | | }, |
| | | "startTime": { |
| | | "type": "integer" |
| | |
| | | "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" |
| | |
| | | "Task" |
| | | ], |
| | | "summary": "获取任务", |
| | | "parameters": [ |
| | | { |
| | | "type": "integer", |
| | | "description": "页码", |
| | | "name": "page", |
| | | "in": "query" |
| | | }, |
| | | { |
| | | "type": "integer", |
| | | "description": "每页大小", |
| | | "name": "pageSize", |
| | | "in": "query" |
| | | } |
| | | ], |
| | | "responses": { |
| | | "200": { |
| | | "description": "成功", |
| | |
| | | "tags": [ |
| | | "Task" |
| | | ], |
| | | "summary": "下发工艺参数", |
| | | "summary": "下发工艺参数(开始任务)", |
| | | "parameters": [ |
| | | { |
| | | "type": "integer", |
| | |
| | | "tags": [ |
| | | "Task" |
| | | ], |
| | | "summary": "任务开始", |
| | | "summary": "任务开始(获取工艺参数)", |
| | | "parameters": [ |
| | | { |
| | | "type": "integer", |
| | |
| | | "type": "integer", |
| | | "enum": [ |
| | | 1, |
| | | 2 |
| | | 2, |
| | | 3 |
| | | ], |
| | | "x-enum-varnames": [ |
| | | "OrderStatusUnFinished", |
| | | "OrderStatusWaitProcess", |
| | | "OrderStatusProcessing", |
| | | "OrderStatusFinished" |
| | | ] |
| | | }, |
| | |
| | | "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" |
| | | }, |
| | |
| | | "$ref": "#/definitions/common.ProductProcedure" |
| | | } |
| | | ] |
| | | }, |
| | | "procedureId": { |
| | | "type": "string" |
| | | }, |
| | | "startTime": { |
| | | "type": "integer" |
| | |
| | | "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" |
| | |
| | | enum: |
| | | - 1 |
| | | - 2 |
| | | - 3 |
| | | type: integer |
| | | x-enum-varnames: |
| | | - OrderStatusUnFinished |
| | | - OrderStatusWaitProcess |
| | | - OrderStatusProcessing |
| | | - OrderStatusFinished |
| | | model.PlcBrand: |
| | | properties: |
| | |
| | | enum: |
| | | - 1 |
| | | - 2 |
| | | - 3 |
| | | type: integer |
| | | x-enum-varnames: |
| | | - ProcedureStatusUnFinished |
| | | - ProcedureStatusWaitProcess |
| | | - ProcedureStatusProcessing |
| | | - ProcedureStatusFinished |
| | | model.Procedures: |
| | | properties: |
| | | deviceId: |
| | | type: string |
| | | endTime: |
| | | type: integer |
| | | id: |
| | |
| | | allOf: |
| | | - $ref: '#/definitions/common.ProductProcedure' |
| | | description: common.ProductProcedure 对象 |
| | | procedureId: |
| | | type: string |
| | | startTime: |
| | | type: integer |
| | | status: |
| | |
| | | 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: |
| | |
| | | - Task |
| | | /v1/task/get: |
| | | get: |
| | | parameters: |
| | | - description: 页码 |
| | | in: query |
| | | name: page |
| | | type: integer |
| | | - description: 每页大小 |
| | | in: query |
| | | name: pageSize |
| | | type: integer |
| | | produces: |
| | | - application/json |
| | | responses: |
| | |
| | | description: 成功 |
| | | schema: |
| | | $ref: '#/definitions/contextx.Response' |
| | | summary: 下发工艺参数 |
| | | summary: 下发工艺参数(开始任务) |
| | | tags: |
| | | - Task |
| | | /v1/task/start/{id}: |
| | |
| | | data: |
| | | $ref: '#/definitions/response.ProcessParamsResponse' |
| | | type: object |
| | | summary: 任务开始 |
| | | summary: 任务开始(获取工艺参数) |
| | | tags: |
| | | - Task |
| | | swagger: "2.0" |
| | |
| | | "apsClient/nsq" |
| | | "apsClient/pkg/logx" |
| | | "apsClient/router" |
| | | "apsClient/service" |
| | | "apsClient/service/plc_address" |
| | | "fmt" |
| | | "net/http" |
| | |
| | | //加载plc写入地址 |
| | | plc_address.LoadAddressFromFile() |
| | | |
| | | //提前加载任务 |
| | | service.NewTaskService().GetTask() |
| | | ////提前加载任务 |
| | | //service.NewTaskService().GetTask() |
| | | |
| | | go shutdown() |
| | | logx.Infof("apsClient start serve...") |
| | |
| | | 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) |
| | |
| | | } |
| | | |
| | | 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 { |
| | |
| | | StartTimeMax int64 |
| | | StartTimeMin int64 |
| | | StatusList []OrderStatus |
| | | WorkOrderIDs []string |
| | | } |
| | | ) |
| | | |
| | |
| | | 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 |
| | |
| | | } |
| | | |
| | | // 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) { |
| | |
| | | |
| | | 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{}{ |