0

ここ数週間、私は自分の会社のニーズに特化した発券システムの開発を任されていました。さて、大したことではありません..今、私は頭を完全に包み込むことができない少しトリッキーな主題に取り組んでいます。

チケットの最終更新時間に基づく通知システム。

発券システムでチケットがたくさんあることは誰もが知っているように..各チケットには、「クライアントを待機中」、「出荷待ち」などのチケットの「状態」があります。これらの状態には異なるしきい値がありますIE: 60分、120分..

基本的に、2 時間ごとに実行されるサーバー アプリケーションがあります。システム内のすべてのオープン チケットをループし、チケットの状態としきい値をチェックし、LastUpdate 時間が 60 分のしきい値を超えている場合、システムはこのチケットが処理されておらず、誰かがそれを乗り越える必要があります。つまり、システムが実行される 2 時間ごとに時間がチェックされ、チケットがしきい値に準拠していない場合は、レベル 2 の通知が送信されます。通知 3 についても同様のプロセスが適用されます。

このシナリオの問題は、金曜日がくるとどうなるかということです。金曜日の営業終了までに送信する必要がある通知があるチケットは 3 つしかない場合があります。しかし、月曜になってこのシステムが再び実行されると、コンプライアンス違反のすべてのチケットが検出されます。これは、人々のメールボックスに 100 を超えるチケットが存在する可能性が高いことを意味します。これは、日時に基づいて動作する通知システムによくある問題のようです。

助言がありますか?

4

1 に答える 1

1

編集:C#アプリだとわかったので..

アプリケーションが通知を送信するかどうかを決定するとき.. まず、週末かどうかを確認します。

if (DateTime.Now.DayOfWeek != DayOfWeek.Saturday && DateTime.Now.DayOfWeek != DayOfWeek.Sunday)
 // start sending notifications.

または、次のようにすることもできます。

if (TimeSpanElapsedToSendNotificationFor(thisItem)) {
    if (isWeekend()) {
        thisItem.LastUpdate.AddDays(2);
        persist(thisItem); // update the DB
        return;
    }
    // send notification here..
}

そのため、最初に希望の通知時間が経過したかどうかを確認してください。週末であるかどうかを再確認し、週末である場合は、このアイテムの LastUpdate プロパティに 2 日を追加してから、関数を終了します。平日の場合は、処理を続行します。この 2 番目の方法を使用すると、週末に追加されない限り、すべてのジョブの 2 回目の実行で最初のチェックが false になります。

PS: スケジュールされたタスクを使用して、勤務時間中にのみ実行してみませんか?

于 2012-11-13T00:57:16.540 に答える