package rabbitmq import ( "context" "time" "github.com/gogf/gf/v2/frame/g" "git.5iot.com/iotlcm-public/iotlcm-worker-svr/internal/consts" mq "git.5iot.com/iotlcm-public/iotlcm-worker-svr/internal/library/rabbitmq" "git.5iot.com/iotlcm-public/iotlcm-worker-svr/internal/model" ) func (c *Consumers) initWorkOrderAutoClose(ctx context.Context) error { if scanner, ok := c.workOrder.(interface{ CloseOverdue(context.Context) error }); ok { go func() { ticker := time.NewTicker(5 * time.Minute) defer ticker.Stop() for { if err := scanner.CloseOverdue(ctx); err != nil { g.Log().Errorf(ctx, "工单到期补偿失败: %v", err) } select { case <-ctx.Done(): return case <-ticker.C: } } }() } if !mq.Enabled(ctx) { g.Log().Info(ctx, "work order auto close consumer skipped, RabbitMQ disabled") return nil } if err := mq.ConsumeJSON[model.WorkOrderAutoCloseMessage]( ctx, consts.QueueWorkOrderAutoClose, "iotlcm-work-order-auto-close", c.handleWorkOrderAutoClose, ); err != nil { return err } g.Log().Infof(ctx, "work order auto close consumer started, queue:%s", consts.QueueWorkOrderAutoClose) return nil } func (c *Consumers) handleWorkOrderAutoClose(ctx context.Context, message model.WorkOrderAutoCloseMessage) error { if message.WoNo == "" { g.Log().Errorf(ctx, "work order auto close message dropped, invalid message:%+v", message) return nil } return c.workOrder.AutoCloseResolved(ctx, message) }