| | |
| | | params.PageSize = channelAmount |
| | | } |
| | | |
| | | taskResponse, code := service.NewTaskService().GetTask(params.Page, params.PageSize, service.TaskModeCurrent, nil) //取进行中的或未开始的 |
| | | taskMode := constvar.TaskModeCurrent |
| | | if params.TaskMode == constvar.TaskModeUnStarted { |
| | | taskMode = params.TaskMode |
| | | } |
| | | |
| | | taskResponse, code := service.NewTaskService().GetTask(params.Page, params.PageSize, taskMode, nil) //取进行中的或未开始的 |
| | | if code != ecode.OK { |
| | | ctx.Fail(code) |
| | | return |
| | | } |
| | | |
| | | if len(taskResponse.Tasks) < channelAmount { |
| | | if len(taskResponse.Tasks) < channelAmount && taskMode == constvar.TaskModeCurrent { |
| | | var existsChannel = make(map[int32]bool, channelAmount) |
| | | for _, task := range taskResponse.Tasks { |
| | | existsChannel[task.Channel] = true |
| | |
| | | if existsChannel[int32(i)] { |
| | | continue |
| | | } |
| | | taskResponseTemp, code := service.NewTaskService().GetTask(params.Page, 1, service.TaskModeLastFinished, []int32{int32(i)}) //取上一个完成的 |
| | | taskResponseTemp, code := service.NewTaskService().GetTask(params.Page, 1, constvar.TaskModeLastFinished, []int32{int32(i)}) //取上一个完成的 |
| | | if code != ecode.OK { |
| | | ctx.Fail(code) |
| | | return |
| | |
| | | }) |
| | | |
| | | for _, task := range taskResponse.Tasks { |
| | | if task.Procedure.Status == model.ProcedureStatusWaitProcess { |
| | | if !service.TaskFlagGet(task.Channel) { |
| | | task.CanStarted = true |
| | | } |
| | | } |
| | |
| | | taskResponse.Prompt = conf.Conf.Prompt |
| | | taskResponse.ChannelAmount = channelAmount |
| | | |
| | | ctx.OkWithDetailed(taskResponse) |
| | | } |
| | | |
| | | // TaskGetUnStarted |
| | | // @Tags Task |
| | | // @Summary 获取未开始的任务 |
| | | // @Produce application/json |
| | | // @Param object query request.TaskList true "查询参数" |
| | | // @Success 200 {object} contextx.Response{data=response.TaskData} "成功" |
| | | // @Router /v1/task/get/unStarted [get] |
| | | func (slf *TaskApi) TaskGetUnStarted(c *gin.Context) { |
| | | 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 = 100 |
| | | } |
| | | |
| | | taskResponse, code := service.NewTaskService().GetTask(params.Page, params.PageSize, service.TaskModeUnStarted, nil) //时间到了未开始的 |
| | | if code != ecode.OK { |
| | | ctx.Fail(code) |
| | | return |
| | | } |
| | | ctx.OkWithDetailed(taskResponse) |
| | | } |
| | | |
| | |
| | | logx.Errorf("send task status update msg error:%v", err.Error()) |
| | | } |
| | | |
| | | service.TaskFlagUnset(procedure.Channel) |
| | | |
| | | ctx.Ok() |
| | | } |
| | | |
| | |
| | | ctx.Ok() |
| | | return |
| | | } |
| | | |
| | | processModel, err := taskService.GetProcessParams(procedure, order) |
| | | if err != nil || processModel == nil || processModel.ParamsMap == nil { |
| | | ctx.Fail(ecode.UnknownErr) |
| | |
| | | }) |
| | | if err != nil { |
| | | logx.Errorf("SendProcessParams update order and procedure status error:%v", err.Error()) |
| | | ctx.FailWithMsg(ecode.NeedConfirmedErr, "更改工单状态失败") |
| | | ctx.FailWithMsg(ecode.DBErr, "更改工单状态失败") |
| | | return |
| | | } |
| | | plcConfig, code := service.NewDevicePlcService().GetDevicePlc() |
| | |
| | | plcConfig.CurrentTryTimes = 0 |
| | | err = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, params.Channel, order.Amount.IntPart()) |
| | | if err != nil { |
| | | ctx.FailWithMsg(ecode.NeedConfirmedErr, "糟糕,工艺下发失败。") |
| | | ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC请求失败,请检查PLC配置") |
| | | return |
| | | } |
| | | |
| | |
| | | if err != nil { |
| | | logx.Errorf("send task status update msg error:%v", err.Error()) |
| | | } |
| | | |
| | | service.TaskFlagSet(procedure.Channel) |
| | | ctx.Ok() |
| | | } |
| | | |
| | |
| | | PlcPackageGoBurrow = "goBurrow" |
| | | PlcPackageApacheLongConnection = "apacheLong" |
| | | ) |
| | | |
| | | type TaskMode int |
| | | |
| | | const ( |
| | | TaskModeUnStarted TaskMode = 1 //未开始的 |
| | | TaskModeCurrent TaskMode = 2 //未开始的和进行中的 |
| | | TaskModeLastFinished TaskMode = 3 //上一个结束的 |
| | | ) |
| | |
| | | "description": "每页大小", |
| | | "name": "pageSize", |
| | | "in": "query" |
| | | }, |
| | | { |
| | | "enum": [ |
| | | 1, |
| | | 2, |
| | | 3 |
| | | ], |
| | | "type": "integer", |
| | | "x-enum-comments": { |
| | | "TaskModeCurrent": "未开始的和进行中的", |
| | | "TaskModeLastFinished": "上一个结束的", |
| | | "TaskModeUnStarted": "未开始的" |
| | | }, |
| | | "x-enum-varnames": [ |
| | | "TaskModeUnStarted", |
| | | "TaskModeCurrent", |
| | | "TaskModeLastFinished" |
| | | ], |
| | | "name": "taskMode", |
| | | "in": "query" |
| | | } |
| | | ], |
| | | "responses": { |
| | |
| | | "properties": { |
| | | "data": { |
| | | "$ref": "#/definitions/response.TaskResponse" |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "/v1/task/get/unStarted": { |
| | | "get": { |
| | | "produces": [ |
| | | "application/json" |
| | | ], |
| | | "tags": [ |
| | | "Task" |
| | | ], |
| | | "summary": "获取未开始的任务", |
| | | "parameters": [ |
| | | { |
| | | "type": "integer", |
| | | "description": "页码", |
| | | "name": "page", |
| | | "in": "query" |
| | | }, |
| | | { |
| | | "type": "integer", |
| | | "description": "每页大小", |
| | | "name": "pageSize", |
| | | "in": "query" |
| | | } |
| | | ], |
| | | "responses": { |
| | | "200": { |
| | | "description": "成功", |
| | | "schema": { |
| | | "allOf": [ |
| | | { |
| | | "$ref": "#/definitions/contextx.Response" |
| | | }, |
| | | { |
| | | "type": "object", |
| | | "properties": { |
| | | "data": { |
| | | "$ref": "#/definitions/response.TaskData" |
| | | } |
| | | } |
| | | } |
| | |
| | | "PlcStartAddressValueTypeInt" |
| | | ] |
| | | }, |
| | | "constvar.TaskMode": { |
| | | "type": "integer", |
| | | "enum": [ |
| | | 1, |
| | | 2, |
| | | 3 |
| | | ], |
| | | "x-enum-comments": { |
| | | "TaskModeCurrent": "未开始的和进行中的", |
| | | "TaskModeLastFinished": "上一个结束的", |
| | | "TaskModeUnStarted": "未开始的" |
| | | }, |
| | | "x-enum-varnames": [ |
| | | "TaskModeUnStarted", |
| | | "TaskModeCurrent", |
| | | "TaskModeLastFinished" |
| | | ] |
| | | }, |
| | | "contextx.Response": { |
| | | "type": "object", |
| | | "properties": { |
| | |
| | | "description": "每页大小", |
| | | "name": "pageSize", |
| | | "in": "query" |
| | | }, |
| | | { |
| | | "enum": [ |
| | | 1, |
| | | 2, |
| | | 3 |
| | | ], |
| | | "type": "integer", |
| | | "x-enum-comments": { |
| | | "TaskModeCurrent": "未开始的和进行中的", |
| | | "TaskModeLastFinished": "上一个结束的", |
| | | "TaskModeUnStarted": "未开始的" |
| | | }, |
| | | "x-enum-varnames": [ |
| | | "TaskModeUnStarted", |
| | | "TaskModeCurrent", |
| | | "TaskModeLastFinished" |
| | | ], |
| | | "name": "taskMode", |
| | | "in": "query" |
| | | } |
| | | ], |
| | | "responses": { |
| | |
| | | "properties": { |
| | | "data": { |
| | | "$ref": "#/definitions/response.TaskResponse" |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "/v1/task/get/unStarted": { |
| | | "get": { |
| | | "produces": [ |
| | | "application/json" |
| | | ], |
| | | "tags": [ |
| | | "Task" |
| | | ], |
| | | "summary": "获取未开始的任务", |
| | | "parameters": [ |
| | | { |
| | | "type": "integer", |
| | | "description": "页码", |
| | | "name": "page", |
| | | "in": "query" |
| | | }, |
| | | { |
| | | "type": "integer", |
| | | "description": "每页大小", |
| | | "name": "pageSize", |
| | | "in": "query" |
| | | } |
| | | ], |
| | | "responses": { |
| | | "200": { |
| | | "description": "成功", |
| | | "schema": { |
| | | "allOf": [ |
| | | { |
| | | "$ref": "#/definitions/contextx.Response" |
| | | }, |
| | | { |
| | | "type": "object", |
| | | "properties": { |
| | | "data": { |
| | | "$ref": "#/definitions/response.TaskData" |
| | | } |
| | | } |
| | | } |
| | |
| | | "PlcStartAddressValueTypeInt" |
| | | ] |
| | | }, |
| | | "constvar.TaskMode": { |
| | | "type": "integer", |
| | | "enum": [ |
| | | 1, |
| | | 2, |
| | | 3 |
| | | ], |
| | | "x-enum-comments": { |
| | | "TaskModeCurrent": "未开始的和进行中的", |
| | | "TaskModeLastFinished": "上一个结束的", |
| | | "TaskModeUnStarted": "未开始的" |
| | | }, |
| | | "x-enum-varnames": [ |
| | | "TaskModeUnStarted", |
| | | "TaskModeCurrent", |
| | | "TaskModeLastFinished" |
| | | ] |
| | | }, |
| | | "contextx.Response": { |
| | | "type": "object", |
| | | "properties": { |
| | |
| | | x-enum-varnames: |
| | | - PlcStartAddressValueTypeString |
| | | - PlcStartAddressValueTypeInt |
| | | constvar.TaskMode: |
| | | enum: |
| | | - 1 |
| | | - 2 |
| | | - 3 |
| | | type: integer |
| | | x-enum-comments: |
| | | TaskModeCurrent: 未开始的和进行中的 |
| | | TaskModeLastFinished: 上一个结束的 |
| | | TaskModeUnStarted: 未开始的 |
| | | x-enum-varnames: |
| | | - TaskModeUnStarted |
| | | - TaskModeCurrent |
| | | - TaskModeLastFinished |
| | | contextx.Response: |
| | | properties: |
| | | code: |
| | |
| | | in: query |
| | | name: pageSize |
| | | type: integer |
| | | - enum: |
| | | - 1 |
| | | - 2 |
| | | - 3 |
| | | in: query |
| | | name: taskMode |
| | | type: integer |
| | | x-enum-comments: |
| | | TaskModeCurrent: 未开始的和进行中的 |
| | | TaskModeLastFinished: 上一个结束的 |
| | | TaskModeUnStarted: 未开始的 |
| | | x-enum-varnames: |
| | | - TaskModeUnStarted |
| | | - TaskModeCurrent |
| | | - TaskModeLastFinished |
| | | produces: |
| | | - application/json |
| | | responses: |
| | |
| | | $ref: '#/definitions/response.TaskResponse' |
| | | type: object |
| | | summary: 获取任务 |
| | | tags: |
| | | - Task |
| | | /v1/task/get/unStarted: |
| | | get: |
| | | parameters: |
| | | - description: 页码 |
| | | in: query |
| | | name: page |
| | | type: integer |
| | | - description: 每页大小 |
| | | in: query |
| | | name: pageSize |
| | | type: integer |
| | | produces: |
| | | - application/json |
| | | responses: |
| | | "200": |
| | | description: 成功 |
| | | schema: |
| | | allOf: |
| | | - $ref: '#/definitions/contextx.Response' |
| | | - properties: |
| | | data: |
| | | $ref: '#/definitions/response.TaskData' |
| | | type: object |
| | | summary: 获取未开始的任务 |
| | | tags: |
| | | - Task |
| | | /v1/task/sendProcessParams: |
| | |
| | | package request |
| | | |
| | | import "apsClient/constvar" |
| | | |
| | | // TaskInfo 任务开启通知请求参数 |
| | | type TaskInfo struct { |
| | | OrderId string `json:"orderId"` // 订单号 |
| | |
| | | // TaskList 任务列表请求参数 |
| | | type TaskList struct { |
| | | PageInfo |
| | | TaskMode constvar.TaskMode `json:"taskMode" form:"taskMode"` |
| | | } |
| | | |
| | | type SendProcessParams struct { |
| | |
| | | taskApi := new(v1.TaskApi) |
| | | taskGroup := v1Group.Group("task") |
| | | { |
| | | taskGroup.GET("countdown", taskApi.TaskCountdown) // 新任务倒计时 |
| | | taskGroup.GET("get", taskApi.TaskGet) // 获取工序 |
| | | taskGroup.GET("get/unStarted", taskApi.TaskGetUnStarted) // 时间到了未开始的任务 |
| | | taskGroup.GET("start/:id", taskApi.GetProcessParams) // 获取工艺参数 |
| | | taskGroup.POST("sendProcessParams", taskApi.TaskStart) // 下发工艺参数并开始工序 |
| | | taskGroup.PUT("finish/:id", taskApi.TaskFinish) // 完成工序 |
| | | taskGroup.GET("countdown", taskApi.TaskCountdown) // 新任务倒计时 |
| | | taskGroup.GET("get", taskApi.TaskGet) // 获取工序 |
| | | taskGroup.GET("start/:id", taskApi.GetProcessParams) // 获取工艺参数 |
| | | taskGroup.POST("sendProcessParams", taskApi.TaskStart) // 下发工艺参数并开始工序 |
| | | taskGroup.PUT("finish/:id", taskApi.TaskFinish) // 完成工序 |
| | | } |
| | | |
| | | configApi := new(v1.ConfigApi) |
| | |
| | | import ( |
| | | "apsClient/constvar" |
| | | "apsClient/model" |
| | | "apsClient/model/response" |
| | | "fmt" |
| | | "github.com/spf13/cast" |
| | | "sync" |
| | |
| | | } |
| | | |
| | | const ( |
| | | PlcCacheKey = "plc:%v:%v" //plc:channel:key |
| | | CurrentTaskCacheKey = "current_task" |
| | | PlcCacheKey = "plc:%v:%v" //plc:channel:key |
| | | CurrentTaskCacheKey = "current_task:%v" //current_task:channel |
| | | CurrentProgressCacheKey = "current_progress:%v" //current_progress:channel |
| | | PlcCacheKeyUpdateTime = "finish_number_update_time:%v" //finish_number_update_time:channel |
| | | ) |
| | |
| | | defaultCacheStore.Add(fmt.Sprintf(PlcCacheKeyUpdateTime, channel), value) |
| | | } |
| | | |
| | | func TaskCacheSet(value *response.TaskData) { |
| | | defaultCacheStore.Add(CurrentTaskCacheKey, value) |
| | | func TaskFlagSet(channel int32) { |
| | | defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), struct{}{}) |
| | | } |
| | | |
| | | func TaskCacheUnset() { |
| | | defaultCacheStore.Remove(CurrentTaskCacheKey) |
| | | func TaskFlagUnset(channel int32) { |
| | | defaultCacheStore.Remove(fmt.Sprintf(CurrentTaskCacheKey, channel)) |
| | | } |
| | | |
| | | func TaskCacheGet() (*response.TaskData, bool) { |
| | | if v, ok := defaultCacheStore.Get(CurrentTaskCacheKey); ok { |
| | | return v.(*response.TaskData), ok |
| | | func TaskFlagGet(channel int32) bool { |
| | | if _, ok := defaultCacheStore.Get(fmt.Sprintf(CurrentTaskCacheKey, channel)); ok { |
| | | return true |
| | | } |
| | | return nil, false |
| | | return false |
| | | } |
| | | |
| | | func ProgressCacheGet(channel int32) (*model.ProductionProgress, bool) { |
| | |
| | | return &TaskService{} |
| | | } |
| | | |
| | | type TaskMode int |
| | | |
| | | const ( |
| | | TaskModeUnStarted TaskMode = 1 //未开始的 |
| | | TaskModeCurrent TaskMode = 2 |
| | | TaskModeLastFinished TaskMode = 3 //上一个结束的 |
| | | ) |
| | | |
| | | // GetTask 获取任务,未完成的开始时间小于等于当前时间,结束时间大于当前时间的任务 |
| | | func (slf TaskService) GetTask(page, pageSize int, mode TaskMode, channels []int32) (taskResp *response.TaskResponse, code int) { |
| | | func (slf TaskService) GetTask(page, pageSize int, mode constvar.TaskMode, channels []int32) (taskResp *response.TaskResponse, code int) { |
| | | var taskList []*response.TaskData |
| | | var count int64 |
| | | var workers []*common.ProcedureWorker |
| | |
| | | SetDeviceId(conf.Conf.System.DeviceId). |
| | | SetPage(page, pageSize) |
| | | |
| | | if mode == TaskModeUnStarted { |
| | | if mode == constvar.TaskModeUnStarted { |
| | | search.SetStatus(model.ProcedureStatusWaitProcess). |
| | | SetStartTimeMax(nowTs). |
| | | SetEndTimeMin(nowTs). |
| | | SetOrder("start_time asc") |
| | | } else if mode == TaskModeCurrent { |
| | | } else if mode == constvar.TaskModeCurrent { |
| | | search.SetStatusNot(model.ProcedureStatusFinished). |
| | | SetStartTimeMax(nowTs). |
| | | SetEndTimeMin(nowTs). |
| | | SetOrder("status desc, start_time asc") |
| | | } else if mode == TaskModeLastFinished { |
| | | } else if mode == constvar.TaskModeLastFinished { |
| | | search.SetStatus(model.ProcedureStatusFinished).SetOrder("updated_at desc") |
| | | if len(channels) > 0 { |
| | | search.SetChannels(channels) |