zhangqian
2023-10-09 dad1ae79fe78e770d88f41713b4c68fad562d9ef
api/v1/task.go
@@ -112,9 +112,11 @@
   })
   nowTs := time.Now().Unix()
   flagMap := make(map[int32]struct{}, 0)
   for _, task := range taskResponse.Tasks {
      if !service.TaskFlagGet(task.Channel) && task.Procedure.StartTime <= nowTs {
      if _, ok := flagMap[task.Channel]; !ok && !service.TaskFlagGet(task.Channel) && task.Procedure.StartTime <= nowTs {
         task.CanStarted = true
         flagMap[task.Channel] = struct{}{}
      }
   }
@@ -154,11 +156,19 @@
      ctx.Fail(ecode.DBErr)
      return
   }
   processModel, err := service.NewTaskService().GetProcessParams(procedure, order)
   if err != nil || processModel == nil || processModel.ParamsMap == nil {
      ctx.FailWithMsg(ecode.ParamsErr, "未获取到工艺参数,请在工艺模型库中上传!")
      return
   var processModel *model.ProcessModel
   if procedure.ProcessModelNumber != "" {
      processModel, err = service.GetProcessModelByNumber(procedure.ProcessModelNumber)
      if err != nil || processModel == nil || processModel.ParamsMap == nil {
         ctx.FailWithMsg(ecode.ParamsErr, "未获取到工艺参数,请在工艺模型库中上传!")
         return
      }
   } else {
      processModel, err = service.NewTaskService().GetProcessParams(procedure, order)
      if err != nil || processModel == nil || processModel.ParamsMap == nil {
         ctx.FailWithMsg(ecode.ParamsErr, "未获取到工艺参数,请在工艺模型库中上传!")
         return
      }
   }
   processParamsArr := make([]response.ProcessParams, 0, len(processModel.ParamsMap))
@@ -277,16 +287,15 @@
   }
   processModel, err := taskService.GetProcessParams(procedure, order)
   if err != nil || processModel == nil || processModel.ParamsMap == nil {
      ctx.Fail(ecode.UnknownErr)
      ctx.FailWithMsg(ecode.ParamsErr, "未获取到工艺参数,请在工艺模型库中上传!")
      return
   }
   err = model.WithTransaction(func(db *gorm.DB) error {
      err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusProcessing, params.Channel)
      err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusProcessing, procedure.Channel, processModel.Number)
      if err != nil {
         return err
      }
      procedure.Channel = params.Channel
      err = taskService.UpdateOrderStatus(db, order.ID, model.OrderStatusProcessing)
      if err != nil {
         return err
@@ -308,12 +317,7 @@
   if err != nil {
      logx.Errorf("SendProcessParams: %v", err.Error())
      err = model.WithTransaction(func(db *gorm.DB) error {
         err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusWaitProcess, params.Channel)
         if err != nil {
            return err
         }
         procedure.Channel = params.Channel
         err = taskService.UpdateOrderStatus(db, order.ID, model.OrderStatusWaitProcess)
         err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusWaitProcess, procedure.Channel, "")
         if err != nil {
            return err
         }
@@ -322,12 +326,8 @@
      ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC请求失败,请检查PLC配置!")
      return
   }
   if code != ecode.OK {
      logx.Errorf("get plcConfig err: %v", err.Error())
      return
   }
   plcConfig.CurrentTryTimes = 0
   err = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, params.Channel, order.Amount.IntPart())
   err = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, procedure.Channel, order.Amount.IntPart())
   if err != nil {
      ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC请求失败,请检查PLC配置")
      return
@@ -350,6 +350,59 @@
   ctx.Ok()
}
// UpdateProcessParams
// @Tags      Task
// @Summary   更新工艺参数(进行中的任务)
// @Produce   application/json
// @Param     object  body    request.SendProcessParams true  "查询参数"
// @Success   200   {object}  contextx.Response{}  "成功"
// @Router    /v1/task/updateProcessParams [post]
func (slf *TaskApi) UpdateProcessParams(c *gin.Context) {
   mutex.Lock()
   defer mutex.Unlock()
   var params request.SendProcessParams
   ctx, ok := contextx.NewContext(c, &params)
   if !ok {
      return
   }
   taskService := service.NewTaskService()
   procedure, code := taskService.GetProcedureById(params.ProcedureId)
   if code != ecode.OK {
      ctx.Fail(code)
      return
   }
   order, err := taskService.GetOrderByWorkOrderId(procedure.WorkOrderID)
   if err != nil {
      ctx.Fail(ecode.UnknownErr)
      return
   }
   if procedure.Status != model.ProcedureStatusProcessing { //只能进行中的可以更新
      ctx.FailWithMsg(ecode.ParamsErr, "只能进行中的工序可以更新工艺参数")
      return
   }
   processModel, err := taskService.GetProcessParams(procedure, order)
   if err != nil || processModel == nil || processModel.ParamsMap == nil {
      ctx.FailWithMsg(ecode.ParamsErr, "未获取到工艺参数,请在工艺模型库中上传!")
      return
   }
   plcConfig, code := service.NewDevicePlcService().GetDevicePlc()
   if code != ecode.OK || plcConfig.Id == 0 {
      ctx.FailWithMsg(ecode.NeedConfirmedErr, "请先配置PLC")
      return
   }
   plcConfig.MaxTryTimes = 2
   err = SendParams(processModel.ParamsMap, plcConfig)
   if err != nil {
      logx.Errorf("update process params err: %v", err.Error())
      ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC请求失败,请检查PLC配置!")
      return
   }
   _ = taskService.UpdateProcedureStatusAndChannel(nil, params.ProcedureId, model.ProcedureStatusProcessing, procedure.Channel, processModel.Number)
   ctx.Ok()
}
func SendParams(paramsMap map[string]interface{}, plcConfig *model.DevicePlc) error {
   if len(paramsMap) == 0 {
      return errors.New("empty params")