| | |
| | | return err |
| | | } |
| | | for _, task := range tasks { |
| | | oldWorkOrder, err := model.NewOrderSearch(nil).SetWorkOrderId(task.WorkOrder.WorkOrderID).First() |
| | | if oldWorkOrder != nil && oldWorkOrder.WorkOrderID != "" && oldWorkOrder.Status != model.OrderStatusWaitProcess { //已开始的工序不可以修改 |
| | | continue |
| | | } |
| | | |
| | | procedureRecords := make([]*model.Procedures, 0, len(task.Procedures)) |
| | | procedureIds := make([]string, 0, len(task.Procedures)) |
| | | for _, procedure := range task.Procedures { |
| | | if procedure.DeviceID == conf.Conf.System.DeviceId { //只存储本设备的工序 |
| | | err = model.WithTransaction(func(db *gorm.DB) error { |
| | | _, err := model.NewOrderSearch(db).SetWorkOrderId(task.WorkOrder.WorkOrderID).First() |
| | | if err == gorm.ErrRecordNotFound { |
| | | var orderRecord model.Order |
| | | err = structx.AssignTo(task.WorkOrder, &orderRecord) |
| | | orderRecord.Status = model.OrderStatusUnFinished |
| | | if err != nil { |
| | | logx.Errorf(" structx.Assign task.Order to orderRecord err: %v", err.Error()) |
| | | return err |
| | | } |
| | | if err = model.NewOrderSearch(db).Create(&orderRecord); err != nil { |
| | | return err |
| | | } |
| | | } |
| | | procedureRecord := model.Procedures{ |
| | | StartTime: procedure.StartTime, |
| | | EndTime: procedure.EndTime, |
| | | WorkOrderID: task.WorkOrder.WorkOrderID, |
| | | OrderID: task.WorkOrder.OrderID, |
| | | Status: model.ProcedureStatusUnFinished, |
| | | } |
| | | procedureData, err := json.Marshal(procedure) |
| | | procedureRecord.ProcedureData = string(procedureData) |
| | | 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, |
| | | ProceduresInfo: common.ProductProcedure{}, |
| | | } |
| | | procedureData, err := json.Marshal(procedure) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | procedureRecord.ProcedureData = string(procedureData) |
| | | procedureRecords = append(procedureRecords, &procedureRecord) |
| | | procedureIds = append(procedureIds, procedure.ProcedureID) |
| | | } |
| | | |
| | | var orderRecord model.Order |
| | | err = structx.AssignTo(task.WorkOrder, &orderRecord) |
| | | orderRecord.Status = model.OrderStatusWaitProcess |
| | | if err != nil { |
| | | logx.Errorf(" structx.Assign task.Order to orderRecord err: %v", err.Error()) |
| | | return err |
| | | } |
| | | |
| | | err = model.WithTransaction(func(db *gorm.DB) 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) |
| | | if err != nil { |
| | | logx.Errorf(" json.Marshal(procedure) err: %v", err.Error()) |
| | | return err |
| | | } |
| | | return model.NewProceduresSearch(db).Create(&procedureRecord) |
| | | }) |
| | | if err != nil { |
| | | logx.Errorf(" save procedure err: %v", err.Error()) |
| | | } |
| | | } else { |
| | | if err = model.NewOrderSearch(db).Create(&orderRecord); err != nil { |
| | | return err |
| | | } |
| | | return model.NewProceduresSearch(db).CreateBatch(procedureRecords) |
| | | } |
| | | return nil |
| | | }) |
| | | if err != nil { |
| | | logx.Errorf(" save task message error err: %v", err.Error()) |
| | | return err |
| | | } |
| | | } |
| | | return nil |
| | |
| | | err = json.Unmarshal(data, &resp) |
| | | if err != nil { |
| | | logx.Errorf("ScheduleTask HandleMessage Unmarshal json err: %v", err.Error()) |
| | | return err |
| | | return nil |
| | | } |
| | | if resp.DeviceId != conf.Conf.System.DeviceId { |
| | | return nil |
| | | } |
| | | //通知回复收到 |
| | | ReceivedMessageChan <- &ReceivedMessage{ |
| | | Topic: slf.Topic, |
| | | Message: data, |
| | | } |
| | | if len(resp.KeyData) == 0 || len(resp.AddressData) == 0 { |
| | | return nil |
| | | } |
| | | //写入到文件 |
| | | err = file.WriteFile(fmt.Sprintf("%s%s", constvar.PlcAddressDataPath, constvar.PlcAddressDataKeyFileName), resp.KeyData) |
| | |
| | | key := strings.ReplaceAll(keys[i], "\r", "") |
| | | address := cast.ToInt(strings.ReplaceAll(addresses[i], "\r", "")) |
| | | plc_address.Set(key, address) |
| | | logx.Infof("plc address set ok: key:%v, address:%v", key, address) |
| | | } |
| | | return nil |
| | | } |
| | | |
| | | type ProcessParams struct { |
| | | Topic string |
| | | } |
| | | |
| | | func (slf *ProcessParams) HandleMessage(data []byte) (err error) { |
| | | logx.Infof("get an process params message :%s", data) |
| | | var processModel model.ProcessModel |
| | | err = json.Unmarshal(data, &processModel) |
| | | if err != nil { |
| | | logx.Infof("unmarshal process params sync err :%s", err) |
| | | return err |
| | | } |
| | | if processModel.DeviceId != conf.Conf.System.DeviceId { //不是发给本设备的消息 |
| | | return nil |
| | | } |
| | | if processModel.Params != "" { |
| | | err = model.NewProcessModelSearch().Create(&processModel) |
| | | if err != nil { |
| | | logx.Infof("save process params err :%s", err) |
| | | } |
| | | } |
| | | //通知回复收到 |
| | | ReceivedMessageChan <- &ReceivedMessage{ |
| | |
| | | } |
| | | return nil |
| | | } |
| | | |
| | | type ProcessParamsSync struct { |
| | | Topic string |
| | | } |
| | | |
| | | func (slf *ProcessParamsSync) HandleMessage(data []byte) (err error) { |
| | | logx.Infof("get an process params sync message :%s", data) |
| | | var processModel model.ProcessModel |
| | | err = json.Unmarshal(data, &processModel) |
| | | if err != nil { |
| | | logx.Infof("unmarshal process params sync err :%s", err) |
| | | return err |
| | | } |
| | | err = model.NewProcessModelSearch().Save(&processModel) |
| | | if err != nil { |
| | | logx.Infof("save process params sync err :%s", err) |
| | | return err |
| | | } |
| | | return nil |
| | | } |