| | |
| | | procedureRecords := make([]*model.Procedures, 0, len(task.Procedures)) |
| | | for _, procedure := range task.Procedures { |
| | | procedureRecord := model.Procedures{ |
| | | WorkOrderID: task.WorkOrder.WorkOrderID, |
| | | OrderID: task.WorkOrder.OrderID, |
| | | DeviceID: procedure.DeviceID, |
| | | ProcedureID: procedure.ProcedureID, |
| | | StartTime: procedure.StartTime, |
| | | EndTime: procedure.EndTime, |
| | | Status: model.ProcedureStatusWaitProcess, |
| | | Channel: procedure.Channel, |
| | | ProceduresInfo: common.ProductProcedure{}, |
| | | ProductProcedureID: procedure.ProductProcedureID, |
| | | WorkOrderID: task.WorkOrder.WorkOrderID, |
| | | OrderID: task.WorkOrder.OrderID, |
| | | DeviceID: procedure.DeviceID, |
| | | ProcedureID: procedure.ProcedureID, |
| | | StartTime: procedure.StartTime, |
| | | EndTime: procedure.EndTime, |
| | | Status: model.ProcedureStatusWaitProcess, |
| | | Channel: procedure.Channel, |
| | | ProceduresInfo: common.ProductProcedure{}, |
| | | } |
| | | procedureData, err := json.Marshal(procedure) |
| | | if err != nil { |
| | |
| | | DeviceID: msg.ID, |
| | | Procedures: strings.Join(procedures, ","), |
| | | ExtChannelAmount: msg.ExtChannelAmount, |
| | | DeviceMac: msg.DeviceMac, |
| | | DeviceName: msg.DeviceName, |
| | | } |
| | | |
| | | oldRecord, err := model.NewDeviceSearch().SetDeviceId(msg.ID).First() |
| | | if err == gorm.ErrRecordNotFound { |
| | | err = model.NewDeviceSearch().Create(deviceRecord) |
| | | } else if oldRecord.ExtChannelAmount != deviceRecord.ExtChannelAmount || oldRecord.Procedures != deviceRecord.Procedures { |
| | | } else if oldRecord.ExtChannelAmount != deviceRecord.ExtChannelAmount || |
| | | oldRecord.Procedures != deviceRecord.Procedures || |
| | | oldRecord.DeviceMac != deviceRecord.DeviceMac || |
| | | oldRecord.DeviceName != deviceRecord.DeviceName { |
| | | err = model.NewDeviceSearch().SetDeviceId(msg.ID).Save(deviceRecord) |
| | | } |
| | | |
| | |
| | | if err != nil { |
| | | logx.Infof("decode from PlcAddressList to DevicePlc Details err:%v", err) |
| | | } |
| | | err = mapstructure.Decode(msg.PlcAddressList, &record.Details) |
| | | if err != nil { |
| | | logx.Infof("decode from PlcAddressList to DevicePlc Details err:%v", err) |
| | | } |
| | | detail, err := json.Marshal(record.Details) |
| | | record.Detail = string(detail) |
| | | record.DeviceID = msg.ID |
| | | oldPlcRecord, err := model.NewDevicePlcSearch().SetDeviceId(msg.ID).First() |
| | | if err == gorm.ErrRecordNotFound { |
| | | err = model.NewDevicePlcSearch().Create(&record) |
| | | } else if record.Port != oldPlcRecord.Port || |
| | | record.Method != oldPlcRecord.Method || |
| | | } else if record.Port != oldPlcRecord.Port || record.Method != oldPlcRecord.Method || |
| | | record.Address != oldPlcRecord.Address || |
| | | record.Detail != oldPlcRecord.Detail { |
| | | record.Detail != oldPlcRecord.Detail || |
| | | record.BaudRate != oldPlcRecord.BaudRate || |
| | | record.SerialName != oldPlcRecord.SerialName || |
| | | record.DataBit != oldPlcRecord.DataBit || |
| | | record.StopBit != oldPlcRecord.StopBit || |
| | | record.Parity != oldPlcRecord.Parity { |
| | | |
| | | oldPlcRecord.Port = record.Port |
| | | oldPlcRecord.Method = record.Method |
| | | oldPlcRecord.Address = record.Address |
| | | oldPlcRecord.Port = record.Port |
| | | oldPlcRecord.Detail = record.Detail |
| | | oldPlcRecord.BaudRate = record.BaudRate |
| | | oldPlcRecord.SerialName = record.SerialName |
| | | oldPlcRecord.DataBit = record.DataBit |
| | | oldPlcRecord.StopBit = record.StopBit |
| | | oldPlcRecord.Parity = record.Parity |
| | | |
| | | err = model.NewDevicePlcSearch().Save(oldPlcRecord) |
| | | } |
| | | if err != nil { |
| | |
| | | err = slf.DealProcessModelData(pullDataResponse.Data) |
| | | case common.PullDataTypeDevice: |
| | | err = slf.DealDeviceData(pullDataResponse.Data) |
| | | case common.PullDataTypeProcessModelPlcAddress: |
| | | err = slf.DealProcessModelPlcAddressData(pullDataResponse.Data) |
| | | } |
| | | if err != nil { |
| | | logx.Infof("process pull data err :%s", err) |
| | |
| | | } |
| | | |
| | | func (slf *PullDataResponse) DealDeviceData(data interface{}) error { |
| | | var devices []*model.Device |
| | | err := mapstructure.Decode(data, &devices) |
| | | //已在别的topic处理 |
| | | return nil |
| | | } |
| | | |
| | | func (slf *PullDataResponse) DealProcessModelPlcAddressData(data interface{}) error { |
| | | var addressList []*model.ProcessModelPlcAddress |
| | | err := mapstructure.Decode(data, &addressList) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | numbers := make([]string, 0, len(devices)) |
| | | for _, item := range devices { |
| | | numbers = append(numbers, item.DeviceID) |
| | | deviceIDs := make([]string, 0, len(addressList)) |
| | | for _, item := range addressList { |
| | | deviceIDs = append(deviceIDs, item.DeviceID) |
| | | } |
| | | existsDevices, err := model.NewDeviceSearch().SetDeviceIds(numbers).FindNotTotal() |
| | | existsRecords, err := model.NewProcessModelPlcAddressSearch().SetDeviceIDs(deviceIDs).FindNotTotal() |
| | | if err != nil { |
| | | return err |
| | | } |
| | | |
| | | existsDeviceMap := make(map[string]*model.Device, len(existsDevices)) |
| | | for _, device := range existsDevices { |
| | | existsDeviceMap[device.DeviceID] = device |
| | | existsRecordsMap := make(map[string]*model.ProcessModelPlcAddress, len(existsRecords)) |
| | | for _, item := range existsRecords { |
| | | existsRecordsMap[item.DeviceID] = item |
| | | } |
| | | |
| | | for _, device := range devices { |
| | | if oldDevice, exists := existsDeviceMap[device.DeviceID]; exists { |
| | | if oldDevice.ExtChannelAmount != device.ExtChannelAmount || //todo to be continued |
| | | oldDevice.Procedures != device.Procedures { |
| | | err = model.NewDeviceSearch().SetDeviceId(device.DeviceID).Save(device) |
| | | } |
| | | } else { |
| | | err = model.NewDeviceSearch().Create(device) |
| | | for _, item := range addressList { |
| | | if v, exists := existsRecordsMap[item.DeviceID]; !exists { |
| | | item.ID = 0 |
| | | err = model.NewProcessModelPlcAddressSearch().Create(item) |
| | | } else if v.Address != item.Address { |
| | | v.Address = item.Address |
| | | err = model.NewProcessModelPlcAddressSearch().Save(v) |
| | | } |
| | | } |
| | | return err |
| | | return nil |
| | | } |