From c6173b62e0fea3116075d56692b73cc0bc624815 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期日, 27 八月 2023 00:54:56 +0800 Subject: [PATCH] 逻辑修改 --- api/v1/plc.go | 24 ------ service/task.go | 28 ++++-- nsq/msg_handler.go | 4 model/procedures.go | 15 +++ model/work_order.go | 24 +++++ api/v1/task.go | 96 +++++++---------------- 6 files changed, 84 insertions(+), 107 deletions(-) diff --git a/api/v1/plc.go b/api/v1/plc.go index 03a19ce..cba0bbd 100644 --- a/api/v1/plc.go +++ b/api/v1/plc.go @@ -5,8 +5,6 @@ "apsClient/model/response" _ "apsClient/model/response" "apsClient/pkg/contextx" - "apsClient/pkg/ecode" - "apsClient/pkg/safe" "apsClient/service" "github.com/gin-gonic/gin" "github.com/spf13/cast" @@ -44,27 +42,5 @@ if !ok { return } - - taskData, code := service.NewTaskService().GetTask() - if code != ecode.OK { - ctx.Fail(code) - return - } - - if taskData.Order == nil { - ctx.FailWithMsg(ecode.UnknownErr, "褰撳墠娌℃湁寰呯敓浜у伐鍗�") - return - } - - plcConfig, code := service.NewDevicePlcService().GetDevicePlc() - if code != ecode.OK { - ctx.FailWithMsg(ecode.UnknownErr, "璇峰厛閰嶇疆PLC") - return - } - - safe.Go(func() { - _ = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, taskData.Order.Amount.IntPart()) - }) - ctx.Ok() } diff --git a/api/v1/task.go b/api/v1/task.go index 901592e..c84a110 100644 --- a/api/v1/task.go +++ b/api/v1/task.go @@ -18,6 +18,7 @@ "errors" "fmt" "github.com/gin-gonic/gin" + "gorm.io/gorm" "time" ) @@ -35,7 +36,7 @@ return } var resp response.TaskCountdown - workOrder, err := service.NewTaskService().GetComingTask() + workOrder, err := service.NewTaskService().GetCurrentTask() if err == nil { seconds := workOrder.StartTime - time.Now().Unix() resp.CountDownHour = seconds / 3600 @@ -88,8 +89,8 @@ ctx.Fail(code) return } - if procedure.Status != model.ProcedureStatusUnFinished { - ctx.FailWithMsg(ecode.ParamsErr, "璇ュ伐搴忓凡缁撴潫") + if procedure.Status != model.ProcedureStatusWaitProcess { + ctx.FailWithMsg(ecode.ParamsErr, "璇ュ伐搴忕姸鎬佷笉鏄湭寮�濮�") return } @@ -98,19 +99,6 @@ ctx.Fail(ecode.UnknownErr) return } - //params := service.GetProcessModelParams{ - // WorkOrder: procedure.WorkOrderID, - // OrderId: procedure.OrderID, - // Product: order.ProductName, - // Procedure: procedure.ProceduresInfo.ProcedureName, - // Device: procedure.ProceduresInfo.DeviceName, - //} - //resp, err := service.ProcessModel{}.GetProcessModel(params) - //if err != nil { - // logx.Errorf("TaskStart GetProcessModel error: %v", err.Error()) - // ctx.FailWithMsg(ecode.UnknownErr, "鏈幏鍙栧埌宸ヨ壓鍙傛暟") - // return - //} caller := nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicProcessParamsRequest, conf.Conf.NsqConf.NodeId), fmt.Sprintf(constvar.NsqTopicProcessParamsResponse, conf.Conf.NsqConf.NodeId)) var result common.ResponseProcessParams @@ -170,7 +158,7 @@ ctx.Fail(code) return } - err := service.NewTaskService().UpdateProcedureStatus(id, model.ProcedureStatusFinished) + err := service.NewTaskService().UpdateProcedureStatus(nil, id, model.ProcedureStatusFinished) if err != nil { logx.Errorf("UpdateProcedureStatus err: %v", err.Error()) ctx.Fail(ecode.UnknownErr) @@ -228,64 +216,40 @@ return } - //fmt.Println("----------------寮�濮嬩笅鍙戝伐鑹哄弬鏁�-----------------") - //for k, v := range resp.ParamsMap { - // fmt.Println(fmt.Sprintf("%v : %v", k, v)) - // time.Sleep(time.Millisecond * 300) - //} - //fmt.Println("----------------涓嬪彂宸ヨ壓鍙傛暟瀹屾瘯-----------------") - - //err = SendParams(resp.ParamsMap) - //if err != nil { - // logx.Errorf("SendProcessParams: %v", err.Error()) - // ctx.Fail(ecode.UnknownErr) - // return - //} + err = model.WithTransaction(func(db *gorm.DB) error { + err = service.NewTaskService().UpdateProcedureStatus(db, id, model.ProcedureStatusProcessing) + if err != nil { + return err + } + err = service.NewTaskService().UpdateOrderStatus(db, order.ID, model.OrderStatusProcessing) + if err != nil { + return err + } + return nil + }) + if err != nil { + logx.Errorf("SendProcessParams update order and procedure status error:%v", err.Error()) + ctx.FailWithMsg(ecode.DBErr, "鏇存敼宸ュ崟鐘舵�佸け璐�") + return + } safe.Go(func() { - err = SendParams2(result.ParamsMap, 0) + err = SendParams(result.ParamsMap, 0) if err != nil { logx.Errorf("SendProcessParams: %v", err.Error()) return } + plcConfig, code := service.NewDevicePlcService().GetDevicePlc() + if code != ecode.OK { + logx.Errorf("get plcConfig err: %v", err.Error()) + return + } + _ = service.PlcWrite(plcConfig, constvar.PlcStartAddressTypeTotalNumber, order.Amount.IntPart()) }) ctx.Ok() } -func SendParams(paramsMap map[string]interface{}) error { - if len(paramsMap) == 0 { - return errors.New("empty params") - } - plcAddressMap := make(map[string]*int, len(conf.Conf.PLCAddresses)) - for _, item := range conf.Conf.PLCAddresses { - plcAddressMap[item.FieldName] = &item.Address - } - - plcConfig, code := service.NewDevicePlcService().GetDevicePlc() - if code != ecode.OK { - return errors.New("璇峰厛閰嶇疆PLC") - } - conn, err := plc.GetModbusConnection(fmt.Sprintf("%s:%v", plcConfig.Address, plcConfig.Port)) - if err != nil { - return errors.New(fmt.Sprintf("杩炴帴plc澶辫触: %v", err.Error())) - } - - logx.Info("----------------寮�濮嬩笅鍙戝伐鑹哄弬鏁�-----------------") - for k, v := range paramsMap { - if plcAddressMap[k] != nil { - result, err := plc.WriteHoldingRegister(conn, *plcAddressMap[k], v) - if err != nil { - logx.Errorf("WriteHoldingRegister err:%v, address: %v, key: %v value: %v", err.Error(), *plcAddressMap[k], k, v) - } else { - logx.Infof("WriteHoldingRegister ok: key: %v, value: %v, result: %v", k, v, result) - } - } - } - logx.Info("----------------涓嬪彂宸ヨ壓鍙傛暟瀹屾瘯-----------------") - return nil -} - -func SendParams2(paramsMap map[string]interface{}, tryTimes int) error { +func SendParams(paramsMap map[string]interface{}, tryTimes int) error { if len(paramsMap) == 0 { return errors.New("empty params") } @@ -326,7 +290,7 @@ return err } tryTimes++ - return SendParams2(paramsMap, tryTimes) + return SendParams(paramsMap, tryTimes) } logx.Info("----------------涓嬪彂宸ヨ壓鍙傛暟瀹屾瘯-----------------") return nil diff --git a/model/procedures.go b/model/procedures.go index a1fb11b..48534b3 100644 --- a/model/procedures.go +++ b/model/procedures.go @@ -30,14 +30,16 @@ Orm *gorm.DB Preload bool StartTimeMax int64 + StatusNot ProcedureStatus } ) type ProcedureStatus int const ( - ProcedureStatusUnFinished ProcedureStatus = 1 - ProcedureStatusFinished ProcedureStatus = 2 + ProcedureStatusWaitProcess ProcedureStatus = 1 + ProcedureStatusProcessing ProcedureStatus = 2 + ProcedureStatusFinished ProcedureStatus = 3 ) func (slf *Procedures) TableName() string { @@ -95,6 +97,11 @@ return slf } +func (slf *ProceduresSearch) SetStatusNot(status ProcedureStatus) *ProceduresSearch { + slf.StatusNot = status + return slf +} + func (slf *ProceduresSearch) SetPreload(preload bool) *ProceduresSearch { slf.Preload = preload return slf @@ -127,6 +134,10 @@ db = db.Where("status = ?", slf.Status) } + if slf.StatusNot != 0 { + db = db.Where("status != ?", slf.StatusNot) + } + return db } diff --git a/model/work_order.go b/model/work_order.go index be00fec..0626042 100644 --- a/model/work_order.go +++ b/model/work_order.go @@ -23,6 +23,7 @@ StartTime int64 `gorm:"comment:璁″垝寮�濮嬫椂闂�" json:"startTime"` EndTime int64 `gorm:"comment:璁″垝缁撴潫鏃堕棿" json:"endTime"` Status OrderStatus + StatusList []OrderStatus } OrderSearch struct { @@ -40,8 +41,9 @@ type OrderStatus int const ( - OrderStatusUnFinished OrderStatus = 1 - OrderStatusFinished OrderStatus = 2 + OrderStatusWaitProcess OrderStatus = 1 + OrderStatusProcessing OrderStatus = 2 + OrderStatusFinished OrderStatus = 3 ) func (slf *Order) TableName() string { @@ -84,6 +86,11 @@ return slf } +func (slf *OrderSearch) SetStatusList(statusList []OrderStatus) *OrderSearch { + slf.StatusList = statusList + return slf +} + func (slf *OrderSearch) SetPreload(preload bool) *OrderSearch { slf.Preload = preload return slf @@ -94,11 +101,20 @@ return slf } +func (slf *OrderSearch) SetId(id uint) *OrderSearch { + slf.ID = id + return slf +} + func (slf *OrderSearch) build() *gorm.DB { var db = slf.Orm.Model(&Order{}) if slf.OrderBy != "" { db = db.Order(slf.OrderBy) + } + + if slf.ID != 0 { + db = db.Where("id = ?", slf.ID) } if slf.WorkOrderID != "" { @@ -109,6 +125,10 @@ db = db.Where("status = ?", slf.Status) } + if len(slf.StatusList) != 0 { + db = db.Where("status != ?", slf.StatusList) + } + if slf.StartTimeMax != 0 { db = db.Where("start_time <= ?", slf.StartTimeMax) } diff --git a/nsq/msg_handler.go b/nsq/msg_handler.go index 910f123..be6dea7 100644 --- a/nsq/msg_handler.go +++ b/nsq/msg_handler.go @@ -50,7 +50,7 @@ if err == gorm.ErrRecordNotFound { var orderRecord model.Order err = structx.AssignTo(task.WorkOrder, &orderRecord) - orderRecord.Status = model.OrderStatusUnFinished + orderRecord.Status = model.OrderStatusWaitProcess if err != nil { logx.Errorf(" structx.Assign task.Order to orderRecord err: %v", err.Error()) return err @@ -64,7 +64,7 @@ EndTime: procedure.EndTime, WorkOrderID: task.WorkOrder.WorkOrderID, OrderID: task.WorkOrder.OrderID, - Status: model.ProcedureStatusUnFinished, + Status: model.ProcedureStatusWaitProcess, } procedureData, err := json.Marshal(procedure) procedureRecord.ProcedureData = string(procedureData) diff --git a/service/task.go b/service/task.go index 5b7be1c..ac5fdca 100644 --- a/service/task.go +++ b/service/task.go @@ -19,9 +19,9 @@ func (slf TaskService) GetTask() (taskData *response.TaskData, code int) { nowTs := time.Now().Unix() orderSearch := model.NewOrderSearch(nil) - orderSearch.SetOrder("created_at asc"). - SetStartTimeMax(nowTs). - SetStatus(model.OrderStatusUnFinished) + orderSearch.SetOrder("start_time asc"). + SetStartTimeMin(nowTs). + SetStatusList([]model.OrderStatus{model.OrderStatusWaitProcess, model.OrderStatusProcessing}) var ( err error order *model.Order @@ -34,10 +34,10 @@ if err != nil { return nil, ecode.DBErr } - procedure, err := model.NewProceduresSearch(nil). + procedure, err := model.NewProceduresSearch(nil).SetOrder("start_time asc"). SetWorkOrderId(order.WorkOrderID). SetStartTimeMax(nowTs). - SetStatus(model.ProcedureStatusUnFinished). + SetStatusNot(model.ProcedureStatusFinished). First() if err == gorm.ErrRecordNotFound { //璇ヨ鍗曟湰璁惧鍏ㄩ儴宸ュ簭瀹屾垚锛屾妸璁㈠崟缃负瀹屾垚鐘舵�侊紙鍙槸瀵规湰璁惧瀹屾垚锛� err = nil @@ -66,8 +66,14 @@ return procedure, ecode.OK } -func (slf TaskService) UpdateProcedureStatus(id int, status model.ProcedureStatus) error { - return model.NewProceduresSearch(nil).SetId(id).UpdateByMap(map[string]interface{}{ +func (slf TaskService) UpdateProcedureStatus(db *gorm.DB, id int, status model.ProcedureStatus) error { + return model.NewProceduresSearch(db).SetId(id).UpdateByMap(map[string]interface{}{ + "status": status, + }) +} + +func (slf TaskService) UpdateOrderStatus(db *gorm.DB, id uint, status model.OrderStatus) error { + return model.NewOrderSearch(db).SetId(id).UpdateByMap(map[string]interface{}{ "status": status, }) } @@ -76,11 +82,11 @@ return model.NewOrderSearch(nil).SetWorkOrderId(workOrderId).First() } -// GetComingTask 鑾峰彇鏃堕棿鏈埌鐨勬渶鏃╀换鍔� -func (slf TaskService) GetComingTask() (workOrder *model.Order, err error) { +// GetCurrentTask 鑾峰彇寰呭畬鎴愭垨杩涜涓殑浠诲姟锛� 姣忎釜宸ュ崟鍙湁涓�涓伐搴� +func (slf TaskService) GetCurrentTask() (workOrder *model.Order, err error) { nowTs := time.Now().Unix() orderSearch := model.NewOrderSearch(nil) - return orderSearch.SetOrder("created_at asc"). + return orderSearch.SetOrder("start_time asc"). SetStartTimeMin(nowTs). - SetStatus(model.OrderStatusUnFinished).First() + SetStatusList([]model.OrderStatus{model.OrderStatusWaitProcess, model.OrderStatusProcessing}).First() } -- Gitblit v1.8.0