From 8b88bcc370b0b2e22fbbf872c2c460fe2a208181 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期六, 25 十一月 2023 16:44:23 +0800 Subject: [PATCH] 报工添加和列表查询接口 --- model/report_work.go | 330 ++++++++++++++++++++ service/report_work.go | 51 +++ model/request/common.go | 11 model/index.go | 1 router/index.go | 7 main.go | 1 api/v1/report_work.go | 56 +++ docs/swagger.yaml | 120 +++++++ docs/docs.go | 183 +++++++++++ docs/swagger.json | 183 +++++++++++ 10 files changed, 943 insertions(+), 0 deletions(-) diff --git a/api/v1/report_work.go b/api/v1/report_work.go new file mode 100644 index 0000000..499423e --- /dev/null +++ b/api/v1/report_work.go @@ -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, ¶ms) + 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, ¶ms) + 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) +} diff --git a/docs/docs.go b/docs/docs.go index 35c052f..f04605d 100644 --- a/docs/docs.go +++ b/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": "鎶ュ伐浜篿d", + "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": "鎶ュ憡鑰卛d", + "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": [ diff --git a/docs/swagger.json b/docs/swagger.json index 5d88d7d..dbe1f85 100644 --- a/docs/swagger.json +++ b/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": "鎶ュ伐浜篿d", + "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": "鎶ュ憡鑰卛d", + "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": [ diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 4f8b695..68b35f7 100644 --- a/docs/swagger.yaml +++ b/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: 鎶ュ伐浜篿d + 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: 鎶ュ憡鑰卛d + 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: diff --git a/main.go b/main.go index 2803974..39420ab 100644 --- a/main.go +++ b/main.go @@ -46,6 +46,7 @@ "system_status", "process_model_plc_address", "reports_to_cloud", + "report_work", } agent := serf.InitAgent("apsClient", syncTables, sqlitex.GetDB()) diff --git a/model/index.go b/model/index.go index e372ba6..a5f8022 100644 --- a/model/index.go +++ b/model/index.go @@ -32,6 +32,7 @@ SystemStatus{}, ProcessModelPlcAddress{}, ReportsToCloud{}, + ReportWork{}, ) } diff --git a/model/report_work.go b/model/report_work.go new file mode 100644 index 0000000..4e6a70b --- /dev/null +++ b/model/report_work.go @@ -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"` //鎶ュ伐浜篿d + 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 +} diff --git a/model/request/common.go b/model/request/common.go index 7059381..2076da7 100644 --- a/model/request/common.go +++ b/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"` //鎶ュ憡鑰卛d +} + +type ReportWorkList struct { + PageInfo + ProcedureId uint `json:"procedureId" binding:"required"` //宸ュ簭id +} diff --git a/router/index.go b/router/index.go index 2009cc6..a04943b 100644 --- a/router/index.go +++ b/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") //{ diff --git a/service/report_work.go b/service/report_work.go new file mode 100644 index 0000000..38693d8 --- /dev/null +++ b/service/report_work.go @@ -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) +} -- Gitblit v1.8.0