zhangqian
2023-10-17 9e3412941ea49942f651506657d90ab174a4329f
工单开始或结束时保存待同步任务
1个文件已添加
4个文件已修改
296 ■■■■■ 已修改文件
api/v1/task.go 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
crontask/cron_task.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/task_status_sync.go 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/task.go 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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请求失败,请检查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)
        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请求失败,请检查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
    }
    service.TaskFlagSet(procedure.Channel)
    ctx.Ok()
}
crontask/cron_task.go
@@ -110,6 +110,7 @@
}
func SyncTaskStatus() {
    //todo
}
main.go
@@ -36,6 +36,7 @@
        "process_model",
        "production_progress",
        "work_order",
        "task_status_sync",
    }
    agent := serf.InitAgent("apsClient", syncTables, sqlitex.GetDB())
model/task_status_sync.go
New file
@@ -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
}
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)
}