| | |
| | | "apsClient/utils/file" |
| | | "encoding/json" |
| | | "fmt" |
| | | "github.com/jinzhu/gorm" |
| | | "github.com/mitchellh/mapstructure" |
| | | "github.com/spf13/cast" |
| | | "gorm.io/gorm" |
| | | "strings" |
| | | ) |
| | | |
| | |
| | | StartTime: procedure.StartTime, |
| | | EndTime: procedure.EndTime, |
| | | Status: model.ProcedureStatusWaitProcess, |
| | | Channel: procedure.Channel, |
| | | ProceduresInfo: common.ProductProcedure{}, |
| | | } |
| | | procedureData, err := json.Marshal(procedure) |
| | |
| | | } |
| | | |
| | | err = model.WithTransaction(func(db *gorm.DB) error { |
| | | var err error |
| | | if oldWorkOrder != nil && oldWorkOrder.WorkOrderID != "" { |
| | | if err = model.NewOrderSearch(db).SetId(oldWorkOrder.ID).Updates(&orderRecord); err != nil { |
| | | return err |
| | | } |
| | | for _, procedure := range procedureRecords { |
| | | err = model.NewProceduresSearch(db).SetWorkOrderId(procedure.WorkOrderID).SetProcedureId(procedure.ProcedureID).Updates(procedure) |
| | | err = model.NewProceduresSearch(db).SetWorkOrderId(procedure.WorkOrderID).SetProcedureId(procedure.ProcedureID).Upsert(procedure) |
| | | if err != nil { |
| | | return err |
| | | } |
| | |
| | | return nil |
| | | }) |
| | | if err != nil { |
| | | logx.Errorf(" save task message error err: %v", err.Error()) |
| | | logx.Errorf(" save task message error err: %v", err) |
| | | return err |
| | | } |
| | | } |
| | |
| | | } |
| | | detail, err := json.Marshal(record.Details) |
| | | record.Detail = string(detail) |
| | | record.Id = 1 |
| | | err = model.NewDevicePlcSearch().SetId(record.Id).Save(&record) |
| | | record.ID = 1 |
| | | err = model.NewDevicePlcSearch().SetId(record.ID).Save(&record) |
| | | if err != nil { |
| | | return err |
| | | } |
| | |
| | | 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 |
| | | } |
| | | |
| | | type PullDataResponse struct { |
| | | Topic string |
| | | } |
| | | |
| | | func (slf *PullDataResponse) HandleMessage(data []byte) (err error) { |
| | | logx.Infof("get a pull data response message :%s", data) |
| | | var pullDataResponse common.MsgPullDataResponse |
| | | err = json.Unmarshal(data, &pullDataResponse) |
| | | if err != nil { |
| | | logx.Infof("unmarshal msg err :%s", err) |
| | | return err |
| | | } |
| | | switch pullDataResponse.DataType { |
| | | case common.PullDataTypeProcessModel: |
| | | err = slf.DealProcessModelData(pullDataResponse.Data) |
| | | |
| | | } |
| | | if err != nil { |
| | | logx.Infof("process pull data err :%s", err) |
| | | return err |
| | | } |
| | | return nil |
| | | } |
| | | |
| | | func (slf *PullDataResponse) DealProcessModelData(data interface{}) error { |
| | | var processModels []*model.ProcessModel |
| | | err := mapstructure.Decode(data, &processModels) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | numbers := make([]string, 0, len(processModels)) |
| | | for _, processModel := range processModels { |
| | | numbers = append(numbers, processModel.Number) |
| | | } |
| | | existsProcessModels, err := model.NewProcessModelSearch().SetIsNew(true).SetNumbers(numbers).FindNotTotal() |
| | | if err != nil { |
| | | return err |
| | | } |
| | | |
| | | existsProcessModelsMap := make(map[string]struct{}, len(existsProcessModels)) |
| | | for _, processModel := range existsProcessModels { |
| | | existsProcessModelsMap[processModel.Number] = struct{}{} |
| | | } |
| | | |
| | | for _, processModel := range processModels { |
| | | if _, exists := existsProcessModelsMap[processModel.Number]; exists { |
| | | continue |
| | | } |
| | | err = model.WithTransaction(func(db *gorm.DB) error { |
| | | err = model.NewProcessModelSearch().SetOrm(db).SetProcedure(processModel.Procedure).SetProduct(processModel.Product).SetIsNew(true).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 { |
| | | return err |
| | | } |
| | | } |
| | | return nil |
| | | } |