From efec800478214f3a412f879d2b51c2968515995d Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期六, 25 十一月 2023 17:04:25 +0800 Subject: [PATCH] plc断开连接时获取工序最后一次报工数量作为加工数 --- api/v1/task.go | 68 +++++++++++++++++++++++----------- 1 files changed, 46 insertions(+), 22 deletions(-) diff --git a/api/v1/task.go b/api/v1/task.go index 26cfb2d..ec61f10 100644 --- a/api/v1/task.go +++ b/api/v1/task.go @@ -10,7 +10,6 @@ "apsClient/pkg/ecode" "apsClient/pkg/logx" "apsClient/service" - "apsClient/service/plc_address" "errors" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" @@ -78,7 +77,7 @@ taskMode = params.TaskMode } - taskResponse, code := service.NewTaskService().GetTask(params.DeviceID, params.Page, params.PageSize, taskMode, nil) //鍙栬繘琛屼腑鐨勬垨鏈紑濮嬬殑 + taskResponse, code := service.NewTaskService().GetTask(conf.Conf.CurrentDeviceID, params.Page, params.PageSize, taskMode, nil) //鍙栬繘琛屼腑鐨勬垨鏈紑濮嬬殑 if code != ecode.OK { ctx.Fail(code) return @@ -93,7 +92,7 @@ if existsChannel[int32(i)] { continue } - taskResponseTemp, code := service.NewTaskService().GetTask(params.DeviceID, params.Page, 1, constvar.TaskModeLastFinished, []int32{int32(i)}) //鍙栦笂涓�涓畬鎴愮殑 + taskResponseTemp, code := service.NewTaskService().GetTask(conf.Conf.CurrentDeviceID, params.Page, 1, constvar.TaskModeLastFinished, []int32{int32(i)}) //鍙栦笂涓�涓畬鎴愮殑 if code != ecode.OK { ctx.Fail(code) return @@ -109,7 +108,7 @@ nowTs := time.Now().Unix() flagMap := make(map[int32]struct{}, 0) for _, task := range taskResponse.Tasks { - if _, ok := flagMap[task.Channel]; !ok && !service.TaskFlagGet(task.Channel) && task.Procedure.StartTime <= nowTs { + if _, ok := flagMap[task.Channel]; !ok && !service.TaskFlagGet(conf.Conf.CurrentDeviceID, task.Channel) && task.Procedure.StartTime <= nowTs { task.CanStarted = true flagMap[task.Channel] = struct{}{} } @@ -154,14 +153,21 @@ 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 { + } + + if err != nil || processModel == nil || processModel.ParamsMap == nil { + device, err := service.GetCurrentDevice() + if err != nil { + ctx.FailWithMsg(ecode.UnknownErr, err.Error()) + return + } + if device.NeedSetProcessParams { ctx.FailWithMsg(ecode.ParamsErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟锛岃鍦ㄥ伐鑹烘ā鍨嬪簱涓笂浼狅紒") + return + } else { + ctx.OkWithDetailed(response.ProcessParamsResponse{}) return } } @@ -234,8 +240,8 @@ return } - service.TaskFlagUnset(procedure.Channel) - + service.TaskFlagUnset(conf.Conf.CurrentDeviceID, procedure.Channel) + service.TaskEndTimeSet(conf.Conf.CurrentDeviceID, procedure.Channel, time.Now().Unix()) //璁剧疆宸ュ簭杩愯缁撴潫鏃堕棿 ctx.Ok() } @@ -272,22 +278,34 @@ ctx.Ok() 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) + + device, err := service.GetCurrentDevice() if err != nil { - ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC璇锋眰澶辫触锛岃妫�鏌LC閰嶇疆锛�") + ctx.FailWithMsg(ecode.DBErr, err.Error()) return } + var processModelNumber string + if device.NeedSetProcessParams { + processModel, err := taskService.GetProcessParams(procedure, order) + if err != nil || processModel == nil || processModel.ParamsMap == nil { + ctx.FailWithMsg(ecode.ParamsErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟锛岃鍦ㄥ伐鑹烘ā鍨嬪簱涓笂浼狅紒") + return + } + err = SendParams(processModel.ParamsMap, plcConfig) + if err != nil { + ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC璇锋眰澶辫触锛岃妫�鏌LC閰嶇疆锛�") + return + } + processModelNumber = processModel.Number + } + plcConfig.CurrentTryTimes = 0 err = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, procedure.Channel, order.Amount.IntPart()) if err != nil { @@ -295,7 +313,7 @@ return } err = model.WithTransaction(func(db *gorm.DB) error { - err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusProcessing, procedure.Channel, processModel.Number) + err = taskService.UpdateProcedureStatusAndChannel(db, params.ProcedureId, model.ProcedureStatusProcessing, procedure.Channel, processModelNumber) if err != nil { return err } @@ -322,7 +340,9 @@ return } - service.TaskFlagSet(procedure.Channel) + service.TaskFlagSet(conf.Conf.CurrentDeviceID, procedure.Channel, int(procedure.ID)) + service.TaskStartTimeSet(conf.Conf.CurrentDeviceID, procedure.Channel, time.Now().Unix()) //璁剧疆宸ュ簭杩愯寮�濮嬫椂闂� + service.TaskEndTimeSet(conf.Conf.CurrentDeviceID, procedure.Channel, 0) //璁剧疆宸ュ簭杩愯缁撴潫鏃堕棿 ctx.Ok() } @@ -390,8 +410,12 @@ logx.Info("----------------寮�濮嬩笅鍙戝伐鑹哄弬鏁�-----------------") } var failedNumbers int + processModelAddress, err := service.GetProcessModelAddress(conf.Conf.CurrentDeviceID) + if err != nil { + return err + } for k, v := range paramsMap { - address, ok := plc_address.Get(k) + address, ok := processModelAddress[k] if !ok { logx.Errorf("miss param address, k:%v, v:%v", k, v) continue @@ -477,7 +501,7 @@ nowTs := time.Now().Unix() flagMap := make(map[int32]struct{}, 0) for _, task := range taskResponse.Tasks { - if _, ok := flagMap[task.Channel]; !ok && !service.TaskFlagGet(task.Channel) && task.Procedure.StartTime <= nowTs { + if _, ok := flagMap[task.Channel]; !ok && !service.TaskFlagGet(conf.Conf.CurrentDeviceID, task.Channel) && task.Procedure.StartTime <= nowTs { task.CanStarted = true flagMap[task.Channel] = struct{}{} } -- Gitblit v1.8.0