zhangqian
2023-12-19 c688f083caf965cd13f640098ad204d8fd8c9e69
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
package common
 
import (
    "apsClient/constvar"
    "github.com/shopspring/decimal"
)
 
// 排程任务下发
type (
    WorkOrder struct {
        WorkOrderID string          `json:"workOrderId"`
        OrderID     string          `gorm:"index;type:varchar(191);not null;comment:订单ID" json:"orderId"`
        ProductID   string          `gorm:"type:varchar(191);comment:产品ID" json:"productId"`
        ProductName string          `gorm:"type:varchar(191);comment:产品名称" json:"productName"`
        Parameter   string          `gorm:"type:varchar(1024);comment:参数需求" json:"parameter"`
        Customer    string          `gorm:"type:varchar(191);comment:客户编码" json:"customer"`
        DeliverDate string          `gorm:"type:varchar(100);comment:交货日期" json:"deliverDate"`
        OrderAttr   string          `json:"orderAttr"` // 订单属性拼接的字符串,即货物描述
        Amount      decimal.Decimal `gorm:"type:decimal(35,18);comment:数量" json:"amount"`
        Unit        string          `gorm:"type:varchar(100);comment:单位" json:"unit"`
        StartTime   int64           `gorm:"comment:计划开始时间" json:"startTime"`
        EndTime     int64           `gorm:"comment:计划结束时间" json:"endTime"`
    }
 
    ProcedureMaterial struct {
        MaterialID   string          `gorm:"type:varchar(191);comment:物料编号" json:"materialId"`
        MaterialName string          `gorm:"unique;type:varchar(191);not null;comment:物料名称" json:"materialName"`
        Amount       decimal.Decimal `gorm:"type:decimal(35,18);comment:数量" json:"amount"`
        Unit         string          `gorm:"type:varchar(191);comment:单位" json:"unit"`
    }
 
    ProcedureWorker struct {
        WorkerID   string `gorm:"type:varchar(2048);comment:人员ID" json:"workerId"`
        WorkerName string `gorm:"unique;type:varchar(191);not null;comment:人员姓名" json:"workerName"`
        PhoneNum   string `gorm:"type:varchar(191);comment:手机号" json:"phoneNum"`
        StartTime  int64  `gorm:"comment:开始时间" json:"startTime"`
        EndTime    int64  `gorm:"comment:结束时间" json:"endTime"`
    }
 
    ProductProcedure struct {
        ProductProcedureID string               `gorm:"index;type:varchar(191);not null;comment:产品工序ID" json:"productProcedureID"`
        ProcedureID        string               `gorm:"uniqueIndex:idx_product_procedure;type:varchar(191);comment:工序ID" json:"procedureId"`
        ProcedureName      string               `gorm:"type:varchar(191);comment:工序名称,仅查询用" json:"procedureName"`
        NextProcedureID    string               `json:"nextProcedureId"`
        NextProcedureName  string               `json:"nextProcedureName"`
        DeviceID           string               `gorm:"type:varchar(191);not null;comment:设备ID" json:"deviceId"`
        DeviceName         string               `json:"deviceName"`
        StartTime          int64                `gorm:"comment:计划开始时间" json:"startTime"`
        EndTime            int64                `gorm:"comment:计划结束时间" json:"endTime"`
        WorkHours          decimal.Decimal      `gorm:"type:decimal(35,18);comment:工时" json:"workHours"`
        InputMaterials     []*ProcedureMaterial `json:"inputMaterials"`    // 输入物料列表
        OutputMaterials    []*ProcedureMaterial `json:"outputMaterials"`   // 输出物料列表
        Workers            []*ProcedureWorker   `json:"workers"`           // 人员列表
        AllProcedureNames  []string             `json:"allProcedureNames"` // 所属工单工序列表
        Channel            int32                `json:"channel"`           //通道序号
    }
 
    DeliverScheduleTask struct {
        WorkOrder  WorkOrder           `json:"workOrder"`
        Procedures []*ProductProcedure `json:"procedures"` // 工序列表
    }
)
 
// PLC写入地址
type (
    RequestPlcAddress struct {
        DeviceId string
    }
    ResponsePlcAddress struct {
        KeyData        []byte
        AddressData    []byte
        DeviceId       string
        PlcAddressList []*PlcAddress //plc 完成量,总量, 读写地址
        PlcConfig      PlcConfig     //用网口还是端口以及网口ip port
    }
 
    PlcConfig struct {
        Brand      string             `gorm:"type:varchar(191)" json:"brand"`   //comment:PLC品牌
        Method     constvar.PlcMethod `gorm:"type:varchar(191)" json:"method"`  //comment:接口方式
        Address    string             `gorm:"type:varchar(191)" json:"address"` //plc ip地址, method = modbusTCP用
        Port       int                `gorm:"type:int(11)" json:"port"`         //plc 端口号,  method =  modbusTCP用
        BaudRate   int                `gorm:"type:int(11)"  json:"baudRate"`    //串口波特率, method = serial或modbusRTU 时用
        SerialName string             `gorm:"type:int(11)"  json:"serialName"`  //串口名称,method = serial或modbusRTU 时用
        DataBit    int                `gorm:"type:int(11)"  json:"dataBit"`     //数据位,method = modbusRTU 用
        StopBit    int                `gorm:"type:int(11)"  json:"stopBit"`     //停止位,method = modbusRTU 用
        Parity     constvar.Parity    `gorm:"type:int(11)"  json:"parity"`      //校验方式,method = modbusRTU 用
        IsOpen     bool               `gorm:"type:tinyint(1)" json:"isOpen"`
        Detail     string             `gorm:"type:varchar(2048)" json:"-"`
        Details    []*PlcAddress      `gorm:"-" json:"details"`
    }
 
    PlcAddress struct {
        DeviceID     string                       `json:"deviceID"`                        // 设备id
        Channel      int                          `json:"channel"`                         // 生产通道on,一个机器可能有多个机位,需要分别配置plc地址
        StartAddress int                          `json:"startAddress"`                    // 数据起始地址
        Length       int                          `json:"length"`                          // 数据长度
        Type         string                       `json:"type"`                            // 数据类型
        FieldName    constvar.PlcStartAddressType `json:"fieldName"`                       // 对应系统字段,完成量或总量
        Endian       constvar.EndianType          `json:"endian" gorm:"type:varchar(255)"` // 字节存储顺序,big(ABCD)/little(CDBA)/mix(CDAB)
    }
)
 
// 工艺参数
type (
    RequestProcessParams struct {
        WorkOrder string `json:"workOrder,omitempty" form:"workOrder"` //工序编号
        OrderId   string `json:"orderId"`                              // 订单号
        Product   string `json:"password"`                             // 产品
        Procedure string `json:"procedure"`                            // 工序
        Device    string `json:"device"`                               // 设备
        DeviceId  string `json:"deviceId" gorm:"-"`                    //用于过滤获取nsq消息
    }
    ResponseProcessParams struct {
        Number    string                 `json:"number"`    //工艺模型编号
        Product   string                 `json:"product"`   //产品名称
        Procedure string                 `json:"procedure"` //工序
        Params    string                 `json:"params"`
        ParamsMap map[string]interface{} `json:"paramsMap"`
        DeviceId  string                 `json:"deviceId" gorm:"-"` //用于过滤获取nsq消息
    }
)
 
// MsgTaskStatusUpdate 任务状态改变
type MsgTaskStatusUpdate struct {
    WorkOrderId        string `json:"workOrderId"` //工单编号
    ProcedureID        string `json:"procedureId"` // 工序
    DeviceId           string `json:"deviceId"`    //用于过滤获取nsq消息
    IsProcessing       bool   //是否处理中
    IsFinish           bool   //是否完成
    FinishAmount       int    `json:"finishAmount"`       //isFinish = true时取工序最终加工数传上去
    ProductProcedureID string `json:"productProcedureID"` //产品工序id
    StartTs            int64  `json:"start_ts"`           //开始时间
    FinishTs           int64  `json:"finish_ts"`          //结束时间
}
 
// DeviceMsg 下发到终端的设备信息
type DeviceMsg 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"`
    DeviceName          string                 `json:"deviceName"`
    DeviceMac           string                 `json:"deviceMac"`
    PlcAddressList      []*PlcAddress
    PlcConfig           *PlcConfig
}
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"`
}
 
type PullDataType string
 
const (
    PullDataTypeProcessModel           = "process_model"
    PullDataTypeDevice                 = "device"
    PullDataTypeProcessModelPlcAddress = "process_model_plc_address"
)
 
// MsgPullDataRequest 拉取云端数据
type MsgPullDataRequest struct {
    DataType PullDataType `json:"dataType"` //要拉取的数据类型
}
 
type MsgPullDataResponse struct {
    DataType PullDataType `json:"dataType"` //要拉取的数据类型
    Data     interface{}  //返回的数据
}
 
type RTUConfig struct {
    BaudRate   int             `json:"baudRate"`                     //串口波特率, method = serial时 用
    SerialName string          `json:"serialName"`                   //串口名称,method = serial时 用
    DataBit    int             `gorm:"type:int(11)"  json:"dataBit"` //数据位,method = modbusRTU 用
    StopBit    int             `gorm:"type:int(11)"  json:"stopBit"` //停止位,method = modbusRTU 用
    Parity     constvar.Parity `gorm:"type:int(11)"  json:"parity"`  //校验方式,method = modbusRTU 用
}
 
// MsgReportData 数据上报
type MsgReportData struct {
    ReportType constvar.ReportType `json:"reportType"` //上报类型
    Content    string              `json:"Content"`
}