背景#
APP は部門のネットワーク貨物情報交換プラットフォームに接続されており、接続のアイデアとプロセスを記録しています。
実装#
iOS SDK で提供されるメソッドは以下の 6 つです。
- init
- start
- send
- pause
- restart
- stop
見た目は簡単ですが、SDK の特定のメソッドが失敗する可能性があり、同じドライバーに複数の貨物依頼書がある場合や、同じ貨物依頼書を複数のドライバーが分割して運送する場合、または運送中に車両の交換やドライバーの携帯電話の交換がある場合など、位置情報を継続的に記録し、完全な依頼書のリンクを作成することは容易ではありません。
これらのシナリオの処理には、サーバーの協力が必要ですが、サーバーは部門のネットワーク貨物情報プラットフォームと直接的なやり取りをするインターフェースを持っていないため、貨物情報プラットフォームから状態とデータを直接読み取ることはできません。そのため、処理は複雑になります。
私たちの考えは、サーバーが例外を補完的に処理することです。したがって、まず、サーバーに現在の処理する依頼書とステップを知らせる必要があります。そのためには、メソッドを実行した後に、成功または失敗に関係なく、サーバーに同期する記録インターフェースが必要です。
他の携帯電話や他のユーザーまたはバックグラウンドで依頼書が手動で閉じられる可能性を避けるために、サーバーは終了待ちの依頼書があるかどうかを確認する別のインターフェースを提供する必要があります。同様に、このインターフェースは、メソッドを実行した後に毎回呼び出され、終了待ちの依頼書があるかどうかを取得するために使用されます。
また、ユーザーが依頼書を開始した後、アプリが終了され、再度開かれた場合、どのメソッドを SDK で実行するべきですか?また、ドライバーが途中で別の携帯電話にログインした場合、元の携帯電話で再度開かれた場合、どのメソッドを実行するべきですか?新しい携帯電話ではどのメソッドを実行するべきですか?そのため、このようなシナリオで実行するべきステップをクエリするためのインターフェースが必要です。
しかし、問題が発生します。同じドライバーは、便宜上または車両のサイズの理由で、同時に複数の依頼書を持つ可能性があります。各依頼書の送信間隔は必ずしも同じではありません。したがって、どのように複数のタイマーを同時に開始し、混乱せずに、依頼書が終了した後に対応するタイマーを停止することができるでしょうか?依頼書番号と分割番号をキーとして、タイマーを個別のモデルにカプセル化し、モデルを辞書に保存することで、タイマーを作成します。タイマーを作成する前に、依頼書番号と分割番号を使用して対応するタイマーが存在するかどうかをクエリし、存在する場合は重複して作成しません。存在しない場合は作成します。SDK の Stop または Pause メソッドを実行した後、同じメソッドを使用して対応するタイマーを取得し、そのタイマーを停止します。
しかし、実際の状況では、SDK が何らかの理由で Stop に失敗した場合、実際には依頼書が終了している場合があります。また、SDK のメソッドの実行は成功したが、状態をサーバーに保存する際に失敗した場合もあります。これらの異常な状況は、同期レコードテーブルだけでは処理できません。対応する状態を取得するために、ビジネステーブルから対応するステータスを取得し、対応する実行するメソッドを返す必要があります。