From eba4eb850f0ecfb5839395aa125955ceaa2a454f Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期四, 19 十月 2023 16:39:07 +0800 Subject: [PATCH] Merge branch 'feat-serf' --- api/v1/task.go | 125 +++++++++++++++++------------------------ 1 files changed, 51 insertions(+), 74 deletions(-) diff --git a/api/v1/task.go b/api/v1/task.go index 5604993..c2b864c 100644 --- a/api/v1/task.go +++ b/api/v1/task.go @@ -4,21 +4,17 @@ "apsClient/conf" "apsClient/constvar" "apsClient/model" - "apsClient/model/common" "apsClient/model/request" "apsClient/model/response" - "apsClient/nsq" "apsClient/pkg/contextx" - "apsClient/pkg/convertx" "apsClient/pkg/ecode" "apsClient/pkg/logx" - "apsClient/pkg/safe" "apsClient/service" "apsClient/service/plc_address" "errors" - "fmt" "github.com/gin-gonic/gin" - "gorm.io/gorm" + "github.com/jinzhu/gorm" + "github.com/spf13/cast" "sort" "sync" "time" @@ -144,7 +140,7 @@ ctx.Fail(ecode.ParamsErr) return } - id := convertx.Atoi(idx) + id := cast.ToUint(idx) procedure, code := service.NewTaskService().GetProcedureById(id) if code != ecode.OK { ctx.Fail(code) @@ -179,15 +175,6 @@ }) } - safe.Go(func() { - caller := nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicGetPlcAddress, conf.Conf.NsqConf.NodeId), fmt.Sprintf(constvar.NsqTopicSendPlcAddress, conf.Conf.NsqConf.NodeId)) - var addressResult common.ResponsePlcAddress - err := caller.Call(common.RequestPlcAddress{DeviceId: conf.Conf.System.DeviceId}, &addressResult, time.Second*3) - if err != nil { - logx.Infof("get plc address err: %v", err.Error()) - } - }) - resp := response.ProcessParamsResponse{ Number: processModel.Number, Params: processParamsArr, @@ -212,7 +199,7 @@ ctx.Fail(ecode.ParamsErr) return } - id := convertx.Atoi(idx) + id := cast.ToUint(idx) procedure, code := service.NewTaskService().GetProcedureById(id) if code != ecode.OK { ctx.Fail(code) @@ -226,25 +213,26 @@ ctx.Fail(ecode.ParamsErr) return } - err := service.NewTaskService().UpdateProcedureStatus(nil, id, model.ProcedureStatusFinished, procedure.Channel) + + err := model.WithTransaction(func(db *gorm.DB) error { + err := service.NewTaskService().UpdateProcedureStatus(db, id, model.ProcedureStatusFinished, procedure.Channel) + if err != nil { + return err + } + record := model.TaskStatusSync{ + WorkOrderId: procedure.WorkOrderID, + ProcedureID: procedure.ProcedureID, + DeviceId: procedure.DeviceID, + IsProcessing: false, + IsFinish: true, + } + return service.NewTaskService().SaveTaskStatusSync(db, &record) + }) + if err != nil { - logx.Errorf("UpdateProcedureStatus err: %v", err.Error()) + logx.Errorf("TaskFinish UpdateProcedureStatus err: %v", err.Error()) ctx.Fail(ecode.UnknownErr) return - } - - msg := &common.MsgTaskStatusUpdate{ - WorkOrderId: procedure.WorkOrderID, - ProcedureID: procedure.ProceduresInfo.ProcedureID, - DeviceId: procedure.ProceduresInfo.DeviceID, - IsProcessing: false, - IsFinish: true, - } - - caller := nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicTaskProcedureStatusUpdate, conf.Conf.NsqConf.NodeId), "") - err = caller.Send(msg) - if err != nil { - logx.Errorf("send task status update msg error:%v", err.Error()) } service.TaskFlagUnset(procedure.Channel) @@ -290,7 +278,23 @@ 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 { + ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC璇锋眰澶辫触锛岃妫�鏌LC閰嶇疆锛�") + return + } + plcConfig.CurrentTryTimes = 0 + err = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, procedure.Channel, order.Amount.IntPart()) + if err != nil { + ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC璇锋眰澶辫触锛岃妫�鏌LC閰嶇疆锛�") + return + } err = model.WithTransaction(func(db *gorm.DB) error { err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusProcessing, procedure.Channel, processModel.Number) if err != nil { @@ -300,52 +304,25 @@ if err != nil { return err } - return service.NewProgressService().Add(db, procedure, order) + err = service.NewProgressService().Add(db, procedure, order) + if err != nil { + return err + } + record := model.TaskStatusSync{ + WorkOrderId: procedure.WorkOrderID, + ProcedureID: procedure.ProcedureID, + DeviceId: procedure.DeviceID, + IsProcessing: true, + IsFinish: false, + } + return service.NewTaskService().SaveTaskStatusSync(db, &record) }) if err != nil { logx.Errorf("SendProcessParams update order and procedure status error:%v", err.Error()) ctx.FailWithMsg(ecode.DBErr, "鏇存敼宸ュ崟鐘舵�佸け璐�") 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("SendProcessParams: %v", err.Error()) - err = model.WithTransaction(func(db *gorm.DB) error { - err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusWaitProcess, procedure.Channel, "") - if err != nil { - return err - } - return nil - }) - ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC璇锋眰澶辫触锛岃妫�鏌LC閰嶇疆锛�") - return - } - plcConfig.CurrentTryTimes = 0 - err = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, procedure.Channel, order.Amount.IntPart()) - if err != nil { - ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC璇锋眰澶辫触锛岃妫�鏌LC閰嶇疆") - return - } - msg := &common.MsgTaskStatusUpdate{ - WorkOrderId: procedure.WorkOrderID, - ProcedureID: procedure.ProceduresInfo.ProcedureID, - DeviceId: procedure.ProceduresInfo.DeviceID, - IsProcessing: true, - IsFinish: false, - } - - caller := nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicTaskProcedureStatusUpdate, conf.Conf.NsqConf.NodeId), "") - err = caller.Send(msg) - if err != nil { - logx.Errorf("send task status update msg error:%v", err.Error()) - } service.TaskFlagSet(procedure.Channel) ctx.Ok() } @@ -388,7 +365,7 @@ } plcConfig, code := service.NewDevicePlcService().GetDevicePlc() - if code != ecode.OK || plcConfig.Id == 0 { + if code != ecode.OK || plcConfig.ID == 0 { ctx.FailWithMsg(ecode.NeedConfirmedErr, "璇峰厛閰嶇疆PLC") return } -- Gitblit v1.8.0