zhangqian
2023-11-25 8b88bcc370b0b2e22fbbf872c2c460fe2a208181
报工添加和列表查询接口
3个文件已添加
7个文件已修改
943 ■■■■■ 已修改文件
api/v1/report_work.go 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/docs.go 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.json 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.yaml 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/index.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/report_work.go 330 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/request/common.go 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
router/index.go 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/report_work.go 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/report_work.go
New file
@@ -0,0 +1,56 @@
package v1
import (
    "apsClient/model/request"
    _ "apsClient/model/response"
    "apsClient/pkg/contextx"
    "apsClient/pkg/ecode"
    "apsClient/pkg/logx"
    "apsClient/service"
    "github.com/gin-gonic/gin"
)
type ReportWorkApi struct{}
// Report
// @Tags      报工
// @Summary   上报
// @Produce   application/json
// @Param     object  body    request.ReportWork true  "查询参数"
// @Success   200   {object}  contextx.Response{}  "成功"
// @Router    /v1/reportWork/report [post]
func (slf *ReportWorkApi) Report(c *gin.Context) {
    var params request.ReportWork
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    err := service.AddReportWork(params)
    if err != nil {
        logx.Errorf("ReportWork err:%v", err)
        ctx.Fail(ecode.DBErr)
        return
    }
    ctx.Ok()
}
// ReportList
// @Tags      报工
// @Summary   报工列表
// @Produce   application/json
// @Param     object  body    request.ReportWorkList true  "查询参数"
// @Success   200   {object}  contextx.ResponseList{data=[]model.ReportWork}  "成功"
// @Router    /v1/reportWork/list [get]
func (slf *ReportWorkApi) ReportList(c *gin.Context) {
    var params request.ReportWorkList
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    list, total, err := service.ReportWorkList(params.ProcedureId, params.Page, params.PageSize)
    if err != nil {
        ctx.Fail(ecode.DBErr)
        return
    }
    ctx.ResultList(list, total)
}
docs/docs.go
@@ -481,6 +481,81 @@
                }
            }
        },
        "/v1/reportWork/list": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "报工"
                ],
                "summary": "报工列表",
                "parameters": [
                    {
                        "description": "查询参数",
                        "name": "object",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/request.ReportWorkList"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "成功",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/contextx.ResponseList"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/model.ReportWork"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        },
        "/v1/reportWork/report": {
            "post": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "报工"
                ],
                "summary": "上报",
                "parameters": [
                    {
                        "description": "查询参数",
                        "name": "object",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/request.ReportWork"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "成功",
                        "schema": {
                            "$ref": "#/definitions/contextx.Response"
                        }
                    }
                }
            }
        },
        "/v1/system/problemList": {
            "get": {
                "produces": [
@@ -1059,6 +1134,21 @@
                }
            }
        },
        "contextx.ResponseList": {
            "type": "object",
            "properties": {
                "code": {
                    "type": "integer"
                },
                "data": {},
                "msg": {
                    "type": "string"
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "model.DevicePlc": {
            "type": "object",
            "properties": {
@@ -1434,6 +1524,57 @@
                }
            }
        },
        "model.ReportWork": {
            "type": "object",
            "properties": {
                "channel": {
                    "description": "通道",
                    "type": "integer"
                },
                "createdAt": {
                    "type": "string"
                },
                "deletedAt": {
                    "type": "string"
                },
                "deviceId": {
                    "type": "string"
                },
                "deviceName": {
                    "type": "string"
                },
                "endTime": {
                    "type": "integer"
                },
                "id": {
                    "type": "integer"
                },
                "procedureId": {
                    "type": "string"
                },
                "proceduresId": {
                    "description": "procedures表的id",
                    "type": "integer"
                },
                "startTime": {
                    "type": "integer"
                },
                "updatedAt": {
                    "type": "string"
                },
                "workOrderId": {
                    "type": "string"
                },
                "workerID": {
                    "description": "报工人id",
                    "type": "string"
                },
                "workerName": {
                    "description": "报工人姓名",
                    "type": "string"
                }
            }
        },
        "problem.CheckResult": {
            "type": "object",
            "properties": {
@@ -1498,6 +1639,48 @@
                "QueryTypeFinished"
            ]
        },
        "request.ReportWork": {
            "type": "object",
            "required": [
                "procedureId",
                "reportAmount",
                "workerID"
            ],
            "properties": {
                "procedureId": {
                    "description": "工序id",
                    "type": "integer"
                },
                "reportAmount": {
                    "description": "报工数量",
                    "type": "integer"
                },
                "workerID": {
                    "description": "报告者id",
                    "type": "string"
                }
            }
        },
        "request.ReportWorkList": {
            "type": "object",
            "required": [
                "procedureId"
            ],
            "properties": {
                "page": {
                    "description": "页码",
                    "type": "integer"
                },
                "pageSize": {
                    "description": "每页大小",
                    "type": "integer"
                },
                "procedureId": {
                    "description": "工序id",
                    "type": "integer"
                }
            }
        },
        "request.SendProcessParams": {
            "type": "object",
            "required": [
docs/swagger.json
@@ -469,6 +469,81 @@
                }
            }
        },
        "/v1/reportWork/list": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "报工"
                ],
                "summary": "报工列表",
                "parameters": [
                    {
                        "description": "查询参数",
                        "name": "object",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/request.ReportWorkList"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "成功",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/contextx.ResponseList"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/model.ReportWork"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        },
        "/v1/reportWork/report": {
            "post": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "报工"
                ],
                "summary": "上报",
                "parameters": [
                    {
                        "description": "查询参数",
                        "name": "object",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/request.ReportWork"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "成功",
                        "schema": {
                            "$ref": "#/definitions/contextx.Response"
                        }
                    }
                }
            }
        },
        "/v1/system/problemList": {
            "get": {
                "produces": [
@@ -1047,6 +1122,21 @@
                }
            }
        },
        "contextx.ResponseList": {
            "type": "object",
            "properties": {
                "code": {
                    "type": "integer"
                },
                "data": {},
                "msg": {
                    "type": "string"
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "model.DevicePlc": {
            "type": "object",
            "properties": {
@@ -1422,6 +1512,57 @@
                }
            }
        },
        "model.ReportWork": {
            "type": "object",
            "properties": {
                "channel": {
                    "description": "通道",
                    "type": "integer"
                },
                "createdAt": {
                    "type": "string"
                },
                "deletedAt": {
                    "type": "string"
                },
                "deviceId": {
                    "type": "string"
                },
                "deviceName": {
                    "type": "string"
                },
                "endTime": {
                    "type": "integer"
                },
                "id": {
                    "type": "integer"
                },
                "procedureId": {
                    "type": "string"
                },
                "proceduresId": {
                    "description": "procedures表的id",
                    "type": "integer"
                },
                "startTime": {
                    "type": "integer"
                },
                "updatedAt": {
                    "type": "string"
                },
                "workOrderId": {
                    "type": "string"
                },
                "workerID": {
                    "description": "报工人id",
                    "type": "string"
                },
                "workerName": {
                    "description": "报工人姓名",
                    "type": "string"
                }
            }
        },
        "problem.CheckResult": {
            "type": "object",
            "properties": {
@@ -1486,6 +1627,48 @@
                "QueryTypeFinished"
            ]
        },
        "request.ReportWork": {
            "type": "object",
            "required": [
                "procedureId",
                "reportAmount",
                "workerID"
            ],
            "properties": {
                "procedureId": {
                    "description": "工序id",
                    "type": "integer"
                },
                "reportAmount": {
                    "description": "报工数量",
                    "type": "integer"
                },
                "workerID": {
                    "description": "报告者id",
                    "type": "string"
                }
            }
        },
        "request.ReportWorkList": {
            "type": "object",
            "required": [
                "procedureId"
            ],
            "properties": {
                "page": {
                    "description": "页码",
                    "type": "integer"
                },
                "pageSize": {
                    "description": "每页大小",
                    "type": "integer"
                },
                "procedureId": {
                    "description": "工序id",
                    "type": "integer"
                }
            }
        },
        "request.SendProcessParams": {
            "type": "object",
            "required": [
docs/swagger.yaml
@@ -180,6 +180,16 @@
      msg:
        type: string
    type: object
  contextx.ResponseList:
    properties:
      code:
        type: integer
      data: {}
      msg:
        type: string
      total:
        type: integer
    type: object
  model.DevicePlc:
    properties:
      address:
@@ -434,6 +444,41 @@
      updatedAt:
        type: string
    type: object
  model.ReportWork:
    properties:
      channel:
        description: 通道
        type: integer
      createdAt:
        type: string
      deletedAt:
        type: string
      deviceId:
        type: string
      deviceName:
        type: string
      endTime:
        type: integer
      id:
        type: integer
      procedureId:
        type: string
      proceduresId:
        description: procedures表的id
        type: integer
      startTime:
        type: integer
      updatedAt:
        type: string
      workOrderId:
        type: string
      workerID:
        description: 报工人id
        type: string
      workerName:
        description: 报工人姓名
        type: string
    type: object
  problem.CheckResult:
    properties:
      checkResult:
@@ -477,6 +522,36 @@
    - QueryTypeUnFinish
    - QueryTypeToday
    - QueryTypeFinished
  request.ReportWork:
    properties:
      procedureId:
        description: 工序id
        type: integer
      reportAmount:
        description: 报工数量
        type: integer
      workerID:
        description: 报告者id
        type: string
    required:
    - procedureId
    - reportAmount
    - workerID
    type: object
  request.ReportWorkList:
    properties:
      page:
        description: 页码
        type: integer
      pageSize:
        description: 每页大小
        type: integer
      procedureId:
        description: 工序id
        type: integer
    required:
    - procedureId
    type: object
  request.SendProcessParams:
    properties:
      procedureId:
@@ -970,6 +1045,51 @@
      summary: 获取工艺模型列表
      tags:
      - 工艺模型
  /v1/reportWork/list:
    get:
      parameters:
      - description: 查询参数
        in: body
        name: object
        required: true
        schema:
          $ref: '#/definitions/request.ReportWorkList'
      produces:
      - application/json
      responses:
        "200":
          description: 成功
          schema:
            allOf:
            - $ref: '#/definitions/contextx.ResponseList'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/model.ReportWork'
                  type: array
              type: object
      summary: 报工列表
      tags:
      - 报工
  /v1/reportWork/report:
    post:
      parameters:
      - description: 查询参数
        in: body
        name: object
        required: true
        schema:
          $ref: '#/definitions/request.ReportWork'
      produces:
      - application/json
      responses:
        "200":
          description: 成功
          schema:
            $ref: '#/definitions/contextx.Response'
      summary: 上报
      tags:
      - 报工
  /v1/system/problemList:
    get:
      produces:
main.go
@@ -46,6 +46,7 @@
        "system_status",
        "process_model_plc_address",
        "reports_to_cloud",
        "report_work",
    }
    agent := serf.InitAgent("apsClient", syncTables, sqlitex.GetDB())
model/index.go
@@ -32,6 +32,7 @@
        SystemStatus{},
        ProcessModelPlcAddress{},
        ReportsToCloud{},
        ReportWork{},
    )
}
model/report_work.go
New file
@@ -0,0 +1,330 @@
package model
import (
    "apsClient/pkg/sqlitex"
    "fmt"
    "github.com/jinzhu/gorm"
)
type (
    ReportWork struct {
        gorm.Model
        ProceduresID uint   `gorm:"index;type:varchar(191)" json:"proceduresId"` //procedures表的id
        WorkOrderID  string `gorm:"index;type:varchar(191);not null" json:"workOrderId"`
        DeviceID     string `gorm:"index;type:varchar(191)" json:"deviceId"`
        DeviceName   string `gorm:"index;type:varchar(191)" json:"deviceName"`
        ProcedureID  string `gorm:"index;type:varchar(191)" json:"procedureId"`
        Channel      int32  `gorm:"index;" json:"channel"` //通道
        StartTime    int64  `json:"startTime"`
        EndTime      int64  `json:"endTime"`
        WorkerID     string `json:"workerID"`   //报工人id
        WorkerName   string `json:"workerName"` //报工人姓名
    }
    ReportWorkSearch struct {
        ReportWork
        Order        string
        PageNum      int
        PageSize     int
        Orm          *gorm.DB
        Preload      bool
        ProcedureIds []string
        Channels     []int32
        Offset       int
        Limit        int
    }
)
func (slf *ReportWork) TableName() string {
    return "report_work"
}
func NewReportWorkSearch(db *gorm.DB) *ReportWorkSearch {
    if db == nil {
        db = sqlitex.GetDB()
    }
    return &ReportWorkSearch{Orm: db}
}
func (slf *ReportWorkSearch) SetOrm(tx *gorm.DB) *ReportWorkSearch {
    slf.Orm = tx
    return slf
}
func (slf *ReportWorkSearch) SetPage(page, size int) *ReportWorkSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
}
func (slf *ReportWorkSearch) SetOffset(offset, limit int) *ReportWorkSearch {
    slf.Offset, slf.Limit = offset, limit
    return slf
}
func (slf *ReportWorkSearch) SetOrder(order string) *ReportWorkSearch {
    slf.Order = order
    return slf
}
func (slf *ReportWorkSearch) SetWorkOrderId(orderId string) *ReportWorkSearch {
    slf.WorkOrderID = orderId
    return slf
}
func (slf *ReportWorkSearch) SetProceduresId(id uint) *ReportWorkSearch {
    slf.ProceduresID = id
    return slf
}
func (slf *ReportWorkSearch) SetId(id uint) *ReportWorkSearch {
    slf.ID = id
    return slf
}
func (slf *ReportWorkSearch) SetProcedureIds(procedureIds []string) *ReportWorkSearch {
    slf.ProcedureIds = procedureIds
    return slf
}
func (slf *ReportWorkSearch) SetDeviceId(id string) *ReportWorkSearch {
    slf.DeviceID = id
    return slf
}
func (slf *ReportWorkSearch) SetPreload(preload bool) *ReportWorkSearch {
    slf.Preload = preload
    return slf
}
func (slf *ReportWorkSearch) SetChannels(channels []int32) *ReportWorkSearch {
    slf.Channels = channels
    return slf
}
func (slf *ReportWorkSearch) SetChannel(channel int32) *ReportWorkSearch {
    slf.Channel = channel
    return slf
}
func (slf *ReportWorkSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&ReportWork{})
    if slf.Order != "" {
        db = db.Order(slf.Order)
    }
    if slf.ID != 0 {
        db = db.Where("id = ?", slf.ID)
    }
    if slf.WorkOrderID != "" {
        db = db.Where("work_order_id = ?", slf.WorkOrderID)
    }
    if slf.DeviceID != "" {
        db = db.Where("device_id = ?", slf.DeviceID)
    }
    if slf.Preload {
        db = db.Preload("InputMaterials").Preload("OutputMaterials")
    }
    if len(slf.ProcedureIds) > 0 {
        db = db.Where("procedure_id IN (?)", slf.ProcedureIds)
    }
    if slf.ProcedureID != "" {
        db = db.Where("procedure_id = ?", slf.ProcedureID)
    }
    if len(slf.Channels) > 0 {
        db = db.Where("channel IN (?)", slf.Channels)
    }
    return db
}
// Create 单条插入
func (slf *ReportWorkSearch) Create(record *ReportWork) 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
}
// CreateBatch 批量插入
func (slf *ReportWorkSearch) CreateBatch(records []*ReportWork) error {
    var db = slf.build()
    for _, record := range records {
        if err := db.Create(record).Error; err != nil {
            return fmt.Errorf("create batch err: %v, records: %+v", err, records)
        }
    }
    return nil
}
func (slf *ReportWorkSearch) Upsert(record *ReportWork) error {
    var db = slf.build()
    old, err := slf.First()
    if err != gorm.ErrRecordNotFound && old.ID != 0 {
        record.ID = old.ID
        err = db.Save(&record).Error
    } else {
        err = db.Create(&record).Error
    }
    if err != nil {
        return fmt.Errorf("save err: %v, record: %+v", err, record)
    }
    return nil
}
func (slf *ReportWorkSearch) Updates(record *ReportWork) error {
    var db = slf.build()
    if err := db.Updates(record).Error; err != nil {
        return fmt.Errorf("save err: %v, record: %+v", err, record)
    }
    return nil
}
func (slf *ReportWorkSearch) 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 *ReportWorkSearch) 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 *ReportWorkSearch) Delete() error {
    var db = slf.build()
    if err := db.Unscoped().Delete(&ReportWork{}).Error; err != nil {
        return err
    }
    return nil
}
func (slf *ReportWorkSearch) First() (*ReportWork, error) {
    var (
        record = new(ReportWork)
        db     = slf.build()
    )
    if err := db.First(record).Error; err != nil {
        return record, err
    }
    return record, nil
}
func (slf *ReportWorkSearch) Find() ([]*ReportWork, int64, error) {
    var (
        records = make([]*ReportWork, 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 slf.Limit > 0 {
        db = db.Offset(slf.Offset).Limit(slf.Limit)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, total, fmt.Errorf("find records err: %v", err)
    }
    return records, total, nil
}
func (slf *ReportWorkSearch) Count() (int64, error) {
    var (
        total int64
        db    = slf.build()
    )
    if err := db.Count(&total).Error; err != nil {
        return total, fmt.Errorf("find count err: %v", err)
    }
    return total, nil
}
func (slf *ReportWorkSearch) FindNotTotal() ([]*ReportWork, error) {
    var (
        records = make([]*ReportWork, 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 *ReportWorkSearch) FindByQuery(query string, args []interface{}) ([]*ReportWork, int64, error) {
    var (
        records = make([]*ReportWork, 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 *ReportWorkSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*ReportWork, error) {
    var (
        records = make([]*ReportWork, 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
}
model/request/common.go
@@ -16,3 +16,14 @@
type DeviceConfig struct {
    NeedSetProcessParams bool `json:"needSetProcessParams,omitempty"` //是否需要设置工艺参数
}
type ReportWork struct {
    ProcedureId  uint   `json:"procedureId" binding:"required"`   //工序id
    ReportAmount int    `json:"reportAmount"  binding:"required"` //报工数量
    WorkerID     string `json:"workerID"  binding:"required"`     //报告者id
}
type ReportWorkList struct {
    PageInfo
    ProcedureId uint `json:"procedureId" binding:"required"` //工序id
}
router/index.go
@@ -86,6 +86,13 @@
        systemGroup.GET("problemList", systemApi.ProblemList) // 问题诊断列表
    }
    reportWorkApi := new(v1.ReportWorkApi)
    reportWorkGroup := v1Group.Group("reportWork")
    {
        reportWorkGroup.GET("report", reportWorkApi.Report)   // 报工
        reportWorkGroup.GET("list", reportWorkApi.ReportList) // 报工列表
    }
    //eventsApi := new(v1.EventsApi)
    //eventsGroup := v1Group.Group("events")
    //{
service/report_work.go
New file
@@ -0,0 +1,51 @@
package service
import (
    "apsClient/conf"
    "apsClient/model"
    "apsClient/model/request"
    "errors"
    "time"
)
func ReportWorkList(procedureId uint, page, pageSize int) (list []*model.ReportWork, total int64, err error) {
    return model.NewReportWorkSearch(nil).SetProceduresId(procedureId).SetPage(page, pageSize).SetDeviceId(conf.Conf.CurrentDeviceID).SetOrder("id desc").Find()
}
func AddReportWork(params request.ReportWork) (err error) {
    procedure, err := model.NewProceduresSearch(nil).SetId(params.ProcedureId).First()
    if err != nil {
        return err
    }
    nowTs := time.Now().Unix()
    var startTs int64
    var workerName string
    for _, worker := range procedure.ProceduresInfo.Workers {
        if params.WorkerID == worker.WorkerID {
            workerName = worker.WorkerName
            if worker.StartTime < nowTs {
                startTs = worker.StartTime
            }
        }
    }
    if workerName == "" {
        return errors.New("没有找到当前值班人员")
    }
    if startTs == 0 {
        return errors.New("没有找到当前值班人员开始时间")
    }
    record := &model.ReportWork{
        ProceduresID: params.ProcedureId,
        WorkOrderID:  procedure.WorkOrderID,
        DeviceID:     procedure.DeviceID,
        DeviceName:   procedure.ProceduresInfo.DeviceName,
        ProcedureID:  procedure.ProcedureID,
        Channel:      procedure.Channel,
        StartTime:    startTs,
        EndTime:      nowTs,
        WorkerID:     params.WorkerID,
        WorkerName:   workerName,
    }
    return model.NewReportWorkSearch(nil).Create(record)
}