New file |
| | |
| | | package v1 |
| | | |
| | | import ( |
| | | "apsClient/model/request" |
| | | "apsClient/pkg/contextx" |
| | | "apsClient/pkg/ecode" |
| | | "apsClient/service" |
| | | "github.com/gin-gonic/gin" |
| | | ) |
| | | |
| | | type ProcessModelApi struct{} |
| | | |
| | | // List |
| | | // @Tags 工艺模型 |
| | | // @Summary 获取工艺模型列表 |
| | | // @Produce application/json |
| | | // @Param object query request.ProcessModelList true "查询参数" |
| | | // @Success 200 {object} contextx.Response{data=response.TaskCountdown} "成功" |
| | | // @Router /v1/processModel/list [get] |
| | | func (slf *ProcessModelApi) List(c *gin.Context) { |
| | | var params request.ProcessModelList |
| | | ctx, ok := contextx.NewContext(c, ¶ms) |
| | | if !ok { |
| | | return |
| | | } |
| | | procedure, code := service.NewTaskService().GetProcedureById(params.ProcedureId) |
| | | if code != ecode.OK { |
| | | ctx.Fail(code) |
| | | return |
| | | } |
| | | |
| | | order, err := service.NewTaskService().GetOrderByWorkOrderId(procedure.WorkOrderID) |
| | | if err != nil { |
| | | ctx.Fail(ecode.DBErr) |
| | | return |
| | | } |
| | | |
| | | list, total, err := service.GetProcessModelList(params.Page, params.PageSize) |
| | | if err != nil { |
| | | ctx.Fail(ecode.DBErr) |
| | | return |
| | | } |
| | | for _, processModel := range list { |
| | | if processModel.Procedure == procedure.ProceduresInfo.ProcedureName && processModel.Product == order.ProductName { |
| | | processModel.IsUpdate = processModel.Number != params.Number |
| | | } |
| | | } |
| | | |
| | | ctx.ResultList(list, total) |
| | | } |
| | |
| | | NsqTopicApsProcessParams = "aps.%v.aps.processParams" //有了新的工艺模型 |
| | | NsqTopicTaskProcedureStatusUpdate = "aps.%v.task.procedure.status" //工序状态更新 |
| | | NsqTopicSyncTaskProgress = "aps.%v.task.procedure.progress" //工序生产进度 |
| | | NsqTopicDeviceUpdate = "aps.%v.device.update" //设备信息更改 |
| | | ) |
| | | |
| | | type PlcStartAddressType int |
| | |
| | | } |
| | | } |
| | | }, |
| | | "/v1/processModel/list": { |
| | | "get": { |
| | | "produces": [ |
| | | "application/json" |
| | | ], |
| | | "tags": [ |
| | | "工艺模型" |
| | | ], |
| | | "summary": "获取工艺模型列表", |
| | | "parameters": [ |
| | | { |
| | | "type": "string", |
| | | "description": "当前正在使用的工艺参数编号", |
| | | "name": "number", |
| | | "in": "query", |
| | | "required": true |
| | | }, |
| | | { |
| | | "type": "integer", |
| | | "description": "页码", |
| | | "name": "page", |
| | | "in": "query" |
| | | }, |
| | | { |
| | | "type": "integer", |
| | | "description": "每页大小", |
| | | "name": "pageSize", |
| | | "in": "query" |
| | | }, |
| | | { |
| | | "type": "integer", |
| | | "description": "当前的工序id", |
| | | "name": "procedureId", |
| | | "in": "query", |
| | | "required": true |
| | | } |
| | | ], |
| | | "responses": { |
| | | "200": { |
| | | "description": "成功", |
| | | "schema": { |
| | | "allOf": [ |
| | | { |
| | | "$ref": "#/definitions/contextx.Response" |
| | | }, |
| | | { |
| | | "type": "object", |
| | | "properties": { |
| | | "data": { |
| | | "$ref": "#/definitions/response.TaskCountdown" |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "/v1/task/countdown": { |
| | | "get": { |
| | | "produces": [ |
| | |
| | | } |
| | | } |
| | | }, |
| | | "response.Message": { |
| | | "type": "object", |
| | | "properties": { |
| | | "data": {}, |
| | | "event": { |
| | | "type": "string" |
| | | } |
| | | } |
| | | }, |
| | | "response.ProcessParams": { |
| | | "type": "object", |
| | | "properties": { |
| | |
| | | } |
| | | } |
| | | }, |
| | | "/v1/processModel/list": { |
| | | "get": { |
| | | "produces": [ |
| | | "application/json" |
| | | ], |
| | | "tags": [ |
| | | "工艺模型" |
| | | ], |
| | | "summary": "获取工艺模型列表", |
| | | "parameters": [ |
| | | { |
| | | "type": "string", |
| | | "description": "当前正在使用的工艺参数编号", |
| | | "name": "number", |
| | | "in": "query", |
| | | "required": true |
| | | }, |
| | | { |
| | | "type": "integer", |
| | | "description": "页码", |
| | | "name": "page", |
| | | "in": "query" |
| | | }, |
| | | { |
| | | "type": "integer", |
| | | "description": "每页大小", |
| | | "name": "pageSize", |
| | | "in": "query" |
| | | }, |
| | | { |
| | | "type": "integer", |
| | | "description": "当前的工序id", |
| | | "name": "procedureId", |
| | | "in": "query", |
| | | "required": true |
| | | } |
| | | ], |
| | | "responses": { |
| | | "200": { |
| | | "description": "成功", |
| | | "schema": { |
| | | "allOf": [ |
| | | { |
| | | "$ref": "#/definitions/contextx.Response" |
| | | }, |
| | | { |
| | | "type": "object", |
| | | "properties": { |
| | | "data": { |
| | | "$ref": "#/definitions/response.TaskCountdown" |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "/v1/task/countdown": { |
| | | "get": { |
| | | "produces": [ |
| | |
| | | } |
| | | } |
| | | }, |
| | | "response.Message": { |
| | | "type": "object", |
| | | "properties": { |
| | | "data": {}, |
| | | "event": { |
| | | "type": "string" |
| | | } |
| | | } |
| | | }, |
| | | "response.ProcessParams": { |
| | | "type": "object", |
| | | "properties": { |
| | |
| | | msg: |
| | | type: string |
| | | type: object |
| | | response.Message: |
| | | properties: |
| | | data: {} |
| | | event: |
| | | type: string |
| | | type: object |
| | | response.ProcessParams: |
| | | properties: |
| | | key: |
| | |
| | | summary: 更新plc品牌 |
| | | tags: |
| | | - plc品牌 |
| | | /v1/processModel/list: |
| | | get: |
| | | parameters: |
| | | - description: 当前正在使用的工艺参数编号 |
| | | in: query |
| | | name: number |
| | | required: true |
| | | type: string |
| | | - description: 页码 |
| | | in: query |
| | | name: page |
| | | type: integer |
| | | - description: 每页大小 |
| | | in: query |
| | | name: pageSize |
| | | type: integer |
| | | - description: 当前的工序id |
| | | in: query |
| | | name: procedureId |
| | | required: true |
| | | type: integer |
| | | produces: |
| | | - application/json |
| | | responses: |
| | | "200": |
| | | description: 成功 |
| | | schema: |
| | | allOf: |
| | | - $ref: '#/definitions/contextx.Response' |
| | | - properties: |
| | | data: |
| | | $ref: '#/definitions/response.TaskCountdown' |
| | | type: object |
| | | summary: 获取工艺模型列表 |
| | | tags: |
| | | - 工艺模型 |
| | | /v1/task/countdown: |
| | | get: |
| | | produces: |
| | |
| | | IsProcessing bool //是否处理中 |
| | | IsFinish bool //是否完成 |
| | | } |
| | | |
| | | type Device struct { |
| | | ID string `gorm:"comment:主键ID;primaryKey;type:varchar(191);" json:"id"` |
| | | DeviceProcedureAttr []*DeviceProcedureAttr `json:"deviceProcedureAttr"` // 设备工序属性列表 |
| | | ExtChannelAmount int `gorm:"type:tinyint;comment:额外的通道数量;default:0;" json:"extChannelAmount"` |
| | | } |
| | | type DeviceProcedureAttr struct { |
| | | ProcedureID string `gorm:"index;type:varchar(191);comment:工序ID" json:"procedureId"` |
| | | ProcedureName string `gorm:"type:varchar(191);comment:工序名称" json:"procedureName"` |
| | | DeviceID string `gorm:"index;type:varchar(191);not null;comment:设备ID" json:"deviceId"` |
| | | } |
New file |
| | |
| | | package model |
| | | |
| | | import ( |
| | | "apsClient/pkg/sqlitex" |
| | | "fmt" |
| | | "gorm.io/gorm" |
| | | "strings" |
| | | ) |
| | | |
| | | type ( |
| | | // Device 设备 |
| | | Device struct { |
| | | gorm.Model `json:"-"` |
| | | DeviceID string `gorm:"unique;column:device_id;type:varchar(255);not null;default '';comment:设备编号" json:"deviceID"` //设备编号 |
| | | ExtChannelAmount int `gorm:"type:tinyint;comment:额外的通道数量;default:0;" json:"extChannelAmount"` |
| | | Procedures string `gorm:"column:procedure;type:varchar(255);not null;default '';comment:工序" json:"procedures"` //设备支持的工序,用逗号分隔 |
| | | ProceduresArr []string `gorm:"-" json:"procedureAdd"` //设备支持的工序切片 |
| | | } |
| | | |
| | | DeviceSearch struct { |
| | | Device |
| | | Order string |
| | | PageNum int |
| | | PageSize int |
| | | Orm *gorm.DB |
| | | } |
| | | ) |
| | | |
| | | func (slf *Device) TableName() string { |
| | | return "device" |
| | | } |
| | | |
| | | func (slf *Device) AfterFind(db *gorm.DB) error { |
| | | slf.ProceduresArr = strings.Split(slf.Procedures, ",") |
| | | return nil |
| | | } |
| | | |
| | | func NewDeviceSearch() *DeviceSearch { |
| | | return &DeviceSearch{Orm: sqlitex.GetDB()} |
| | | } |
| | | |
| | | func (slf *DeviceSearch) SetOrm(tx *gorm.DB) *DeviceSearch { |
| | | slf.Orm = tx |
| | | return slf |
| | | } |
| | | |
| | | func (slf *DeviceSearch) SetPage(page, size int) *DeviceSearch { |
| | | slf.PageNum, slf.PageSize = page, size |
| | | return slf |
| | | } |
| | | |
| | | func (slf *DeviceSearch) SetOrder(order string) *DeviceSearch { |
| | | slf.Order = order |
| | | return slf |
| | | } |
| | | |
| | | func (slf *DeviceSearch) SetID(id uint) *DeviceSearch { |
| | | slf.ID = id |
| | | return slf |
| | | } |
| | | |
| | | func (slf *DeviceSearch) SetDeviceId(deviceId string) *DeviceSearch { |
| | | slf.DeviceID = deviceId |
| | | return slf |
| | | } |
| | | |
| | | func (slf *DeviceSearch) build() *gorm.DB { |
| | | var db = slf.Orm.Table(slf.TableName()) |
| | | |
| | | if slf.ID != 0 { |
| | | db = db.Where("id = ?", slf.ID) |
| | | } |
| | | |
| | | if len(slf.DeviceID) != 0 { |
| | | db = db.Where("device_id = ?", slf.DeviceID) |
| | | } |
| | | |
| | | if slf.Order != "" { |
| | | db = db.Order(slf.Order) |
| | | } |
| | | |
| | | return db |
| | | } |
| | | |
| | | // Create 单条插入 |
| | | func (slf *DeviceSearch) Create(record *Device) 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 *DeviceSearch) Save(record *Device) 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 *DeviceSearch) 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 *DeviceSearch) 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 *DeviceSearch) Delete() error { |
| | | var db = slf.build() |
| | | |
| | | if err := db.Unscoped().Delete(&Device{}).Error; err != nil { |
| | | return err |
| | | } |
| | | |
| | | return nil |
| | | } |
| | | |
| | | func (slf *DeviceSearch) First() (*Device, error) { |
| | | var ( |
| | | record = new(Device) |
| | | db = slf.build() |
| | | ) |
| | | |
| | | if err := db.First(record).Error; err != nil { |
| | | return record, err |
| | | } |
| | | |
| | | return record, nil |
| | | } |
| | | |
| | | func (slf *DeviceSearch) Find() ([]*Device, int64, error) { |
| | | var ( |
| | | records = make([]*Device, 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 *DeviceSearch) FindNotTotal() ([]*Device, error) { |
| | | var ( |
| | | records = make([]*Device, 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 *DeviceSearch) FindByQuery(query string, args []interface{}) ([]*Device, int64, error) { |
| | | var ( |
| | | records = make([]*Device, 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 *DeviceSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*Device, error) { |
| | | var ( |
| | | records = make([]*Device, 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 |
| | | } |
| | |
| | | DevicePlc{}, |
| | | ProcessModel{}, |
| | | ProductionProgress{}, |
| | | Device{}, |
| | | ) |
| | | return err |
| | | } |
| | |
| | | package model |
| | | |
| | | import ( |
| | | "apsClient/pkg/logx" |
| | | "apsClient/pkg/sqlitex" |
| | | "encoding/json" |
| | | "fmt" |
| | | "gorm.io/gorm" |
| | | ) |
| | | |
| | | type ( |
| | | // ProcessModel 工艺流程参数 |
| | | // ProcessModel 工艺参数 |
| | | ProcessModel struct { |
| | | gorm.Model `json:"-"` |
| | | Number string `gorm:"index;column:number;type:varchar(255);not null;default '';comment:工艺模型编号" json:"number"` //工艺模型编号 |
| | |
| | | Procedure string `gorm:"column:procedure;type:varchar(255);not null;default '';comment:工序" json:"procedure"` //工序 |
| | | Params string `gorm:"type:text;comment:工艺参数键值对json串"` |
| | | ParamsMap map[string]interface{} `json:"paramsMap" gorm:"-"` |
| | | DeviceId string `json:"deviceId" gorm:"-"` //用于过滤获取nsq消息 |
| | | DeviceId string `json:"deviceId" gorm:"-"` //用于过滤获取nsq消息 |
| | | IsNew bool `json:"isNew" gorm:"column:is_new;comment:是否最新的"` //是否最新的 |
| | | IsUpdate bool `json:"isUpdate" gorm:"-"` //前端用 |
| | | } |
| | | |
| | | ProcessModelSearch struct { |
| | | ProcessModel |
| | | Order string |
| | | PageNum int |
| | | PageSize int |
| | | Orm *gorm.DB |
| | | Order string |
| | | PageNum int |
| | | PageSize int |
| | | Orm *gorm.DB |
| | | Procedures []string |
| | | } |
| | | ) |
| | | |
| | | func (slf *ProcessModel) TableName() string { |
| | | return "process_model" |
| | | } |
| | | |
| | | func (slf *ProcessModel) AfterFind(db *gorm.DB) error { |
| | | err := json.Unmarshal([]byte(slf.Params), &slf.ParamsMap) |
| | | if err != nil { |
| | | logx.Errorf("process model json.Unmarshal:%v", err) |
| | | return err |
| | | } |
| | | return nil |
| | | } |
| | | |
| | | func NewProcessModelSearch() *ProcessModelSearch { |
| | |
| | | slf.Product = product |
| | | return slf |
| | | } |
| | | |
| | | func (slf *ProcessModelSearch) SetProcedure(procedure string) *ProcessModelSearch { |
| | | slf.Procedure = procedure |
| | | return slf |
| | | } |
| | | |
| | | func (slf *ProcessModelSearch) SetProcedures(procedures []string) *ProcessModelSearch { |
| | | slf.Procedures = procedures |
| | | return slf |
| | | } |
| | | |
| | | func (slf *ProcessModelSearch) SetIsNew(isNew bool) *ProcessModelSearch { |
| | | slf.IsNew = isNew |
| | | return slf |
| | | } |
| | | |
| | |
| | | db = db.Where("`procedure` = ?", slf.Procedure) |
| | | } |
| | | |
| | | if len(slf.Procedures) != 0 { |
| | | db = db.Where("`procedure` in ?", slf.Procedures) |
| | | } |
| | | |
| | | if len(slf.Number) != 0 { |
| | | db = db.Where("number = ?", slf.Number) |
| | | } |
| | |
| | | db = db.Order(slf.Order) |
| | | } |
| | | |
| | | if slf.IsNew { |
| | | db = db.Where("is_new = ?", 1) |
| | | } |
| | | |
| | | return db |
| | | } |
| | | |
| | |
| | | ProcedureId int `json:"procedureId" binding:"required"` |
| | | Channel int32 `json:"channel"` |
| | | } |
| | | |
| | | // ProcessModelList 工艺参数列表请求参数 |
| | | type ProcessModelList struct { |
| | | PageInfo |
| | | ProcedureId int `json:"procedureId" form:"procedureId" binding:"required"` //当前的工序id |
| | | Number string `json:"number" form:"number" binding:"required"` //当前正在使用的工艺参数编号 |
| | | } |
| | |
| | | CountDownMinute int64 //倒计时 分 |
| | | ShowCountDown bool //是否展示倒计时 |
| | | } |
| | | |
| | | type Message struct { |
| | | Event string |
| | | Data interface{} |
| | | } |
| | |
| | | handler = &ProcessParams{Topic: topic} |
| | | case fmt.Sprintf(constvar.NsqTopicApsProcessParams, conf.Conf.NsqConf.NodeId): |
| | | handler = &ProcessParamsSync{Topic: topic} |
| | | case fmt.Sprintf(constvar.NsqTopicDeviceUpdate, conf.Conf.NsqConf.NodeId): |
| | | handler = &DeviceUpdate{Topic: topic} |
| | | } |
| | | c.AddHandler(handler.HandleMessage) |
| | | |
| | |
| | | logx.Infof("unmarshal process params sync err :%s", err) |
| | | return err |
| | | } |
| | | err = model.NewProcessModelSearch().Save(&processModel) |
| | | err = model.WithTransaction(func(db *gorm.DB) error { |
| | | err = model.NewProcessModelSearch().SetOrm(db).SetProduct(processModel.Product).SetProcedure(processModel.Procedure). |
| | | UpdateByMap(map[string]interface{}{"is_new": 0}) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | processModel.IsNew = true |
| | | return model.NewProcessModelSearch().SetOrm(db).Create(&processModel) |
| | | }) |
| | | |
| | | if err != nil { |
| | | logx.Infof("save process params sync err :%s", err) |
| | | return err |
| | | } |
| | | return nil |
| | | } |
| | | |
| | | type DeviceUpdate struct { |
| | | Topic string |
| | | } |
| | | |
| | | func (slf *DeviceUpdate) HandleMessage(data []byte) (err error) { |
| | | logx.Infof("get a device update message :%s", data) |
| | | var device common.Device |
| | | err = json.Unmarshal(data, &device) |
| | | if err != nil { |
| | | logx.Infof("unmarshal device update msg err :%s", err) |
| | | return err |
| | | } |
| | | |
| | | procedures := make([]string, 0, len(device.DeviceProcedureAttr)) |
| | | for _, attr := range device.DeviceProcedureAttr { |
| | | procedures = append(procedures, attr.ProcedureName) |
| | | } |
| | | |
| | | deviceRecord := &model.Device{ |
| | | DeviceID: device.ID, |
| | | Procedures: strings.Join(procedures, ","), |
| | | ExtChannelAmount: device.ExtChannelAmount, |
| | | } |
| | | |
| | | oldRecord, err := model.NewDeviceSearch().SetDeviceId(device.ID).First() |
| | | if err == gorm.ErrRecordNotFound { |
| | | err = model.NewDeviceSearch().Create(deviceRecord) |
| | | } else { |
| | | deviceRecord.ID = oldRecord.ID |
| | | err = model.NewDeviceSearch().Save(deviceRecord) |
| | | } |
| | | |
| | | if err != nil { |
| | | logx.Infof("save device record err :%s", err) |
| | | return err |
| | | } |
| | | |
| | | return nil |
| | | } |
| | |
| | | } |
| | | }) |
| | | |
| | | safe.Go(func() { |
| | | err := Consume(fmt.Sprintf(constvar.NsqTopicDeviceUpdate, conf.Conf.NsqConf.NodeId), conf.Conf.System.DeviceId) |
| | | if err != nil { |
| | | logx.Errorf("start nsq consume err: %v", err) |
| | | } |
| | | }) |
| | | |
| | | return nil |
| | | } |
| | |
| | | plcGroup.POST("setProductNumber", plcApi.SetProductNumber) // 下发生产总量 |
| | | } |
| | | |
| | | processModelApi := new(v1.ProcessModelApi) |
| | | processModelGroup := v1Group.Group("processModel") |
| | | { |
| | | processModelGroup.GET("list", processModelApi.List) // 新任务倒计时 |
| | | } |
| | | |
| | | eventsApi := new(v1.EventsApi) |
| | | eventsGroup := v1Group.Group("events") |
| | | { |
| | | eventsGroup.GET("", eventsApi.Events) // 推送数据 |
| | | } |
| | | |
| | | InitPlcBrandRouter(v1Group) |
| | | |
| | | return Router |
| | |
| | | package service |
| | | |
| | | type ProcessModel struct{} |
| | | |
| | | const ( |
| | | GetProcessModelUrl = "/api-s/v1/processParams/info" |
| | | import ( |
| | | "apsClient/conf" |
| | | "apsClient/model" |
| | | ) |
| | | |
| | | type GetProcessModelParams struct { |
| | | WorkOrder string `json:"workOrder,omitempty" form:"workOrder"` //工序编号 |
| | | OrderId string `json:"orderId"` // 订单号 |
| | | Product string `json:"password"` // 产品 |
| | | Procedure string `json:"procedure"` // 工序 |
| | | Device string `json:"device"` // 设备 |
| | | func GetProcessModelList(page, pageSize int) (list []*model.ProcessModel, total int64, err error) { |
| | | device, err := model.NewDeviceSearch().SetDeviceId(conf.Conf.System.DeviceId).First() |
| | | if err != nil { |
| | | return |
| | | } |
| | | list, total, err = model.NewProcessModelSearch(). |
| | | SetIsNew(true).SetOrder("id desc"). |
| | | SetPage(page, pageSize).SetProcedures(device.ProceduresArr).Find() |
| | | return |
| | | } |
| | | type GetProcessModel struct { |
| | | Number string `json:"number"` //工艺模型编号 |
| | | OrderId string `json:"orderId"` //订单id |
| | | Product string `json:"product"` //产品名称 |
| | | Procedure string `json:"procedure"` //工序 |
| | | WorkOrder string `json:"workOrder"` //工单 |
| | | Device string `json:"device"` //设备 |
| | | ParamsMap map[string]interface{} `json:"paramsMap"` |
| | | } |
| | | |
| | | type GetProcessModelResponse struct { |
| | | Code int |
| | | Msg string |
| | | Data GetProcessModel |
| | | } |
| | | |
| | | //// GetProcessModel 获取工艺模型 |
| | | //func (slf ProcessModel) GetProcessModel(params GetProcessModelParams) (GetProcessModel GetProcessModel, err error) { |
| | | // resp := new(GetProcessModelResponse) |
| | | // err = httpx.SendPostAndParseJson(conf.Conf.Services.ApsServer+GetProcessModelUrl, params, resp) |
| | | // return resp.Data, err |
| | | //} |
| | |
| | | "apsClient/pkg/ecode" |
| | | "apsClient/pkg/logx" |
| | | "apsClient/pkg/structx" |
| | | "encoding/json" |
| | | "fmt" |
| | | "gorm.io/gorm" |
| | | "time" |
| | |
| | | return taskResp, ecode.OK |
| | | } |
| | | func (slf TaskService) NewTaskCount() (count int64) { |
| | | count, _ = model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.System.DeviceId).SetStatus(model.ProcedureStatusWaitProcess).Count() |
| | | nowTs := time.Now().Unix() |
| | | count, _ = model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.System.DeviceId).SetStatus(model.ProcedureStatusWaitProcess).SetEndTimeMin(nowTs).Count() |
| | | return count |
| | | } |
| | | |
| | |
| | | return nil, err |
| | | } |
| | | if err == nil { |
| | | err = json.Unmarshal([]byte(data.Params), &data.ParamsMap) |
| | | if err != nil { |
| | | logx.Errorf("process model json.Unmarshal:%v", err) |
| | | return |
| | | } |
| | | return data, nil |
| | | } |
| | | |