From b3d87ae859f20f3bfb4d2e495d7a0f316900b670 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期二, 28 十一月 2023 17:12:21 +0800
Subject: [PATCH] 获取生产进度接口有工序id参数从数据库查询实际开始时间和实际结束时间
---
nsq/msg_handler.go | 125 +++++++++++++++++++++++++++++++++++------
1 files changed, 106 insertions(+), 19 deletions(-)
diff --git a/nsq/msg_handler.go b/nsq/msg_handler.go
index 15cbf29..a45aed8 100644
--- a/nsq/msg_handler.go
+++ b/nsq/msg_handler.go
@@ -52,15 +52,16 @@
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 {
@@ -251,33 +252,79 @@
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)
+ var msg common.DeviceMsg
+ err = json.Unmarshal(data, &msg)
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 := make([]string, 0, len(msg.DeviceProcedureAttr))
+ for _, attr := range msg.DeviceProcedureAttr {
procedures = append(procedures, attr.ProcedureName)
}
deviceRecord := &model.Device{
- DeviceID: device.ID,
+ DeviceID: msg.ID,
Procedures: strings.Join(procedures, ","),
- ExtChannelAmount: device.ExtChannelAmount,
+ ExtChannelAmount: msg.ExtChannelAmount,
+ DeviceMac: msg.DeviceMac,
+ DeviceName: msg.DeviceName,
}
- oldRecord, err := model.NewDeviceSearch().SetDeviceId(device.ID).First()
+ oldRecord, err := model.NewDeviceSearch().SetDeviceId(msg.ID).First()
if err == gorm.ErrRecordNotFound {
err = model.NewDeviceSearch().Create(deviceRecord)
- } else {
- err = model.NewDeviceSearch().SetID(oldRecord.ID).Save(deviceRecord)
+ } 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("save device record err :%s", err)
+ return err
+ }
+
+ if msg.PlcConfig == nil || msg.PlcConfig.Method == "" {
+ return nil
+ }
+
+ msg.PlcConfig.Method.ConvertToEnglish()
+ var record model.DevicePlc
+ err = mapstructure.Decode(msg.PlcConfig, &record)
+ 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 ||
+ record.Address != oldPlcRecord.Address ||
+ 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.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 {
return err
}
@@ -299,7 +346,10 @@
switch pullDataResponse.DataType {
case common.PullDataTypeProcessModel:
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)
@@ -346,3 +396,40 @@
}
return nil
}
+
+func (slf *PullDataResponse) DealDeviceData(data interface{}) error {
+ //宸插湪鍒殑topic澶勭悊
+ return nil
+}
+
+func (slf *PullDataResponse) DealProcessModelPlcAddressData(data interface{}) error {
+ var addressList []*model.ProcessModelPlcAddress
+ err := mapstructure.Decode(data, &addressList)
+ if err != nil {
+ return err
+ }
+ deviceIDs := make([]string, 0, len(addressList))
+ for _, item := range addressList {
+ deviceIDs = append(deviceIDs, item.DeviceID)
+ }
+ existsRecords, err := model.NewProcessModelPlcAddressSearch().SetDeviceIDs(deviceIDs).FindNotTotal()
+ if err != nil {
+ return err
+ }
+
+ existsRecordsMap := make(map[string]*model.ProcessModelPlcAddress, len(existsRecords))
+ for _, item := range existsRecords {
+ existsRecordsMap[item.DeviceID] = item
+ }
+
+ 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 nil
+}
--
Gitblit v1.8.0