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