From 9e3412941ea49942f651506657d90ab174a4329f Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期二, 17 十月 2023 17:10:36 +0800 Subject: [PATCH] 工单开始或结束时保存待同步任务 --- service/task.go | 5 + main.go | 1 crontask/cron_task.go | 1 model/task_status_sync.go | 213 ++++++++++++++++++++++++++++++++++++++++++ api/v1/task.go | 76 +++++++++----- 5 files changed, 267 insertions(+), 29 deletions(-) diff --git a/api/v1/task.go b/api/v1/task.go index 96a0b1a..c2b864c 100644 --- a/api/v1/task.go +++ b/api/v1/task.go @@ -213,9 +213,24 @@ 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 } @@ -263,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 { @@ -273,38 +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 - } + service.TaskFlagSet(procedure.Channel) ctx.Ok() } diff --git a/crontask/cron_task.go b/crontask/cron_task.go index e462c68..5668ea1 100644 --- a/crontask/cron_task.go +++ b/crontask/cron_task.go @@ -110,6 +110,7 @@ } func SyncTaskStatus() { + //todo } diff --git a/main.go b/main.go index bae163b..8c631f7 100644 --- a/main.go +++ b/main.go @@ -36,6 +36,7 @@ "process_model", "production_progress", "work_order", + "task_status_sync", } agent := serf.InitAgent("apsClient", syncTables, sqlitex.GetDB()) diff --git a/model/task_status_sync.go b/model/task_status_sync.go new file mode 100644 index 0000000..b873578 --- /dev/null +++ b/model/task_status_sync.go @@ -0,0 +1,213 @@ +package model + +import ( + "apsClient/pkg/sqlitex" + "fmt" + "github.com/jinzhu/gorm" +) + +type ( + // TaskStatusSync 浠诲姟鐘舵�佸悓姝� + TaskStatusSync struct { + gorm.Model + WorkOrderId string `json:"workOrderId"` //宸ュ崟缂栧彿 + ProcedureID string `json:"procedureId"` // 宸ュ簭缂栧彿 + DeviceId string `json:"deviceId"` //璁惧缂栧彿 + IsProcessing bool //鏄惁澶勭悊涓� + IsFinish bool //鏄惁瀹屾垚 + } + + TaskStatusSyncSearch struct { + TaskStatusSync + Order string + PageNum int + PageSize int + Orm *gorm.DB + } +) + +func (slf *TaskStatusSync) TableName() string { + return "task_status_sync" +} + +func NewTaskStatusSyncSearch(db *gorm.DB) *TaskStatusSyncSearch { + if db == nil { + db = sqlitex.GetDB() + } + return &TaskStatusSyncSearch{Orm: db} +} + +func (slf *TaskStatusSyncSearch) SetOrm(tx *gorm.DB) *TaskStatusSyncSearch { + slf.Orm = tx + return slf +} + +func (slf *TaskStatusSyncSearch) SetPage(page, size int) *TaskStatusSyncSearch { + slf.PageNum, slf.PageSize = page, size + return slf +} + +func (slf *TaskStatusSyncSearch) SetOrder(order string) *TaskStatusSyncSearch { + slf.Order = order + return slf +} + +func (slf *TaskStatusSyncSearch) SetID(id uint) *TaskStatusSyncSearch { + slf.ID = id + return slf +} + +func (slf *TaskStatusSyncSearch) build() *gorm.DB { + var db = slf.Orm.Table(slf.TableName()) + + if slf.ID != 0 { + db = db.Where("id = ?", slf.ID) + } + + if slf.Order != "" { + db = db.Order(slf.Order) + } + + return db +} + +// Create 鍗曟潯鎻掑叆 +func (slf *TaskStatusSyncSearch) Create(record *TaskStatusSync) error { + var db = slf.build() + + if err := db.Create(record).Error; err != nil { + return fmt.Errorf("create err: %v, record: %+v", err, record) + } + + return nil +} + +func (slf *TaskStatusSyncSearch) Save(record *TaskStatusSync) error { + var db = slf.build() + + if err := db.Updates(record).Error; err != nil { + return fmt.Errorf("create err: %v, record: %+v", err, record) + } + return nil +} + +func (slf *TaskStatusSyncSearch) UpdateByMap(upMap map[string]interface{}) error { + var ( + db = slf.build() + ) + + if err := db.Updates(upMap).Error; err != nil { + return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap) + } + + return nil +} + +func (slf *TaskStatusSyncSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error { + var ( + db = slf.Orm.Table(slf.TableName()).Where(query, args...) + ) + + if err := db.Updates(upMap).Error; err != nil { + return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap) + } + + return nil +} + +func (slf *TaskStatusSyncSearch) Delete() error { + var db = slf.build() + + if err := db.Unscoped().Delete(&TaskStatusSync{}).Error; err != nil { + return err + } + + return nil +} + +func (slf *TaskStatusSyncSearch) First() (*TaskStatusSync, error) { + var ( + record = new(TaskStatusSync) + db = slf.build() + ) + + if err := db.First(record).Error; err != nil { + return record, err + } + + return record, nil +} + +func (slf *TaskStatusSyncSearch) Find() ([]*TaskStatusSync, int64, error) { + var ( + records = make([]*TaskStatusSync, 0) + total int64 + db = slf.build() + ) + + if err := db.Count(&total).Error; err != nil { + return records, total, fmt.Errorf("find count err: %v", err) + } + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, total, fmt.Errorf("find records err: %v", err) + } + + return records, total, nil +} + +func (slf *TaskStatusSyncSearch) FindNotTotal() ([]*TaskStatusSync, error) { + var ( + records = make([]*TaskStatusSync, 0) + db = slf.build() + ) + + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, fmt.Errorf("find records err: %v", err) + } + + return records, nil +} + +// FindByQuery 鎸囧畾鏉′欢鏌ヨ. +func (slf *TaskStatusSyncSearch) FindByQuery(query string, args []interface{}) ([]*TaskStatusSync, int64, error) { + var ( + records = make([]*TaskStatusSync, 0) + total int64 + db = slf.Orm.Table(slf.TableName()).Where(query, args...) + ) + + if err := db.Count(&total).Error; err != nil { + return records, total, fmt.Errorf("find by query count err: %v", err) + } + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) + } + + return records, total, nil +} + +// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�. +func (slf *TaskStatusSyncSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*TaskStatusSync, error) { + var ( + records = make([]*TaskStatusSync, 0) + db = slf.Orm.Table(slf.TableName()).Where(query, args...) + ) + + if slf.PageNum*slf.PageSize > 0 { + db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) + } + if err := db.Find(&records).Error; err != nil { + return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) + } + + return records, nil +} diff --git a/service/task.go b/service/task.go index 468509e..8129ddf 100644 --- a/service/task.go +++ b/service/task.go @@ -186,3 +186,8 @@ SetStartTimeMin(nowTs). SetStatus(model.OrderStatusWaitProcess).First() } + +// SaveTaskStatusSync 淇濆瓨浠诲姟鍚屾淇℃伅 +func (slf TaskService) SaveTaskStatusSync(db *gorm.DB, record *model.TaskStatusSync) (err error) { + return model.NewTaskStatusSyncSearch(db).Create(record) +} -- Gitblit v1.8.0