zhangqian
2023-09-02 001d1f605c0a275a139f5c8fa66e631eb998e3b9
service/task.go
@@ -1,9 +1,17 @@
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"
)
@@ -37,6 +45,7 @@
   procedure, err := model.NewProceduresSearch(nil).SetOrder("start_time asc").
      SetWorkOrderId(order.WorkOrderID).
      SetStartTimeMax(nowTs).
      SetDeviceId(conf.Conf.System.DeviceId).
      SetStatusNot(model.ProcedureStatusFinished).
      First()
   if err == gorm.ErrRecordNotFound { //该订单本设备全部工序完成,把订单置为完成状态(只是对本设备完成)
@@ -82,6 +91,51 @@
   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}, &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()