From 74c155ba2112a6e9f3be730e1656a157d2f6cefc Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期六, 02 九月 2023 18:05:42 +0800 Subject: [PATCH] update --- service/task.go | 128 +++++++++++++++++++++++++++++++++++++++--- 1 files changed, 118 insertions(+), 10 deletions(-) diff --git a/service/task.go b/service/task.go index bf65ebf..69cba48 100644 --- a/service/task.go +++ b/service/task.go @@ -1,8 +1,19 @@ package service import ( + "apsClient/conf" + "apsClient/constvar" "apsClient/model" + "apsClient/model/common" + "apsClient/model/response" + "apsClient/nsq" "apsClient/pkg/ecode" + "apsClient/pkg/logx" + "apsClient/pkg/structx" + "encoding/json" + "fmt" + "gorm.io/gorm" + "time" ) type TaskService struct { @@ -12,16 +23,113 @@ return &TaskService{} } -func (slf TaskService) GetTaskList(page, pageSize int) (taskList []*model.ScheduleTask, total int64, code int) { - search := model.NewScheduleTaskSearch(nil) - search.SetPage(page, pageSize). - SetPreload(true) - //SetEndTime(time.Now().Unix()) - var err error - taskList, total, err = search.Find() - if err != nil { - return +// GetTask 鑾峰彇浠诲姟锛屾湭瀹屾垚鐨勫紑濮嬫椂闂存渶鏃╃殑浠诲姟 +func (slf TaskService) GetTask() (taskData *response.TaskData, code int) { + nowTs := time.Now().Unix() + var ( + err error + order *model.Order + procedure *model.Procedures + ) + procedure, 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 } - return taskList, total, ecode.OK + order, err = model.NewOrderSearch(nil).SetWorkOrderId(procedure.WorkOrderID).First() //鐢卞伐搴忓弽鎺ㄥ伐鍗� + if err == gorm.ErrRecordNotFound { + err = nil + return nil, ecode.OK + } + if err != nil { + return nil, ecode.DBErr + } + taskData = new(response.TaskData) + taskData.Order = order + taskData.Procedure = procedure + return taskData, ecode.OK +} + +func (slf TaskService) GetProcedureById(id int) (*model.Procedures, int) { + procedure, err := model.NewProceduresSearch(nil).SetId(id).First() + if err != nil { + return nil, ecode.DBErr + } + return procedure, ecode.OK +} + +func (slf TaskService) UpdateProcedureStatus(db *gorm.DB, id int, status model.ProcedureStatus) error { + return model.NewProceduresSearch(db).SetId(id).UpdateByMap(map[string]interface{}{ + "status": status, + }) +} + +func (slf TaskService) UpdateOrderStatus(db *gorm.DB, id uint, status model.OrderStatus) error { + return model.NewOrderSearch(db).SetId(id).UpdateByMap(map[string]interface{}{ + "status": status, + }) +} + +func (slf TaskService) GetOrderByWorkOrderId(workOrderId string) (order *model.Order, err error) { + return model.NewOrderSearch(nil).SetWorkOrderId(workOrderId).First() +} + +func (slf TaskService) GetProcessParams(procedure *model.Procedures, order *model.Order) (processModel *model.ProcessModel, err error) { + data, err := model.NewProcessModelSearch(). + SetWorkOrder(procedure.WorkOrderID). + SetDevice(procedure.ProceduresInfo.DeviceName). + SetOrderId(procedure.OrderID). + SetProcedure(procedure.ProceduresInfo.ProcedureName). + SetProduct(order.ProductName). + SetOrder("id desc").First() + if err != nil && err != gorm.ErrRecordNotFound { + logx.Errorf("TaskStart GetProcessModel err:%v", err) + return nil, err + } + if err == nil { + err = json.Unmarshal([]byte(data.Params), &data.ParamsMap) + if err != nil { + logx.Errorf("process model json.Unmarshal:%v", err) + return + } + return data, nil + } + + if err == gorm.ErrRecordNotFound { //濡傛灉鏁版嵁搴撴病鏈変粠浜戠鑾峰彇 + caller := nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicProcessParamsRequest, conf.Conf.NsqConf.NodeId), fmt.Sprintf(constvar.NsqTopicProcessParamsResponse, conf.Conf.NsqConf.NodeId)) + var result common.ResponseProcessParams + err = caller.Call(common.RequestProcessParams{ + WorkOrder: procedure.WorkOrderID, + OrderId: procedure.OrderID, + Product: order.ProductName, + Procedure: procedure.ProceduresInfo.ProcedureName, + Device: procedure.ProceduresInfo.DeviceName, + DeviceId: conf.Conf.System.DeviceId, + }, &result, time.Second*3) + if err != nil { + logx.Errorf("TaskStart GetProcessModel error:%v", err.Error()) + return + } + if result.ParamsMap == nil { + logx.Errorf("TaskStart GetProcessModel response miss process params:%v", result) + return + } + processModel = new(model.ProcessModel) + err = structx.AssignTo(result, &processModel) + return processModel, err + } + return +} + +// GetCurrentTask 鑾峰彇寰呭畬鎴愭垨杩涜涓殑浠诲姟锛� 姣忎釜宸ュ崟鍙湁涓�涓伐搴� +func (slf TaskService) GetCurrentTask() (workOrder *model.Order, err error) { + nowTs := time.Now().Unix() + orderSearch := model.NewOrderSearch(nil) + return orderSearch.SetOrder("start_time asc"). + SetStartTimeMin(nowTs). + SetStatusList([]model.OrderStatus{model.OrderStatusWaitProcess, model.OrderStatusProcessing}).First() } -- Gitblit v1.8.0