| | |
| | | "apsClient/pkg/ecode" |
| | | "apsClient/pkg/logx" |
| | | "apsClient/service" |
| | | "apsClient/service/plc_address" |
| | | "errors" |
| | | "github.com/gin-gonic/gin" |
| | | "github.com/jinzhu/gorm" |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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 task.Procedure.Status != model.ProcedureStatusWaitProcess { |
| | | continue |
| | | } |
| | | if _, ok := flagMap[task.Channel]; !ok && !service.TaskFlagGet(conf.Conf.CurrentDeviceID, task.Channel) && task.Procedure.StartTime <= nowTs { |
| | | task.CanStarted = true |
| | | flagMap[task.Channel] = struct{}{} |
| | | } |
| | |
| | | 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 |
| | | } |
| | | } |
| | |
| | | return err |
| | | } |
| | | record := model.TaskStatusSync{ |
| | | WorkOrderId: procedure.WorkOrderID, |
| | | ProcedureID: procedure.ProcedureID, |
| | | DeviceId: procedure.DeviceID, |
| | | IsProcessing: false, |
| | | IsFinish: true, |
| | | WorkOrderId: procedure.WorkOrderID, |
| | | ProcedureID: procedure.ProcedureID, |
| | | DeviceId: procedure.DeviceID, |
| | | ProductProcedureID: procedure.ProductProcedureID, |
| | | IsProcessing: false, |
| | | IsFinish: true, |
| | | FinishedQuantity: procedure.FinishedQuantity, |
| | | } |
| | | return service.NewTaskService().SaveTaskStatusSync(db, &record) |
| | | }) |
| | |
| | | return |
| | | } |
| | | |
| | | service.TaskFlagUnset(procedure.Channel) |
| | | |
| | | service.TaskFlagUnset(procedure.DeviceID, procedure.Channel) |
| | | service.TaskEndTimeSet(procedure.DeviceID, procedure.Channel, time.Now().Unix()) //设置工序运行结束时间 |
| | | ctx.Ok() |
| | | } |
| | | |
| | |
| | | ctx.Fail(code) |
| | | return |
| | | } |
| | | if procedure.DeviceID != conf.Conf.CurrentDeviceID { |
| | | ctx.FailWithMsg(ecode.ParamsErr, "该任务不属于当前设备") |
| | | return |
| | | } |
| | | order, err := taskService.GetOrderByWorkOrderId(procedure.WorkOrderID) |
| | | if err != nil { |
| | | ctx.Fail(ecode.UnknownErr) |
| | |
| | | ctx.Ok() |
| | | return |
| | | } |
| | | processModel, err := taskService.GetProcessParams(procedure, order) |
| | | if err != nil || processModel == nil || processModel.ParamsMap == nil { |
| | | ctx.FailWithMsg(ecode.ParamsErr, "未获取到工艺参数,请在工艺模型库中上传!") |
| | | return |
| | | } |
| | | |
| | | var processModelNumber string |
| | | plcConfig, code := service.NewDevicePlcService().GetDevicePlc() |
| | | if code != ecode.OK || plcConfig.ID == 0 { |
| | | ctx.FailWithMsg(ecode.NeedConfirmedErr, "请先配置PLC") |
| | | return |
| | | if code == ecode.OK && plcConfig.ID != 0 && len(plcConfig.Details) > 0 { |
| | | plcConfig.MaxTryTimes = 2 |
| | | device, err := service.GetCurrentDevice() |
| | | if err != nil { |
| | | ctx.FailWithMsg(ecode.DBErr, err.Error()) |
| | | return |
| | | } |
| | | 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请求失败,请检查PLC配置!") |
| | | return |
| | | } |
| | | processModelNumber = processModel.Number |
| | | } |
| | | |
| | | fieldType := constvar.PlcStartAddressTypeTotalNumber |
| | | for _, pc := range plcConfig.Details { //如果有写入地址,优先往写入地址写入,没有的话往读取地址写入 |
| | | if pc.FieldName == constvar.PlcStartAddressTypeTotalNumberWrite && pc.Channel == procedure.Channel { |
| | | fieldType = constvar.PlcStartAddressTypeTotalNumberWrite |
| | | } |
| | | } |
| | | plcConfig.CurrentTryTimes = 0 |
| | | err = service.PlcWrite(plcConfig, fieldType, procedure.Channel, order.Amount.IntPart()) |
| | | if err != nil { |
| | | ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC请求失败,请检查PLC配置!") |
| | | return |
| | | } |
| | | } |
| | | plcConfig.MaxTryTimes = 2 |
| | | err = SendParams(processModel.ParamsMap, plcConfig) |
| | | if err != nil { |
| | | ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC请求失败,请检查PLC配置!") |
| | | return |
| | | } |
| | | plcConfig.CurrentTryTimes = 0 |
| | | err = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, procedure.Channel, order.Amount.IntPart()) |
| | | if err != nil { |
| | | ctx.FailWithMsg(ecode.NeedConfirmedErr, "PLC请求失败,请检查PLC配置!") |
| | | 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 |
| | | } |
| | |
| | | if err != nil { |
| | | return err |
| | | } |
| | | 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, |
| | | WorkOrderId: procedure.WorkOrderID, |
| | | ProcedureID: procedure.ProcedureID, |
| | | DeviceId: procedure.DeviceID, |
| | | ProductProcedureID: procedure.ProductProcedureID, |
| | | IsProcessing: true, |
| | | IsFinish: false, |
| | | } |
| | | return service.NewTaskService().SaveTaskStatusSync(db, &record) |
| | | }) |
| | |
| | | return |
| | | } |
| | | |
| | | service.TaskFlagSet(procedure.Channel) |
| | | service.TaskFlagSet(procedure.DeviceID, procedure.Channel, int(procedure.ID)) |
| | | service.TaskStartTimeSet(procedure.DeviceID, procedure.Channel, time.Now().Unix()) //设置工序运行开始时间 |
| | | service.TaskEndTimeSet(procedure.DeviceID, procedure.Channel, 0) //设置工序运行结束时间 |
| | | ctx.Ok() |
| | | } |
| | | |
| | |
| | | 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 |
| | | } |
| | | err := service.PlcWriteDirect(plcConfig, address, v) |
| | | err := service.PlcWriteDirect(plcConfig, v, &model.DevicePlcAddress{ |
| | | StartAddress: address, |
| | | }) |
| | | if err != nil { |
| | | plcConfig.CurrentErr = err |
| | | failedNumbers++ |
| | |
| | | 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{}{} |
| | | } |