-2

コンサルタント登用制度に取り組んでいます。訪問時間を指定せずにオンラインで予約するアドホックな予定がたくさんありますが、期間は. ただし、コンサルタントは土曜日と日曜日の午前 9 時~午後 1 時と午後 2 時~午後 5 時にお客様を訪問します。

オンライン アドホック リクエストでは、理由と期間が指定されます。コンサルタントがログインしてスケジュールされたアイテムを表示し、クライアントに送信できるように、これらのリクエストをスケジュールするためのコードを記述する必要があります。

問題は、ランチを超えるリクエスト期間が見つかった場合、ループ内で無視して、短い期間の次のリクエストを確認する必要があることです。とりあえず飛ばして次回(正午以降)に処理する方法がわかりません。

ジョン離婚問題 60分

クマールランド発行 100分

ラムとのディスカッション 60分

犯罪事件45min

現地決済 15分

以下のコードでは、昼休みを超えているため犯罪事件をスキップし、ローカル決済をスケジュールする必要があります。それでも、昼食後に犯罪事件のスケジュールを立てる必要があります。どうすればこれを作ることができますか?

 public class OnlineRequest
 {
    public string Reason { get; set; }
    public short Duration { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
 }

    public static string LUNCH_TIME = "1:00 P.M";
    public static string END_OF_DAY = "6:00 P.M";


   public static Dictionary<String, List<String>>
              GetSchedules(List<OnlineRequest> requests)
    {
        List<string> schedules = new List<string>();

        DateTime visitStartTime = DateTime.MinValue.Date.AddHours(9);

        int day = 1;
        List<String> eventTimeStr = new List<String>();
        Dictionary<String, List<String>> consultantData 
              = new Dictionary<String, List<String>>();
        //Here is the problem
        DateTime eventTime = visitStartTime;
        foreach (OnlineRequest req in requests)
        {
            req.StartTime = eventTime;
            string flag = getTimeDiff(req);
            if (flag.Equals(LUNCH_TIME))
            {
                eventTimeStr.Add(flag + ": LUNCH");
                eventTime = eventTime.AddMinutes(60);
            }
            else if (flag.Equals(END_OF_DAY))
            {
                eventTimeStr.Add(flag + ": GO HOME EOD");

                consultantData.Add(("Day_" + day), eventTimeStr);
                eventTimeStr = new List<String>();

                eventTime = visitStartTime;
                ++day;
            }
            else
            {
                eventTimeStr.Add(eventTime.ToString("h:mm tt") + ": " + req.Reason);
                eventTime = req.EndTime;
            }
        }
        consultantData.Add(("Day_" + day), eventTimeStr);
        return consultantData;
    }    

private static String getTimeDiff(OnlineRequest req)
    {

        DateTime startEventTime = req.StartTime;
        DateTime finishEventTime = req.StartTime.AddMinutes(req.Duration);

        DateTime visitEndTime = DateTime.MinValue.Date.AddHours(17);

        DateTime visitLunchStartTime = DateTime.MinValue.Date.AddHours(12);


        if (finishEventTime.CompareTo(visitLunchStartTime) == 0 && 
                 startEventTime.CompareTo(visitLunchStartTime) > 0)
        {
            return LUNCH_TIME;
        }
        else if (startEventTime.CompareTo(visitLunchStartTime) == 0 && 
                   finishEventTime.CompareTo(visitLunchStartTime) > 0)
        {
            return LUNCH_TIME;
        }
        else if (startEventTime.CompareTo(visitLunchStartTime) < 0 && 
               finishEventTime.CompareTo(visitLunchStartTime) > 0)
        {
            return LUNCH_TIME;
        }
        if (visitEndTime.CompareTo(finishEventTime) < 0)
        {
            return END_OF_DAY;
        }

        req.EndTime = finishEventTime;
        return "";
    }
4

1 に答える 1